����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 213.165.242.4  /  Your IP : 216.73.217.8
Web Server : Apache
System : Linux amsngx344.inmotionhosting.com 4.18.0-553.40.1.lve.el8.x86_64 #1 SMP Wed Feb 12 18:54:57 UTC 2025 x86_64
User : aquafi9 ( 1305)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /opt/imh-python/lib/python3.9/site-packages/keystoneauth1/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/imh-python/lib/python3.9/site-packages/keystoneauth1/__pycache__/session.cpython-39.pyc
a

s�h-�	@s^ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZ
ddlZddlZddlZddlZddlmZddlmZddlmZzddlZWney�dZYn0zddlmZWney�dZYn0e
j�rddlmZddlZdej�dej���de� ��de�!���Z"d	d
hZ#dZ$dZ%d
gZ&dZ'd.e
j(ej)ej)d�dd�Z*e+e,e+d�dd�Z-e.e
j/e+e0fe
j1fe.e+e
j1fd�dd�Z2Gdd�d�Z3Gdd�dej4�Z5Gdd�d�Z6e+d�dd �Z7e+d�d!d"�Z8Gd#d$�d$�Z9Gd%d&�d&�Z:Gd'd(�d(�Z)e;d)d*�ej�<d+�D��Z=Gd,d-�d-ej>j?�Z@dS)/�N)�_utils)�discover)�
exceptions)�pluginzkeystoneauth1/� �/�application/jsonz
text/plaingN@g�?i�zX-Openstack-Request-Id)�session_obj�returncCs.|s*t��}t|j�D]}|�|t��q|S�N)�requests�Session�list�adapters�mount�TCPKeepAliveAdapter)r	�scheme�r��/root/rpmbuild/BUILDROOT/imh-python39-modules-3.9.7-92.el8.x86_64/opt/imh-python/lib/python3.9/site-packages/keystoneauth1/session.py�_construct_sessionBs
r)�mv_service_typer
cCsBg}|dkr|�d�n&|dkr,|�d�n|dvr>|�d�|S)z�Workaround for services that predate standardization.

    TODO(sdague): eventually convert this to using os-service-types
    and put the logic there. However, right now this is so little
    logic, inlining it for release is a better call.
    ZcomputezX-OpenStack-Nova-API-VersionZ	baremetalzX-OpenStack-Ironic-API-Version)Zsharev2�shared-file-systemzX-OpenStack-Manila-API-Version)�append)r�headersrrr�_mv_legacy_headers_for_servicePs
r)rr
cCsZi}|��D]H\}}t|t�r(|�d�n|}|durLt|t�rH|�d�n|}|||<q|S)z)Ensure headers are strings and not bytes.�ASCIIN)�items�
isinstance�bytes�decode)rZstr_dict�k�vrrr�_sanitize_headersas
r"c@sLeZdZdZdd�dd�Zejejeejeeje	j
dd�dd�ZdS)	�
NoOpSemaphorez5Empty context manager for use as a default semaphore.N�r
cCsdS)z)Enter the context manager and do nothing.Nr��selfrrr�	__enter__sszNoOpSemaphore.__enter__)�exc_type�	exc_value�	tracebackr
cCsdS)z(Exit the context manager and do nothing.Nr)r&r(r)r*rrr�__exit__wszNoOpSemaphore.__exit__)�__name__�
__module__�__qualname__�__doc__r'�ty�Optional�Type�
BaseException�types�
TracebackTyper+rrrrr#ps
�r#cs&eZdZeejd��fdd�Z�ZS)�_JSONEncoder)�or
csLt|tj�r|��St|tj�r(t|�Str@t|tj�r@t|�St��	|�Sr)
r�datetime�	isoformat�uuid�UUID�str�netaddrZ	IPAddress�super�default)r&r7��	__class__rrr?�sz_JSONEncoder.default)r,r-r.�objectr0�Anyr?�
__classcell__rrr@rr6�sr6c@s8eZdZdZdejdd�dd�Zeejd�dd	�Z	d
S)�_StringFormatterz1A String formatter that fetches values on demand.r
�plugin.BaseAuthPlugin��session�authcCs||_||_dSrrG)r&rHrIrrr�__init__�sz_StringFormatter.__init__)�itemr
cCsP|dkr|j�|j�}n |dkr0|j�|j�}nt|��|sLtd|�d���|S)NZ
project_idZuser_idz/This type of authentication does not provide a z that can be substituted)rH�get_project_idrI�get_user_id�AttributeError�
ValueError)r&rK�valuerrr�__getitem__�s��z_StringFormatter.__getitem__N)
r,r-r.r/r0r1rJr<rCrQrrrrrE�s
�rEr$cCs�dd�tj����D�}d}d}|d7}zRt�|�}z0||jj}|�d�\}}}||vrb|WWSWntyvYn0Wq t	y�Yq�Yq 0q dS)zBWalk the call frames trying to identify what is using this module.cSs"i|]\}}t|d�r|j|�qS)�__file__)�hasattrrR)�.0�n�mrrr�
<dictcomp>�s
�z._determine_calling_package.<locals>.<dictcomp>)Z
debtcollector�
keystoneauth1Zkeystoneclientr��.�)
�sys�modules�copyr�	_getframe�f_code�co_filename�	partition�KeyErrorrO)Z
mod_lookup�ignored�i�f�name�_rrr�_determine_calling_package�s$�

ricCsNd}ztjd}Wnty&YdS0|s0dStj�|�}||vrJt�}|S)aAttempt to programmatically generate a user agent string.

    First, look at the name of the process. Return this unless it is in
    the `ignored` list.  Otherwise, look at the function call stack and
    try to find the name of the code that invoked this module.
    )Zmod_wsgirr[)r\�argv�
IndexError�os�path�basenameri)rdrgrrr�_determine_user_agent�s
roc@sXeZdZUdZejeed<ejeed<ej	ed<ejeejeej	d�dd�Z
dS)	�
RequestTimingz4Contains timing information for an HTTP interaction.�method�url�elapsed�rqrrrscCs||_||_||_dSrrt)r&rqrrrsrrrrJszRequestTiming.__init__N)r,r-r.r/r0r1r<�__annotations__r8�	timedeltarJrrrrrp�s

�rpc@sZeZdZUdZejeed<eed<d
ejed�dd�Zed�d	d
�Z	dd�dd�Z
dS)�_Retries)�_fixed_delay�_currentrxryN)�fixed_delaycCs||_|��dSr)rx�reset)r&rzrrrrJsz_Retries.__init__r$cCs |j}|jst|dt�|_|S)N�)ryrx�min�_MAX_RETRY_INTERVAL�r&rPrrr�__next__sz_Retries.__next__cCs|jr|j|_nt|_dSr)rxry�_EXPONENTIAL_DELAY_STARTr%rrrr{s
z_Retries.reset)N)r,r-r.�	__slots__r0r1�floatrurJr�r{rrrrrws
rwc@s&eZdZdZdZdZdZdddddddedddddddddfejdeje	j
ejeeje
edfejeeeefdfejeejeejee
fejejjeefejeejeejeeeefejeeejfeje
e
ejejded	�d
d�Zdd�d
d�Zeejejejfd�dd��Zejejee	jjfdd�dd��Zee	jjdd�dd�Zeed�dd�Ze eeefeeefd�dd��Z!eje
eje
d�dd�Z"d`eejeejee#dfe$ejejjeefejeeejfeje%j&eje
dd�	d d!�Z'dadd"�eje	j(e$ejeejejjeefejee%j&eje
dd#�d$d%�Z)e ejjeefeejeejeeejfdd&�d'd(��Z*dbeeeje$ejeejeejee
dfeje
ejeeejfejdejd)e
e
e
ejeejeeje%j&ejeeejfejeejeejeejeeejeeejejdejeeje+eje+eje	j(d*�d+d,�Z,eeejee
fe
e%j&eje
eeeeejde-e-eje	j(d-�d.d/�Z.eeje	j(d0�d1d2�Z/eeje	j(d0�d3d4�Z0eeje	j(d0�d5d6�Z1eeje	j(d0�d7d8�Z2eeje	j(d0�d9d:�Z3eeje	j(d0�d;d<�Z4ejdedd=�d>d?�Z5dcejdejeeefd@�dAdB�Z6ddejdejed@�dCdD�Z7deddE�ejdejeejejedF�dGdH�Z8dfejdejeje9j:dI�dJdK�Z;dgejdejejeejee+fdLfdI�dMdN�Z<dhejdeejeejeeeeeeeee9j=fffdP�dQdR�Z>diejddSd@�dTdU�Z?djejde
d@�dVdW�Z@dkejdejed@�dXdY�ZAdlejdejed@�dZd[�ZBeeCd�d\d]�ZDdd�d^d_�ZEdS)mr
a�Maintains client communication state and common functionality.

    As much as possible the parameters to this class reflect and are passed
    directly to the :mod:`requests` library.

    :param auth: An authentication plugin to authenticate the session with.
                 (optional, defaults to None)
    :type auth: keystoneauth1.plugin.BaseAuthPlugin
    :param requests.Session session: A requests session object that can be used
                                     for issuing requests. (optional)
    :param str original_ip: The original IP of the requesting user which will
                            be sent to identity service in a 'Forwarded'
                            header. (optional)
    :param verify: The verification arguments to pass to requests. These are of
                   the same form as requests expects, so True or False to
                   verify (or not) against system certificates or a path to a
                   bundle or CA certs to check against or None for requests to
                   attempt to locate and use certificates. (optional, defaults
                   to True)
    :param cert: A client certificate to pass to requests. These are of the
                 same form as requests expects. Either a single filename
                 containing both the certificate and key or a tuple containing
                 the path to the certificate then a path to the key. (optional)
    :param float timeout: A timeout to pass to requests. This should be a
                          numerical value indicating some amount (or fraction)
                          of seconds or 0 for no timeout. (optional, defaults
                          to 0)
    :param str user_agent: A User-Agent header string to use for the request.
                           If not provided, a default of
                           :attr:`~keystoneauth1.session.DEFAULT_USER_AGENT` is
                           used, which contains the keystoneauth1 version as
                           well as those of the requests library and which
                           Python is being used. When a non-None value is
                           passed, it will be prepended to the default.
    :param int/bool redirect: Controls the maximum number of redirections that
                              can be followed by a request. Either an integer
                              for a specific count or True/False for
                              forever/never. (optional, default to 30)
    :param dict additional_headers: Additional headers that should be attached
                                    to every request passing through the
                                    session. Headers of the same name specified
                                    per request will take priority.
    :param str app_name: The name of the application that is creating the
                         session. This will be used to create the user_agent.
    :param str app_version: The version of the application creating the
                            session. This will be used to create the
                            user_agent.
    :param list additional_user_agent: A list of tuple of name, version that
                                       will be added to the user agent. This
                                       can be used by libraries that are part
                                       of the communication process.
    :param dict discovery_cache: A dict to be used for caching of discovery
                                 information. This is normally managed
                                 transparently, but if the user wants to
                                 share a single cache across multiple sessions
                                 that do not share an auth plugin, it can
                                 be provided here. (optional, defaults to
                                 None which means automatically manage)
    :param bool split_loggers: Split the logging of requests across multiple
                               loggers instead of just one. Defaults to False.
    :param bool collect_timing: Whether or not to collect per-method timing
                                information for each API call. (optional,
                                defaults to False)
    :param rate_semaphore: Semaphore to be used to control concurrency
                           and rate limiting of requests. (optional,
                           defaults to no concurrency or rate control)
    :param int connect_retries: the maximum number of retries that should
                                be attempted for connection errors.
                                (optional, defaults to 0 - never retry).
    N)i-i.i/i1i3i4�TFrrF)rIrH�original_ip�verify�cert�timeout�
user_agent�redirect�additional_headers�app_name�app_version�additional_user_agent�discovery_cache�
split_loggers�collect_timing�rate_semaphore�connect_retriescCs�||_t|�|_d|_|s"|j|_||_||_||_d|_||_|	pFi|_	|
|_
||_|p\g|_d|_
|
durri}
|
|_||_||_||_g|_|p�t�|_|dur�t|�|_|dur�|�dt��|_t�|_dS)Nr)rIrrH�_sessionr�r�r�r�r�r�r�r�r��_determined_user_agentZ_discovery_cache�_split_loggers�_collect_timing�_connect_retries�
_api_timesr#�_rate_semaphorer��DEFAULT_USER_AGENTr�r6�_json)r&rIrHr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrJos8



zSession.__init__r$cCs@|jr<z,z|j��Wnty(Yn0Wd|_nd|_0dS)zClean up resources on delete.N)r��close�	Exceptionr%rrr�__del__�szSession.__del__cCs|jjSr�rHrr%rrrr�szSession.adapters)rPr
cCs||j_dSrr�rrrrr�s)r�adapterr
cCs|j�||�dSr)rHr)r&rr�rrrr�sz
Session.mount)�bodyr
cCszzbt�|�}d|vr:d|dvr:d|dd<|j�|�WSd|dvr`d|dd<|j�|�WSWntytYn0|S)N�token�catalogz	<removed>ZserviceCatalog�access)�json�loadsr��encoder�)r&r��datarrr�_remove_service_catalog�s
zSession._remove_service_catalog)�headerr
cCsNd}|d��|vrJt��}|�|d�d��|��}|dd|��fS|S)z'Redact the secure headers to be logged.)�
authorizationzx-auth-tokenzx-subject-tokenzx-service-tokenrrYzutf-8z{SHA256})�lower�hashlib�sha256�updater��	hexdigest)r�Zsecure_headersZtoken_hasherZ
token_hashrrr�_process_header�szSession._process_header)r�r
cCs|dur|j}|durd}|S)aQGet a boolean value from the various argument sources.

        We default split_loggers to None in the kwargs of the Session
        constructor so we can track set vs. not set. We also accept
        split_loggers as a parameter in a few other places. In each place
        we want the parameter, if given by the user, to win.
        NF)r�)r&r�rrr�_get_split_loggers�s
zSession._get_split_loggers)	rrrqr�r�r�query_params�loggerr�r
c	Cstg}	|�|�rt�td�}
n|	�d�|s8t�t�}
n|}
|
�tj�sLdS|	�d�|jdurl|	�d�n t	|jt
�r�|	�d|j�d��|r�|	�d|g�|r�|d	tj
�|�}|	�d|�d��n
|	�|�|�rt|���D]}|	�d
j|�|���q�|�r|j�|�}|�r`t	|t��rNz|�d�}Wnt�yLd}Yn0|	�d
|�d��|
�d�|	��dS)Nz.requestzREQ:z
curl -g -iFz
--insecurez
--cacert "�"z-X�?z-H "{}: {}"�asciiz
<binary_data>z-d '�'r)r��utils�
get_loggerr,r�isEnabledFor�logging�DEBUGr�rr<�extend�urllib�parse�	urlencode�sortedr�formatr�r�r�rr�UnicodeDecodeError�debug�join)r&rrrqr�r�rr�r�r��string_partsZ_loggerr�rrr�_http_log_requestsF




�
zSession._http_log_request)r�)�responser��status_coder�textr�r�r
cCsng}g}	|�|�r0t�td�}t�td�}
n|�d�|	�d�|}
|�tj�sXdS|durt|sj|j}|st|j	}|r�|�d|�d��|r�t
|���D]}|�dj|�
|���q�|�d�|��|
�tj�s�dS|du�r8|�s8|j	�d	d�}tD](}
|dur�|�|
�r�|�|j�}�q8q�d
}||d�t�f}|�rJ|j�|�}|�rj|	�|�|
�d�|	��dS)Nz	.responsez.bodyzRESP:z
RESP BODY:�[�]z{}: {}rzcontent-typezOOmitted, Content-Type is set to %s. Only %s responses have their bodies logged.z, )r�r�r�r,rr�r�r�r�rr�rr�r�r�r��get�_LOG_CONTENT_TYPES�
startswithr�r�r�r�)r&r�r�r�rr�r�r�r�Z
body_partsZbody_loggerr��content_typeZlog_typerrr�_http_log_responseFsT


�
��
zSession._http_log_response)r�microversion�service_type�endpoint_filterr
cCs�t�|�}|dtjkr2tj|dd�vr2td��t�|�}|sf|rVd|vrV|d}ntd|�d���t�t|�}|�d�s�|dkr�d}n|�d	�r�d
}|�	d|�d|���t
|�}|D]}|�	||�q�dS)
NrrYz:Specifying a '{major}.latest' microversion is not allowed.r�z
microversion z� was requested but no service_type information is available. Either provide a service_type in endpoint_filter or pass microversion_service_type as an argument.�volumez
block-storageZsharerzOpenStack-API-Versionr)rZnormalize_version_numberZLATEST�	TypeErrorZversion_to_stringr0�castr<r��
setdefaultr)rr�r�r�Zparsed_microversion�header_names�hrrr�_set_microversion_headers�s:
���


���
�z!Session._set_microversion_headerszrequests.auth.AuthBase)rrrqr�r�r�r��
authenticatedr�rI�
requests_auth�	raise_exc�allow_reauth�log�endpoint_overrider�r��allow�client_name�client_versionr��microversion_service_type�status_code_retries�retriable_status_codesr��global_request_id�connect_retry_delay�status_code_retry_delay�kwargsr
c0Ksj|r
d}nd}|pt�t�}|�d�r<tj�|d�|d<ntj��|d<|durX|j}|p^t}|ph|j	}|�
di�}|r�|�||||�|dur�t|	p�|j
�}|r�|�|	�}|dur�d} t�| ��|�|�tr�|�t���tj�|�j�sLd}!|�r
|t||	�}!n|�r&|j|	fd|i|��}!|!�s4t���d�|!�d�|�d��}|j�rb|�
d|j�|jdu�r||�
d	|j�|�r�||d
<n�|j �r�|�
d
|j �}n�g}"|j!�r�|j"�r�|"�#|j!�d|j"���n|j!�r�|"�#|j!�|�r|�r|"�#|�d|���n|�r|"�#|�|j$D]}#|"�#dj|#���q|"�sd|j%du�rPt&�|_%|j%�rd|"�#|j%�|"�#t'�|�
d
d�(|"��}|j)�r�|�
dd
|j)�d|���|du�r�|�
dd�|j*�+|�|d<|du�r�||t,<|j-�.�D]\}$}%|�
|$|%��q�t/|�}||d<|�
d|j0�|
�r(|
|d<|�di�}&|
�rX|j1|||�d�||&||d�d|d<|du�rp|j2}t3|�}'t3|�}(t4�5|j6||||
|||||||'|(�
})z|j7|	d�}*Wntj8�y�Yn0|*�r�|�|*�|)fi|��}+|
�r�d},|�r|�d�},|,�s|�d�},|+j9�d��p,|+j9�d�}-|-�r�|�:|��rPt�td�}.n|}.|,�rx|.�;d|+j<j=|,|+j>|-d��n|.�;d|+j<j=|+j>|-d ��|+j?d!k�r�|�r�|�r�|�@|	��r�|�|	�}|du�r�|�|�|)fi|��}+|�r|+j?d"k�r|�;d#|+j?�t�A|+||��|jB�rf|+jCD]&}/|jD�#tE|/j<j=|/j<j>|/jFd$���q|jD�#tE|+j<j=|+j<j>|+jFd$��|+S)%aSend an HTTP request with the specified characteristics.

        Wrapper around `requests.Session.request` to handle tasks such as
        setting headers, JSON encoding/decoding, and error handling.

        Arguments that are not handled are passed through to the requests
        library.

        :param str url: Path or fully qualified URL of HTTP request. If only a
                        path is provided then endpoint_filter must also be
                        provided such that the base URL can be determined. If a
                        fully qualified URL is provided then endpoint_filter
                        will be ignored.
        :param str method: The http method to use. (e.g. 'GET', 'POST')
        :param json: Some data to be represented as JSON. (optional)
        :param str original_ip: Mark this request as forwarded for this ip.
                                (optional)
        :param dict headers: Headers to be included in the request. (optional)
        :param str user_agent: A user_agent to use for the request. If present
                               will override one present in headers. (optional)
        :param int/bool redirect: the maximum number of redirections that
                                  can be followed by a request. Either an
                                  integer for a specific count or True/False
                                  for forever/never. (optional)
        :param int connect_retries: the maximum number of retries that should
                                    be attempted for connection errors.
                                    (optional, defaults to None - never retry).
        :param bool authenticated: True if a token should be attached to this
                                   request, False if not or None for attach if
                                   an auth_plugin is available.
                                   (optional, defaults to None)
        :param dict endpoint_filter: Data to be provided to an auth plugin with
                                     which it should be able to determine an
                                     endpoint to use for this request. If not
                                     provided then URL is expected to be a
                                     fully qualified URL. (optional)
        :param str endpoint_override: The URL to use instead of looking up the
                                      endpoint in the auth plugin. This will be
                                      ignored if a fully qualified URL is
                                      provided but take priority over an
                                      endpoint_filter. This string may contain
                                      the values ``%(project_id)s`` and
                                      ``%(user_id)s`` to have those values
                                      replaced by the project_id/user_id of the
                                      current authentication. (optional)
        :param auth: The auth plugin to use when authenticating this request.
                     This will override the plugin that is attached to the
                     session (if any). (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin
        :param requests_auth: A requests library auth plugin that cannot be
                              passed via kwarg because the `auth` kwarg
                              collides with our own auth plugins. (optional)
        :type requests_auth: :py:class:`requests.auth.AuthBase`
        :param bool raise_exc: If True then raise an appropriate exception for
                               failed HTTP requests. If False then return the
                               request object. (optional, default True)
        :param bool allow_reauth: Allow fetching a new token and retrying the
                                  request on receiving a 401 Unauthorized
                                  response. (optional, default True)
        :param bool log: If True then log the request and response data to the
                         debug log. (optional, default True)
        :param logger: The logger object to use to log request and responses.
                       If not provided the keystoneauth1.session default
                       logger will be used.
        :type logger: logging.Logger
        :param dict allow: Extra filters to pass when discovering API
                           versions. (optional)
        :param microversion: Microversion to send for this request.
                       microversion can be given as a string or a tuple.
                       (optional)
        :param str microversion_service_type: The service_type to be sent in
                       the microversion header, if a microversion is given.
                       Defaults to the value of service_type from
                       endpoint_filter if one exists. If endpoint_filter is not
                       provided or does not have a service_type, microversion
                       is given and microversion_service_type is not provided,
                       an exception will be raised.
        :param int status_code_retries: the maximum number of retries that
                                        should be attempted for retriable
                                        HTTP status codes (optional, defaults
                                        to 0 - never retry).
        :param list retriable_status_codes: list of HTTP status codes that
                                            should be retried (optional,
                                            defaults to HTTP 503, has no effect
                                            when status_code_retries is 0).
        :param rate_semaphore: Semaphore to be used to control concurrency
                               and rate limiting of requests. (optional,
                               defaults to no concurrency or rate control)
        :param global_request_id: Value for the X-Openstack-Request-Id header.
        :param float connect_retry_delay: Delay (in seconds) between two
                                          connect retries (if enabled).
                                          By default exponential retry starting
                                          with 0.5 seconds up to a maximum of
                                          60 seconds is used.
        :param float status_code_retry_delay: Delay (in seconds) between two
                                              status code retries (if enabled).
                                              By default exponential retry
                                              starting with 0.5 seconds up to
                                              a maximum of 60 seconds is used.
        :param kwargs: any other parameter that can be passed to
                       :meth:`requests.Session.request` (such as `headers`).
                       Except:

                       - `data` will be overwritten by the data in the `json`
                         param.
                       - `allow_redirects` is ignored as redirects are handled
                         by the session.

        :raises keystoneauth1.exceptions.base.ClientException: For connection
            failure, or to indicate an error response code.

        :returns: The response to the request.
        FNrz$No valid authentication is availabler�z{}/{}rr�r�z
User-AgentrZ	Forwardedzfor=z;by=zContent-Typerr�r�rI�params)rqr�rr�r�r��allow_redirects)rI�service_namer��x-openstack-request-idzx-compute-request-idz.request-idzW%(method)s call to %(service_name)s for %(url)s used request id %(response_request_id)s)rqr�rr�response_request_idzB%(method)s call to %(url)s used request id %(response_request_id)s)rqrrr�i�i�z#Request returned failure status: %srt)Gr�r�r,r�r�
structures�CaseInsensitiveDictr��_RETRIABLE_STATUS_CODESr�r�r��boolrI�get_auth_headersrZAuthorizationFailurer��osprofiler_webZget_trace_id_headersr�r��urlparse�netlocrE�get_endpointZEndpointNotFoundr��rstrip�lstripr�r�r�r�r�rr�r�ror�r�r�r�r��_REQUEST_ID_HEADERr�rr"r�r�r�rw�	functools�partial�
_send_request�get_auth_connection_params�MissingAuthPluginrr�r��requestrqrrr��
invalidateZ
from_responser��historyr�rprs)0r&rrrqr�r�r�r�r�r�rIr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rZauth_headers�msg�base_urlZagent�
additionalr r!r��connect_retry_delays�status_code_retry_delays�sendZconnection_params�respr�Z
request_idZ	id_loggerr�rrrr�sv
�
�
�


���



�

�
�


�
�����



�
����zSession.request)rrrqr�r�r�r�r�r�r�r�r
rr�r
c
KsV�z4z>|
�&|jj||fi|
��}Wd�n1s60YWn�tjjy�}z&d|�d|��}t�|��WYd}~n�d}~0tjjy�d|�d�}t�|��Yn�tjjy�}z&d|�d|��}t�|��WYd}~nNd}~0tjj	�y2}z(d|�d|��}t�
||��WYd}~n
d}~00Wn�tj�y�}zl|dk�rV�t|�}|�
d|||d	��t�|�|j||||||f||	|
|d
||d�|
��WYd}~Sd}~00|�r�|j|||d�|j|jv�r�t|t��r�|}n|d
8}|dk}|�s|Sz|jd
}Wn"t�y@|�
d|j�Yn�0d|
v�rTi|
d<d|jv�rv|
d�d|jd�|��|��|j||||||f|
|||	||d�|
��}t|jt��s�t|j�|_|j�d|�|}nt|j|	v�rR|dk�rRt|�}|�
d|j||d��t�|�|��|j||||||f||d
|	|
||d�|
��S|S)NzSSL exception connecting to z: zRequest to z
 timed outz"Unable to establish connection to zUnexpected exception for rzAFailure: %(e)s. Retrying in %(delay).1fs.%(retries)s retries left)�e�delay�retriesrY)r�r�r�r�r
r)r�r�r��locationzBFailed to redirect request to %s as new location was not provided.r�r�r)r�r�r�r�r
rzRRetriable status code %(code)s. Retrying in %(delay).1fs. %(retries)s retries left)�coderr)r�r�r�r�r
r)rHrrr�SSLError�Timeout�ConnectTimeout�ConnectionErrorZConnectFailure�RequestExceptionZUnknownConnectionErrorZRetriableConnectionFailure�next�warning�time�sleeprr�r��_REDIRECT_STATUSESrr�rrcrrr�r{rr�insert)r&rrrqr�r�r�r�r�r�r�r�r
rr�r
rrrZredirect_allowedr�new_resprrrrss�8&

�
��
���
	
���
�����	
��
�zSession._send_request)rrr�r
cKs|j|dfi|��S)ziPerform a GET request.

        This calls :py:meth:`.request()` with ``method`` set to ``GET``.
        �GET�r�r&rrr�rrrr�#szSession.getcKs|j|dfi|��S)zkPerform a HEAD request.

        This calls :py:meth:`.request()` with ``method`` set to ``HEAD``.
        �HEADr r!rrr�head*szSession.headcKs|j|dfi|��S)zkPerform a POST request.

        This calls :py:meth:`.request()` with ``method`` set to ``POST``.
        �POSTr r!rrr�post1szSession.postcKs|j|dfi|��S)ziPerform a PUT request.

        This calls :py:meth:`.request()` with ``method`` set to ``PUT``.
        �PUTr r!rrr�put8szSession.putcKs|j|dfi|��S)zmPerform a PATCH request.

        This calls :py:meth:`.request()` with ``method`` set to ``PATCH``.
        �PATCHr r!rrr�patch?sz
Session.patchcKs|j|dfi|��S)zoPerform a DELETE request.

        This calls :py:meth:`.request()` with ``method`` set to ``DELETE``.
        �DELETEr r!rrr�deleteFszSession.delete)rIrr
cCs$|s
|j}|s d}t�||��|S)Nz An auth plugin is required to %s)rIrr)r&rIrZmsg_fmtrrr�_auth_requiredMszSession._auth_required)rIr
cCs|�|d�}|�|�S)a.Return auth headers as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin
                     on the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth.AuthorizationFailure:
            if a new token fetch fails.
        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.

        :returns: Authentication headers or None for failure.
        :rtype: :class:`dict`
        z
fetch a token)r,Zget_headers�r&rIrrrr�YszSession.get_auth_headerscCs|�|�pi�d�S)a�Return a token as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin
                     on the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth.AuthorizationFailure:
             if a new token fetch fails.
        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.

        .. warning::
            **DEPRECATED**: This assumes that the only header that is used to
            authenticate a message is ``X-Auth-Token``. This may not be
            correct. Use :meth:`get_auth_headers` instead.

        :returns: A valid token.
        :rtype: string
        zX-Auth-Token)r�r�r-rrr�	get_tokenmszSession.get_token)r�)rIr�r�r
cKs&|r|S|�|d�}|j|fi|��S)a�Get an endpoint as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin on
                     the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.

        :returns: An endpoint if available or None.
        :rtype: string
        �determine endpoint URL)r,r�)r&rIr�r�rrrr��szSession.get_endpoint)rIr�r
cKs|�|d�}|j|fi|��S)aGet endpoint data as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin on
                     the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.
        :raises TypeError: If arguments are invalid

        :returns: Endpoint data if available or None.
        :rtype: keystoneauth1.discover.EndpointData
        r/)r,�get_endpoint_data�r&rIr�rrrr0�szSession.get_endpoint_data.cKs|�|d�}|j|fi|��S)a�Get the major API version as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin on
                     the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin: if a
            plugin is not available.

        :return: The major version of the API of the service discovered.
        :rtype: tuple or None
        r/)r,�get_api_major_versionr1rrrr2�szSession.get_api_major_version�public)rI�	interface�region_namer�r
cCs|�|d�}|j||||d�S)a�Get version data for all services in the catalog.

        :param auth:
            The auth plugin to use for token. Overrides the plugin on
            the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin
        :param interface:
            Type of endpoint to get version data for. Can be a single value
            or a list of values. A value of None indicates that all interfaces
            should be queried. (optional, defaults to public)
        :param string region_name:
            Region of endpoints to get version data for. A valueof None
            indicates that all regions should be queried. (optional, defaults
            to None)
        :param string service_type:
            Limit the version data to a single service. (optional, defaults
            to None)
        :returns: A dictionary keyed by region_name with values containing
            dictionaries keyed by interface with values being a list of
            `~keystoneauth1.discover.VersionData`.
        r/)r4r5r�)r,�get_all_version_data)r&rIr4r5r�rrrr6�s�zSession.get_all_version_datazplugin.ConnectionParamscCs<|�|d�}|�|�}t|�ddh}|r8t�t|���|S)a�Return auth connection params as provided by the auth plugin.

        An auth plugin may specify connection parameters to the request like
        providing a client certificate for communication.

        We restrict the values that may be returned from this function to
        prevent an auth plugin overriding values unrelated to connection
        parameters. The values that are currently accepted are:

        - `cert`: a path to a client certificate, or tuple of client
          certificate and key pair that are used with this request.
        - `verify`: a boolean value to indicate verifying SSL certificates
          against the system CAs or a path to a CA file to verify with.

        These values are passed to the requests library and further information
        on accepted values may be found there.

        :param auth: The auth plugin to use for tokens. Overrides the plugin
                     on the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth.AuthorizationFailure:
            if a new token fetch fails.
        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.
        :raises keystoneauth1.exceptions.auth_plugins.UnsupportedParameters:
            if the plugin returns a parameter that is not supported by this
            session.

        :returns: Authentication headers or None for failure.
        :rtype: :class:`dict`
        zfetch connection paramsr�r�)r,Zget_connection_params�setrZUnsupportedParametersr)r&rIr�Zinvalid_keysrrrr�s#

z"Session.get_auth_connection_paramscCs|�|d�}|��S)z�Invalidate an authentication plugin.

        :param auth: The auth plugin to invalidate. Overrides the plugin on the
                     session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin
        �validate)r,rr-rrrr s	zSession.invalidatecCs|�|d�}|�|�S)aBReturn the authenticated user_id as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin
                     on the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth.AuthorizationFailure:
            if a new token fetch fails.
        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.

        :returns: Current user_id or None if not supported by plugin.
        :rtype: :class:`str`
        zget user_id)r,rMr-rrrrM,szSession.get_user_idcCs|�|d�}|�|�S)aHReturn the authenticated project_id as provided by the auth plugin.

        :param auth: The auth plugin to use for token. Overrides the plugin
                     on the session. (optional)
        :type auth: keystoneauth1.plugin.BaseAuthPlugin

        :raises keystoneauth1.exceptions.auth.AuthorizationFailure:
            if a new token fetch fails.
        :raises keystoneauth1.exceptions.auth_plugins.MissingAuthPlugin:
            if a plugin is not available.

        :returns: Current project_id or None if not supported by plugin.
        :rtype: :class:`str`
        zget project_id)r,rLr-rrrrL@szSession.get_project_idcCs|jS)zeReturn collected API timing information.

        :returns: List of `RequestTiming` objects.
        �r�r%rrr�get_timingsTszSession.get_timingscCs
g|_dS)zClear API timing information.Nr9r%rrr�
reset_timings[szSession.reset_timings)NNNNNNN)NNNNN)NNNNNNNNTTTNNNNNNNNrNNNNN)N)N)N)N)N)Nr3NN)N)N)N)N)Fr,r-r.r/r�rZ_DEFAULT_REDIRECT_LIMITr0r1rr
r<�Unionr��tuple�int�collections�abc�MutableMappingr�dictrC�ContextManagerrJr��propertyr�setter�OrderedDict�BaseAdapterrr��staticmethodr�r�rrBr��Loggerr��Responser�r�r�rrwrr�r#r%r'r)r+r,r�r.r�rZEndpointDatar0r2ZVersionDatar6rrrMrLrpr:r;rrrrr
!s�G�
��<��"��
�G�	�
�L�A�
�(�1
�
��������
���� �%��5��
����r
ccs|]}t|�VqdSr)r>)rTr!rrr�	<genexpr>`�rKrZcs.eZdZdZejejdd��fdd�Z�ZS)ra;The custom adapter used to set TCP Keep-Alive on all connections.

    This Adapter also preserves the default behaviour of Requests which
    disables Nagle's Algorithm. See also:
    https://blogs.msdn.com/b/windowsazurestorage/archive/2010/06/25/nagle-s-algorithm-is-not-friendly-towards-small-requests.aspx
    N)�argsr�r
cs�d|vr�tdkr�tjtjdftjtjdfg}ttd�rJ|tjtjdfg7}ttd�rntj	sn|tjtj
dfg7}ttd�r�|tjtjd	fg7}||d<t�j
|i|��dS)
N�socket_options)r|�rYrY�TCP_KEEPIDLE�<�TCP_KEEPCNTrO�
TCP_KEEPINTVL�)�REQUESTS_VERSION�socket�IPPROTO_TCP�TCP_NODELAY�
SOL_SOCKET�SO_KEEPALIVErSrPr�Zis_windows_linux_subsystemrRrSr>�init_poolmanager)r&rMr�rNr@rrr[ks*�	
����
�	z$TCPKeepAliveAdapter.init_poolmanager)r,r-r.r/r0rCr[rDrrr@rrcsr)N)Ar?r8r�r�r�r�rl�platformrVr\rr4�typingr0r�r:rrXrr�rrr=�ImportErrorZosprofiler.webZwebr��
TYPE_CHECKINGrZ
requests.auth�__version__�default_user_agent�python_implementation�python_versionr�r�r~r�r�r�r1r
rr<rrrBr<rrCr"r#�JSONEncoderr6rErirorprwr=�splitrUr�HTTPAdapterrrrrr�<module>
s�

,�
��2I

Youez - 2016 - github.com/yon3zu
LinuXploit