Zibanu authentication library for django projects
Project description
Paquete de autenticación y autorización de Zibanu para Django - zibanu.django.auth package
Este paquete contiene los servicios y librerias necesarias para la autenticación y autorización de usuarios a través de la API de Django. Estos componentes proporcionan la funcionalidad necesaria para gestionar la autenticación de usuarios y permitir el acceso a recursos protegidos.
El repositorio ofrece doce (12) servicios API REST para el login, logout, refresh, cambio de contraseña, solicitud de contraseña, agregar usuario, eliminar usuario, listar usuarios, actualización de usuarios, lista de permisos, actualización de perfil y listado de los grupos.
APIs
- Login (Iniciar sesión)
- Logout (Cerrar sesión)
- Refresh (Actualizar)
- Change Password (Cambio de contraseña)
- Request Password (Solicitud de contraseña)
- User Add (Agregar usuario)
- User Delete (Eliminar usuario)
- User List (Lista de usuarios)
- User Update (Actualización de usuarios)
- Permission List (Listado de permisos)
- Profile Update (Actualización de perfil)
- Group List (Lista de grupo)
Login (Iniciar sesion)
Este servicio permite realizar el proceso de autenticación de un usuario con django. La autenticación se realiza utilizando el conjunto email y password.
El servicio toma un conjunto de credenciales de usuario y devuelve un token web JSON para probar la autenticación de esas credenciales.
Parámetros:
- email: Correo electrónico con el que se realiza la autenticación.
- password: Clave del usuario.
- close (opcional): Indica al sistema que debe cerrar las otras sesiones que se encuentran activas. Este parámetro se evalúa únicamente si el usuario tiene la bandera "multiple_login" habilitada en su perfil.
Retorna:
HTTP Status
- 200, si la autenticación es exitosa y un objeto JSON.
- 401, si la autenticación NO es exitosa, por error de usuario/clave. (Usuario Inactivo, usuario inexistente, clave/password errado).
- 412, si la autenticación NO es exitosa debido a que el usuario posee varias sesiones abiertas. (multiple_login).
- 500, cualquier otra excepción no manejada.
JSON
{
"token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTY5Njg4ODMwMCwiaWF0IjoxNjk2ODg0NzAwLCJqdGkiOiI4YjBhMjhlMjg5ODA0NzNkODcwZWUxMTkxMDMyMmJmOSIsInJlZnJlc2hfZXhwIjoxNjk2ODg4MzAwLCJ1c2VyX2lkIjoxMiwidXNlciI6eyJlbWFpbCI6Im1hY2VyY2hhQGdtYWlsLmNvbSIsImlzX3N0YWZmIjpmYWxzZSwiaXNfc3VwZXJ1c2VyIjpmYWxzZSwidXNlcm5hbWUiOiJtYWNlcmNoYTIiLCJwcm9maWxlIjp7InRpbWV6b25lIjoiQW1lcmljYS9Cb2dvdGEiLCJ0aGVtZSI6ImNvcnBvcmF0ZSIsImxhbmciOiJlcyIsImF2YXRhciI6Ii85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC80U2NMUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUlkcEFBUUFBQUFCQUFBQVdnQUFBTFFBQUFCSUFBQUFBUUFBQUVnQUFBQUJBQWVRQUFBSEFBQUFCREF5TWpHUkFRQUhBQUFBQkFFQ0F3Q2dBQUFIQUFBQUJEQXhNRENnQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFQbWdBd0FFQUFBQUFRQUFBTXFrQmdBREFBQUFBUUFBQUFBQUFBQUFBQVlCQXdBREFBQUFBUUFHQUFBQkdnQUZBQUFBQVFBQUFRSUJHd0FGQUFBQUFRQUFBUW9CS0FBREFBQUFBUUFDQUFBQ0FRQUVBQUFBQVFBQUFSSUNBZ0FFQUFBQUFRQUFKZThBQUFBQUFBQUFTQUFBQUFFQUFBQklBQUFBQWYvWS85c0FoQUFCQVFFQkFRRUNBUUVDQXdJQ0FnTUVBd01EQXdRRkJBUUVCQVFGQmdVRkJRVUZCUVlHQmdZR0JnWUdCd2NIQndjSENBZ0lDQWdKQ1FrSkNRa0pDUWtKQVFFQkFRSUNBZ1FDQWdRSkJnVUdDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FuLzNRQUVBQXIvd0FBUkNBQ0NBS0FEQVNJQUFoRUJBeEVCLzhRQm9nQUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUURCUVVFQkFBQUFYMEJBZ01BQkJFRkVpRXhRUVlUVVdFSEluRVVNb0dSb1FnalFySEJGVkxSOENRelluS0NDUW9XRnhnWkdpVW1KeWdwS2pRMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvT0VoWWFIaUltS2twT1VsWmFYbUptYW9xT2twYWFucUttcXNyTzB0YmEzdUxtNndzUEV4Y2JIeU1uSzB0UFUxZGJYMk5uYTRlTGo1T1htNStqcDZ2SHk4L1QxOXZmNCtmb0JBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDeEVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEK05XQUNRYlQ2MXQyMGlXMG1HemlzcTJZTkdEMzRyWWpqVjhocS9mNlZKdG40eFZsZEcxSGMyYm9CSzIwZHMvUTFGUGI3TEdLT01nZ1JyeVBkYzFuQ0JQSytmbkZiVW9DMlVXQmo5MG4vQUtDSzdLY2RIRTVPWFc1ejBpa3FvOU0xMU9nRmVGYXVia01lU0IxRmF1alBod3lIdlUwSEdMME9tck5PTHNhZmlhd0RMejFVWXJ6aUpUQkx0NzU0cjJQVlltbnMvUDZzZXRlUzNFSk11QWRoem5PTS9wV2VNZytkTXZMNnE1ZVZuWDZaY00yMk04RnVtZTlmYWZ3UC9aQytKdng1anRidlNoYjZmYTNqbU9PNXZXS3hFcjE1VUVBZWhKQUo0cjRxOEM2TnJYajN4dHB2Z1h3eEQ1NzNVOFlmK0hlUTMrcXllQUNPV1BZWjlxL2FYd1hONE0rSHVxQzIxTHhyNG8xQy93Qk9aWWpCNGNhS0d4dE5wNVZoSXlvcW8zRzFnekgrTUxtdHN2Zk9tMGNlYlV2WmF4M01qeDMvQU1FSmYyc3Jud1hONHUrR2NtaytMSklGVjdqVExXU1MxdlYvdWxVbVZVWUhzZCtENjErTTN4YytDdnhNK0JYajI1K0hYeFQwUzYwRFhiTFo5b3M3eE5raUs2aDBidUNyQThNQ1FlY0hnMS9xVy84QUJPM1I3YngzOE5kTTFYWEkwbG5odFVTU1pVOHA1OGhXekxGdVpZMmRQbTNSTXlNZDJEeHg4a2Y4RjF2K0NSSGgzOXNUNEZ0OFgvaGZwVU1IeEI4S1dNZ3RMaUloR3U3WlNaUHNzdzREODh4a25jckhBeUd4WGo0N0hZZDRuNnJKV2srcHRsZUx4WHN2YXVQdXJjL3pYZEx1bzFZckoxYml1bUdqMjl5dSt6QlppTXQrRlpuaXZ3YnIvaFRYN3ZRdFl0cHJHOHNwbmd1TGU0UXh5eFNSbmE2T2pZS3NDT1FlbFFhVmNheGFTNzdiY2NlbVAxelhSRlNocEk5S2JqSjNneU41anByRmJwV1Vja0RIT0J6L0FDckU4TzZqWURUVkZ3SEdYYzV4eGdzU0s3SzhMWE1NZ2xUTXFvenVvNHlNRWtmV3VZMERSemM2VkRNMXRJeDhvUDhBS2ZsSmJrY0gycTVLVGxlSnJDVVBadE5XTHpmMlBLTm9sVVo5YXF6V0ZvV3pFNnNNZGpVZHhwTm1BUVk1VTlUdDZWbnphY0Y1Z2xaUU94V3VmRUtTMWtPbHkyOTBkSnBqSWQyUWZ4cG45bktlVzYwd1BlUWZOSk5HNDZZd1JVWjFtR0Z2TG0rWWpydC9wWExHckZzNkpVMmovOUQrTkxUakg1V0ZCem11aWljSTNOY3pha1JOZ2NMWFJLVllncFg5QjBJU1V2ZVorUFl4NldSUGNScWlIYjJCL2xYUnVDYkNKbC91TC9LdWFuY0ZUdUk2Z2ZoM3JyUGsvc3lCb3puNUIwK2xkZExXYlBPcXV5dWppaTdwZWt5ZHdRS3Y2SHVqdTNoYitIbXMrOFltOUNqclZ5eWUzMHVXUysxYWRiZFNNN1pEaHlBZjRWQTZIc1RpdVJPTWFscE95TzMyS2RLNjNQWFlMU2E1dFFzU2I5cTdpY2dZSEE3L0FGcnhYWGRmMFdMV0YwV3daYmk0WWdFb3dLSVNjL01RZW85UFdzWFUvalA0MWd2SjQvQkZ4OWdnWWJWWGd1UjNMRThEa2NWbWZCWHc4MnVlSXJqVU5SK2Viek1CaUFUNWttY24rWjcxdzQzT29WR3FWTGZZOW5MY2k1RTZsV1doK24zd2crRXZpbjRXNk5lYTVwMW0wbXZhL2FQRGEzQlZ2M0tTZ2x4RG5oWlg0WHpGVXNGSndleC9RdjhBWlcrQkErRHVqMmFTeVJwSlBNMzJwNVNyM1VNajRkRUN1clpYR2QyUG15ZWVtSzhyOFFUM1BoQ0dDMnRaSkFsbmIyL21UeGgvUGliQTJJRHlGd3VNaGVSMUo1cjZuL1owOE4vRkR4UHFPbmVKTGpUWmJtTzdZM01FOGpaK1Jjb3hJWWtrOWVmeHI2emxvMGVXbFRWNWZsL21aNVprOVRFeWRhcTdSdjhBZi9rZjBqZnNaL0ZQeFI4T05Mc3ZCZHlKTHkyVnRsbk1xaU1wYk15c0ZjS0FHTUxFNFBIeU1jODErbzN4bDhWTDRoL1pMOFk2dHFFSXVJNE5GbkNvNDRaMUdBY0hnc0d3VnlDTTQraC9QYjluWmJNZUU3R082RVFrMktzYnNRVlhqTEJuL256eldOL3dVQi9hcTE3NGErQXZEbndROFB4cEpMNHhFcVhFNllDdzJ0dUF4SzdDVHZkeW93ZXFpdkJ6bkwzaWNSVGpHRnBwcHQraHBqc2poZzZkVEUwNm51Nis2ZnhKZjhGVlBBZWo2TjhlTFB4aHBwam1tMS9UNHByeDBCVU5jUkR5aSswODduakNGc2NaOXEvS202dEkxT2RoL01pdjJNLzRLVVdGNXFIeFh0OWF1VVUyVi9hazI0QTJ2Rk5ic3R0Y3hOR2VVdzhRY2RBeXR1SFVnZmxicU9sQU9RZUFPbGZTNTdsNmRhVTBmRVpMam5Ha3FiNkhsT3N4eHg2UmNUd05zZEkyeDM3WXJhME83c3JUVElMVnA1STlpS29EREJ3QjZkcXBlTWRJanR0R251b1pHYmZ0WFl2QURGZ08vSno3ZmhVeHNWYUl5bEM3NXdXNTUvUG44NitkalRuRjNSOVFwUXF3OTdRNlNTNmdaU04yZnBXSmRzcjVTUHAxckdEem8yQWpBL1NwM21jZFZOS3JWNXpMMmNZNlJZU0pGSXUxa0RmV3NTNnRiUVBrd3BrVnZENWVXRlpjL3dBODdjWndvd1BmUCtGZWU0MjZIU3BOYkgvLzBmNDBMZERKSGtkNjFZQTRQWEdCV1BZT1F3R2VLNkdJb0hKYnBYOUFINDVPTjFZam1CWmRvOUNmeUZkYlpzdjlrMisvZ0JBQ2ZweFdCUERzUVNJY2dnamo2Vm96WGNWcG9rQlFGN2hvMlZVUDNjOC9NY2RoM05iMFpxS2N1eHkxY08ybEZHTmFUVzkxcmR4Q3lrckZGODdZeUFXNkFBNUJQSFNwTmIwSnpKSGYrSXBYa3R0d1ZTN0ZncFBDRTV6aENlT3Z5OGV0ZFhwR21RNlpvaGp1U1d1TGVFNmhNT09Ya0JqaEdlcEhWc2ZTdHp4UFlRMjN3Mmd0dFFPNjR1WVdka1AzdG0wTTMwQUpIMHo2MTg5aSthYWxVZlEraXc5RlJpcWFSOHUrSTlKK3czN1hOcnRNY3Z5QUE5RDByOVF2MkFmZ1hvVjNMSjQxOFJoWk5wUW1CR0EzTWVZNHhuSUxuRzl1eUo5N2xnSy9MdlF4cW5qZjdOcGtpaWE0ZGxoaExrNTNCZ29QKzl5Qlg5Sy83Qi93UTBYd3Arei9BRzJzYW8wVjFmNmhleTNDc0ZiQ3h4QVFoVG5JSkxoaXB5Zmw5NjZlRXNGQ3RpT2VTMks0anhMdytDNUw2dlFoOGVhcnFrdmloNzNWQjludDdsWGxrUkFYQWRNZ0RLREF3TWM4ZWxmczcreTlxM2gzd2oremkveFcxUFE1NExMVE5QM3EwRXhTV1NkemdDM2l5SFlNN0Rld1lCVkJPUml2alh3cjhPTFhYdkY2YU40blEzTVZ4RzF5TFdJaE45ckNRR0FHRGtNVGxnTUVqb2ErdHZoLzhSOUU4YStMYmY0S2FuOFBKcmZUYkNWb0xLYTB5amlSZVdLcUZ3cWdFcmpub2NtdnVNWGg0S3Q3V1V0UytFcytwUmdxRlZYWFZuMmgrejVjZUxmSC93QUFiNzRqWGR6ZjJvZTh1YnhKcFVFY3JRS2lmZEh6QUFZd0FjbGp4NzErWkhpYjRrZU5maUQ0ODhVZUpkYmJOeHBVRUthYmJzKzFFdHpNRHRqK1VCWkdLamV3R0N4T0RnOGZ0bDhIN0RVNS9oWHFud3VqMEY5TnRyT1ZvclNmZnVrT3c3OTBvd29BZm93d1QwUFVWK1hmeEg4TVIyZjdRTnZwV3VoTEhUNzFtdDd5VjBBZUZWQWFOMkhCY0dUNVZPUWZtWG10Y21iZFM4K2g1L0huRUZMRlZuUndhdEJINHZmOEZPYk8xOFRhOTRPK0lkcEpDK28zbWs1MWVHSGg0SlM3bUI1QjEvZlJBWlBxdlBVVitRK3NXeWhDN0lKUHIycjlqLzhBZ3F6NGVnMDd3bjREK0lWb2hzWlpudWROMUswUU1GU2FINXJaMnlTUTMyZjVTdjhBQ1FmVTErTzMyeExpMFdUSWRYenoxeml2Unh5VGs0M3NmQjVkSGxqb2VUZUtvcDB0TGFDQ2RsUzR1SWdZOEE0d2QyQWUxYnYyUzRuUU9vWTd1ZWUxVi9GbW5SU2FocFR4U1kzM1M1UWRncWtrK25wWG91bXJadzJ3akRDUThkY0hIQTQ2Q3ZuS09ENTV5UGRyWXJrcHhaNWxjYVk1VWxGd2F6MjA2VlJzWmVhOWZuc29KSlBPQ2hNY2JRT3RaRjdwbTZUTWZISGFveEdYS09wRlBIT1N1ZWFOWk5HTnpjL3BWVk5QZWE0TzBZelhlVGFZRlg1eWV0SkZaMjhhbmRqa2RUWE45VWlkZjE5dlpILy8wdjR6N2FXTnVCeFcvR3k3T09hNGVHVWh4bmdWMU1OeUZHMGVsZnZjSm41SE9ucDJORzh1VlRUbW1ZZ0xFTnpFK2xlbytDZkJOL2NhREY0bjFFZk5jQUczVHVJaWNnRUh2MzlNNHowcjVrOFM2akxkM05wNGFzenZrbGZFckE0Kzl6ajZldGZwQjRuZ2g4Ti9DalIvR1JVR0cwc3BZWlFNWUpRWkhJOWVsR0ZuR3BVbXZzeFd2ci93eDFLZzZNVnpieTJQbVR4VGMydDc0SDF6eEphTHRqMURXSWJPTWorR0swUVJnYnUzelpKeFZqNG4zOEJ1OVdrRW1FMG5TNExUTGRDMDZDWmlQKytnQ2Zhc0hXYmxMRDlrUFJKZHUyVzV2cFpXNUJMTTBqSGNQd3htdkh2alY0cVpOZDFEU1lUL0FNZmtGaXdIWWo3TWc1N2RhOHJNNnFvMCtYK1pSL1gvQUlCOURnNktsVjkxYk5yN3JXL1U5cS9aSitFWGlMeDFORnExaEhpS3dsYTh1cEQxaHQ0Q0haajZCMkFVRWRjKzFmMURmc2NRNnhyL0FNRDlKdW1oampTeEtXeUtJdHFTQ0o4c3lEcTJRN2M0NzgxK0pQN0RjMmxlR2ZoeDRvc2ZFVWtGdEg0bTBkTE5wWkgydkczbkJnSTJCNGRncENqbkpKRmYxSWZCKzAwVHd4NGZzRzBpM1dHMHM5UFI3ZDBBVVI3WWl6RVk0TDV4dTZrOVJtdnRPRTh2Y0tQT3V1cCtmOFg0dVU2empMVkZqd1Y4Tm9vdmoxWmFwWXhlWUlyWXhrRW5BalJRenJnOGpCK1VpdjBkK0ZmZ1h3em92aUVlTWJhQ0tTOWpNVVlaVTVFaWd0SzJDTys1UWZiRmZIL3dBZ2UyMWE4MXkvY1NTaU9aSVdaajh4bC9lelNzeC91NUl5ZjdvOXErenZnMXJKbENYRWNubVJPaGtWTnBKTFNESlA4QTQ3bjhSWHFaaGU3U1BCdzAxRkp4ZXA5WVRRV1FOeHF1bFJ0QUpUdVpGT0FXT1dKL1BQNTE4WWZ0Ui9CM1RQaUxZVzNpeTNnam0xU3hMUnR1SHpOYnlIZHRPT0dNYktDcFBTdnJIV05RaXM5RUZzR0pMRGNldWVja2dlM1hyK0ZlUmVMN3JWTGZTcDd1d0JrL2NibzlweUdPRHV3dmZqSng3ZHE0OHJjb1NTSXg3WExkbjgxSC9CVkx3cGIrTHYyZmRXMTIyUDJodEExQzF2NVNvK1ZvUzdXbTQ0d2Qvd0M4M01UMndEa1YvTWxCSi9ZOG01dDMyV1ZzYnV1MG5wK0ZmMTBmdFE2WlllSlBDWGl2NFI2bEhKYlgydDZaZnJFcFg1WlVpdGtrREhqRFlkMEtIa3FUMTRyK1J2N1RORE1OTTFFQXd5Si9kNkVEMHIwYzlvcU5SVFR2Y01qbmRTZ2lEWEk0aDRnMHFLVmhMSDVrcjlzSENlcDdkNjlLUzhzMWlqM3NDTnVGS25JSTZjVjR2ZFE3TmVzTEtkZlBoaWpsa1RPT0JrS09EMXhXcFBCNUxHNjA4U01HK1dSQ1NjajJKNkg2VjVGUEVTcDNsVFZ6NkRFNFNNa28zUFQzdTdaVC9yVi9Pc3ErMWFCRzNCZ2ZvZUs4OGppU1ViMFhhQjNMZzQ5dXRPTU1aNnZuNmRLd3E1aTUvRWpLbmdFbGE1MU54cWtHRGs5S3dibldrS0haNkhGWk10dkU3YlZWa1B1YzlLekd0b2k0K1k3ZURYTFd4RXJlNmR0SERLTHVmLy9UL2kwbWlWRkJHZW9yVXRwd2liMi9oQlA1VnpVTTkzSW9VUlIvbWY4QUNxMnBOZXhhZmNTdnNWUkdRUUNlK0I2VisxdXZ5cHV4K2FRb3FVbEY5Uzc4STdlMTFmeHRMcVdyc0JCRWpQdWJvclBrRDllbGZwUm9JMHI0aGZDWFdQaEpIT3EzTFdqdmFtUTRVUzRKVVp4eGtpdnpLOEYyZmlhR1dXYlFXdG5XZVB5NVk3Z2Jra1FrZktWd2UvVHA5YStuL2hGck45NHM4VzIzdzhuOFB4YUxxelJzYmJWYk5ualdBUkQvQUZra1pKRHhjYldBNVBRRVlyYkk4WXFjK1ZyU1YwZGVlWUpWTFNUczFhM3lQRlBpSGV0WS9DWHdUb2NwZERDSjBsamJqRGlZOVIySXpnZlN2TnJEVHJ2NGxmRU9IVFFoQ3hLaVRQMUFqajV6K1FyMlg5b0xVRjhUNlFtdFgxckpaNnBwZDNKRGNReFJuN05JNWJtWkd3TWhndTdJNCtoelh6MzhPOVZ2OVA4QUZhM0ZpclNUU1pEN1JuNVcvd0QxMTVXYXpVc1lxZlRUOEQyc0RGL1ZaVmRtZnI5b0dqN1BCRUdrNkJheHJQRk9Rck9Ca3hxQmpMc1FJeU1aYm5JengxcituWDRQYWpDUGd0YmFkTUI1Y05qYjJ6T3d3KzJPRUVER1QwSkl6MUk2azEvTDE0UDhWaUx3bFlhRmZ0T0wxcmlLWWZaemhXSzR5clBuMFBUQnIrZ2Y0S2ZFaTAvNFY4MnJSVFkweUhWN3VKMmtQbWJVdGhqZ0RuRzRZK2hyOWN5TENSdjhqOG56MjdpbSs1OXhmQ1BVbjBmVHJlM3YzSUdvL3dDakdJNFpWWm95NjRPT2NqYm4wTEhPZHRmVm43UCtvUzZmQkFzellObkVzTW4rNldrVXQ5UUFQeXI4OGZndjhUYkhYSnJtSjIrU081SlVxQmhGVVlHM0JKNFVEY09DUnhYMTU4TXRhbXRTSVltQmVhUUFEMURLeCtVREFBNDZZcjBLOUdMYlZqd2JjcnVmZWQvcTF1Yi9BSExKdlNSUVFqY3VXalAzQmpqTEQxOUs0VDRrNnJKNGI4SXZxa01mblF0S0JGRmpMS3pjRlNlNENra2cxbkNSZFR2Rmt0WkZSaXF0dUI1L2RnNS9yaXVBK1BQeEIwTFFmaHJkVytybGlMWmxrZVZHMjhyODZqZDE1SXgyenlLOHJDWUp5clc2Sms0N0VXamMvRlg0dHcrTHRVL2IxazEzWExacmJ3em9maDJLQzFrTXU2Sm11cGk4NHc3bkRvUVVZWUdBZzlSWDg1LzdSdnc3UHcrK01QaVR3WEpCTkI5a3ZwamFDYU14dEpiTzVhRjFCNEtGU01FZi9XSDlSOGZ3MjF2NGxlSmRRMTZFalM3Q2ZaOWdYZXZuWENxQTRrazVsSFhoVDk0OThIaXZ6YS80S20rRFpyTDRZNlQ0OTErd01Xc2FQcWEyUXU0WkJOdnNiZ1NOaG5IekJkNFVxckFGU1Q2MTYrWllCZXcwV3o5VGp5N01uOWFWbDBzZno3UXgrYjRyanQ3cksrVGFzcFhrTUNYeUNlQ01ZOWNWNk5QWjJMeHBHVlBUMXhYRzJVbHBxZmlxZTdiWklua3hsMjM0Sk85dS9RSDYxNjFEYTZjRzh5TGJHcmM4eUtUK3ByNWpDNGYzV2ZYNDdFcExRODBuME8xVnkwUzdGL3VqcCtOWmN0dkRhL3V4eDNyMVdTSzFtVTRqWEE1eXJJZjFIQS9Pc1diVElKc2xGUDZWaFd3aWhyb1lZZkd5U09CdVhDbko3Wi93ck4yTjVZYVB0d0FlcDkvd3JzN3pTN0tPTXRjdEpLbzdLUU1lL0pyaHIzVXRDdDVERkZjdkV5L2RSaGxxODJ2c2UvVG56SzUvLzlUK0pRM0VrTW0wSDVhemRkdXYrSlBPRy9pQUIrbExlTzNsNEI2SE5jaDRtMUkrVEZiTDBmNzN2aXYyREZWSXhwdHlQaXN1d2puSlhSN2o4SUwvQUV5eXM3dTVuVUZ2SStVTTJNa01wd000NmozcjY4K0VrR3A2VGR0NDlrZlplVFJiRVFBTnRqMjVDWVBHRFg1Y1crdFhGc29peGxGN1p4WDBKSiswejR0bDhPdzZCcDFta0loUUtYakJ5UUIvRWFuS3N4cFUyblBwdFlyT2NqcTFHNVU5bWZvcnF1aVhmanJ3dGR4YXpjUW8wa0VrVVVMdWk3ZzZsUXdVdHRCK25Tdm5uOWtqOW1uVGZpMTRhOFEzbGxZdU5aOE1TWkV6dXhTNTViOTNHVU9BeUtNNHdRMmVLK1pQaDc0cDFmNGgrUGROOEthdmVUMnRycU53c1V6eGttU09EckpzSDk0cmtjOThkNi9lUDRHZkFuV2ZEdWt0WmZCdlY5TTAyd1dZT3NFdm5DNGtqVW5mNWtSRzd6R0FPZlJ1T0srbHlyQzBzeHJLcTQyNVR3TTF4TTh0b09qS1h4YmJuNTFmRWl6OGRlRHJPemUxU0JMVy9sV0I3bVloR2d5eFVNeWpzbkJKeGtWK2p2d0grTlhnRHhSNGF1dmdXMnZpMjFYVHIxTlN0THRNcEZmU1N4Z1NSTVNmbExOOHlidUNTUlhiZUl2MmVmQ01rMC9pcnhzMGVzWEVBTGJMaENpaFc0QVdNNEFJOU9wNjE2TDhFZjJHL2dkOFFkUmc4UStNZEEzenp1RXRyVFNuZTBta0orNkdrUTV5ZTJPbk5mVTBzUFV3dFp5aHF2UHQ1SHkxYk1xR0pvY2owYS9GbnFmN0YrcXRvL3hpMVB3ZGZ0SjVzVEY1UE00Yjk0MHUwZkxnWnpqSzlOcEdLKys3YjRyRDRlNnhMZGVLZzhOdnBWdEc4MGlMblpsdjliZ2M3R0w0R2VtSzdlTC9BSUpqWC9neXhoK0tQN09rcVBybWxyQlAvWmh2WnJ3enh4UnFra1Viekk4Wm1DTGdva3VTVjZIT2EvTTc5dlA5b0h3LzRROE9hejRLMDFMaUh4TGZRZllib1NSN1BzMzNmUGhsRDRJa1ZQbDI0R053UFZhOUpaelFjSlRUVHNjR2E1VFdwT1BORnBNOXEwci9BSUxoZkNYd0xjeVJ6L0QvQUZEV3JpeS8wZUtaZFRTM2lkSXl5bzVRVzdzTjRPZnZIdG12TVBpYi93QUZ1ZmgxOFNkRmswSFd2ZzFGZTJjamJ0dHpyZHgxd1J6NVVjWklJSkJIb2Evbm1hWHpITHRrbGozcGNFa0FWOEZQUDZxYmF1cmluaFUvY1IrM09uZjhGbXBQQ3NYaytCZmhGNGR0VWlBQVc1dTlSdUZVS01EaDdoUng3Q3ZIL2lmL0FNRmFmR0h4WjBxWFFmRi93dDhCM2RoSzZTUEJjNmZOY0s3UloyRmc5d2QyM0p4dTlhL0xPMHNMaTVrTU1RM0ZzREF5ZVNPQWVPTTlCM1BhckhpbndoNG04R2F0UG9IaTNUcm5TciszSUV0dGR4TkRNaFpRd0RJNERLU3JBNElCd1FlaEZiVnMxcVRYTEw4VG1oaHVWcVVkR2ZYZy9idnVOT2thYncvOExmaHZZOFlKWHdycDBoSHBqemtrSi9FazFXbi9BT0NrbjdRdGdDdmgreThLYVNwNkN5OE1hTENSOUNMUW45YStFN2hUNlZubFdZbk9BQUNlVC9kR1RTbmpKYWNxUytRcXJsTFJ5YitaOW4rTGYrQ2puN1l2aW5STHJ3dGVlS1Zpc3I2SjRKNGJXenM3ZFhqZFNyS1ZpZ1FjZzRyOC9wOU90REtXbHVHVmpqZ2s4WTRBSFBUaXZxandkK3czKzNSOFVXZzFUNGUvQ1B4WnFsbmNSck5CY3hhWGNDR1dLUVpTUkpIUlZLTU9Rd0pCSFExK2lYd2Yvd0NDQXY4QXdVaytLeVEzUGlUd3BZZUQ3U1FaYWZYYjJKSlZYL3IydC9QbXo3TXExMHdmTXYzbHJucDA2MEtNVkZ5UHhGaWdpaWZmSk0wbnN4T0tra2JSeWRwdFlta3lBRHNYT2UzYXYxOStPdjhBd1F2L0FHNi9nMXJMNlhwbW5hWjRwdDl3RWR6cDEvR2daVDNNZDM1REtmYm12Zzc0aWZzTy90aGZDYlN0VjhSZVAvaHpydW02Wm9rZm5YZDg5cXoyc2NXNEtKRE5IdlR5eVNQbUJLNDVKQTVxY1JUbWtuWTY2T01wUzBqTS85WCtHMjVuVmdVNzlxODgxZVY1Ym9vNXlFNkQwcmV1Ymg5Ky9PTnZOY2RkTTdYRE9Xems1cjlTemVxbkRrUjRtWFVIRlhadVdka0xpMSsxbmtFNHg2R3ZidmhKNHIwdndxYnV5dUxaSnJtNmpLd3UyQ0VMZktEajF6MEZlQjZiZHl3bG9BTnlzYzQ5Sytpdmd4NE5mWDcyK3ZGVVNUV3NIbVFwakxNNXlBQU8vd0RTdk13VWZlVW83bzN6Q0VYUmJuc1pId3p1TkIwVDRzVzB1dlhhQ0tXWmthNEFHd0VuQk9TQ09lY1k2SDA2MSs3bmh6NFUrTTAwSzE4UStDL0VVRjVaN2ZOdG1oQUVpYmlTc2I0SmJnSDVpUmpBSGZtdndMMWI0YzYvb21wUzJ1cHRpZDJPOVZ5VkdPZXZyejI2Vjc3OEh2Qy9qQzN2Wkk5U3VIazBxNXR6SExGSzhqRHlsS3NER3l1cFJzcU9weGpnam12b01semY2czNSbkhkbmdaNWxzY1ZGVll6dG9mc2Q0NDhTZkgveGo4TnJ6VnZCR2hSNnZmYVU2d2hSTWdDQWhoTkpFak92bk9vd1FoT08rZTFYL3dCbHo5cHZ4RGJlR2sxTStNRjhPZUk3RzkreWFSTmNNam90MUNGZVJabGJMSU5yYk9Cbm5QSUJyaC8yUi9pcDhaZkNueFcwV3grRGxqYTZURmZzZFBzRjE5Vm0wM1VtaFNTUXEwQWpMUmx3TWViRXlsVDFZak5mdmY4QUFMOXBYL2duSCswLzRsdWZnSisxaDhOL0R2Z0w0aTJjNGluMHJXck8zUzJ1Wmd3QWUwdldSY3JJZVUzc0NRUnRaK3RmYjA2YXJMMnNxbG50WnI5VDgzL3RKNENwR0xvYzZUdmRQb3U2UHAzOWlYOXFLdzhUdzJtbGVHcktEd3A0K204eVJ0TGtaSTlKOFFaK1p4QWVZbzUyQTh6ZEh0UnY0dHZVZnp2ZjhGblBqLzRIK1BYN2J2aVBYZkJPaVNhRUxCSU5QMU9LVEFhZlZMZU1SM3NyZ0VqY0hWWUN3KzhJUTNPYzErNVgvQlJ2NEVmOE1XZnN2Nm40My9aOTB6VGRBOE5pOGlrTEplWEl2TEc5bGtVV3JXUWxtZU1zR0M4cGhpb1lsTnVTZjQyTmYxdTkxclZwOVgxV1UzRnpjeVBMTks1TE83eU1XWm1Zbmtra2srNXI1ak9NUENqTlNnNzM3SDArWjhVMHN4cEwyTWJkN2xjT0NSMnExRStIR0RXSjlvU2dYQUJ5akEvVTRyenFsZUxTYlBBOWhMZTF6OStmK0NOWDdhSDdBLzdGMC9qRHg5KzFsNE51dkZIaWVjVzBlZ3lSV1VGNUhCRXU5cDhDZGdJNVdmWmh3Q2R2QXh6bjh3LzIxZjJocm45cXY5cG54biswSnFFTFc3K0tOUm11MGhiWm1LRXNSREdTaW9yRklnaWx0b0pJeWNrNVB5dEJxQmpqRE9lUFk1cUc4MUt5QURTU2hSemtraitXZjU0clduU3B1YnJYMWZkblZVbGlLdEZVZVhSRk9abEs0SEZmb1Ivd1NzL1lrdnYyNy8yelBEWHdkdjRKSmZERmszOXMrSTVJd1J0MHl6S3M4WllIZzNNalJ3RGpPSkNSOTAxK2ZtbTIwK3VhaGE2Vm8wVXQ3YzMwb2hndDdkRExMS3pmZFdPTk1zN1B6dFZBVDdWL1psL3dTby80SjFYM3dJL1pXMVQ0b2ZFTFhJZEU4YytNN1ZycTgwdVM5ZlQ1clMwUldXMnQ3c2tJSTVGQmVWeTVQbHUvSlhZVFhSVnhUaEJTNVpOTjI5MkxrMTV0SzJubWVCSExYT282VG1vdis4N1g4bDVuOUpQaVA0VVcxekZCcVhoa2p3L2Y2WWl3MmR6Q1VFY0Z1aXF2a1RSc2Rzc1B5cjhqRUVkVklOZUt2KzB2OEovQU90UDRiK0xtdWFQbzkrWW5sYTcvQUxUdFBzVWl4NFZuU1Jwa2FQQnhsSkZEQWR6WDh1WHhXL1pQOEFmdEZqVE5XL1pSK1BlcWVKdE9DUmpWOUNmVWY3YWJUaXdkM2NtZTZnVkkxMk41ak51UUhKM0FIRmZucisweDhKL2dsOEg5VnRMYldkWDByV251SXZOaDFTME1jYXlCUU9VamFaektoeVBuZ1YwUE8zSTVQMWVGNFpxMUtibkNzbkh6dXZ6MVBIakxEMDZ5cGNzdWR1MWxxeit4SHhEL0FNRk5QK0NXSDl1LzhJYjRqK0xYaHA3dWVRV3ZrcUxpNldSM1lLSTFlS0Y0MkxNUUJ0ZHNrNHI0ODhmL0FMZjMvQkgvQUVueENQQ2RuOGZmQzl0ZFg3U3hDeWNYaldjZTFoRzhOektJOWxzYzVVcEtWQkFPUVJYOFhPb2VQZmhicXZpS2J3SkZxTndscHExbkorODNrUnlOOHl2QUcycHRrSTVUS2ducDFySytKWDdNL3dBQXZHK2lwcVduNjNwdGxjM2NheStZRmEwZG5JQTVPM3lYR2NndDZnanJYeXVXenpHcmlaMGFOUk54N3ZmelIraTVqd3JsRU1OVHhWYU1yUzY5bjJaLy85YitDdTV1VElwQU5Zei9BSHFuYVFnZEtyRTVOZmVZdW9tN0hQQldqWVZKSGlPNlByWHZud284WFhYaGxqcWFzUktFWlJnbkpWMngyOVJrVjREWGRlSFlydG9vaGJydkliSlhrWlhQUFQwcml2Sk84UlNpbXVWbjZhYWZhNkY0bzhPemVLNzZTT0czZ2haeklEZ2dLTWtEL0N1THRmRU9uNkY4S0x6eFZjVFBOZGFoUDVWaXJyd0lFN2tZNExjNTcvZHpYeVRlK0tCcVZ0YTZCWnpQSEJjU1lsZ1U0VlJHY0FONzg1UHJYWmZFRHhCSmRReDZiYk1Qc3RvaXhJcTlOeEh6SDZzZXY1VjZqekJwcXBINGp5UDdJZzA0U2VoOU0vQmo5b3J4SlpmR3Z3WDRqMUdkNUlkRTFOSmh0WitGSytYZ1lJd3FvV0JHT3BQclg3cmZGYnhUK3pSKzFsb0owUHg1YU0xNEl3dGxxVVNnWFZtNXlENVVxbmRnTUI4ci9MMnIrV1B3dnJGL3BUSFU3UnRoVnd1Znd6WDA5NEcrS21yYWZNQmEzVEtycVVZS2R1ZDNVNTlhK3M0ZjRuOWk1WWZFcm1qTDhENWJpRGhUMnpqV3c3NVpSMDlUN1ErS1h4YS9iRGorSEZ0K3lmZitPVzhhZUJ0QXZ2dGVuVzk3TzIyMW1DTkdNRStZZHFvN1lRSGFwYjVRTVYrYlh4TjhSZkZyNGZzcjZucGtFTnM3YlZ1RkxTb3g3QTU1VSsxZm9aNE14ZHdLN3hoako4eGJLakpPT2VLNUw0ODZObzJvZkQ1cmZXZ1ZFY2lSWEkyZ0FMS1FnZGNjNVY5cEI3VjA1amtrSjBIV2d6Z3dHT3BScnhvMUthbDVuNVkzZnhuOGN6ZjZ1ZUpNOWtRZjF6L09zci9oTy9IMnBFajdmS1BaTURIYjJybU5jMEc4MFBYcnJ3OWVEYk5hU0dJOFl5UjBQUFk5UlhyM3c2MGpTbmRpNmlhN3R6eEczZjFJeHprVitkVkZPUHV0bjZYRERVSVJjNHdSMXZ3eThIZUl2RkdxQk5mdjdxVlpHWDkySkdHUWV4S25BcjlKL0Evd3Q4RHl3cnAxNWFRZVdxQU16cXJjOGo1bWJrbmcxOHQvQlV3NjU0cXY5VVVNSXJDTGxWT0NXQXp6MklHTVpyMm40T2VLMzFmeFdZWGo4MEZIbFVIRE1xbHlPZlExOWR3NDZLbkQyNnZkdEw1SHlPZlFxdU1uVGR1Vkp2NW5vL2pEd3I0eitIdXBlSHZIM3d1MGpUZGNQaG04aXVyZUM2SXRuaE1FZ2xTV0M5aWxnbGk4dVFBa2VadDlCMXo5Yi90SGY4RnFQMjR2MmpmQTJxL0N6eHY4UGZBTnRwV3RSZVJleHBkT3J5b3JCaXBtVFVGZkRsUm5CRzRjRTROZVYrSU5QYlh2QWZpVFNRTXBMNGUxU1JBZXU1YldSbC9XdjV4WmJ1ZkM1WmdjYy9NYStpNG94cndNNHZENktlNTRlUlpGaGN5aHo0eUNsS205Tno5ZHZDUDdWWDdUM3d3ZTdnK0YraWVCL0R5YXBBdGxkTEdMVzVTV0ZYVjFpa0YzZFRoMDNLcEljRUhBem5GWXY3WEg3V0g3Ylg3YUhoelJ2REg3UjNqUFRkZHR0Q2xZMmRyYng2VGFKYUZVMkw1Y2x1RWJZVkpBUUhZQ09tYS9KMWJtUlRrODA3N1hMMk9QcFh5V0k0anFWWThsYjNsNjJQc3FIRG1GcFZmYjBvcU11L0tuK0xkejNqVC9BSWNhOWI2cmJwYzNhaUxlTXkrYkE1US8zc2VaazQ2bkhQcHpYMEo0SjhVZkV2d1ZxSDJ2VnZEMmxlS3RQZ2RnMEdvVHFiZVhuQkpVU2dwNWc1NElQcUsrQURjU2tqY3g0OXpVNDFIVVBKTm9zMGdqYjd5Qmp0WSs0emcxODdUNUlTOXJCZThqNk9WVjhuc2w4Si8vMS80RUgrL2lrcFgrL1NWOXBXK0k1eUpTZHdIdlhzbmdnQVdrakRxSStQOEF2bzE0MG4zeDlhOW04RWY4ZWN2L0FGekg4eldZSElhR3pmOEFDUUkyZVNDVDduUFd2UmRXSi9zUmpubk5lY2FIL3dBaDZQOEEzVC9PdlJ0Vy93Q1FHMzFvVzZBNkhTVVQvaEN3eEF5WjQ4bi9BSUM5YUdrZjZ0UHFLbzZUL3dBaVNQOEFydkgvQU9ndlY3U1A5V24xV3V1bi9IajZISlcrQ1hxZnBCOExYY1N1Z0p3QkZnZHVTTTFoZkZuNS9EWGlBUHppMDcvOWRCVzM4TGY5Zko5SWY1aXNUNHIvQVBJdCtJUCt2VC8yb0svVlpmN2l6OHVoL3ZQelB6Vy9hSUFUeG1KazRkN1czWm1IVW5iMUo3bXNUVHBKTGZ4UHA4bHV4UmpNY2xUZ241UjZWdWZ0RmY4QUkzcC8xNlcvL29OWUZuL3lNbW5mOWR6L0FPZ2l2eVRGZnhQbWo5Ync2L2RmTDlENy93REJjTU5wNHA4VVJXcUNKZnM2Y0lObzV0UVR3UGZtc2o5bTVtVHhIZk9od2ZzU2Nqci9BSzJ0dnduL0FNalo0by82OTAvOUpSV0gremovQU1qRGZmOEFYakgvQU9qYStneXI0cUgrS1I4cm12dzEvd0RERS9UYnc2cXQ0SjFKMkdUL0FHUmVqUGZCZ2s0citZV2JwK0EvbFg5UGZoei9BSkVmVXY4QXNFWHYvb2lTdjVoSnZ1L2dQNVY3dkh2L0FDNU9MZ1QrSFc5VVJVVVVWK2VuM0JJNEFIRlJIZ1ZNL1NvVDBOTmJNRC8vMlFBQS85c0FoQUFKQmdjVUVoSVVGQk1VRlJVVUZ4Z1lGeGNYRnhnWEZoY2NGaHdYRnhjY0hCd1hHQndvSUJ3ZEpSd2NGeUl4SVNVcEt5NHVMaGNmTXpnekxEY29MUzRzQVFvS0NnNE5EaG9RRUJvc0pCOGtMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN6L3dBQVJDQURLQVBrREFTSUFBaEVCQXhFQi84UUFIQUFBQVFVQkFRRUFBQUFBQUFBQUFBQUFBd0VDQkFVR0FBY0kvOFFBUkJBQUFRTUNBd1VGQkFnRUJBVUZBQUFBQVFBQ0VRTWhCQkl4QlVGUllYRUdFeUtCa1RLaHNjRUhGVUpTMGVIdzhSUWpZbklrZ3BMQ0ZrTlRvcklYTXpSRVZQL0VBQmdCQUFNQkFRQUFBQUFBQUFBQUFBQUFBQUFCQWdNRS84UUFJaEVBQWdJQ0F3QUNBd0VBQUFBQUFBQUFBQUVDRVNFeEF4SkJFekpSWVhFaS85b0FEQU1CQUFJUkF4RUFQd0R5VUpRRWdDY0YySEtPYW5oQ2hLQ21JZTV1blZjNUl4eGtkVTRwaUJoSW5KRXFLQ01SU0VGaFI5eW9sa1dvMURDa1ZBZ0ZReTBQYVVVRkJhaUF4SFBRSmlhREFTcE5MWmRWL3MwbnU2TkpWcnNzMGFJL21IeG5jMEVrZWkyM1p6RjA2ME1ZY3hHZ2d0cWY5MWo2cWpOdWp5akc0QjlPMVJqMmYzTkxmaW9ibUw2VXA3T2JXWVdWV3RlT1k5eEJXSzdlZlJ5MXRBMXNMVHl1cHlYTUUrSnUrQnhHcWxwRnFaNCswb3JFajZjV1RBVk9pOWgrN2xOTFZ6WG93QUlWRWdHbE1mN1RVU296eVVkemZFa3lsUkp5cE1pQ09TWE9VV0toK1JOeXJoVks3dkVoalNGMEltWklnQm1WZGxUMXlBRmFuQk1ZRThLaWFIQmNBdUM2RXhDalVkVTV5WTNVSWprSUFaS1FsYzhydHlRRG1vN0ZHcGxTV0pvVEdWUW81VXh3UUhNUTBOQWdRRWZaV0dkVnFDTlp0TzRjVDBDRUc1ckM5MW9NQTBVS0pkclZjRERpSURHMkZoekpBbjhGS1ZzcHVrV1RXNGVpWUxCVmR2Qm5NU2Q1dUEwZGI4bGM5bjhXMnBWRVVHMG5OdURUYzdPT29kWnc5RmxkaTRRZ3VmVUpJbVptNUpQRmJUWndMU0h0WTBsdmlFRXlSdnVkVm9zbWJpZXFiR2JtYUNTSFNCbGRjVzRFY3ZkTUt6ZlJ6QTgxbjlrYlFCQUlNQjBPQTN6bzRmQlhlR3hFam5LNStTTFRzcURqcG5pUDBwOWpYVVgvQU1SVFlTd3pueWl3T3VZamNGNW0rbXZwSHQzRFgwemNrZ2gzOXVtbWgxdUY0THQzQUNqV2V3ZXlETGY3VGNlNkZzbGNWSVYwK3BUWlU4TlBCRUxVMk9ha3NYa2czem5rRVV0UTZKSmM0K1YwdzBFZ3hvbWs4bElrcms2SnNpMjRKcGFGS0lUSEtXaXJJK1FjVjNtandtbGdVME93UGVKZSs1SnhwaGRrQ2VRd2MxRUNHaU5LZENZcWNVMUtWUkp3MUNLNUNicjVvejBJVEF2Q2ExT2VtQkpsSWRUMVVtbW85Sm0rd0hOTnhHSmdaVzY4ZEVXa2dxMldKb2pMTXQzNzRWSld4SmVkSUhKTWVYSGVTbllLbkxsRXAyYVJna2FQczNRQm5OYUFEeDZxM0dFYVRjdzA3M0tOMmZvZ2g1Nkcra0NUZjlibElxVmQ3aklrd2RGdEdsSEpEVGNzRnZobnNaNFJEbXg2bmp5VjFzUUV4dUIwSG1zdGdROCtJQWthTFc3QnB1QkVpUGtpM0kxakJSTkhoTUVRZVZqNWhhYlp6RGNuUlZPRU5nTjZtVnNSM1ZONzNTUXdGeDAzQ2RGRTIzZ1h4eDJWSGJlcE5hbkdyVzNHK0NicnhydGUvUFd6YW1JSjV0TUgzcmMvV3o2cE5Xb2JnbjBCbFlidEhRTEt6Z2J0SXpzUEZqdkVEMXVaNXJXTWFoUnl0LzZzejVhbUVLUzlxR1dxR2kwd0ljZzBqcVozNktTK21OZFZIdzJubm9wb3RNSUtoVHM2UnlaS05CZ0pLUk5CWFNnUXE1Y3VKU0dNS1NFdkZMS1FEUWxDUnFkQ29Rb0tWSUVxQkNEVWRVZHlCR2lPNU5DWUtvdVlJQVA1anpDWlhKTmhxVVpvaTNEVlJKbHhRQ3NTNDZBSGw4a0dyUmdLZlVvMnRycUR6L05Sdy9NSmpyMVVNb2hqUlR0azRZdWZhNDM5RkRjQm1oYW5zMEc4SkRSbUkrODZEcWZ1aU5FNHh0bFNkSXZjSGdoVG9rRVhkSERTT2ZWQWM0T3RBdFBSVHpUelFiays3OWxDZFJjM01RQkh2OXk2SkxGSXk0M25KcHRnWUthWUFJTFNaNlFyckhPN2xvbHJTWU9XQ2MzWGtQVlZIWmpEanV3Nm9YWlJ1QU04VW0wYXI2dGJ3UElwR0d0RVJEWUZvMW1aVXJDT3VNVkptb0dJY0dNSUVrdEJoVk8zZHRPRE82Yk9aNHVDZlpCTUN3NDM5eTBMYUliU0FKbUdqcVNzSHRmRE9EdzhpK1lHZVBudzVKckpqek5Sd1NjSTVsTXdRTXVVVFBQWDNySGRyNkJwMThra2hyV2hzL2R2QzFXS3BCejJrRDdvNmdpUFBTRlFkczY0cTFNeEdVc1BkZzY1Z0FEZmVESlBIVUxWbkg2Wlp5RTV2TkhLRFVhczJhSURVcVFESTNGTXc0OElzaVlsM2hLU2kydzZmcUZIcFhncFRTMUc3dE55b29MQWxjUWk1RW1WS2dzR3VoRWhOaEZEc0dBbFQydFRySW9MSW9SQW1BSndRQTRKMEpzSnpVQU00STlRZ1hRQ1VSb3pHZDI3OFVYZ0tzVEN0dVhPdEYwK3FJYU9Mako4L3dBazdFVTRZMW8rMjZQTGVuWWsvd0EwTjFBK1FVRmhxaklaK3VpcGFqNGVZMzYvaXJmR3UvbU5idUFMajEwK2FwcXgvbWVhVTlsUlFWbE11Z0FMZjlrZG41YVQzT2c1aUEzVFVHOWp1MTlGajlsMDRlT01PUFMwTDBMWWROb28wMmd6NFovekczd1duRXZUUGxlS0NWNlppQjBSY0RobXlNd2tOZ2FtSjVoU3FkSzJZWHNmVzY3WU5JbHp3ZnRINFgrUzJaaW1FcWRvUXgyVEpPOG5rZUFWa3lyU0xlOGF3eUx3RUNwc2tPY0NBUEdlSG42TFI0SFp6UlN5Z0NSeTUvTlEyL1RhTTZXQjFQRmQ3U3l1R1VtNDRnK1N6ZTJhWjBGanZIUGN0WlJHVVJHbndWZnRqQUNvMDViUEFrYytTSW1VbmJ0bVV3ci9BUERpcmJNSWFHblVuTS9UMTl5emYwaVlVTmZTcUNJYzNLUU5BOER4ZXZ5V3J3VklnZ08wTFFDM2c0U1o2L2lWbnUyMUdjT04rVjdZSnRZeUw4TDI4bG85RTNreExTdUpVZk1XbEZsUjJMb0ZqYWZoSjZmRkVvVTdEWFFJT0xkNGZNS1JUWng1Y2tsc2ZnV1Uxd2xjQXVsVVFKQ0dXb29UWlVzb0hsU1pVUWxOU0E0QmRDUWxNem9IUkZCVHdVS1U5cWdzSXVCU0FwcGRBSktZcU9jSmNHamY4RmI5d0dqS1BUOWVTcDlsR2FnSzBPT1pEZ2R4Q1VjMnluakJXTU9hdXh1dVVFcGpqL2lMOGZtbjdJY0hZaW9lVnZnZ1loLytJSFZEMWY3SzlyOUJYUG1wVkozRWdkTlZWMG01cWs3cHVwR0xxdytyL2NoN0xibWRITlp0MnlsbzFPRTJjRzBUVk53OFpXaittZm1SK3BXcjdNMGlLY3VzSnR4VlRSQXFZYkRzSWpLWkovekd4OGlQUmJDaTBBZ1JZRFFXdHU5NjZZeE9XVEhVcU9WaGtRRFlIbWVDTHNuRCtKeDRENGo5MExHdXUwNmhvRHVXbjdLdzJZM0t3azZ1L0NWVEVpZmg0blQyUitTbjBDUXFyRGs3dDhlcXRtWGdkRm14aFhDM3FoWnZOT3JPdDgxR3FHMzYwUWdaVmJRd3dZWE9Bc1pFZGYzOUZtdHQwdTl3OVpvdUJUbHZVUzcxbGFuYWxTMGJwbjNUWlVEbkF4ZTVKSDl3dnJ4V3lWb3paNU5xbXNkbE1IUkd4bEkwM3ZiOTF4SG9VUDJnc1RZSGpOQjFSMlZCeDg5eWlWajdJUEZITFFmeXNqK0RhUWJ2RWhxQlJ0TEhSZFpIWmk2a2cxQW1PZWh3dXlwV0ZJZVhwcm5wcEFTWlVXT2hTNU1sZGxUc2lrWkhTdEs1SUVpZ2dVYkV2dkhCU0FWQmRjK2FVaW9MSmFiTllXZ0hpdERqUm1wU05RRlRVWGdBRGVQSld1ejhVRExUcHB1V25IV2pPZDdLVHMrNkhWRHdFL0ZSSDFjMVhOelZoaGFQZFZLemQwR0R4RVdWTzEzaUtpV0VrYXJMc1hhQm1vNDhiKzVXT3c2UjFWVXhwZTZGcHNHekxsQXRCOVR3VXdWdXdtNlZGZ0t6MkZyWkVEN0lpNUUzUHFWNkpoRzVnMDhwbmdZMCtLODQ3bk04R3d1Sm5VbWRGNkRnSFNEdXNQaCt2VmRNYk9lWTZzL3htZFBrQkh3VnBoWCtFa0c4UndqU2ZPL3ZWVTh5K2R3QkpFYTIwVTZqVWh3YnhhZlV4ZFUwUVNNQlU4TFR6OTRKS3U2UUFBNktod05pQi9VZmVGYzBLa0NQMUZnRkxRMEVjNmI4MDFvK3lmS1V3dUVubnB3bVB5UkFNMnVxa0dRY2FKdkVrRTlZL0Q4VmhzZGlnTWEyazBFQnJTNHlkN3pNYTdoOFZzTVRWT2MvZEh3QXY4MWhxT3ozdHhsWjdpQ05HbTVrYnI3b0MwU2VDY1pNNTJvdzJYRVAvcWh3OHgrTXFraUZzdTJ0RXVGT3Exc3RBTFhPSGxIbHJkWko0blJSSlpMZzhFZXNmRXo5MFZyWlFUN2JkWkhCUzJsU2kyQ2Mza21TUnFwRXBwQ0dpYkFrbGNpRUpoS1ZGV2NRbW5jbkZOSlFNU0YwSlNQVkpsU0FpaDRYWnd1Q2RLZ3NZNTlqMFFFZXM3d2xNb3ZVc3FPaVEzR3RKQmV3a2plQzRmTldHSGZSZjdEaXgrNlNTSjRlYUVhTTJQN1dsSnNuQ043NEg3TGRKNHExZGt0b21kOW5scmhscXRCQm41L0VIbXM3VnBsamlEcXRSdExBNTZtY3Z5a1d0ZVFOSlZEdFhDWmZITWdtRWNsajQ2SWVIZEJCV2gyZlhrKzlaNmxUSk13U09RVi9nbVEyMzVwY1krUXZHejN6UEZBSkFpZndXdDJkaUlaVU15QVQ2WFdDd3J3eDdYSFFPQjZYMy9yZ3RYc0t0RkNxWGJuR1Q1bGRNV3JPZWF3WGxlckFGcm1SNUg5MVB3NzVqakE4N0czd1dSeE8wSmc2Z213TzYzNWFxODJUVnpORVdzWTMzSFByQ3BrbHRoWFgrUVZwaHFrK2gvWDY0cW1wVklnOHlQMTVLZmhhbG1qZVpIelNFUytuR2ZsODFKb3U0cU5RcXk3eklYVlRwY1dVcEF5dTJoQmVmRnJGZ1kwdjcvbXMxUmFhaGRrRURReU13bnArdFZNMmk5eHFodVdXZ2tFRW5UUzlwTThGWVlLZ1lBWXdnRFFaU3RNRVpLdHJoSGR2TXkwZ3RJeXlPbTVlZWJWdy9jMXFsTUd6VGJvUUNQY1Y2L2l0bDFIQzFGem8wOEprZENzRjJtN0hZeCtJYzZsaDZyZ1EyVGxnVEViMUUydnlWeHBtSmRHZnkvRlNtMHhHcXU2WFlQYUdhVGh5TFJkMUp2eGNwVE93K01IdE1vdDYxNlEvM0tFMGF1ek9ocVFnY2xwejJOckQycXVEYjF4RGY5b0tUL2hHUGF4ZUNiMHFQZDhLYWVDRExsaVlXS2J0bkN0b1B5aXBUcWlKelU4eEhRNW1neXEvK0lIQXFXMFZURnlGSWFQTmNhNFRIQ2RCOGtpa2NXbE5rcGhZL3dBdXE3dW5mb3BESXpsMHJwVFdsUVdqcXhza3c3a3l1N2Ntc2ZDbDdORXNGelhlU1FCdmo1N2xOd3RJTkFWRmc2NERnU2JLMnJiU1lCNFZjV3RzeWxGNkpsSnBKNERmZEQyemhKcG1JTVgxQ3FhbTBUdU9xSmhhYjhRU3hwOElFdVBMZ24yVHdIVnJKWTlrNlhmQnpIQ0EwV2NQdmNDcE5iQUVPTFRxSnZvaTdMY0tEU0dTWTVYS25WcXhxZ0ZvMUh0SGNGcEdDb2lVc21YTkYzZWh0UjBOMW5wdTZyUjdNMnl5blVkVGRKcHVBQjQ4amRDR3hHbVM4a256VGFmWnh0UjM4c3VCNDdvODBsY2REYlVpMXhtSGFBQzJDMmJPOGpQbXJqc3JYek5CNGcyNW5oK3Q2aDRQc3BWYXh3T0liQmFiWlNRQ1l1YmhTTUJSZGhudHpaWE5OcGFmRElIRGNkNjFzenJCWVZuRnVVY0lJUEVxUHRmdEQzTGZDUEdIQVFkTjgrbjRLZGphZWFEdzA5Ylg0ckNkcDhYbnJPajdNTm5pUUlKOWJlU1U1VWlVclpldCtrZkVOSGhaUkhNVTI2K2FFLzZSc1lkSE1IUmpCOGxqbHl3N0ZHcXFmU0Jqai96aU9nQStDaTFPMm1OZC93RFlxZjZpRm4xd1RVaFVXdFh0TGluYTE2aC96dS9GUm43WHJIV3E4LzVqK0toRUpDanN3b083SFBQMmo2b2JzUzQ3ejZvUlNKdVRGU0ZOVThVMXp6eFhJVlI2VnNhUTRqaWtnTGc5S1dCVVdOZ0paU1pDbUZJWVExRjBsRGxMbjZwSmhSQ0pUQ1VwS1k1UWJJRlZOMGhTSnpCS3k5TkJFZWhoSFAwUXlGUDJmaXNsb3VtdDVGSnVzRUd0U0xEQjE1Szc3TlZ5d0U1aTJUcUJJdHVqZXFyRnN2Sk90MWI5bnNyckV4dTE0OHVDdUgySm45VFhZVEh0YUJtWTNkZUJZcXhGUU85azIzQ3dBNmNGUS9VN21nZUlsc2E3b2trQk5ZNTlQdzZnNkxwN05iT1J4WGhaWXpFQTIzalVxd3dGVnJXMkk4dFZrdHUxSzdjdmdjS1JBSmNCSkovcWpRS1gyZXhJTWw4NUd4b1lra3hFcU8rYUwrUEI2WmdhaktERzFITUw4K3JnTXdaMTRIbXI2cGhLZUxwa1BoL0I0QUR3Zm5FL2t2Tk5qN1FxWVIrWnJpK2s0NnpvT0RoODF1Y0ZpUlZIZllXei90VXBpZWJScFBKUTcyZFNna3FNYjIzcDFjSzgwaTQ1UTFybVBGczBrajFCMUhOWUNxNlN0NzlLUGFKdUlkUnBCc0dtQzU4aTRlNjJYaUlBa2ppZVM4L2xKeWIyYzBra3prcVJLa3lhRkFWaHNqWTliRXZ5VWFibnUxaG8zY1Nkd1ZlRjZUOUdYYS9DNEdsVkZacnU4YzRFRnJRWmJFUnJhREo4MFhTMFVrbThtZjdTOWlxdUN3OUt0V01PcU9JTEFQWXRJa3pkeDRBUnpXVWN0cjlJM2F4bVBxdE5OcGJUWTB0Ykp1Wk15Um9GaTNGQ3VzaWtrbmdZUW1rSjVLYVFxSUZwMHk0aHJSTG5FQm9HcEpNQWVxOUVIMFRzWUd1cllsNG1NMlNtTXJTUnZjVHBOcFEvb2Y3UDk5aUhZbDRsbEN6SkZqV0kvd0JyYjlTRjdJV3pNaVFSRUhUMFJkQ3QrSG5tRCtpZkJzdTU5YW9PR1pyUWY5RFo5NjBlenV5R0NvM3A0ZW1EOTV3em4xZkpWaC9CUHBYcGd1WnZwRTNIOWg0Y2tiQ1k1cjVBRGdSWWd0Z2dwMytCZjBvOXQ5bWNQaUx2b1UzTys5bEFkNmlENzFsY1o5SDJGRWcwNmpKKzB4N2lCNU9uM3IwWEViVG9NTVZLMUZoNFBxTUI5SlRQckhEUEVERTBEUDhBV3cvN2tmSWl1a3ZEeWZFZlJ2U3lQN3V1L1BIZ3podVNlRG9FaWVPN21zdi9BTUVZMy9vai9XejhWN2Jpc1RnMnY3ditMb05xd0RrTDJEVzQ4TGlpL3dBSi9YUzl5ZHhZcm5IWjh0dUtZNTFrcFRIRlpObmFrTWxPWTZDbXJsbVVHS0xoYU9ZL0ZBWUZiYklBa2plZEZTRkxSWFlzK0l4MFNVM2xwbHRpclhFWUlDNHVkNVVWdUdQQkpxaEoyaWZnZTBOVU9oejhyYjNndUV4YVFMbTZ0c0hVcXVKYzkrWWpUUnJlT2hpL1ZVK0d3Z0JIelUwWVkxYlpzckd5U1RvQnZXa1cyWno2bXoySHRIRFZRS2VKTHFUM0FYTHgzWm0xbk4wOC9WWFAvcHpoaTF3WStxMFBnbUg1Z2Q0TUZZN3MxZ2FWUjlhaTlvY0docHpXekF4RWdqeVVuRGJYeG15bjVUL053ODJtUzJQaXc5TGNsdmVNbzVuRjNVV2FHbjJDcTBCbXA0a0VURVZHa201MDhFbVBKUDJqaVdZTWlyVExPOUVaMk5jNW9jdy8wT2FMOHh6V2k3TDlyc05qSURYWktwLzViaUFUL2FkSGZIa3N6OUsyR28wZTdERzVhdFNYT0RiTnlEZVdpMGwyL2tWTGNTNDhzMWhtQTJ2ajNWNnRTcTgrSjdpNCtlN3lFRHlVSmM0cHNyQW9jdWxObGRtVHNLSGdwNGNnWmdsNzBjVUpoMVlZbE1LR01RT1Bva2RXamNmUS9nbmFIMFk5T3AweTRoclFTNXhBYUJxU1RBSHFoMTM1QU0xcGdpNGt6eVhwUDBjZG1RMDA4YlY3dXF3dG1rMXBKZ243VHRJSXVJM0U4azBtOWJNNVZITXRHbDJDTVJnOEcyalNER2xvMUxYSE5VY1pjNXhNYjl3MHRkVW0ydTJlMDhNQjNyR01CKzJHbHduV0p6WldrY3d0WjJqMjNoYVZBdXJOY3h1Z0RKejVyd0d4cWJiN2NWa3RuZHZhZUpES0Q2Slk1emNvZG1FRjVFRFVHeFBMMVZjYWxxY1ZmNkNUalZ3ZUNsYjJ2eGRlYzJKcU40UVExdnF3QlFNVy9FRWt1eEZWMmJYK2E1cFBtWUpXOG9qTTUxQ2lING1vQWM3c3JSU3BuZ1RiTTczRDNMejd0Smp6aHF6bVZHVmFiamZLOWpjaG5XQkF0UEN5MmNJSlpKak9VcFZFaFY4TVo4VFhHZnZQcUdmUE5kUnErRHpCekFDMms4QXVBOFJMMmtscGw0SkVBblFxRmpOclptdzBocEJCQkdZQzM5Tng3MU93TzNBY3JvRWl6aHU0VDBYSExxcGZvN29kcFJyMHBjWHNaelI0U0hlVUg4MVgvd0FJL3dDNmZSYmJFN1ZaOXBqVEkxYUlrY1I0MUQrdGFIM0hlNWIvQUJSOFppdVdYcU1rU21GS2tLd1p1aEZ5NWNwQTZWWVlTcEYrU3IxSWE3M3BBWDJIcTVnRS9FMEFHeWJLdHd0VXN2N2t1S3hacXVEZnNnKzlYZG9qcmtzY0FBS2JudU56Ylc4YnJlcWdqR0hmcE4wVEdWb2FHY05md1ZaS08zZ2RmVFRka3NmbHhEbk9pWEF6Nnl0ejlZVTNXSkJCR2gwbnJvdkxzRlZEVE85V3VIMmtSRW1mMSt5MjR1U2xUTWVYanQyaXcyN3NFTmQzbUhjR3pmTHVCM0VLb3htME1SVkk3d09lNEFOQkxpZkNOMHV2eFZqaWNjWERLREErUG9tdFluS0tid0VXMHNtZHhPS2V6VmtjMUZPMEg4bHFxMUFGcHROdElXVHgySHlPdDdKdUR5L0pZempSckJ4Zmdqc1kvajhFenYzSGVVTlBZMlZCb2tqcEozbjNxVmhNSk9xTGg4UHZQdTNLWGhXK0tJbENFMldHRHc0YUxDRllVOE9DRkJmVmd4eVU3RHZKRXo2V1hUQkk1NVdSZG9pcXhoN3N5QnJUYzBQYVJ2OEFDNEVTcHV4UHBKcjRXaUtWTEQwV3RrbjJYUkoxZ0Y4RG9FVmgwQ3pHMXRyVm1WcWpBOHcxeEF1ZEpUNVA4NUNFVlBEUmNiWDdlNG5GQUNyUXc3dzB5QTZrSEFIU1lKS3JCMm14TFlMR1VhWkdtV2hSRWVlUlZuMTFXKys3MUtiOWNWditvNzFLeStSbWk0b3BWUmREdGh0R0lHSWUwY0d3MGVqWVZWdGF2V3JQbXRWZlZjQkFMaVRiVzBvSjJ0V2lPOGRIQ1NrK3RLdjMzZXBTY2s5bEtGYW9DYU1iMGFtMGh1WU9CaUpCTjc4QnZISGdrK3NxbjNqNnJtN1RxRDdSV2RJMHVpYmdkcXZwR1F3SGZCa2dxMi80emQvK1dqLzNLZ08xbnhHL2pKUS9yT3A5NU5TNjRRbm5aRVNMaXVTWUhMbHlSQUNxUTFrMlVjS2JRM29BUVZjcGc4TEoyQ2RlU28xZlVvbERSQUVpczZaS2psR09pRlIxUWdET3NVZW5WUXNTYitRK0NSaFI2THd0c0pVbmVyS2wxVk5nTkQrdHdWcmhYR0JjNnJvZ3pDYXlIelpiV2haN0hVY3dxTmk3Q1NPbjdmQlhOWTNIVWZKUVgvOEF2TzZOL3dERUk1QWhnellVaWs3S1FoWWtYUFZFYm9PaTUyZEpQbTJZYWZxeWxiR0VrbmVvZXcvYkEzZnNwK3lmYkkzWmo4MDQ3UkVzSmpjVlY4YnBPa3dyVEFFNUFlUVZGaXZhZXJ2Qyt3M29QaVZwRDdNem45VVdEQjRtOVFzajJyWkdMcmMzVDZnSDVyWjBCcCt1S3gvYkQvNVZUb3ovQU1RdE9iNms4UDJLVmN1SzVjeDBITGx5NUFITGtxUkFISllTSkVtQi85az0iLCJtZXNzYWdlc190aW1lb3V0IjoxMCwia2VlcF9sb2dnZWRfaW4iOnRydWUsImFwcF9wcm9maWxlIjp7ImRlY2ltYWxzIjozLCJtZXNzYWdlVGltZU91dCI6MTAsInZpZXdBbm9uRGV2aWNlcyI6dHJ1ZX0sIm11bHRpcGxlX2xvZ2luIjp0cnVlLCJzZWN1cmVfcGFzc3dvcmQiOnRydWV9LCJyb2xlcyI6WyJDdXN0b21lckFkbWluIl0sInBlcm1pc3Npb25zIjpbXX19.l_4tZ0R_EpfYVN5wionUOe6dLHKeKSBVRWDEhE5RAlmazRnsAOWJYFDXTvB8UObRRlDytT5u18cd3zO97_X5wg"
}
Ejemplo de uso
import requests
api_url = "https://www.myserver.com/auth/login/"
headers = {"Content-Type": "application/json", "Accept": "application/json"}
payload = {"email": "jhon.doe@jdoe.com", "password": "tuMvERweRley", "close": True}
response = requests.post(api_url, data=payload, headers=headers)
Logout (Cerrar sesion)
Este servicio permite cerrar la sesión de un usuario.
Retorna:
HTTP Status
- 200, si la sesión del usuario ha sido cerrada con éxito.
- 500, cualquier otra excepción no manejada.
Refresh (Actualizar)
Refresca un Java Web Token y actualiza su tiempo de vida de acuerdo a lo configurado en los settings.
Parámetros:
- token: String con el JWT actual para la autenticación y actualización del mismo.
Retorna:
HTTP Status
- 200, si el proceso es exitoso.
- 401, si la actualización falla.
- 500, cualquier otra excepción no manejada.
JSON
{
"token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTY5Njg4ODMwMCwiaWF0IjoxNjk2ODg0NzAwLCJqdGkiOiI4YjBhMjhlMjg5ODA0NzNkODcwZWUxMTkxMDMyMmJmOSIsInJlZnJlc2hfZXhwIjoxNjk2ODg4MzAwLCJ1c2VyX2lkIjoxMiwidXNlciI6eyJlbWFpbCI6Im1hY2VyY2hhQGdtYWlsLmNvbSIsImlzX3N0YWZmIjpmYWxzZSwiaXNfc3VwZXJ1c2VyIjpmYWxzZSwidXNlcm5hbWUiOiJtYWNlcmNoYTIiLCJwcm9maWxlIjp7InRpbWV6b25lIjoiQW1lcmljYS9Cb2dvdGEiLCJ0aGVtZSI6ImNvcnBvcmF0ZSIsImxhbmciOiJlcyIsImF2YXRhciI6Ii85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC80U2NMUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUlkcEFBUUFBQUFCQUFBQVdnQUFBTFFBQUFCSUFBQUFBUUFBQUVnQUFBQUJBQWVRQUFBSEFBQUFCREF5TWpHUkFRQUhBQUFBQkFFQ0F3Q2dBQUFIQUFBQUJEQXhNRENnQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFQbWdBd0FFQUFBQUFRQUFBTXFrQmdBREFBQUFBUUFBQUFBQUFBQUFBQVlCQXdBREFBQUFBUUFHQUFBQkdnQUZBQUFBQVFBQUFRSUJHd0FGQUFBQUFRQUFBUW9CS0FBREFBQUFBUUFDQUFBQ0FRQUVBQUFBQVFBQUFSSUNBZ0FFQUFBQUFRQUFKZThBQUFBQUFBQUFTQUFBQUFFQUFBQklBQUFBQWYvWS85c0FoQUFCQVFFQkFRRUNBUUVDQXdJQ0FnTUVBd01EQXdRRkJBUUVCQVFGQmdVRkJRVUZCUVlHQmdZR0JnWUdCd2NIQndjSENBZ0lDQWdKQ1FrSkNRa0pDUWtKQVFFQkFRSUNBZ1FDQWdRSkJnVUdDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FuLzNRQUVBQXIvd0FBUkNBQ0NBS0FEQVNJQUFoRUJBeEVCLzhRQm9nQUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUURCUVVFQkFBQUFYMEJBZ01BQkJFRkVpRXhRUVlUVVdFSEluRVVNb0dSb1FnalFySEJGVkxSOENRelluS0NDUW9XRnhnWkdpVW1KeWdwS2pRMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvT0VoWWFIaUltS2twT1VsWmFYbUptYW9xT2twYWFucUttcXNyTzB0YmEzdUxtNndzUEV4Y2JIeU1uSzB0UFUxZGJYMk5uYTRlTGo1T1htNStqcDZ2SHk4L1QxOXZmNCtmb0JBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDeEVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEK05XQUNRYlQ2MXQyMGlXMG1HemlzcTJZTkdEMzRyWWpqVjhocS9mNlZKdG40eFZsZEcxSGMyYm9CSzIwZHMvUTFGUGI3TEdLT01nZ1JyeVBkYzFuQ0JQSytmbkZiVW9DMlVXQmo5MG4vQUtDSzdLY2RIRTVPWFc1ejBpa3FvOU0xMU9nRmVGYXVia01lU0IxRmF1alBod3lIdlUwSEdMME9tck5PTHNhZmlhd0RMejFVWXJ6aUpUQkx0NzU0cjJQVlltbnMvUDZzZXRlUzNFSk11QWRoem5PTS9wV2VNZytkTXZMNnE1ZVZuWDZaY00yMk04RnVtZTlmYWZ3UC9aQytKdng1anRidlNoYjZmYTNqbU9PNXZXS3hFcjE1VUVBZWhKQUo0cjRxOEM2TnJYajN4dHB2Z1h3eEQ1NzNVOFlmK0hlUTMrcXllQUNPV1BZWjlxL2FYd1hONE0rSHVxQzIxTHhyNG8xQy93Qk9aWWpCNGNhS0d4dE5wNVZoSXlvcW8zRzFnekgrTUxtdHN2Zk9tMGNlYlV2WmF4M01qeDMvQU1FSmYyc3Jud1hONHUrR2NtaytMSklGVjdqVExXU1MxdlYvdWxVbVZVWUhzZCtENjErTTN4YytDdnhNK0JYajI1K0hYeFQwUzYwRFhiTFo5b3M3eE5raUs2aDBidUNyQThNQ1FlY0hnMS9xVy84QUJPM1I3YngzOE5kTTFYWEkwbG5odFVTU1pVOHA1OGhXekxGdVpZMmRQbTNSTXlNZDJEeHg4a2Y4RjF2K0NSSGgzOXNUNEZ0OFgvaGZwVU1IeEI4S1dNZ3RMaUloR3U3WlNaUHNzdzREODh4a25jckhBeUd4WGo0N0hZZDRuNnJKV2srcHRsZUx4WHN2YXVQdXJjL3pYZEx1bzFZckoxYml1bUdqMjl5dSt6QlppTXQrRlpuaXZ3YnIvaFRYN3ZRdFl0cHJHOHNwbmd1TGU0UXh5eFNSbmE2T2pZS3NDT1FlbFFhVmNheGFTNzdiY2NlbVAxelhSRlNocEk5S2JqSjNneU41anByRmJwV1Vja0RIT0J6L0FDckU4TzZqWURUVkZ3SEdYYzV4eGdzU0s3SzhMWE1NZ2xUTXFvenVvNHlNRWtmV3VZMERSemM2VkRNMXRJeDhvUDhBS2ZsSmJrY0gycTVLVGxlSnJDVVBadE5XTHpmMlBLTm9sVVo5YXF6V0ZvV3pFNnNNZGpVZHhwTm1BUVk1VTlUdDZWbnphY0Y1Z2xaUU94V3VmRUtTMWtPbHkyOTBkSnBqSWQyUWZ4cG45bktlVzYwd1BlUWZOSk5HNDZZd1JVWjFtR0Z2TG0rWWpydC9wWExHckZzNkpVMmovOUQrTkxUakg1V0ZCem11aWljSTNOY3pha1JOZ2NMWFJLVllncFg5QjBJU1V2ZVorUFl4NldSUGNScWlIYjJCL2xYUnVDYkNKbC91TC9LdWFuY0ZUdUk2Z2ZoM3JyUGsvc3lCb3puNUIwK2xkZExXYlBPcXV5dWppaTdwZWt5ZHdRS3Y2SHVqdTNoYitIbXMrOFltOUNqclZ5eWUzMHVXUysxYWRiZFNNN1pEaHlBZjRWQTZIc1RpdVJPTWFscE95TzMyS2RLNjNQWFlMU2E1dFFzU2I5cTdpY2dZSEE3L0FGcnhYWGRmMFdMV0YwV3daYmk0WWdFb3dLSVNjL01RZW85UFdzWFUvalA0MWd2SjQvQkZ4OWdnWWJWWGd1UjNMRThEa2NWbWZCWHc4MnVlSXJqVU5SK2Viek1CaUFUNWttY24rWjcxdzQzT29WR3FWTGZZOW5MY2k1RTZsV1doK24zd2crRXZpbjRXNk5lYTVwMW0wbXZhL2FQRGEzQlZ2M0tTZ2x4RG5oWlg0WHpGVXNGSndleC9RdjhBWlcrQkErRHVqMmFTeVJwSlBNMzJwNVNyM1VNajRkRUN1clpYR2QyUG15ZWVtSzhyOFFUM1BoQ0dDMnRaSkFsbmIyL21UeGgvUGliQTJJRHlGd3VNaGVSMUo1cjZuL1owOE4vRkR4UHFPbmVKTGpUWmJtTzdZM01FOGpaK1Jjb3hJWWtrOWVmeHI2emxvMGVXbFRWNWZsL21aNVprOVRFeWRhcTdSdjhBZi9rZjBqZnNaL0ZQeFI4T05Mc3ZCZHlKTHkyVnRsbk1xaU1wYk15c0ZjS0FHTUxFNFBIeU1jODErbzN4bDhWTDRoL1pMOFk2dHFFSXVJNE5GbkNvNDRaMUdBY0hnc0d3VnlDTTQraC9QYjluWmJNZUU3R082RVFrMktzYnNRVlhqTEJuL256eldOL3dVQi9hcTE3NGErQXZEbndROFB4cEpMNHhFcVhFNllDdzJ0dUF4SzdDVHZkeW93ZXFpdkJ6bkwzaWNSVGpHRnBwcHQraHBqc2poZzZkVEUwNm51Nis2ZnhKZjhGVlBBZWo2TjhlTFB4aHBwam1tMS9UNHByeDBCVU5jUkR5aSswODduakNGc2NaOXEvS202dEkxT2RoL01pdjJNLzRLVVdGNXFIeFh0OWF1VVUyVi9hazI0QTJ2Rk5ic3R0Y3hOR2VVdzhRY2RBeXR1SFVnZmxicU9sQU9RZUFPbGZTNTdsNmRhVTBmRVpMam5Ha3FiNkhsT3N4eHg2UmNUd05zZEkyeDM3WXJhME83c3JUVElMVnA1STlpS29EREJ3QjZkcXBlTWRJanR0R251b1pHYmZ0WFl2QURGZ08vSno3ZmhVeHNWYUl5bEM3NXdXNTUvUG44NitkalRuRjNSOVFwUXF3OTdRNlNTNmdaU04yZnBXSmRzcjVTUHAxckdEem8yQWpBL1NwM21jZFZOS3JWNXpMMmNZNlJZU0pGSXUxa0RmV3NTNnRiUVBrd3BrVnZENWVXRlpjL3dBODdjWndvd1BmUCtGZWU0MjZIU3BOYkgvLzBmNDBMZERKSGtkNjFZQTRQWEdCV1BZT1F3R2VLNkdJb0hKYnBYOUFINDVPTjFZam1CWmRvOUNmeUZkYlpzdjlrMisvZ0JBQ2ZweFdCUERzUVNJY2dnamo2Vm96WGNWcG9rQlFGN2hvMlZVUDNjOC9NY2RoM05iMFpxS2N1eHkxY08ybEZHTmFUVzkxcmR4Q3lrckZGODdZeUFXNkFBNUJQSFNwTmIwSnpKSGYrSXBYa3R0d1ZTN0ZncFBDRTV6aENlT3Z5OGV0ZFhwR21RNlpvaGp1U1d1TGVFNmhNT09Ya0JqaEdlcEhWc2ZTdHp4UFlRMjN3Mmd0dFFPNjR1WVdka1AzdG0wTTMwQUpIMHo2MTg5aSthYWxVZlEraXc5RlJpcWFSOHUrSTlKK3czN1hOcnRNY3Z5QUE5RDByOVF2MkFmZ1hvVjNMSjQxOFJoWk5wUW1CR0EzTWVZNHhuSUxuRzl1eUo5N2xnSy9MdlF4cW5qZjdOcGtpaWE0ZGxoaExrNTNCZ29QKzl5Qlg5Sy83Qi93UTBYd3Arei9BRzJzYW8wVjFmNmhleTNDc0ZiQ3h4QVFoVG5JSkxoaXB5Zmw5NjZlRXNGQ3RpT2VTMks0anhMdytDNUw2dlFoOGVhcnFrdmloNzNWQjludDdsWGxrUkFYQWRNZ0RLREF3TWM4ZWxmczcreTlxM2gzd2oremkveFcxUFE1NExMVE5QM3EwRXhTV1NkemdDM2l5SFlNN0Rld1lCVkJPUml2alh3cjhPTFhYdkY2YU40blEzTVZ4RzF5TFdJaE45ckNRR0FHRGtNVGxnTUVqb2ErdHZoLzhSOUU4YStMYmY0S2FuOFBKcmZUYkNWb0xLYTB5amlSZVdLcUZ3cWdFcmpub2NtdnVNWGg0S3Q3V1V0UytFcytwUmdxRlZYWFZuMmgrejVjZUxmSC93QUFiNzRqWGR6ZjJvZTh1YnhKcFVFY3JRS2lmZEh6QUFZd0FjbGp4NzErWkhpYjRrZU5maUQ0ODhVZUpkYmJOeHBVRUthYmJzKzFFdHpNRHRqK1VCWkdLamV3R0N4T0RnOGZ0bDhIN0RVNS9oWHFud3VqMEY5TnRyT1ZvclNmZnVrT3c3OTBvd29BZm93d1QwUFVWK1hmeEg4TVIyZjdRTnZwV3VoTEhUNzFtdDd5VjBBZUZWQWFOMkhCY0dUNVZPUWZtWG10Y21iZFM4K2g1L0huRUZMRlZuUndhdEJINHZmOEZPYk8xOFRhOTRPK0lkcEpDK28zbWs1MWVHSGg0SlM3bUI1QjEvZlJBWlBxdlBVVitRK3NXeWhDN0lKUHIycjlqLzhBZ3F6NGVnMDd3bjREK0lWb2hzWlpudWROMUswUU1GU2FINXJaMnlTUTMyZjVTdjhBQ1FmVTErTzMyeExpMFdUSWRYenoxeml2Unh5VGs0M3NmQjVkSGxqb2VUZUtvcDB0TGFDQ2RsUzR1SWdZOEE0d2QyQWUxYnYyUzRuUU9vWTd1ZWUxVi9GbW5SU2FocFR4U1kzM1M1UWRncWtrK25wWG91bXJadzJ3akRDUThkY0hIQTQ2Q3ZuS09ENTV5UGRyWXJrcHhaNWxjYVk1VWxGd2F6MjA2VlJzWmVhOWZuc29KSlBPQ2hNY2JRT3RaRjdwbTZUTWZISGFveEdYS09wRlBIT1N1ZWFOWk5HTnpjL3BWVk5QZWE0TzBZelhlVGFZRlg1eWV0SkZaMjhhbmRqa2RUWE45VWlkZjE5dlpILy8wdjR6N2FXTnVCeFcvR3k3T09hNGVHVWh4bmdWMU1OeUZHMGVsZnZjSm41SE9ucDJORzh1VlRUbW1ZZ0xFTnpFK2xlbytDZkJOL2NhREY0bjFFZk5jQUczVHVJaWNnRUh2MzlNNHowcjVrOFM2akxkM05wNGFzenZrbGZFckE0Kzl6ajZldGZwQjRuZ2g4Ti9DalIvR1JVR0cwc3BZWlFNWUpRWkhJOWVsR0ZuR3BVbXZzeFd2ci93eDFLZzZNVnpieTJQbVR4VGMydDc0SDF6eEphTHRqMURXSWJPTWorR0swUVJnYnUzelpKeFZqNG4zOEJ1OVdrRW1FMG5TNExUTGRDMDZDWmlQKytnQ2Zhc0hXYmxMRDlrUFJKZHUyVzV2cFpXNUJMTTBqSGNQd3htdkh2alY0cVpOZDFEU1lUL0FNZmtGaXdIWWo3TWc1N2RhOHJNNnFvMCtYK1pSL1gvQUlCOURnNktsVjkxYk5yN3JXL1U5cS9aSitFWGlMeDFORnExaEhpS3dsYTh1cEQxaHQ0Q0haajZCMkFVRWRjKzFmMURmc2NRNnhyL0FNRDlKdW1oampTeEtXeUtJdHFTQ0o4c3lEcTJRN2M0NzgxK0pQN0RjMmxlR2ZoeDRvc2ZFVWtGdEg0bTBkTE5wWkgydkczbkJnSTJCNGRncENqbkpKRmYxSWZCKzAwVHd4NGZzRzBpM1dHMHM5UFI3ZDBBVVI3WWl6RVk0TDV4dTZrOVJtdnRPRTh2Y0tQT3V1cCtmOFg0dVU2empMVkZqd1Y4Tm9vdmoxWmFwWXhlWUlyWXhrRW5BalJRenJnOGpCK1VpdjBkK0ZmZ1h3em92aUVlTWJhQ0tTOWpNVVlaVTVFaWd0SzJDTys1UWZiRmZIL3dBZ2UyMWE4MXkvY1NTaU9aSVdaajh4bC9lelNzeC91NUl5ZjdvOXErenZnMXJKbENYRWNubVJPaGtWTnBKTFNESlA4QTQ3bjhSWHFaaGU3U1BCdzAxRkp4ZXA5WVRRV1FOeHF1bFJ0QUpUdVpGT0FXT1dKL1BQNTE4WWZ0Ui9CM1RQaUxZVzNpeTNnam0xU3hMUnR1SHpOYnlIZHRPT0dNYktDcFBTdnJIV05RaXM5RUZzR0pMRGNldWVja2dlM1hyK0ZlUmVMN3JWTGZTcDd1d0JrL2NibzlweUdPRHV3dmZqSng3ZHE0OHJjb1NTSXg3WExkbjgxSC9CVkx3cGIrTHYyZmRXMTIyUDJodEExQzF2NVNvK1ZvUzdXbTQ0d2Qvd0M4M01UMndEa1YvTWxCSi9ZOG01dDMyV1ZzYnV1MG5wK0ZmMTBmdFE2WlllSlBDWGl2NFI2bEhKYlgydDZaZnJFcFg1WlVpdGtrREhqRFlkMEtIa3FUMTRyK1J2N1RORE1OTTFFQXd5Si9kNkVEMHIwYzlvcU5SVFR2Y01qbmRTZ2lEWEk0aDRnMHFLVmhMSDVrcjlzSENlcDdkNjlLUzhzMWlqM3NDTnVGS25JSTZjVjR2ZFE3TmVzTEtkZlBoaWpsa1RPT0JrS09EMXhXcFBCNUxHNjA4U01HK1dSQ1NjajJKNkg2VjVGUEVTcDNsVFZ6NkRFNFNNa28zUFQzdTdaVC9yVi9Pc3ErMWFCRzNCZ2ZvZUs4OGppU1ViMFhhQjNMZzQ5dXRPTU1aNnZuNmRLd3E1aTUvRWpLbmdFbGE1MU54cWtHRGs5S3dibldrS0haNkhGWk10dkU3YlZWa1B1YzlLekd0b2k0K1k3ZURYTFd4RXJlNmR0SERLTHVmLy9UL2kwbWlWRkJHZW9yVXRwd2liMi9oQlA1VnpVTTkzSW9VUlIvbWY4QUNxMnBOZXhhZmNTdnNWUkdRUUNlK0I2VisxdXZ5cHV4K2FRb3FVbEY5Uzc4STdlMTFmeHRMcVdyc0JCRWpQdWJvclBrRDllbGZwUm9JMHI0aGZDWFdQaEpIT3EzTFdqdmFtUTRVUzRKVVp4eGtpdnpLOEYyZmlhR1dXYlFXdG5XZVB5NVk3Z2Jra1FrZktWd2UvVHA5YStuL2hGck45NHM4VzIzdzhuOFB4YUxxelJzYmJWYk5ualdBUkQvQUZra1pKRHhjYldBNVBRRVlyYkk4WXFjK1ZyU1YwZGVlWUpWTFNUczFhM3lQRlBpSGV0WS9DWHdUb2NwZERDSjBsamJqRGlZOVIySXpnZlN2TnJEVHJ2NGxmRU9IVFFoQ3hLaVRQMUFqajV6K1FyMlg5b0xVRjhUNlFtdFgxckpaNnBwZDNKRGNReFJuN05JNWJtWkd3TWhndTdJNCtoelh6MzhPOVZ2OVA4QUZhM0ZpclNUU1pEN1JuNVcvd0QxMTVXYXpVc1lxZlRUOEQyc0RGL1ZaVmRtZnI5b0dqN1BCRUdrNkJheHJQRk9Rck9Ca3hxQmpMc1FJeU1aYm5JengxcituWDRQYWpDUGd0YmFkTUI1Y05qYjJ6T3d3KzJPRUVER1QwSkl6MUk2azEvTDE0UDhWaUx3bFlhRmZ0T0wxcmlLWWZaemhXSzR5clBuMFBUQnIrZ2Y0S2ZFaTAvNFY4MnJSVFkweUhWN3VKMmtQbWJVdGhqZ0RuRzRZK2hyOWN5TENSdjhqOG56MjdpbSs1OXhmQ1BVbjBmVHJlM3YzSUdvL3dDakdJNFpWWm95NjRPT2NqYm4wTEhPZHRmVm43UCtvUzZmQkFzellObkVzTW4rNldrVXQ5UUFQeXI4OGZndjhUYkhYSnJtSjIrU081SlVxQmhGVVlHM0JKNFVEY09DUnhYMTU4TXRhbXRTSVltQmVhUUFEMURLeCtVREFBNDZZcjBLOUdMYlZqd2JjcnVmZWQvcTF1Yi9BSExKdlNSUVFqY3VXalAzQmpqTEQxOUs0VDRrNnJKNGI4SXZxa01mblF0S0JGRmpMS3pjRlNlNENra2cxbkNSZFR2Rmt0WkZSaXF0dUI1L2RnNS9yaXVBK1BQeEIwTFFmaHJkVytybGlMWmxrZVZHMjhyODZqZDE1SXgyenlLOHJDWUp5clc2Sms0N0VXamMvRlg0dHcrTHRVL2IxazEzWExacmJ3em9maDJLQzFrTXU2Sm11cGk4NHc3bkRvUVVZWUdBZzlSWDg1LzdSdnc3UHcrK01QaVR3WEpCTkI5a3ZwamFDYU14dEpiTzVhRjFCNEtGU01FZi9XSDlSOGZ3MjF2NGxlSmRRMTZFalM3Q2ZaOWdYZXZuWENxQTRrazVsSFhoVDk0OThIaXZ6YS80S20rRFpyTDRZNlQ0OTErd01Xc2FQcWEyUXU0WkJOdnNiZ1NOaG5IekJkNFVxckFGU1Q2MTYrWllCZXcwV3o5VGp5N01uOWFWbDBzZno3UXgrYjRyanQ3cksrVGFzcFhrTUNYeUNlQ01ZOWNWNk5QWjJMeHBHVlBUMXhYRzJVbHBxZmlxZTdiWklua3hsMjM0Sk85dS9RSDYxNjFEYTZjRzh5TGJHcmM4eUtUK3ByNWpDNGYzV2ZYNDdFcExRODBuME8xVnkwUzdGL3VqcCtOWmN0dkRhL3V4eDNyMVdTSzFtVTRqWEE1eXJJZjFIQS9Pc1diVElKc2xGUDZWaFd3aWhyb1lZZkd5U09CdVhDbko3Wi93ck4yTjVZYVB0d0FlcDkvd3JzN3pTN0tPTXRjdEpLbzdLUU1lL0pyaHIzVXRDdDVERkZjdkV5L2RSaGxxODJ2c2UvVG56SzUvLzlUK0pRM0VrTW0wSDVhemRkdXYrSlBPRy9pQUIrbExlTzNsNEI2SE5jaDRtMUkrVEZiTDBmNzN2aXYyREZWSXhwdHlQaXN1d2puSlhSN2o4SUwvQUV5eXM3dTVuVUZ2SStVTTJNa01wd000NmozcjY4K0VrR3A2VGR0NDlrZlplVFJiRVFBTnRqMjVDWVBHRFg1Y1crdFhGc29peGxGN1p4WDBKSiswejR0bDhPdzZCcDFta0loUUtYakJ5UUIvRWFuS3N4cFUyblBwdFlyT2NqcTFHNVU5bWZvcnF1aVhmanJ3dGR4YXpjUW8wa0VrVVVMdWk3ZzZsUXdVdHRCK25Tdm5uOWtqOW1uVGZpMTRhOFEzbGxZdU5aOE1TWkV6dXhTNTViOTNHVU9BeUtNNHdRMmVLK1pQaDc0cDFmNGgrUGROOEthdmVUMnRycU53c1V6eGttU09EckpzSDk0cmtjOThkNi9lUDRHZkFuV2ZEdWt0WmZCdlY5TTAyd1dZT3NFdm5DNGtqVW5mNWtSRzd6R0FPZlJ1T0srbHlyQzBzeHJLcTQyNVR3TTF4TTh0b09qS1h4YmJuNTFmRWl6OGRlRHJPemUxU0JMVy9sV0I3bVloR2d5eFVNeWpzbkJKeGtWK2p2d0grTlhnRHhSNGF1dmdXMnZpMjFYVHIxTlN0THRNcEZmU1N4Z1NSTVNmbExOOHlidUNTUlhiZUl2MmVmQ01rMC9pcnhzMGVzWEVBTGJMaENpaFc0QVdNNEFJOU9wNjE2TDhFZjJHL2dkOFFkUmc4UStNZEEzenp1RXRyVFNuZTBta0orNkdrUTV5ZTJPbk5mVTBzUFV3dFp5aHF2UHQ1SHkxYk1xR0pvY2owYS9GbnFmN0YrcXRvL3hpMVB3ZGZ0SjVzVEY1UE00Yjk0MHUwZkxnWnpqSzlOcEdLKys3YjRyRDRlNnhMZGVLZzhOdnBWdEc4MGlMblpsdjliZ2M3R0w0R2VtSzdlTC9BSUpqWC9neXhoK0tQN09rcVBybWxyQlAvWmh2WnJ3enh4UnFra1Viekk4Wm1DTGdva3VTVjZIT2EvTTc5dlA5b0h3LzRROE9hejRLMDFMaUh4TGZRZllib1NSN1BzMzNmUGhsRDRJa1ZQbDI0R053UFZhOUpaelFjSlRUVHNjR2E1VFdwT1BORnBNOXEwci9BSUxoZkNYd0xjeVJ6L0QvQUZEV3JpeS8wZUtaZFRTM2lkSXl5bzVRVzdzTjRPZnZIdG12TVBpYi93QUZ1ZmgxOFNkRmswSFd2ZzFGZTJjamJ0dHpyZHgxd1J6NVVjWklJSkJIb2Evbm1hWHpITHRrbGozcGNFa0FWOEZQUDZxYmF1cmluaFUvY1IrM09uZjhGbXBQQ3NYaytCZmhGNGR0VWlBQVc1dTlSdUZVS01EaDdoUng3Q3ZIL2lmL0FNRmFmR0h4WjBxWFFmRi93dDhCM2RoSzZTUEJjNmZOY0s3UloyRmc5d2QyM0p4dTlhL0xPMHNMaTVrTU1RM0ZzREF5ZVNPQWVPTTlCM1BhckhpbndoNG04R2F0UG9IaTNUcm5TciszSUV0dGR4TkRNaFpRd0RJNERLU3JBNElCd1FlaEZiVnMxcVRYTEw4VG1oaHVWcVVkR2ZYZy9idnVOT2thYncvOExmaHZZOFlKWHdycDBoSHBqemtrSi9FazFXbi9BT0NrbjdRdGdDdmgreThLYVNwNkN5OE1hTENSOUNMUW45YStFN2hUNlZubFdZbk9BQUNlVC9kR1RTbmpKYWNxUytRcXJsTFJ5YitaOW4rTGYrQ2puN1l2aW5STHJ3dGVlS1Zpc3I2SjRKNGJXenM3ZFhqZFNyS1ZpZ1FjZzRyOC9wOU90REtXbHVHVmpqZ2s4WTRBSFBUaXZxandkK3czKzNSOFVXZzFUNGUvQ1B4WnFsbmNSck5CY3hhWGNDR1dLUVpTUkpIUlZLTU9Rd0pCSFExK2lYd2Yvd0NDQXY4QXdVaytLeVEzUGlUd3BZZUQ3U1FaYWZYYjJKSlZYL3IydC9QbXo3TXExMHdmTXYzbHJucDA2MEtNVkZ5UHhGaWdpaWZmSk0wbnN4T0tra2JSeWRwdFlta3lBRHNYT2UzYXYxOStPdjhBd1F2L0FHNi9nMXJMNlhwbW5hWjRwdDl3RWR6cDEvR2daVDNNZDM1REtmYm12Zzc0aWZzTy90aGZDYlN0VjhSZVAvaHpydW02Wm9rZm5YZDg5cXoyc2NXNEtKRE5IdlR5eVNQbUJLNDVKQTVxY1JUbWtuWTY2T01wUzBqTS85WCtHMjVuVmdVNzlxODgxZVY1Ym9vNXlFNkQwcmV1Ymg5Ky9PTnZOY2RkTTdYRE9Xems1cjlTemVxbkRrUjRtWFVIRlhadVdka0xpMSsxbmtFNHg2R3ZidmhKNHIwdndxYnV5dUxaSnJtNmpLd3UyQ0VMZktEajF6MEZlQjZiZHl3bG9BTnlzYzQ5Sytpdmd4NE5mWDcyK3ZGVVNUV3NIbVFwakxNNXlBQU8vd0RTdk13VWZlVW83bzN6Q0VYUmJuc1pId3p1TkIwVDRzVzB1dlhhQ0tXWmthNEFHd0VuQk9TQ09lY1k2SDA2MSs3bmh6NFUrTTAwSzE4UStDL0VVRjVaN2ZOdG1oQUVpYmlTc2I0SmJnSDVpUmpBSGZtdndMMWI0YzYvb21wUzJ1cHRpZDJPOVZ5VkdPZXZyejI2Vjc3OEh2Qy9qQzN2Wkk5U3VIazBxNXR6SExGSzhqRHlsS3NER3l1cFJzcU9weGpnam12b01semY2czNSbkhkbmdaNWxzY1ZGVll6dG9mc2Q0NDhTZkgveGo4TnJ6VnZCR2hSNnZmYVU2d2hSTWdDQWhoTkpFak92bk9vd1FoT08rZTFYL3dCbHo5cHZ4RGJlR2sxTStNRjhPZUk3RzkreWFSTmNNam90MUNGZVJabGJMSU5yYk9Cbm5QSUJyaC8yUi9pcDhaZkNueFcwV3grRGxqYTZURmZzZFBzRjE5Vm0wM1VtaFNTUXEwQWpMUmx3TWViRXlsVDFZak5mdmY4QUFMOXBYL2duSCswLzRsdWZnSisxaDhOL0R2Z0w0aTJjNGluMHJXck8zUzJ1Wmd3QWUwdldSY3JJZVUzc0NRUnRaK3RmYjA2YXJMMnNxbG50WnI5VDgzL3RKNENwR0xvYzZUdmRQb3U2UHAzOWlYOXFLdzhUdzJtbGVHcktEd3A0K204eVJ0TGtaSTlKOFFaK1p4QWVZbzUyQTh6ZEh0UnY0dHZVZnp2ZjhGblBqLzRIK1BYN2J2aVBYZkJPaVNhRUxCSU5QMU9LVEFhZlZMZU1SM3NyZ0VqY0hWWUN3KzhJUTNPYzErNVgvQlJ2NEVmOE1XZnN2Nm40My9aOTB6VGRBOE5pOGlrTEplWEl2TEc5bGtVV3JXUWxtZU1zR0M4cGhpb1lsTnVTZjQyTmYxdTkxclZwOVgxV1UzRnpjeVBMTks1TE83eU1XWm1Zbmtra2srNXI1ak9NUENqTlNnNzM3SDArWjhVMHN4cEwyTWJkN2xjT0NSMnExRStIR0RXSjlvU2dYQUJ5akEvVTRyenFsZUxTYlBBOWhMZTF6OStmK0NOWDdhSDdBLzdGMC9qRHg5KzFsNE51dkZIaWVjVzBlZ3lSV1VGNUhCRXU5cDhDZGdJNVdmWmh3Q2R2QXh6bjh3LzIxZjJocm45cXY5cG54biswSnFFTFc3K0tOUm11MGhiWm1LRXNSREdTaW9yRklnaWx0b0pJeWNrNVB5dEJxQmpqRE9lUFk1cUc4MUt5QURTU2hSemtraitXZjU0clduU3B1YnJYMWZkblZVbGlLdEZVZVhSRk9abEs0SEZmb1Ivd1NzL1lrdnYyNy8yelBEWHdkdjRKSmZERmszOXMrSTVJd1J0MHl6S3M4WllIZzNNalJ3RGpPSkNSOTAxK2ZtbTIwK3VhaGE2Vm8wVXQ3YzMwb2hndDdkRExMS3pmZFdPTk1zN1B6dFZBVDdWL1psL3dTby80SjFYM3dJL1pXMVQ0b2ZFTFhJZEU4YytNN1ZycTgwdVM5ZlQ1clMwUldXMnQ3c2tJSTVGQmVWeTVQbHUvSlhZVFhSVnhUaEJTNVpOTjI5MkxrMTV0SzJubWVCSExYT282VG1vdis4N1g4bDVuOUpQaVA0VVcxekZCcVhoa2p3L2Y2WWl3MmR6Q1VFY0Z1aXF2a1RSc2Rzc1B5cjhqRUVkVklOZUt2KzB2OEovQU90UDRiK0xtdWFQbzkrWW5sYTcvQUxUdFBzVWl4NFZuU1Jwa2FQQnhsSkZEQWR6WDh1WHhXL1pQOEFmdEZqVE5XL1pSK1BlcWVKdE9DUmpWOUNmVWY3YWJUaXdkM2NtZTZnVkkxMk41ak51UUhKM0FIRmZucisweDhKL2dsOEg5VnRMYldkWDByV251SXZOaDFTME1jYXlCUU9VamFaektoeVBuZ1YwUE8zSTVQMWVGNFpxMUtibkNzbkh6dXZ6MVBIakxEMDZ5cGNzdWR1MWxxeit4SHhEL0FNRk5QK0NXSDl1LzhJYjRqK0xYaHA3dWVRV3ZrcUxpNldSM1lLSTFlS0Y0MkxNUUJ0ZHNrNHI0ODhmL0FMZjMvQkgvQUVueENQQ2RuOGZmQzl0ZFg3U3hDeWNYaldjZTFoRzhOektJOWxzYzVVcEtWQkFPUVJYOFhPb2VQZmhicXZpS2J3SkZxTndscHExbkorODNrUnlOOHl2QUcycHRrSTVUS2ducDFySytKWDdNL3dBQXZHK2lwcVduNjNwdGxjM2NheStZRmEwZG5JQTVPM3lYR2NndDZnanJYeXVXenpHcmlaMGFOUk54N3ZmelIraTVqd3JsRU1OVHhWYU1yUzY5bjJaLy85YitDdTV1VElwQU5Zei9BSHFuYVFnZEtyRTVOZmVZdW9tN0hQQldqWVZKSGlPNlByWHZud284WFhYaGxqcWFzUktFWlJnbkpWMngyOVJrVjREWGRlSFlydG9vaGJydkliSlhrWlhQUFQwcml2Sk84UlNpbXVWbjZhYWZhNkY0bzhPemVLNzZTT0czZ2haeklEZ2dLTWtEL0N1THRmRU9uNkY4S0x6eFZjVFBOZGFoUDVWaXJyd0lFN2tZNExjNTcvZHpYeVRlK0tCcVZ0YTZCWnpQSEJjU1lsZ1U0VlJHY0FONzg1UHJYWmZFRHhCSmRReDZiYk1Qc3RvaXhJcTlOeEh6SDZzZXY1VjZqekJwcXBINGp5UDdJZzA0U2VoOU0vQmo5b3J4SlpmR3Z3WDRqMUdkNUlkRTFOSmh0WitGSytYZ1lJd3FvV0JHT3BQclg3cmZGYnhUK3pSKzFsb0owUHg1YU0xNEl3dGxxVVNnWFZtNXlENVVxbmRnTUI4ci9MMnIrV1B3dnJGL3BUSFU3UnRoVnd1Znd6WDA5NEcrS21yYWZNQmEzVEtycVVZS2R1ZDNVNTlhK3M0ZjRuOWk1WWZFcm1qTDhENWJpRGhUMnpqV3c3NVpSMDlUN1ErS1h4YS9iRGorSEZ0K3lmZitPVzhhZUJ0QXZ2dGVuVzk3TzIyMW1DTkdNRStZZHFvN1lRSGFwYjVRTVYrYlh4TjhSZkZyNGZzcjZucGtFTnM3YlZ1RkxTb3g3QTU1VSsxZm9aNE14ZHdLN3hoako4eGJLakpPT2VLNUw0ODZObzJvZkQ1cmZXZ1ZFY2lSWEkyZ0FMS1FnZGNjNVY5cEI3VjA1amtrSjBIV2d6Z3dHT3BScnhvMUthbDVuNVkzZnhuOGN6ZjZ1ZUpNOWtRZjF6L09zci9oTy9IMnBFajdmS1BaTURIYjJybU5jMEc4MFBYcnJ3OWVEYk5hU0dJOFl5UjBQUFk5UlhyM3c2MGpTbmRpNmlhN3R6eEczZjFJeHprVitkVkZPUHV0bjZYRERVSVJjNHdSMXZ3eThIZUl2RkdxQk5mdjdxVlpHWDkySkdHUWV4S25BcjlKL0Evd3Q4RHl3cnAxNWFRZVdxQU16cXJjOGo1bWJrbmcxOHQvQlV3NjU0cXY5VVVNSXJDTGxWT0NXQXp6MklHTVpyMm40T2VLMzFmeFdZWGo4MEZIbFVIRE1xbHlPZlExOWR3NDZLbkQyNnZkdEw1SHlPZlFxdU1uVGR1Vkp2NW5vL2pEd3I0eitIdXBlSHZIM3d1MGpUZGNQaG04aXVyZUM2SXRuaE1FZ2xTV0M5aWxnbGk4dVFBa2VadDlCMXo5Yi90SGY4RnFQMjR2MmpmQTJxL0N6eHY4UGZBTnRwV3RSZVJleHBkT3J5b3JCaXBtVFVGZkRsUm5CRzRjRTROZVYrSU5QYlh2QWZpVFNRTXBMNGUxU1JBZXU1YldSbC9XdjV4WmJ1ZkM1WmdjYy9NYStpNG94cndNNHZENktlNTRlUlpGaGN5aHo0eUNsS205Tno5ZHZDUDdWWDdUM3d3ZTdnK0YraWVCL0R5YXBBdGxkTEdMVzVTV0ZYVjFpa0YzZFRoMDNLcEljRUhBem5GWXY3WEg3V0g3Ylg3YUhoelJ2REg3UjNqUFRkZHR0Q2xZMmRyYng2VGFKYUZVMkw1Y2x1RWJZVkpBUUhZQ09tYS9KMWJtUlRrODA3N1hMMk9QcFh5V0k0anFWWThsYjNsNjJQc3FIRG1GcFZmYjBvcU11L0tuK0xkejNqVC9BSWNhOWI2cmJwYzNhaUxlTXkrYkE1US8zc2VaazQ2bkhQcHpYMEo0SjhVZkV2d1ZxSDJ2VnZEMmxlS3RQZ2RnMEdvVHFiZVhuQkpVU2dwNWc1NElQcUsrQURjU2tqY3g0OXpVNDFIVVBKTm9zMGdqYjd5Qmp0WSs0emcxODdUNUlTOXJCZThqNk9WVjhuc2w4Si8vMS80RUgrL2lrcFgrL1NWOXBXK0k1eUpTZHdIdlhzbmdnQVdrakRxSStQOEF2bzE0MG4zeDlhOW04RWY4ZWN2L0FGekg4eldZSElhR3pmOEFDUUkyZVNDVDduUFd2UmRXSi9zUmpubk5lY2FIL3dBaDZQOEEzVC9PdlJ0Vy93Q1FHMzFvVzZBNkhTVVQvaEN3eEF5WjQ4bi9BSUM5YUdrZjZ0UHFLbzZUL3dBaVNQOEFydkgvQU9ndlY3U1A5V24xV3V1bi9IajZISlcrQ1hxZnBCOExYY1N1Z0p3QkZnZHVTTTFoZkZuNS9EWGlBUHppMDcvOWRCVzM4TGY5Zko5SWY1aXNUNHIvQVBJdCtJUCt2VC8yb0svVlpmN2l6OHVoL3ZQelB6Vy9hSUFUeG1KazRkN1czWm1IVW5iMUo3bXNUVHBKTGZ4UHA4bHV4UmpNY2xUZ241UjZWdWZ0RmY4QUkzcC8xNlcvL29OWUZuL3lNbW5mOWR6L0FPZ2l2eVRGZnhQbWo5Ync2L2RmTDlENy93REJjTU5wNHA4VVJXcUNKZnM2Y0lObzV0UVR3UGZtc2o5bTVtVHhIZk9od2ZzU2Nqci9BSzJ0dnduL0FNalo0by82OTAvOUpSV0gremovQU1qRGZmOEFYakgvQU9qYStneXI0cUgrS1I4cm12dzEvd0RERS9UYnc2cXQ0SjFKMkdUL0FHUmVqUGZCZ2s0citZV2JwK0EvbFg5UGZoei9BSkVmVXY4QXNFWHYvb2lTdjVoSnZ1L2dQNVY3dkh2L0FDNU9MZ1QrSFc5VVJVVVVWK2VuM0JJNEFIRlJIZ1ZNL1NvVDBOTmJNRC8vMlFBQS85c0FoQUFKQmdjVUVoSVVGQk1VRlJVVUZ4Z1lGeGNYRnhnWEZoY2NGaHdYRnhjY0hCd1hHQndvSUJ3ZEpSd2NGeUl4SVNVcEt5NHVMaGNmTXpnekxEY29MUzRzQVFvS0NnNE5EaG9RRUJvc0pCOGtMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN6L3dBQVJDQURLQVBrREFTSUFBaEVCQXhFQi84UUFIQUFBQVFVQkFRRUFBQUFBQUFBQUFBQUFBd0VDQkFVR0FBY0kvOFFBUkJBQUFRTUNBd1VGQkFnRUJBVUZBQUFBQVFBQ0VRTWhCQkl4QlVGUllYRUdFeUtCa1RLaHNjRUhGVUpTMGVIdzhSUWpZbklrZ3BMQ0ZrTlRvcklYTXpSRVZQL0VBQmdCQUFNQkFRQUFBQUFBQUFBQUFBQUFBQUFCQWdNRS84UUFJaEVBQWdJQ0F3QUNBd0VBQUFBQUFBQUFBQUVDRVNFeEF4SkJFekpSWVhFaS85b0FEQU1CQUFJUkF4RUFQd0R5VUpRRWdDY0YySEtPYW5oQ2hLQ21JZTV1blZjNUl4eGtkVTRwaUJoSW5KRXFLQ01SU0VGaFI5eW9sa1dvMURDa1ZBZ0ZReTBQYVVVRkJhaUF4SFBRSmlhREFTcE5MWmRWL3MwbnU2TkpWcnNzMGFJL21IeG5jMEVrZWkyM1p6RjA2ME1ZY3hHZ2d0cWY5MWo2cWpOdWp5akc0QjlPMVJqMmYzTkxmaW9ibUw2VXA3T2JXWVdWV3RlT1k5eEJXSzdlZlJ5MXRBMXNMVHl1cHlYTUUrSnUrQnhHcWxwRnFaNCswb3JFajZjV1RBVk9pOWgrN2xOTFZ6WG93QUlWRWdHbE1mN1RVU296eVVkemZFa3lsUkp5cE1pQ09TWE9VV0toK1JOeXJoVks3dkVoalNGMEltWklnQm1WZGxUMXlBRmFuQk1ZRThLaWFIQmNBdUM2RXhDalVkVTV5WTNVSWprSUFaS1FsYzhydHlRRG1vN0ZHcGxTV0pvVEdWUW81VXh3UUhNUTBOQWdRRWZaV0dkVnFDTlp0TzRjVDBDRUc1ckM5MW9NQTBVS0pkclZjRERpSURHMkZoekpBbjhGS1ZzcHVrV1RXNGVpWUxCVmR2Qm5NU2Q1dUEwZGI4bGM5bjhXMnBWRVVHMG5OdURUYzdPT29kWnc5RmxkaTRRZ3VmVUpJbVptNUpQRmJUWndMU0h0WTBsdmlFRXlSdnVkVm9zbWJpZXFiR2JtYUNTSFNCbGRjVzRFY3ZkTUt6ZlJ6QTgxbjlrYlFCQUlNQjBPQTN6bzRmQlhlR3hFam5LNStTTFRzcURqcG5pUDBwOWpYVVgvQU1SVFlTd3pueWl3T3VZamNGNW0rbXZwSHQzRFgwemNrZ2gzOXVtbWgxdUY0THQzQUNqV2V3ZXlETGY3VGNlNkZzbGNWSVYwK3BUWlU4TlBCRUxVMk9ha3NYa2czem5rRVV0UTZKSmM0K1YwdzBFZ3hvbWs4bElrcms2SnNpMjRKcGFGS0lUSEtXaXJJK1FjVjNtandtbGdVME93UGVKZSs1SnhwaGRrQ2VRd2MxRUNHaU5LZENZcWNVMUtWUkp3MUNLNUNicjVvejBJVEF2Q2ExT2VtQkpsSWRUMVVtbW85Sm0rd0hOTnhHSmdaVzY4ZEVXa2dxMldKb2pMTXQzNzRWSld4SmVkSUhKTWVYSGVTbllLbkxsRXAyYVJna2FQczNRQm5OYUFEeDZxM0dFYVRjdzA3M0tOMmZvZ2g1Nkcra0NUZjlibElxVmQ3aklrd2RGdEdsSEpEVGNzRnZobnNaNFJEbXg2bmp5VjFzUUV4dUIwSG1zdGdROCtJQWthTFc3QnB1QkVpUGtpM0kxakJSTkhoTUVRZVZqNWhhYlp6RGNuUlZPRU5nTjZtVnNSM1ZONzNTUXdGeDAzQ2RGRTIzZ1h4eDJWSGJlcE5hbkdyVzNHK0NicnhydGUvUFd6YW1JSjV0TUgzcmMvV3o2cE5Xb2JnbjBCbFlidEhRTEt6Z2J0SXpzUEZqdkVEMXVaNXJXTWFoUnl0LzZzejVhbUVLUzlxR1dxR2kwd0ljZzBqcVozNktTK21OZFZIdzJubm9wb3RNSUtoVHM2UnlaS05CZ0pLUk5CWFNnUXE1Y3VKU0dNS1NFdkZMS1FEUWxDUnFkQ29Rb0tWSUVxQkNEVWRVZHlCR2lPNU5DWUtvdVlJQVA1anpDWlhKTmhxVVpvaTNEVlJKbHhRQ3NTNDZBSGw4a0dyUmdLZlVvMnRycUR6L05Sdy9NSmpyMVVNb2hqUlR0azRZdWZhNDM5RkRjQm1oYW5zMEc4SkRSbUkrODZEcWZ1aU5FNHh0bFNkSXZjSGdoVG9rRVhkSERTT2ZWQWM0T3RBdFBSVHpUelFiays3OWxDZFJjM01RQkh2OXk2SkxGSXk0M25KcHRnWUthWUFJTFNaNlFyckhPN2xvbHJTWU9XQ2MzWGtQVlZIWmpEanV3Nm9YWlJ1QU04VW0wYXI2dGJ3UElwR0d0RVJEWUZvMW1aVXJDT3VNVkptb0dJY0dNSUVrdEJoVk8zZHRPRE82Yk9aNHVDZlpCTUN3NDM5eTBMYUliU0FKbUdqcVNzSHRmRE9EdzhpK1lHZVBudzVKckpqek5Sd1NjSTVsTXdRTXVVVFBQWDNySGRyNkJwMThra2hyV2hzL2R2QzFXS3BCejJrRDdvNmdpUFBTRlFkczY0cTFNeEdVc1BkZzY1Z0FEZmVESlBIVUxWbkg2Wlp5RTV2TkhLRFVhczJhSURVcVFESTNGTXc0OElzaVlsM2hLU2kydzZmcUZIcFhncFRTMUc3dE55b29MQWxjUWk1RW1WS2dzR3VoRWhOaEZEc0dBbFQydFRySW9MSW9SQW1BSndRQTRKMEpzSnpVQU00STlRZ1hRQ1VSb3pHZDI3OFVYZ0tzVEN0dVhPdEYwK3FJYU9Mako4L3dBazdFVTRZMW8rMjZQTGVuWWsvd0EwTjFBK1FVRmhxaklaK3VpcGFqNGVZMzYvaXJmR3UvbU5idUFMajEwK2FwcXgvbWVhVTlsUlFWbE11Z0FMZjlrZG41YVQzT2c1aUEzVFVHOWp1MTlGajlsMDRlT01PUFMwTDBMWWROb28wMmd6NFovekczd1duRXZUUGxlS0NWNlppQjBSY0RobXlNd2tOZ2FtSjVoU3FkSzJZWHNmVzY3WU5JbHp3ZnRINFgrUzJaaW1FcWRvUXgyVEpPOG5rZUFWa3lyU0xlOGF3eUx3RUNwc2tPY0NBUEdlSG42TFI0SFp6UlN5Z0NSeTUvTlEyL1RhTTZXQjFQRmQ3U3l1R1VtNDRnK1N6ZTJhWjBGanZIUGN0WlJHVVJHbndWZnRqQUNvMDViUEFrYytTSW1VbmJ0bVV3ci9BUERpcmJNSWFHblVuTS9UMTl5emYwaVlVTmZTcUNJYzNLUU5BOER4ZXZ5V3J3VklnZ08wTFFDM2c0U1o2L2lWbnUyMUdjT04rVjdZSnRZeUw4TDI4bG85RTNreExTdUpVZk1XbEZsUjJMb0ZqYWZoSjZmRkVvVTdEWFFJT0xkNGZNS1JUWng1Y2tsc2ZnV1Uxd2xjQXVsVVFKQ0dXb29UWlVzb0hsU1pVUWxOU0E0QmRDUWxNem9IUkZCVHdVS1U5cWdzSXVCU0FwcGRBSktZcU9jSmNHamY4RmI5d0dqS1BUOWVTcDlsR2FnSzBPT1pEZ2R4Q1VjMnluakJXTU9hdXh1dVVFcGpqL2lMOGZtbjdJY0hZaW9lVnZnZ1loLytJSFZEMWY3SzlyOUJYUG1wVkozRWdkTlZWMG01cWs3cHVwR0xxdytyL2NoN0xibWRITlp0MnlsbzFPRTJjRzBUVk53OFpXaittZm1SK3BXcjdNMGlLY3VzSnR4VlRSQXFZYkRzSWpLWkovekd4OGlQUmJDaTBBZ1JZRFFXdHU5NjZZeE9XVEhVcU9WaGtRRFlIbWVDTHNuRCtKeDRENGo5MExHdXUwNmhvRHVXbjdLdzJZM0t3azZ1L0NWVEVpZmg0blQyUitTbjBDUXFyRGs3dDhlcXRtWGdkRm14aFhDM3FoWnZOT3JPdDgxR3FHMzYwUWdaVmJRd3dZWE9Bc1pFZGYzOUZtdHQwdTl3OVpvdUJUbHZVUzcxbGFuYWxTMGJwbjNUWlVEbkF4ZTVKSDl3dnJ4V3lWb3paNU5xbXNkbE1IUkd4bEkwM3ZiOTF4SG9VUDJnc1RZSGpOQjFSMlZCeDg5eWlWajdJUEZITFFmeXNqK0RhUWJ2RWhxQlJ0TEhSZFpIWmk2a2cxQW1PZWh3dXlwV0ZJZVhwcm5wcEFTWlVXT2hTNU1sZGxUc2lrWkhTdEs1SUVpZ2dVYkV2dkhCU0FWQmRjK2FVaW9MSmFiTllXZ0hpdERqUm1wU05RRlRVWGdBRGVQSld1ejhVRExUcHB1V25IV2pPZDdLVHMrNkhWRHdFL0ZSSDFjMVhOelZoaGFQZFZLemQwR0R4RVdWTzEzaUtpV0VrYXJMc1hhQm1vNDhiKzVXT3c2UjFWVXhwZTZGcHNHekxsQXRCOVR3VXdWdXdtNlZGZ0t6MkZyWkVEN0lpNUUzUHFWNkpoRzVnMDhwbmdZMCtLODQ3bk04R3d1Sm5VbWRGNkRnSFNEdXNQaCt2VmRNYk9lWTZzL3htZFBrQkh3VnBoWCtFa0c4UndqU2ZPL3ZWVTh5K2R3QkpFYTIwVTZqVWh3YnhhZlV4ZFUwUVNNQlU4TFR6OTRKS3U2UUFBNktod05pQi9VZmVGYzBLa0NQMUZnRkxRMEVjNmI4MDFvK3lmS1V3dUVubnB3bVB5UkFNMnVxa0dRY2FKdkVrRTlZL0Q4VmhzZGlnTWEyazBFQnJTNHlkN3pNYTdoOFZzTVRWT2MvZEh3QXY4MWhxT3ozdHhsWjdpQ05HbTVrYnI3b0MwU2VDY1pNNTJvdzJYRVAvcWh3OHgrTXFraUZzdTJ0RXVGT3Exc3RBTFhPSGxIbHJkWko0blJSSlpMZzhFZXNmRXo5MFZyWlFUN2JkWkhCUzJsU2kyQ2Mza21TUnFwRXBwQ0dpYkFrbGNpRUpoS1ZGV2NRbW5jbkZOSlFNU0YwSlNQVkpsU0FpaDRYWnd1Q2RLZ3NZNTlqMFFFZXM3d2xNb3ZVc3FPaVEzR3RKQmV3a2plQzRmTldHSGZSZjdEaXgrNlNTSjRlYUVhTTJQN1dsSnNuQ043NEg3TGRKNHExZGt0b21kOW5scmhscXRCQm41L0VIbXM3VnBsamlEcXRSdExBNTZtY3Z5a1d0ZVFOSlZEdFhDWmZITWdtRWNsajQ2SWVIZEJCV2gyZlhrKzlaNmxUSk13U09RVi9nbVEyMzVwY1krUXZHejN6UEZBSkFpZndXdDJkaUlaVU15QVQ2WFdDd3J3eDdYSFFPQjZYMy9yZ3RYc0t0RkNxWGJuR1Q1bGRNV3JPZWF3WGxlckFGcm1SNUg5MVB3NzVqakE4N0czd1dSeE8wSmc2Z213TzYzNWFxODJUVnpORVdzWTMzSFByQ3BrbHRoWFgrUVZwaHFrK2gvWDY0cW1wVklnOHlQMTVLZmhhbG1qZVpIelNFUytuR2ZsODFKb3U0cU5RcXk3eklYVlRwY1dVcEF5dTJoQmVmRnJGZ1kwdjcvbXMxUmFhaGRrRURReU13bnArdFZNMmk5eHFodVdXZ2tFRW5UUzlwTThGWVlLZ1lBWXdnRFFaU3RNRVpLdHJoSGR2TXkwZ3RJeXlPbTVlZWJWdy9jMXFsTUd6VGJvUUNQY1Y2L2l0bDFIQzFGem8wOEprZENzRjJtN0hZeCtJYzZsaDZyZ1EyVGxnVEViMUUydnlWeHBtSmRHZnkvRlNtMHhHcXU2WFlQYUdhVGh5TFJkMUp2eGNwVE93K01IdE1vdDYxNlEvM0tFMGF1ek9ocVFnY2xwejJOckQycXVEYjF4RGY5b0tUL2hHUGF4ZUNiMHFQZDhLYWVDRExsaVlXS2J0bkN0b1B5aXBUcWlKelU4eEhRNW1neXEvK0lIQXFXMFZURnlGSWFQTmNhNFRIQ2RCOGtpa2NXbE5rcGhZL3dBdXE3dW5mb3BESXpsMHJwVFdsUVdqcXhza3c3a3l1N2Ntc2ZDbDdORXNGelhlU1FCdmo1N2xOd3RJTkFWRmc2NERnU2JLMnJiU1lCNFZjV3RzeWxGNkpsSnBKNERmZEQyemhKcG1JTVgxQ3FhbTBUdU9xSmhhYjhRU3hwOElFdVBMZ24yVHdIVnJKWTlrNlhmQnpIQ0EwV2NQdmNDcE5iQUVPTFRxSnZvaTdMY0tEU0dTWTVYS25WcXhxZ0ZvMUh0SGNGcEdDb2lVc21YTkYzZWh0UjBOMW5wdTZyUjdNMnl5blVkVGRKcHVBQjQ4amRDR3hHbVM4a256VGFmWnh0UjM4c3VCNDdvODBsY2REYlVpMXhtSGFBQzJDMmJPOGpQbXJqc3JYek5CNGcyNW5oK3Q2aDRQc3BWYXh3T0liQmFiWlNRQ1l1YmhTTUJSZGhudHpaWE5OcGFmRElIRGNkNjFzenJCWVZuRnVVY0lJUEVxUHRmdEQzTGZDUEdIQVFkTjgrbjRLZGphZWFEdzA5Ylg0ckNkcDhYbnJPajdNTm5pUUlKOWJlU1U1VWlVclpldCtrZkVOSGhaUkhNVTI2K2FFLzZSc1lkSE1IUmpCOGxqbHl3N0ZHcXFmU0Jqai96aU9nQStDaTFPMm1OZC93RFlxZjZpRm4xd1RVaFVXdFh0TGluYTE2aC96dS9GUm43WHJIV3E4LzVqK0toRUpDanN3b083SFBQMmo2b2JzUzQ3ejZvUlNKdVRGU0ZOVThVMXp6eFhJVlI2VnNhUTRqaWtnTGc5S1dCVVdOZ0paU1pDbUZJWVExRjBsRGxMbjZwSmhSQ0pUQ1VwS1k1UWJJRlZOMGhTSnpCS3k5TkJFZWhoSFAwUXlGUDJmaXNsb3VtdDVGSnVzRUd0U0xEQjE1Szc3TlZ5d0U1aTJUcUJJdHVqZXFyRnN2Sk90MWI5bnNyckV4dTE0OHVDdUgySm45VFhZVEh0YUJtWTNkZUJZcXhGUU85azIzQ3dBNmNGUS9VN21nZUlsc2E3b2trQk5ZNTlQdzZnNkxwN05iT1J4WGhaWXpFQTIzalVxd3dGVnJXMkk4dFZrdHUxSzdjdmdjS1JBSmNCSkovcWpRS1gyZXhJTWw4NUd4b1lra3hFcU8rYUwrUEI2WmdhaktERzFITUw4K3JnTXdaMTRIbXI2cGhLZUxwa1BoL0I0QUR3Zm5FL2t2Tk5qN1FxWVIrWnJpK2s0NnpvT0RoODF1Y0ZpUlZIZllXei90VXBpZWJScFBKUTcyZFNna3FNYjIzcDFjSzgwaTQ1UTFybVBGczBrajFCMUhOWUNxNlN0NzlLUGFKdUlkUnBCc0dtQzU4aTRlNjJYaUlBa2ppZVM4L2xKeWIyYzBra3prcVJLa3lhRkFWaHNqWTliRXZ5VWFibnUxaG8zY1Nkd1ZlRjZUOUdYYS9DNEdsVkZacnU4YzRFRnJRWmJFUnJhREo4MFhTMFVrbThtZjdTOWlxdUN3OUt0V01PcU9JTEFQWXRJa3pkeDRBUnpXVWN0cjlJM2F4bVBxdE5OcGJUWTB0Ykp1Wk15Um9GaTNGQ3VzaWtrbmdZUW1rSjVLYVFxSUZwMHk0aHJSTG5FQm9HcEpNQWVxOUVIMFRzWUd1cllsNG1NMlNtTXJTUnZjVHBOcFEvb2Y3UDk5aUhZbDRsbEN6SkZqV0kvd0JyYjlTRjdJV3pNaVFSRUhUMFJkQ3QrSG5tRCtpZkJzdTU5YW9PR1pyUWY5RFo5NjBlenV5R0NvM3A0ZW1EOTV3em4xZkpWaC9CUHBYcGd1WnZwRTNIOWg0Y2tiQ1k1cjVBRGdSWWd0Z2dwMytCZjBvOXQ5bWNQaUx2b1UzTys5bEFkNmlENzFsY1o5SDJGRWcwNmpKKzB4N2lCNU9uM3IwWEViVG9NTVZLMUZoNFBxTUI5SlRQckhEUEVERTBEUDhBV3cvN2tmSWl1a3ZEeWZFZlJ2U3lQN3V1L1BIZ3podVNlRG9FaWVPN21zdi9BTUVZMy9vai9XejhWN2Jpc1RnMnY3ditMb05xd0RrTDJEVzQ4TGlpL3dBSi9YUzl5ZHhZcm5IWjh0dUtZNTFrcFRIRlpObmFrTWxPWTZDbXJsbVVHS0xoYU9ZL0ZBWUZiYklBa2plZEZTRkxSWFlzK0l4MFNVM2xwbHRpclhFWUlDNHVkNVVWdUdQQkpxaEoyaWZnZTBOVU9oejhyYjNndUV4YVFMbTZ0c0hVcXVKYzkrWWpUUnJlT2hpL1ZVK0d3Z0JIelUwWVkxYlpzckd5U1RvQnZXa1cyWno2bXoySHRIRFZRS2VKTHFUM0FYTHgzWm0xbk4wOC9WWFAvcHpoaTF3WStxMFBnbUg1Z2Q0TUZZN3MxZ2FWUjlhaTlvY0docHpXekF4RWdqeVVuRGJYeG15bjVUL053ODJtUzJQaXc5TGNsdmVNbzVuRjNVV2FHbjJDcTBCbXA0a0VURVZHa201MDhFbVBKUDJqaVdZTWlyVExPOUVaMk5jNW9jdy8wT2FMOHh6V2k3TDlyc05qSURYWktwLzViaUFUL2FkSGZIa3N6OUsyR28wZTdERzVhdFNYT0RiTnlEZVdpMGwyL2tWTGNTNDhzMWhtQTJ2ajNWNnRTcTgrSjdpNCtlN3lFRHlVSmM0cHNyQW9jdWxObGRtVHNLSGdwNGNnWmdsNzBjVUpoMVlZbE1LR01RT1Bva2RXamNmUS9nbmFIMFk5T3AweTRoclFTNXhBYUJxU1RBSHFoMTM1QU0xcGdpNGt6eVhwUDBjZG1RMDA4YlY3dXF3dG1rMXBKZ243VHRJSXVJM0U4azBtOWJNNVZITXRHbDJDTVJnOEcyalNER2xvMUxYSE5VY1pjNXhNYjl3MHRkVW0ydTJlMDhNQjNyR01CKzJHbHduV0p6WldrY3d0WjJqMjNoYVZBdXJOY3h1Z0RKejVyd0d4cWJiN2NWa3RuZHZhZUpES0Q2Slk1emNvZG1FRjVFRFVHeFBMMVZjYWxxY1ZmNkNUalZ3ZUNsYjJ2eGRlYzJKcU40UVExdnF3QlFNVy9FRWt1eEZWMmJYK2E1cFBtWUpXOG9qTTUxQ2lING1vQWM3c3JSU3BuZ1RiTTczRDNMejd0Smp6aHF6bVZHVmFiamZLOWpjaG5XQkF0UEN5MmNJSlpKak9VcFZFaFY4TVo4VFhHZnZQcUdmUE5kUnErRHpCekFDMms4QXVBOFJMMmtscGw0SkVBblFxRmpOclptdzBocEJCQkdZQzM5Tng3MU93TzNBY3JvRWl6aHU0VDBYSExxcGZvN29kcFJyMHBjWHNaelI0U0hlVUg4MVgvd0FJL3dDNmZSYmJFN1ZaOXBqVEkxYUlrY1I0MUQrdGFIM0hlNWIvQUJSOFppdVdYcU1rU21GS2tLd1p1aEZ5NWNwQTZWWVlTcEYrU3IxSWE3M3BBWDJIcTVnRS9FMEFHeWJLdHd0VXN2N2t1S3hacXVEZnNnKzlYZG9qcmtzY0FBS2JudU56Ylc4YnJlcWdqR0hmcE4wVEdWb2FHY05md1ZaS08zZ2RmVFRka3NmbHhEbk9pWEF6Nnl0ejlZVTNXSkJCR2gwbnJvdkxzRlZEVE85V3VIMmtSRW1mMSt5MjR1U2xUTWVYanQyaXcyN3NFTmQzbUhjR3pmTHVCM0VLb3htME1SVkk3d09lNEFOQkxpZkNOMHV2eFZqaWNjWERLREErUG9tdFluS0tid0VXMHNtZHhPS2V6VmtjMUZPMEg4bHFxMUFGcHROdElXVHgySHlPdDdKdUR5L0pZempSckJ4Zmdqc1kvajhFenYzSGVVTlBZMlZCb2tqcEozbjNxVmhNSk9xTGg4UHZQdTNLWGhXK0tJbENFMldHRHc0YUxDRllVOE9DRkJmVmd4eVU3RHZKRXo2V1hUQkk1NVdSZG9pcXhoN3N5QnJUYzBQYVJ2OEFDNEVTcHV4UHBKcjRXaUtWTEQwV3RrbjJYUkoxZ0Y4RG9FVmgwQ3pHMXRyVm1WcWpBOHcxeEF1ZEpUNVA4NUNFVlBEUmNiWDdlNG5GQUNyUXc3dzB5QTZrSEFIU1lKS3JCMm14TFlMR1VhWkdtV2hSRWVlUlZuMTFXKys3MUtiOWNWditvNzFLeStSbWk0b3BWUmREdGh0R0lHSWUwY0d3MGVqWVZWdGF2V3JQbXRWZlZjQkFMaVRiVzBvSjJ0V2lPOGRIQ1NrK3RLdjMzZXBTY2s5bEtGYW9DYU1iMGFtMGh1WU9CaUpCTjc4QnZISGdrK3NxbjNqNnJtN1RxRDdSV2RJMHVpYmdkcXZwR1F3SGZCa2dxMi80emQvK1dqLzNLZ08xbnhHL2pKUS9yT3A5NU5TNjRRbm5aRVNMaXVTWUhMbHlSQUNxUTFrMlVjS2JRM29BUVZjcGc4TEoyQ2RlU28xZlVvbERSQUVpczZaS2psR09pRlIxUWdET3NVZW5WUXNTYitRK0NSaFI2THd0c0pVbmVyS2wxVk5nTkQrdHdWcmhYR0JjNnJvZ3pDYXlIelpiV2haN0hVY3dxTmk3Q1NPbjdmQlhOWTNIVWZKUVgvOEF2TzZOL3dERUk1QWhnellVaWs3S1FoWWtYUFZFYm9PaTUyZEpQbTJZYWZxeWxiR0VrbmVvZXcvYkEzZnNwK3lmYkkzWmo4MDQ3UkVzSmpjVlY4YnBPa3dyVEFFNUFlUVZGaXZhZXJ2Qyt3M29QaVZwRDdNem45VVdEQjRtOVFzajJyWkdMcmMzVDZnSDVyWjBCcCt1S3gvYkQvNVZUb3ovQU1RdE9iNms4UDJLVmN1SzVjeDBITGx5NUFITGtxUkFISllTSkVtQi85az0iLCJtZXNzYWdlc190aW1lb3V0IjoxMCwia2VlcF9sb2dnZWRfaW4iOnRydWUsImFwcF9wcm9maWxlIjp7ImRlY2ltYWxzIjozLCJtZXNzYWdlVGltZU91dCI6MTAsInZpZXdBbm9uRGV2aWNlcyI6dHJ1ZX0sIm11bHRpcGxlX2xvZ2luIjp0cnVlLCJzZWN1cmVfcGFzc3dvcmQiOnRydWV9LCJyb2xlcyI6WyJDdXN0b21lckFkbWluIl0sInBlcm1pc3Npb25zIjpbXX19.l_4tZ0R_EpfYVN5wionUOe6dLHKeKSBVRWDEhE5RAlmazRnsAOWJYFDXTvB8UObRRlDytT5u18cd3zO97_X5wg"
Ejemplo de uso
import requests
api_url = "https://www.myserver.com/auth/refresh/"
headers = {"Content-Type": "application/json", "Accept": "application/json"}
payload = {
"token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTY5Njg4ODMwMCwiaWF0IjoxNjk2ODg0NzAwLCJqdGkiOiI4YjBhMjhlMjg5ODA0NzNkODcwZWUxMTkxMDMyMmJmOSIsInJlZnJlc2hfZXhwIjoxNjk2ODg4MzAwLCJ1c2VyX2lkIjoxMiwidXNlciI6eyJlbWFpbCI6Im1hY2VyY2hhQGdtYWlsLmNvbSIsImlzX3N0YWZmIjpmYWxzZSwiaXNfc3VwZXJ1c2VyIjpmYWxzZSwidXNlcm5hbWUiOiJtYWNlcmNoYTIiLCJwcm9maWxlIjp7InRpbWV6b25lIjoiQW1lcmljYS9Cb2dvdGEiLCJ0aGVtZSI6ImNvcnBvcmF0ZSIsImxhbmciOiJlcyIsImF2YXRhciI6Ii85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC80U2NMUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUlkcEFBUUFBQUFCQUFBQVdnQUFBTFFBQUFCSUFBQUFBUUFBQUVnQUFBQUJBQWVRQUFBSEFBQUFCREF5TWpHUkFRQUhBQUFBQkFFQ0F3Q2dBQUFIQUFBQUJEQXhNRENnQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFQbWdBd0FFQUFBQUFRQUFBTXFrQmdBREFBQUFBUUFBQUFBQUFBQUFBQVlCQXdBREFBQUFBUUFHQUFBQkdnQUZBQUFBQVFBQUFRSUJHd0FGQUFBQUFRQUFBUW9CS0FBREFBQUFBUUFDQUFBQ0FRQUVBQUFBQVFBQUFSSUNBZ0FFQUFBQUFRQUFKZThBQUFBQUFBQUFTQUFBQUFFQUFBQklBQUFBQWYvWS85c0FoQUFCQVFFQkFRRUNBUUVDQXdJQ0FnTUVBd01EQXdRRkJBUUVCQVFGQmdVRkJRVUZCUVlHQmdZR0JnWUdCd2NIQndjSENBZ0lDQWdKQ1FrSkNRa0pDUWtKQVFFQkFRSUNBZ1FDQWdRSkJnVUdDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FuLzNRQUVBQXIvd0FBUkNBQ0NBS0FEQVNJQUFoRUJBeEVCLzhRQm9nQUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUURCUVVFQkFBQUFYMEJBZ01BQkJFRkVpRXhRUVlUVVdFSEluRVVNb0dSb1FnalFySEJGVkxSOENRelluS0NDUW9XRnhnWkdpVW1KeWdwS2pRMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvT0VoWWFIaUltS2twT1VsWmFYbUptYW9xT2twYWFucUttcXNyTzB0YmEzdUxtNndzUEV4Y2JIeU1uSzB0UFUxZGJYMk5uYTRlTGo1T1htNStqcDZ2SHk4L1QxOXZmNCtmb0JBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDeEVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEK05XQUNRYlQ2MXQyMGlXMG1HemlzcTJZTkdEMzRyWWpqVjhocS9mNlZKdG40eFZsZEcxSGMyYm9CSzIwZHMvUTFGUGI3TEdLT01nZ1JyeVBkYzFuQ0JQSytmbkZiVW9DMlVXQmo5MG4vQUtDSzdLY2RIRTVPWFc1ejBpa3FvOU0xMU9nRmVGYXVia01lU0IxRmF1alBod3lIdlUwSEdMME9tck5PTHNhZmlhd0RMejFVWXJ6aUpUQkx0NzU0cjJQVlltbnMvUDZzZXRlUzNFSk11QWRoem5PTS9wV2VNZytkTXZMNnE1ZVZuWDZaY00yMk04RnVtZTlmYWZ3UC9aQytKdng1anRidlNoYjZmYTNqbU9PNXZXS3hFcjE1VUVBZWhKQUo0cjRxOEM2TnJYajN4dHB2Z1h3eEQ1NzNVOFlmK0hlUTMrcXllQUNPV1BZWjlxL2FYd1hONE0rSHVxQzIxTHhyNG8xQy93Qk9aWWpCNGNhS0d4dE5wNVZoSXlvcW8zRzFnekgrTUxtdHN2Zk9tMGNlYlV2WmF4M01qeDMvQU1FSmYyc3Jud1hONHUrR2NtaytMSklGVjdqVExXU1MxdlYvdWxVbVZVWUhzZCtENjErTTN4YytDdnhNK0JYajI1K0hYeFQwUzYwRFhiTFo5b3M3eE5raUs2aDBidUNyQThNQ1FlY0hnMS9xVy84QUJPM1I3YngzOE5kTTFYWEkwbG5odFVTU1pVOHA1OGhXekxGdVpZMmRQbTNSTXlNZDJEeHg4a2Y4RjF2K0NSSGgzOXNUNEZ0OFgvaGZwVU1IeEI4S1dNZ3RMaUloR3U3WlNaUHNzdzREODh4a25jckhBeUd4WGo0N0hZZDRuNnJKV2srcHRsZUx4WHN2YXVQdXJjL3pYZEx1bzFZckoxYml1bUdqMjl5dSt6QlppTXQrRlpuaXZ3YnIvaFRYN3ZRdFl0cHJHOHNwbmd1TGU0UXh5eFNSbmE2T2pZS3NDT1FlbFFhVmNheGFTNzdiY2NlbVAxelhSRlNocEk5S2JqSjNneU41anByRmJwV1Vja0RIT0J6L0FDckU4TzZqWURUVkZ3SEdYYzV4eGdzU0s3SzhMWE1NZ2xUTXFvenVvNHlNRWtmV3VZMERSemM2VkRNMXRJeDhvUDhBS2ZsSmJrY0gycTVLVGxlSnJDVVBadE5XTHpmMlBLTm9sVVo5YXF6V0ZvV3pFNnNNZGpVZHhwTm1BUVk1VTlUdDZWbnphY0Y1Z2xaUU94V3VmRUtTMWtPbHkyOTBkSnBqSWQyUWZ4cG45bktlVzYwd1BlUWZOSk5HNDZZd1JVWjFtR0Z2TG0rWWpydC9wWExHckZzNkpVMmovOUQrTkxUakg1V0ZCem11aWljSTNOY3pha1JOZ2NMWFJLVllncFg5QjBJU1V2ZVorUFl4NldSUGNScWlIYjJCL2xYUnVDYkNKbC91TC9LdWFuY0ZUdUk2Z2ZoM3JyUGsvc3lCb3puNUIwK2xkZExXYlBPcXV5dWppaTdwZWt5ZHdRS3Y2SHVqdTNoYitIbXMrOFltOUNqclZ5eWUzMHVXUysxYWRiZFNNN1pEaHlBZjRWQTZIc1RpdVJPTWFscE95TzMyS2RLNjNQWFlMU2E1dFFzU2I5cTdpY2dZSEE3L0FGcnhYWGRmMFdMV0YwV3daYmk0WWdFb3dLSVNjL01RZW85UFdzWFUvalA0MWd2SjQvQkZ4OWdnWWJWWGd1UjNMRThEa2NWbWZCWHc4MnVlSXJqVU5SK2Viek1CaUFUNWttY24rWjcxdzQzT29WR3FWTGZZOW5MY2k1RTZsV1doK24zd2crRXZpbjRXNk5lYTVwMW0wbXZhL2FQRGEzQlZ2M0tTZ2x4RG5oWlg0WHpGVXNGSndleC9RdjhBWlcrQkErRHVqMmFTeVJwSlBNMzJwNVNyM1VNajRkRUN1clpYR2QyUG15ZWVtSzhyOFFUM1BoQ0dDMnRaSkFsbmIyL21UeGgvUGliQTJJRHlGd3VNaGVSMUo1cjZuL1owOE4vRkR4UHFPbmVKTGpUWmJtTzdZM01FOGpaK1Jjb3hJWWtrOWVmeHI2emxvMGVXbFRWNWZsL21aNVprOVRFeWRhcTdSdjhBZi9rZjBqZnNaL0ZQeFI4T05Mc3ZCZHlKTHkyVnRsbk1xaU1wYk15c0ZjS0FHTUxFNFBIeU1jODErbzN4bDhWTDRoL1pMOFk2dHFFSXVJNE5GbkNvNDRaMUdBY0hnc0d3VnlDTTQraC9QYjluWmJNZUU3R082RVFrMktzYnNRVlhqTEJuL256eldOL3dVQi9hcTE3NGErQXZEbndROFB4cEpMNHhFcVhFNllDdzJ0dUF4SzdDVHZkeW93ZXFpdkJ6bkwzaWNSVGpHRnBwcHQraHBqc2poZzZkVEUwNm51Nis2ZnhKZjhGVlBBZWo2TjhlTFB4aHBwam1tMS9UNHByeDBCVU5jUkR5aSswODduakNGc2NaOXEvS202dEkxT2RoL01pdjJNLzRLVVdGNXFIeFh0OWF1VVUyVi9hazI0QTJ2Rk5ic3R0Y3hOR2VVdzhRY2RBeXR1SFVnZmxicU9sQU9RZUFPbGZTNTdsNmRhVTBmRVpMam5Ha3FiNkhsT3N4eHg2UmNUd05zZEkyeDM3WXJhME83c3JUVElMVnA1STlpS29EREJ3QjZkcXBlTWRJanR0R251b1pHYmZ0WFl2QURGZ08vSno3ZmhVeHNWYUl5bEM3NXdXNTUvUG44NitkalRuRjNSOVFwUXF3OTdRNlNTNmdaU04yZnBXSmRzcjVTUHAxckdEem8yQWpBL1NwM21jZFZOS3JWNXpMMmNZNlJZU0pGSXUxa0RmV3NTNnRiUVBrd3BrVnZENWVXRlpjL3dBODdjWndvd1BmUCtGZWU0MjZIU3BOYkgvLzBmNDBMZERKSGtkNjFZQTRQWEdCV1BZT1F3R2VLNkdJb0hKYnBYOUFINDVPTjFZam1CWmRvOUNmeUZkYlpzdjlrMisvZ0JBQ2ZweFdCUERzUVNJY2dnamo2Vm96WGNWcG9rQlFGN2hvMlZVUDNjOC9NY2RoM05iMFpxS2N1eHkxY08ybEZHTmFUVzkxcmR4Q3lrckZGODdZeUFXNkFBNUJQSFNwTmIwSnpKSGYrSXBYa3R0d1ZTN0ZncFBDRTV6aENlT3Z5OGV0ZFhwR21RNlpvaGp1U1d1TGVFNmhNT09Ya0JqaEdlcEhWc2ZTdHp4UFlRMjN3Mmd0dFFPNjR1WVdka1AzdG0wTTMwQUpIMHo2MTg5aSthYWxVZlEraXc5RlJpcWFSOHUrSTlKK3czN1hOcnRNY3Z5QUE5RDByOVF2MkFmZ1hvVjNMSjQxOFJoWk5wUW1CR0EzTWVZNHhuSUxuRzl1eUo5N2xnSy9MdlF4cW5qZjdOcGtpaWE0ZGxoaExrNTNCZ29QKzl5Qlg5Sy83Qi93UTBYd3Arei9BRzJzYW8wVjFmNmhleTNDc0ZiQ3h4QVFoVG5JSkxoaXB5Zmw5NjZlRXNGQ3RpT2VTMks0anhMdytDNUw2dlFoOGVhcnFrdmloNzNWQjludDdsWGxrUkFYQWRNZ0RLREF3TWM4ZWxmczcreTlxM2gzd2oremkveFcxUFE1NExMVE5QM3EwRXhTV1NkemdDM2l5SFlNN0Rld1lCVkJPUml2alh3cjhPTFhYdkY2YU40blEzTVZ4RzF5TFdJaE45ckNRR0FHRGtNVGxnTUVqb2ErdHZoLzhSOUU4YStMYmY0S2FuOFBKcmZUYkNWb0xLYTB5amlSZVdLcUZ3cWdFcmpub2NtdnVNWGg0S3Q3V1V0UytFcytwUmdxRlZYWFZuMmgrejVjZUxmSC93QUFiNzRqWGR6ZjJvZTh1YnhKcFVFY3JRS2lmZEh6QUFZd0FjbGp4NzErWkhpYjRrZU5maUQ0ODhVZUpkYmJOeHBVRUthYmJzKzFFdHpNRHRqK1VCWkdLamV3R0N4T0RnOGZ0bDhIN0RVNS9oWHFud3VqMEY5TnRyT1ZvclNmZnVrT3c3OTBvd29BZm93d1QwUFVWK1hmeEg4TVIyZjdRTnZwV3VoTEhUNzFtdDd5VjBBZUZWQWFOMkhCY0dUNVZPUWZtWG10Y21iZFM4K2g1L0huRUZMRlZuUndhdEJINHZmOEZPYk8xOFRhOTRPK0lkcEpDK28zbWs1MWVHSGg0SlM3bUI1QjEvZlJBWlBxdlBVVitRK3NXeWhDN0lKUHIycjlqLzhBZ3F6NGVnMDd3bjREK0lWb2hzWlpudWROMUswUU1GU2FINXJaMnlTUTMyZjVTdjhBQ1FmVTErTzMyeExpMFdUSWRYenoxeml2Unh5VGs0M3NmQjVkSGxqb2VUZUtvcDB0TGFDQ2RsUzR1SWdZOEE0d2QyQWUxYnYyUzRuUU9vWTd1ZWUxVi9GbW5SU2FocFR4U1kzM1M1UWRncWtrK25wWG91bXJadzJ3akRDUThkY0hIQTQ2Q3ZuS09ENTV5UGRyWXJrcHhaNWxjYVk1VWxGd2F6MjA2VlJzWmVhOWZuc29KSlBPQ2hNY2JRT3RaRjdwbTZUTWZISGFveEdYS09wRlBIT1N1ZWFOWk5HTnpjL3BWVk5QZWE0TzBZelhlVGFZRlg1eWV0SkZaMjhhbmRqa2RUWE45VWlkZjE5dlpILy8wdjR6N2FXTnVCeFcvR3k3T09hNGVHVWh4bmdWMU1OeUZHMGVsZnZjSm41SE9ucDJORzh1VlRUbW1ZZ0xFTnpFK2xlbytDZkJOL2NhREY0bjFFZk5jQUczVHVJaWNnRUh2MzlNNHowcjVrOFM2akxkM05wNGFzenZrbGZFckE0Kzl6ajZldGZwQjRuZ2g4Ti9DalIvR1JVR0cwc3BZWlFNWUpRWkhJOWVsR0ZuR3BVbXZzeFd2ci93eDFLZzZNVnpieTJQbVR4VGMydDc0SDF6eEphTHRqMURXSWJPTWorR0swUVJnYnUzelpKeFZqNG4zOEJ1OVdrRW1FMG5TNExUTGRDMDZDWmlQKytnQ2Zhc0hXYmxMRDlrUFJKZHUyVzV2cFpXNUJMTTBqSGNQd3htdkh2alY0cVpOZDFEU1lUL0FNZmtGaXdIWWo3TWc1N2RhOHJNNnFvMCtYK1pSL1gvQUlCOURnNktsVjkxYk5yN3JXL1U5cS9aSitFWGlMeDFORnExaEhpS3dsYTh1cEQxaHQ0Q0haajZCMkFVRWRjKzFmMURmc2NRNnhyL0FNRDlKdW1oampTeEtXeUtJdHFTQ0o4c3lEcTJRN2M0NzgxK0pQN0RjMmxlR2ZoeDRvc2ZFVWtGdEg0bTBkTE5wWkgydkczbkJnSTJCNGRncENqbkpKRmYxSWZCKzAwVHd4NGZzRzBpM1dHMHM5UFI3ZDBBVVI3WWl6RVk0TDV4dTZrOVJtdnRPRTh2Y0tQT3V1cCtmOFg0dVU2empMVkZqd1Y4Tm9vdmoxWmFwWXhlWUlyWXhrRW5BalJRenJnOGpCK1VpdjBkK0ZmZ1h3em92aUVlTWJhQ0tTOWpNVVlaVTVFaWd0SzJDTys1UWZiRmZIL3dBZ2UyMWE4MXkvY1NTaU9aSVdaajh4bC9lelNzeC91NUl5ZjdvOXErenZnMXJKbENYRWNubVJPaGtWTnBKTFNESlA4QTQ3bjhSWHFaaGU3U1BCdzAxRkp4ZXA5WVRRV1FOeHF1bFJ0QUpUdVpGT0FXT1dKL1BQNTE4WWZ0Ui9CM1RQaUxZVzNpeTNnam0xU3hMUnR1SHpOYnlIZHRPT0dNYktDcFBTdnJIV05RaXM5RUZzR0pMRGNldWVja2dlM1hyK0ZlUmVMN3JWTGZTcDd1d0JrL2NibzlweUdPRHV3dmZqSng3ZHE0OHJjb1NTSXg3WExkbjgxSC9CVkx3cGIrTHYyZmRXMTIyUDJodEExQzF2NVNvK1ZvUzdXbTQ0d2Qvd0M4M01UMndEa1YvTWxCSi9ZOG01dDMyV1ZzYnV1MG5wK0ZmMTBmdFE2WlllSlBDWGl2NFI2bEhKYlgydDZaZnJFcFg1WlVpdGtrREhqRFlkMEtIa3FUMTRyK1J2N1RORE1OTTFFQXd5Si9kNkVEMHIwYzlvcU5SVFR2Y01qbmRTZ2lEWEk0aDRnMHFLVmhMSDVrcjlzSENlcDdkNjlLUzhzMWlqM3NDTnVGS25JSTZjVjR2ZFE3TmVzTEtkZlBoaWpsa1RPT0JrS09EMXhXcFBCNUxHNjA4U01HK1dSQ1NjajJKNkg2VjVGUEVTcDNsVFZ6NkRFNFNNa28zUFQzdTdaVC9yVi9Pc3ErMWFCRzNCZ2ZvZUs4OGppU1ViMFhhQjNMZzQ5dXRPTU1aNnZuNmRLd3E1aTUvRWpLbmdFbGE1MU54cWtHRGs5S3dibldrS0haNkhGWk10dkU3YlZWa1B1YzlLekd0b2k0K1k3ZURYTFd4RXJlNmR0SERLTHVmLy9UL2kwbWlWRkJHZW9yVXRwd2liMi9oQlA1VnpVTTkzSW9VUlIvbWY4QUNxMnBOZXhhZmNTdnNWUkdRUUNlK0I2VisxdXZ5cHV4K2FRb3FVbEY5Uzc4STdlMTFmeHRMcVdyc0JCRWpQdWJvclBrRDllbGZwUm9JMHI0aGZDWFdQaEpIT3EzTFdqdmFtUTRVUzRKVVp4eGtpdnpLOEYyZmlhR1dXYlFXdG5XZVB5NVk3Z2Jra1FrZktWd2UvVHA5YStuL2hGck45NHM4VzIzdzhuOFB4YUxxelJzYmJWYk5ualdBUkQvQUZra1pKRHhjYldBNVBRRVlyYkk4WXFjK1ZyU1YwZGVlWUpWTFNUczFhM3lQRlBpSGV0WS9DWHdUb2NwZERDSjBsamJqRGlZOVIySXpnZlN2TnJEVHJ2NGxmRU9IVFFoQ3hLaVRQMUFqajV6K1FyMlg5b0xVRjhUNlFtdFgxckpaNnBwZDNKRGNReFJuN05JNWJtWkd3TWhndTdJNCtoelh6MzhPOVZ2OVA4QUZhM0ZpclNUU1pEN1JuNVcvd0QxMTVXYXpVc1lxZlRUOEQyc0RGL1ZaVmRtZnI5b0dqN1BCRUdrNkJheHJQRk9Rck9Ca3hxQmpMc1FJeU1aYm5JengxcituWDRQYWpDUGd0YmFkTUI1Y05qYjJ6T3d3KzJPRUVER1QwSkl6MUk2azEvTDE0UDhWaUx3bFlhRmZ0T0wxcmlLWWZaemhXSzR5clBuMFBUQnIrZ2Y0S2ZFaTAvNFY4MnJSVFkweUhWN3VKMmtQbWJVdGhqZ0RuRzRZK2hyOWN5TENSdjhqOG56MjdpbSs1OXhmQ1BVbjBmVHJlM3YzSUdvL3dDakdJNFpWWm95NjRPT2NqYm4wTEhPZHRmVm43UCtvUzZmQkFzellObkVzTW4rNldrVXQ5UUFQeXI4OGZndjhUYkhYSnJtSjIrU081SlVxQmhGVVlHM0JKNFVEY09DUnhYMTU4TXRhbXRTSVltQmVhUUFEMURLeCtVREFBNDZZcjBLOUdMYlZqd2JjcnVmZWQvcTF1Yi9BSExKdlNSUVFqY3VXalAzQmpqTEQxOUs0VDRrNnJKNGI4SXZxa01mblF0S0JGRmpMS3pjRlNlNENra2cxbkNSZFR2Rmt0WkZSaXF0dUI1L2RnNS9yaXVBK1BQeEIwTFFmaHJkVytybGlMWmxrZVZHMjhyODZqZDE1SXgyenlLOHJDWUp5clc2Sms0N0VXamMvRlg0dHcrTHRVL2IxazEzWExacmJ3em9maDJLQzFrTXU2Sm11cGk4NHc3bkRvUVVZWUdBZzlSWDg1LzdSdnc3UHcrK01QaVR3WEpCTkI5a3ZwamFDYU14dEpiTzVhRjFCNEtGU01FZi9XSDlSOGZ3MjF2NGxlSmRRMTZFalM3Q2ZaOWdYZXZuWENxQTRrazVsSFhoVDk0OThIaXZ6YS80S20rRFpyTDRZNlQ0OTErd01Xc2FQcWEyUXU0WkJOdnNiZ1NOaG5IekJkNFVxckFGU1Q2MTYrWllCZXcwV3o5VGp5N01uOWFWbDBzZno3UXgrYjRyanQ3cksrVGFzcFhrTUNYeUNlQ01ZOWNWNk5QWjJMeHBHVlBUMXhYRzJVbHBxZmlxZTdiWklua3hsMjM0Sk85dS9RSDYxNjFEYTZjRzh5TGJHcmM4eUtUK3ByNWpDNGYzV2ZYNDdFcExRODBuME8xVnkwUzdGL3VqcCtOWmN0dkRhL3V4eDNyMVdTSzFtVTRqWEE1eXJJZjFIQS9Pc1diVElKc2xGUDZWaFd3aWhyb1lZZkd5U09CdVhDbko3Wi93ck4yTjVZYVB0d0FlcDkvd3JzN3pTN0tPTXRjdEpLbzdLUU1lL0pyaHIzVXRDdDVERkZjdkV5L2RSaGxxODJ2c2UvVG56SzUvLzlUK0pRM0VrTW0wSDVhemRkdXYrSlBPRy9pQUIrbExlTzNsNEI2SE5jaDRtMUkrVEZiTDBmNzN2aXYyREZWSXhwdHlQaXN1d2puSlhSN2o4SUwvQUV5eXM3dTVuVUZ2SStVTTJNa01wd000NmozcjY4K0VrR3A2VGR0NDlrZlplVFJiRVFBTnRqMjVDWVBHRFg1Y1crdFhGc29peGxGN1p4WDBKSiswejR0bDhPdzZCcDFta0loUUtYakJ5UUIvRWFuS3N4cFUyblBwdFlyT2NqcTFHNVU5bWZvcnF1aVhmanJ3dGR4YXpjUW8wa0VrVVVMdWk3ZzZsUXdVdHRCK25Tdm5uOWtqOW1uVGZpMTRhOFEzbGxZdU5aOE1TWkV6dXhTNTViOTNHVU9BeUtNNHdRMmVLK1pQaDc0cDFmNGgrUGROOEthdmVUMnRycU53c1V6eGttU09EckpzSDk0cmtjOThkNi9lUDRHZkFuV2ZEdWt0WmZCdlY5TTAyd1dZT3NFdm5DNGtqVW5mNWtSRzd6R0FPZlJ1T0srbHlyQzBzeHJLcTQyNVR3TTF4TTh0b09qS1h4YmJuNTFmRWl6OGRlRHJPemUxU0JMVy9sV0I3bVloR2d5eFVNeWpzbkJKeGtWK2p2d0grTlhnRHhSNGF1dmdXMnZpMjFYVHIxTlN0THRNcEZmU1N4Z1NSTVNmbExOOHlidUNTUlhiZUl2MmVmQ01rMC9pcnhzMGVzWEVBTGJMaENpaFc0QVdNNEFJOU9wNjE2TDhFZjJHL2dkOFFkUmc4UStNZEEzenp1RXRyVFNuZTBta0orNkdrUTV5ZTJPbk5mVTBzUFV3dFp5aHF2UHQ1SHkxYk1xR0pvY2owYS9GbnFmN0YrcXRvL3hpMVB3ZGZ0SjVzVEY1UE00Yjk0MHUwZkxnWnpqSzlOcEdLKys3YjRyRDRlNnhMZGVLZzhOdnBWdEc4MGlMblpsdjliZ2M3R0w0R2VtSzdlTC9BSUpqWC9neXhoK0tQN09rcVBybWxyQlAvWmh2WnJ3enh4UnFra1Viekk4Wm1DTGdva3VTVjZIT2EvTTc5dlA5b0h3LzRROE9hejRLMDFMaUh4TGZRZllib1NSN1BzMzNmUGhsRDRJa1ZQbDI0R053UFZhOUpaelFjSlRUVHNjR2E1VFdwT1BORnBNOXEwci9BSUxoZkNYd0xjeVJ6L0QvQUZEV3JpeS8wZUtaZFRTM2lkSXl5bzVRVzdzTjRPZnZIdG12TVBpYi93QUZ1ZmgxOFNkRmswSFd2ZzFGZTJjamJ0dHpyZHgxd1J6NVVjWklJSkJIb2Evbm1hWHpITHRrbGozcGNFa0FWOEZQUDZxYmF1cmluaFUvY1IrM09uZjhGbXBQQ3NYaytCZmhGNGR0VWlBQVc1dTlSdUZVS01EaDdoUng3Q3ZIL2lmL0FNRmFmR0h4WjBxWFFmRi93dDhCM2RoSzZTUEJjNmZOY0s3UloyRmc5d2QyM0p4dTlhL0xPMHNMaTVrTU1RM0ZzREF5ZVNPQWVPTTlCM1BhckhpbndoNG04R2F0UG9IaTNUcm5TciszSUV0dGR4TkRNaFpRd0RJNERLU3JBNElCd1FlaEZiVnMxcVRYTEw4VG1oaHVWcVVkR2ZYZy9idnVOT2thYncvOExmaHZZOFlKWHdycDBoSHBqemtrSi9FazFXbi9BT0NrbjdRdGdDdmgreThLYVNwNkN5OE1hTENSOUNMUW45YStFN2hUNlZubFdZbk9BQUNlVC9kR1RTbmpKYWNxUytRcXJsTFJ5YitaOW4rTGYrQ2puN1l2aW5STHJ3dGVlS1Zpc3I2SjRKNGJXenM3ZFhqZFNyS1ZpZ1FjZzRyOC9wOU90REtXbHVHVmpqZ2s4WTRBSFBUaXZxandkK3czKzNSOFVXZzFUNGUvQ1B4WnFsbmNSck5CY3hhWGNDR1dLUVpTUkpIUlZLTU9Rd0pCSFExK2lYd2Yvd0NDQXY4QXdVaytLeVEzUGlUd3BZZUQ3U1FaYWZYYjJKSlZYL3IydC9QbXo3TXExMHdmTXYzbHJucDA2MEtNVkZ5UHhGaWdpaWZmSk0wbnN4T0tra2JSeWRwdFlta3lBRHNYT2UzYXYxOStPdjhBd1F2L0FHNi9nMXJMNlhwbW5hWjRwdDl3RWR6cDEvR2daVDNNZDM1REtmYm12Zzc0aWZzTy90aGZDYlN0VjhSZVAvaHpydW02Wm9rZm5YZDg5cXoyc2NXNEtKRE5IdlR5eVNQbUJLNDVKQTVxY1JUbWtuWTY2T01wUzBqTS85WCtHMjVuVmdVNzlxODgxZVY1Ym9vNXlFNkQwcmV1Ymg5Ky9PTnZOY2RkTTdYRE9Xems1cjlTemVxbkRrUjRtWFVIRlhadVdka0xpMSsxbmtFNHg2R3ZidmhKNHIwdndxYnV5dUxaSnJtNmpLd3UyQ0VMZktEajF6MEZlQjZiZHl3bG9BTnlzYzQ5Sytpdmd4NE5mWDcyK3ZGVVNUV3NIbVFwakxNNXlBQU8vd0RTdk13VWZlVW83bzN6Q0VYUmJuc1pId3p1TkIwVDRzVzB1dlhhQ0tXWmthNEFHd0VuQk9TQ09lY1k2SDA2MSs3bmh6NFUrTTAwSzE4UStDL0VVRjVaN2ZOdG1oQUVpYmlTc2I0SmJnSDVpUmpBSGZtdndMMWI0YzYvb21wUzJ1cHRpZDJPOVZ5VkdPZXZyejI2Vjc3OEh2Qy9qQzN2Wkk5U3VIazBxNXR6SExGSzhqRHlsS3NER3l1cFJzcU9weGpnam12b01semY2czNSbkhkbmdaNWxzY1ZGVll6dG9mc2Q0NDhTZkgveGo4TnJ6VnZCR2hSNnZmYVU2d2hSTWdDQWhoTkpFak92bk9vd1FoT08rZTFYL3dCbHo5cHZ4RGJlR2sxTStNRjhPZUk3RzkreWFSTmNNam90MUNGZVJabGJMSU5yYk9Cbm5QSUJyaC8yUi9pcDhaZkNueFcwV3grRGxqYTZURmZzZFBzRjE5Vm0wM1VtaFNTUXEwQWpMUmx3TWViRXlsVDFZak5mdmY4QUFMOXBYL2duSCswLzRsdWZnSisxaDhOL0R2Z0w0aTJjNGluMHJXck8zUzJ1Wmd3QWUwdldSY3JJZVUzc0NRUnRaK3RmYjA2YXJMMnNxbG50WnI5VDgzL3RKNENwR0xvYzZUdmRQb3U2UHAzOWlYOXFLdzhUdzJtbGVHcktEd3A0K204eVJ0TGtaSTlKOFFaK1p4QWVZbzUyQTh6ZEh0UnY0dHZVZnp2ZjhGblBqLzRIK1BYN2J2aVBYZkJPaVNhRUxCSU5QMU9LVEFhZlZMZU1SM3NyZ0VqY0hWWUN3KzhJUTNPYzErNVgvQlJ2NEVmOE1XZnN2Nm40My9aOTB6VGRBOE5pOGlrTEplWEl2TEc5bGtVV3JXUWxtZU1zR0M4cGhpb1lsTnVTZjQyTmYxdTkxclZwOVgxV1UzRnpjeVBMTks1TE83eU1XWm1Zbmtra2srNXI1ak9NUENqTlNnNzM3SDArWjhVMHN4cEwyTWJkN2xjT0NSMnExRStIR0RXSjlvU2dYQUJ5akEvVTRyenFsZUxTYlBBOWhMZTF6OStmK0NOWDdhSDdBLzdGMC9qRHg5KzFsNE51dkZIaWVjVzBlZ3lSV1VGNUhCRXU5cDhDZGdJNVdmWmh3Q2R2QXh6bjh3LzIxZjJocm45cXY5cG54biswSnFFTFc3K0tOUm11MGhiWm1LRXNSREdTaW9yRklnaWx0b0pJeWNrNVB5dEJxQmpqRE9lUFk1cUc4MUt5QURTU2hSemtraitXZjU0clduU3B1YnJYMWZkblZVbGlLdEZVZVhSRk9abEs0SEZmb1Ivd1NzL1lrdnYyNy8yelBEWHdkdjRKSmZERmszOXMrSTVJd1J0MHl6S3M4WllIZzNNalJ3RGpPSkNSOTAxK2ZtbTIwK3VhaGE2Vm8wVXQ3YzMwb2hndDdkRExMS3pmZFdPTk1zN1B6dFZBVDdWL1psL3dTby80SjFYM3dJL1pXMVQ0b2ZFTFhJZEU4YytNN1ZycTgwdVM5ZlQ1clMwUldXMnQ3c2tJSTVGQmVWeTVQbHUvSlhZVFhSVnhUaEJTNVpOTjI5MkxrMTV0SzJubWVCSExYT282VG1vdis4N1g4bDVuOUpQaVA0VVcxekZCcVhoa2p3L2Y2WWl3MmR6Q1VFY0Z1aXF2a1RSc2Rzc1B5cjhqRUVkVklOZUt2KzB2OEovQU90UDRiK0xtdWFQbzkrWW5sYTcvQUxUdFBzVWl4NFZuU1Jwa2FQQnhsSkZEQWR6WDh1WHhXL1pQOEFmdEZqVE5XL1pSK1BlcWVKdE9DUmpWOUNmVWY3YWJUaXdkM2NtZTZnVkkxMk41ak51UUhKM0FIRmZucisweDhKL2dsOEg5VnRMYldkWDByV251SXZOaDFTME1jYXlCUU9VamFaektoeVBuZ1YwUE8zSTVQMWVGNFpxMUtibkNzbkh6dXZ6MVBIakxEMDZ5cGNzdWR1MWxxeit4SHhEL0FNRk5QK0NXSDl1LzhJYjRqK0xYaHA3dWVRV3ZrcUxpNldSM1lLSTFlS0Y0MkxNUUJ0ZHNrNHI0ODhmL0FMZjMvQkgvQUVueENQQ2RuOGZmQzl0ZFg3U3hDeWNYaldjZTFoRzhOektJOWxzYzVVcEtWQkFPUVJYOFhPb2VQZmhicXZpS2J3SkZxTndscHExbkorODNrUnlOOHl2QUcycHRrSTVUS2ducDFySytKWDdNL3dBQXZHK2lwcVduNjNwdGxjM2NheStZRmEwZG5JQTVPM3lYR2NndDZnanJYeXVXenpHcmlaMGFOUk54N3ZmelIraTVqd3JsRU1OVHhWYU1yUzY5bjJaLy85YitDdTV1VElwQU5Zei9BSHFuYVFnZEtyRTVOZmVZdW9tN0hQQldqWVZKSGlPNlByWHZud284WFhYaGxqcWFzUktFWlJnbkpWMngyOVJrVjREWGRlSFlydG9vaGJydkliSlhrWlhQUFQwcml2Sk84UlNpbXVWbjZhYWZhNkY0bzhPemVLNzZTT0czZ2haeklEZ2dLTWtEL0N1THRmRU9uNkY4S0x6eFZjVFBOZGFoUDVWaXJyd0lFN2tZNExjNTcvZHpYeVRlK0tCcVZ0YTZCWnpQSEJjU1lsZ1U0VlJHY0FONzg1UHJYWmZFRHhCSmRReDZiYk1Qc3RvaXhJcTlOeEh6SDZzZXY1VjZqekJwcXBINGp5UDdJZzA0U2VoOU0vQmo5b3J4SlpmR3Z3WDRqMUdkNUlkRTFOSmh0WitGSytYZ1lJd3FvV0JHT3BQclg3cmZGYnhUK3pSKzFsb0owUHg1YU0xNEl3dGxxVVNnWFZtNXlENVVxbmRnTUI4ci9MMnIrV1B3dnJGL3BUSFU3UnRoVnd1Znd6WDA5NEcrS21yYWZNQmEzVEtycVVZS2R1ZDNVNTlhK3M0ZjRuOWk1WWZFcm1qTDhENWJpRGhUMnpqV3c3NVpSMDlUN1ErS1h4YS9iRGorSEZ0K3lmZitPVzhhZUJ0QXZ2dGVuVzk3TzIyMW1DTkdNRStZZHFvN1lRSGFwYjVRTVYrYlh4TjhSZkZyNGZzcjZucGtFTnM3YlZ1RkxTb3g3QTU1VSsxZm9aNE14ZHdLN3hoako4eGJLakpPT2VLNUw0ODZObzJvZkQ1cmZXZ1ZFY2lSWEkyZ0FMS1FnZGNjNVY5cEI3VjA1amtrSjBIV2d6Z3dHT3BScnhvMUthbDVuNVkzZnhuOGN6ZjZ1ZUpNOWtRZjF6L09zci9oTy9IMnBFajdmS1BaTURIYjJybU5jMEc4MFBYcnJ3OWVEYk5hU0dJOFl5UjBQUFk5UlhyM3c2MGpTbmRpNmlhN3R6eEczZjFJeHprVitkVkZPUHV0bjZYRERVSVJjNHdSMXZ3eThIZUl2RkdxQk5mdjdxVlpHWDkySkdHUWV4S25BcjlKL0Evd3Q4RHl3cnAxNWFRZVdxQU16cXJjOGo1bWJrbmcxOHQvQlV3NjU0cXY5VVVNSXJDTGxWT0NXQXp6MklHTVpyMm40T2VLMzFmeFdZWGo4MEZIbFVIRE1xbHlPZlExOWR3NDZLbkQyNnZkdEw1SHlPZlFxdU1uVGR1Vkp2NW5vL2pEd3I0eitIdXBlSHZIM3d1MGpUZGNQaG04aXVyZUM2SXRuaE1FZ2xTV0M5aWxnbGk4dVFBa2VadDlCMXo5Yi90SGY4RnFQMjR2MmpmQTJxL0N6eHY4UGZBTnRwV3RSZVJleHBkT3J5b3JCaXBtVFVGZkRsUm5CRzRjRTROZVYrSU5QYlh2QWZpVFNRTXBMNGUxU1JBZXU1YldSbC9XdjV4WmJ1ZkM1WmdjYy9NYStpNG94cndNNHZENktlNTRlUlpGaGN5aHo0eUNsS205Tno5ZHZDUDdWWDdUM3d3ZTdnK0YraWVCL0R5YXBBdGxkTEdMVzVTV0ZYVjFpa0YzZFRoMDNLcEljRUhBem5GWXY3WEg3V0g3Ylg3YUhoelJ2REg3UjNqUFRkZHR0Q2xZMmRyYng2VGFKYUZVMkw1Y2x1RWJZVkpBUUhZQ09tYS9KMWJtUlRrODA3N1hMMk9QcFh5V0k0anFWWThsYjNsNjJQc3FIRG1GcFZmYjBvcU11L0tuK0xkejNqVC9BSWNhOWI2cmJwYzNhaUxlTXkrYkE1US8zc2VaazQ2bkhQcHpYMEo0SjhVZkV2d1ZxSDJ2VnZEMmxlS3RQZ2RnMEdvVHFiZVhuQkpVU2dwNWc1NElQcUsrQURjU2tqY3g0OXpVNDFIVVBKTm9zMGdqYjd5Qmp0WSs0emcxODdUNUlTOXJCZThqNk9WVjhuc2w4Si8vMS80RUgrL2lrcFgrL1NWOXBXK0k1eUpTZHdIdlhzbmdnQVdrakRxSStQOEF2bzE0MG4zeDlhOW04RWY4ZWN2L0FGekg4eldZSElhR3pmOEFDUUkyZVNDVDduUFd2UmRXSi9zUmpubk5lY2FIL3dBaDZQOEEzVC9PdlJ0Vy93Q1FHMzFvVzZBNkhTVVQvaEN3eEF5WjQ4bi9BSUM5YUdrZjZ0UHFLbzZUL3dBaVNQOEFydkgvQU9ndlY3U1A5V24xV3V1bi9IajZISlcrQ1hxZnBCOExYY1N1Z0p3QkZnZHVTTTFoZkZuNS9EWGlBUHppMDcvOWRCVzM4TGY5Zko5SWY1aXNUNHIvQVBJdCtJUCt2VC8yb0svVlpmN2l6OHVoL3ZQelB6Vy9hSUFUeG1KazRkN1czWm1IVW5iMUo3bXNUVHBKTGZ4UHA4bHV4UmpNY2xUZ241UjZWdWZ0RmY4QUkzcC8xNlcvL29OWUZuL3lNbW5mOWR6L0FPZ2l2eVRGZnhQbWo5Ync2L2RmTDlENy93REJjTU5wNHA4VVJXcUNKZnM2Y0lObzV0UVR3UGZtc2o5bTVtVHhIZk9od2ZzU2Nqci9BSzJ0dnduL0FNalo0by82OTAvOUpSV0gremovQU1qRGZmOEFYakgvQU9qYStneXI0cUgrS1I4cm12dzEvd0RERS9UYnc2cXQ0SjFKMkdUL0FHUmVqUGZCZ2s0citZV2JwK0EvbFg5UGZoei9BSkVmVXY4QXNFWHYvb2lTdjVoSnZ1L2dQNVY3dkh2L0FDNU9MZ1QrSFc5VVJVVVVWK2VuM0JJNEFIRlJIZ1ZNL1NvVDBOTmJNRC8vMlFBQS85c0FoQUFKQmdjVUVoSVVGQk1VRlJVVUZ4Z1lGeGNYRnhnWEZoY2NGaHdYRnhjY0hCd1hHQndvSUJ3ZEpSd2NGeUl4SVNVcEt5NHVMaGNmTXpnekxEY29MUzRzQVFvS0NnNE5EaG9RRUJvc0pCOGtMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN6L3dBQVJDQURLQVBrREFTSUFBaEVCQXhFQi84UUFIQUFBQVFVQkFRRUFBQUFBQUFBQUFBQUFBd0VDQkFVR0FBY0kvOFFBUkJBQUFRTUNBd1VGQkFnRUJBVUZBQUFBQVFBQ0VRTWhCQkl4QlVGUllYRUdFeUtCa1RLaHNjRUhGVUpTMGVIdzhSUWpZbklrZ3BMQ0ZrTlRvcklYTXpSRVZQL0VBQmdCQUFNQkFRQUFBQUFBQUFBQUFBQUFBQUFCQWdNRS84UUFJaEVBQWdJQ0F3QUNBd0VBQUFBQUFBQUFBQUVDRVNFeEF4SkJFekpSWVhFaS85b0FEQU1CQUFJUkF4RUFQd0R5VUpRRWdDY0YySEtPYW5oQ2hLQ21JZTV1blZjNUl4eGtkVTRwaUJoSW5KRXFLQ01SU0VGaFI5eW9sa1dvMURDa1ZBZ0ZReTBQYVVVRkJhaUF4SFBRSmlhREFTcE5MWmRWL3MwbnU2TkpWcnNzMGFJL21IeG5jMEVrZWkyM1p6RjA2ME1ZY3hHZ2d0cWY5MWo2cWpOdWp5akc0QjlPMVJqMmYzTkxmaW9ibUw2VXA3T2JXWVdWV3RlT1k5eEJXSzdlZlJ5MXRBMXNMVHl1cHlYTUUrSnUrQnhHcWxwRnFaNCswb3JFajZjV1RBVk9pOWgrN2xOTFZ6WG93QUlWRWdHbE1mN1RVU296eVVkemZFa3lsUkp5cE1pQ09TWE9VV0toK1JOeXJoVks3dkVoalNGMEltWklnQm1WZGxUMXlBRmFuQk1ZRThLaWFIQmNBdUM2RXhDalVkVTV5WTNVSWprSUFaS1FsYzhydHlRRG1vN0ZHcGxTV0pvVEdWUW81VXh3UUhNUTBOQWdRRWZaV0dkVnFDTlp0TzRjVDBDRUc1ckM5MW9NQTBVS0pkclZjRERpSURHMkZoekpBbjhGS1ZzcHVrV1RXNGVpWUxCVmR2Qm5NU2Q1dUEwZGI4bGM5bjhXMnBWRVVHMG5OdURUYzdPT29kWnc5RmxkaTRRZ3VmVUpJbVptNUpQRmJUWndMU0h0WTBsdmlFRXlSdnVkVm9zbWJpZXFiR2JtYUNTSFNCbGRjVzRFY3ZkTUt6ZlJ6QTgxbjlrYlFCQUlNQjBPQTN6bzRmQlhlR3hFam5LNStTTFRzcURqcG5pUDBwOWpYVVgvQU1SVFlTd3pueWl3T3VZamNGNW0rbXZwSHQzRFgwemNrZ2gzOXVtbWgxdUY0THQzQUNqV2V3ZXlETGY3VGNlNkZzbGNWSVYwK3BUWlU4TlBCRUxVMk9ha3NYa2czem5rRVV0UTZKSmM0K1YwdzBFZ3hvbWs4bElrcms2SnNpMjRKcGFGS0lUSEtXaXJJK1FjVjNtandtbGdVME93UGVKZSs1SnhwaGRrQ2VRd2MxRUNHaU5LZENZcWNVMUtWUkp3MUNLNUNicjVvejBJVEF2Q2ExT2VtQkpsSWRUMVVtbW85Sm0rd0hOTnhHSmdaVzY4ZEVXa2dxMldKb2pMTXQzNzRWSld4SmVkSUhKTWVYSGVTbllLbkxsRXAyYVJna2FQczNRQm5OYUFEeDZxM0dFYVRjdzA3M0tOMmZvZ2g1Nkcra0NUZjlibElxVmQ3aklrd2RGdEdsSEpEVGNzRnZobnNaNFJEbXg2bmp5VjFzUUV4dUIwSG1zdGdROCtJQWthTFc3QnB1QkVpUGtpM0kxakJSTkhoTUVRZVZqNWhhYlp6RGNuUlZPRU5nTjZtVnNSM1ZONzNTUXdGeDAzQ2RGRTIzZ1h4eDJWSGJlcE5hbkdyVzNHK0NicnhydGUvUFd6YW1JSjV0TUgzcmMvV3o2cE5Xb2JnbjBCbFlidEhRTEt6Z2J0SXpzUEZqdkVEMXVaNXJXTWFoUnl0LzZzejVhbUVLUzlxR1dxR2kwd0ljZzBqcVozNktTK21OZFZIdzJubm9wb3RNSUtoVHM2UnlaS05CZ0pLUk5CWFNnUXE1Y3VKU0dNS1NFdkZMS1FEUWxDUnFkQ29Rb0tWSUVxQkNEVWRVZHlCR2lPNU5DWUtvdVlJQVA1anpDWlhKTmhxVVpvaTNEVlJKbHhRQ3NTNDZBSGw4a0dyUmdLZlVvMnRycUR6L05Sdy9NSmpyMVVNb2hqUlR0azRZdWZhNDM5RkRjQm1oYW5zMEc4SkRSbUkrODZEcWZ1aU5FNHh0bFNkSXZjSGdoVG9rRVhkSERTT2ZWQWM0T3RBdFBSVHpUelFiays3OWxDZFJjM01RQkh2OXk2SkxGSXk0M25KcHRnWUthWUFJTFNaNlFyckhPN2xvbHJTWU9XQ2MzWGtQVlZIWmpEanV3Nm9YWlJ1QU04VW0wYXI2dGJ3UElwR0d0RVJEWUZvMW1aVXJDT3VNVkptb0dJY0dNSUVrdEJoVk8zZHRPRE82Yk9aNHVDZlpCTUN3NDM5eTBMYUliU0FKbUdqcVNzSHRmRE9EdzhpK1lHZVBudzVKckpqek5Sd1NjSTVsTXdRTXVVVFBQWDNySGRyNkJwMThra2hyV2hzL2R2QzFXS3BCejJrRDdvNmdpUFBTRlFkczY0cTFNeEdVc1BkZzY1Z0FEZmVESlBIVUxWbkg2Wlp5RTV2TkhLRFVhczJhSURVcVFESTNGTXc0OElzaVlsM2hLU2kydzZmcUZIcFhncFRTMUc3dE55b29MQWxjUWk1RW1WS2dzR3VoRWhOaEZEc0dBbFQydFRySW9MSW9SQW1BSndRQTRKMEpzSnpVQU00STlRZ1hRQ1VSb3pHZDI3OFVYZ0tzVEN0dVhPdEYwK3FJYU9Mako4L3dBazdFVTRZMW8rMjZQTGVuWWsvd0EwTjFBK1FVRmhxaklaK3VpcGFqNGVZMzYvaXJmR3UvbU5idUFMajEwK2FwcXgvbWVhVTlsUlFWbE11Z0FMZjlrZG41YVQzT2c1aUEzVFVHOWp1MTlGajlsMDRlT01PUFMwTDBMWWROb28wMmd6NFovekczd1duRXZUUGxlS0NWNlppQjBSY0RobXlNd2tOZ2FtSjVoU3FkSzJZWHNmVzY3WU5JbHp3ZnRINFgrUzJaaW1FcWRvUXgyVEpPOG5rZUFWa3lyU0xlOGF3eUx3RUNwc2tPY0NBUEdlSG42TFI0SFp6UlN5Z0NSeTUvTlEyL1RhTTZXQjFQRmQ3U3l1R1VtNDRnK1N6ZTJhWjBGanZIUGN0WlJHVVJHbndWZnRqQUNvMDViUEFrYytTSW1VbmJ0bVV3ci9BUERpcmJNSWFHblVuTS9UMTl5emYwaVlVTmZTcUNJYzNLUU5BOER4ZXZ5V3J3VklnZ08wTFFDM2c0U1o2L2lWbnUyMUdjT04rVjdZSnRZeUw4TDI4bG85RTNreExTdUpVZk1XbEZsUjJMb0ZqYWZoSjZmRkVvVTdEWFFJT0xkNGZNS1JUWng1Y2tsc2ZnV1Uxd2xjQXVsVVFKQ0dXb29UWlVzb0hsU1pVUWxOU0E0QmRDUWxNem9IUkZCVHdVS1U5cWdzSXVCU0FwcGRBSktZcU9jSmNHamY4RmI5d0dqS1BUOWVTcDlsR2FnSzBPT1pEZ2R4Q1VjMnluakJXTU9hdXh1dVVFcGpqL2lMOGZtbjdJY0hZaW9lVnZnZ1loLytJSFZEMWY3SzlyOUJYUG1wVkozRWdkTlZWMG01cWs3cHVwR0xxdytyL2NoN0xibWRITlp0MnlsbzFPRTJjRzBUVk53OFpXaittZm1SK3BXcjdNMGlLY3VzSnR4VlRSQXFZYkRzSWpLWkovekd4OGlQUmJDaTBBZ1JZRFFXdHU5NjZZeE9XVEhVcU9WaGtRRFlIbWVDTHNuRCtKeDRENGo5MExHdXUwNmhvRHVXbjdLdzJZM0t3azZ1L0NWVEVpZmg0blQyUitTbjBDUXFyRGs3dDhlcXRtWGdkRm14aFhDM3FoWnZOT3JPdDgxR3FHMzYwUWdaVmJRd3dZWE9Bc1pFZGYzOUZtdHQwdTl3OVpvdUJUbHZVUzcxbGFuYWxTMGJwbjNUWlVEbkF4ZTVKSDl3dnJ4V3lWb3paNU5xbXNkbE1IUkd4bEkwM3ZiOTF4SG9VUDJnc1RZSGpOQjFSMlZCeDg5eWlWajdJUEZITFFmeXNqK0RhUWJ2RWhxQlJ0TEhSZFpIWmk2a2cxQW1PZWh3dXlwV0ZJZVhwcm5wcEFTWlVXT2hTNU1sZGxUc2lrWkhTdEs1SUVpZ2dVYkV2dkhCU0FWQmRjK2FVaW9MSmFiTllXZ0hpdERqUm1wU05RRlRVWGdBRGVQSld1ejhVRExUcHB1V25IV2pPZDdLVHMrNkhWRHdFL0ZSSDFjMVhOelZoaGFQZFZLemQwR0R4RVdWTzEzaUtpV0VrYXJMc1hhQm1vNDhiKzVXT3c2UjFWVXhwZTZGcHNHekxsQXRCOVR3VXdWdXdtNlZGZ0t6MkZyWkVEN0lpNUUzUHFWNkpoRzVnMDhwbmdZMCtLODQ3bk04R3d1Sm5VbWRGNkRnSFNEdXNQaCt2VmRNYk9lWTZzL3htZFBrQkh3VnBoWCtFa0c4UndqU2ZPL3ZWVTh5K2R3QkpFYTIwVTZqVWh3YnhhZlV4ZFUwUVNNQlU4TFR6OTRKS3U2UUFBNktod05pQi9VZmVGYzBLa0NQMUZnRkxRMEVjNmI4MDFvK3lmS1V3dUVubnB3bVB5UkFNMnVxa0dRY2FKdkVrRTlZL0Q4VmhzZGlnTWEyazBFQnJTNHlkN3pNYTdoOFZzTVRWT2MvZEh3QXY4MWhxT3ozdHhsWjdpQ05HbTVrYnI3b0MwU2VDY1pNNTJvdzJYRVAvcWh3OHgrTXFraUZzdTJ0RXVGT3Exc3RBTFhPSGxIbHJkWko0blJSSlpMZzhFZXNmRXo5MFZyWlFUN2JkWkhCUzJsU2kyQ2Mza21TUnFwRXBwQ0dpYkFrbGNpRUpoS1ZGV2NRbW5jbkZOSlFNU0YwSlNQVkpsU0FpaDRYWnd1Q2RLZ3NZNTlqMFFFZXM3d2xNb3ZVc3FPaVEzR3RKQmV3a2plQzRmTldHSGZSZjdEaXgrNlNTSjRlYUVhTTJQN1dsSnNuQ043NEg3TGRKNHExZGt0b21kOW5scmhscXRCQm41L0VIbXM3VnBsamlEcXRSdExBNTZtY3Z5a1d0ZVFOSlZEdFhDWmZITWdtRWNsajQ2SWVIZEJCV2gyZlhrKzlaNmxUSk13U09RVi9nbVEyMzVwY1krUXZHejN6UEZBSkFpZndXdDJkaUlaVU15QVQ2WFdDd3J3eDdYSFFPQjZYMy9yZ3RYc0t0RkNxWGJuR1Q1bGRNV3JPZWF3WGxlckFGcm1SNUg5MVB3NzVqakE4N0czd1dSeE8wSmc2Z213TzYzNWFxODJUVnpORVdzWTMzSFByQ3BrbHRoWFgrUVZwaHFrK2gvWDY0cW1wVklnOHlQMTVLZmhhbG1qZVpIelNFUytuR2ZsODFKb3U0cU5RcXk3eklYVlRwY1dVcEF5dTJoQmVmRnJGZ1kwdjcvbXMxUmFhaGRrRURReU13bnArdFZNMmk5eHFodVdXZ2tFRW5UUzlwTThGWVlLZ1lBWXdnRFFaU3RNRVpLdHJoSGR2TXkwZ3RJeXlPbTVlZWJWdy9jMXFsTUd6VGJvUUNQY1Y2L2l0bDFIQzFGem8wOEprZENzRjJtN0hZeCtJYzZsaDZyZ1EyVGxnVEViMUUydnlWeHBtSmRHZnkvRlNtMHhHcXU2WFlQYUdhVGh5TFJkMUp2eGNwVE93K01IdE1vdDYxNlEvM0tFMGF1ek9ocVFnY2xwejJOckQycXVEYjF4RGY5b0tUL2hHUGF4ZUNiMHFQZDhLYWVDRExsaVlXS2J0bkN0b1B5aXBUcWlKelU4eEhRNW1neXEvK0lIQXFXMFZURnlGSWFQTmNhNFRIQ2RCOGtpa2NXbE5rcGhZL3dBdXE3dW5mb3BESXpsMHJwVFdsUVdqcXhza3c3a3l1N2Ntc2ZDbDdORXNGelhlU1FCdmo1N2xOd3RJTkFWRmc2NERnU2JLMnJiU1lCNFZjV3RzeWxGNkpsSnBKNERmZEQyemhKcG1JTVgxQ3FhbTBUdU9xSmhhYjhRU3hwOElFdVBMZ24yVHdIVnJKWTlrNlhmQnpIQ0EwV2NQdmNDcE5iQUVPTFRxSnZvaTdMY0tEU0dTWTVYS25WcXhxZ0ZvMUh0SGNGcEdDb2lVc21YTkYzZWh0UjBOMW5wdTZyUjdNMnl5blVkVGRKcHVBQjQ4amRDR3hHbVM4a256VGFmWnh0UjM4c3VCNDdvODBsY2REYlVpMXhtSGFBQzJDMmJPOGpQbXJqc3JYek5CNGcyNW5oK3Q2aDRQc3BWYXh3T0liQmFiWlNRQ1l1YmhTTUJSZGhudHpaWE5OcGFmRElIRGNkNjFzenJCWVZuRnVVY0lJUEVxUHRmdEQzTGZDUEdIQVFkTjgrbjRLZGphZWFEdzA5Ylg0ckNkcDhYbnJPajdNTm5pUUlKOWJlU1U1VWlVclpldCtrZkVOSGhaUkhNVTI2K2FFLzZSc1lkSE1IUmpCOGxqbHl3N0ZHcXFmU0Jqai96aU9nQStDaTFPMm1OZC93RFlxZjZpRm4xd1RVaFVXdFh0TGluYTE2aC96dS9GUm43WHJIV3E4LzVqK0toRUpDanN3b083SFBQMmo2b2JzUzQ3ejZvUlNKdVRGU0ZOVThVMXp6eFhJVlI2VnNhUTRqaWtnTGc5S1dCVVdOZ0paU1pDbUZJWVExRjBsRGxMbjZwSmhSQ0pUQ1VwS1k1UWJJRlZOMGhTSnpCS3k5TkJFZWhoSFAwUXlGUDJmaXNsb3VtdDVGSnVzRUd0U0xEQjE1Szc3TlZ5d0U1aTJUcUJJdHVqZXFyRnN2Sk90MWI5bnNyckV4dTE0OHVDdUgySm45VFhZVEh0YUJtWTNkZUJZcXhGUU85azIzQ3dBNmNGUS9VN21nZUlsc2E3b2trQk5ZNTlQdzZnNkxwN05iT1J4WGhaWXpFQTIzalVxd3dGVnJXMkk4dFZrdHUxSzdjdmdjS1JBSmNCSkovcWpRS1gyZXhJTWw4NUd4b1lra3hFcU8rYUwrUEI2WmdhaktERzFITUw4K3JnTXdaMTRIbXI2cGhLZUxwa1BoL0I0QUR3Zm5FL2t2Tk5qN1FxWVIrWnJpK2s0NnpvT0RoODF1Y0ZpUlZIZllXei90VXBpZWJScFBKUTcyZFNna3FNYjIzcDFjSzgwaTQ1UTFybVBGczBrajFCMUhOWUNxNlN0NzlLUGFKdUlkUnBCc0dtQzU4aTRlNjJYaUlBa2ppZVM4L2xKeWIyYzBra3prcVJLa3lhRkFWaHNqWTliRXZ5VWFibnUxaG8zY1Nkd1ZlRjZUOUdYYS9DNEdsVkZacnU4YzRFRnJRWmJFUnJhREo4MFhTMFVrbThtZjdTOWlxdUN3OUt0V01PcU9JTEFQWXRJa3pkeDRBUnpXVWN0cjlJM2F4bVBxdE5OcGJUWTB0Ykp1Wk15Um9GaTNGQ3VzaWtrbmdZUW1rSjVLYVFxSUZwMHk0aHJSTG5FQm9HcEpNQWVxOUVIMFRzWUd1cllsNG1NMlNtTXJTUnZjVHBOcFEvb2Y3UDk5aUhZbDRsbEN6SkZqV0kvd0JyYjlTRjdJV3pNaVFSRUhUMFJkQ3QrSG5tRCtpZkJzdTU5YW9PR1pyUWY5RFo5NjBlenV5R0NvM3A0ZW1EOTV3em4xZkpWaC9CUHBYcGd1WnZwRTNIOWg0Y2tiQ1k1cjVBRGdSWWd0Z2dwMytCZjBvOXQ5bWNQaUx2b1UzTys5bEFkNmlENzFsY1o5SDJGRWcwNmpKKzB4N2lCNU9uM3IwWEViVG9NTVZLMUZoNFBxTUI5SlRQckhEUEVERTBEUDhBV3cvN2tmSWl1a3ZEeWZFZlJ2U3lQN3V1L1BIZ3podVNlRG9FaWVPN21zdi9BTUVZMy9vai9XejhWN2Jpc1RnMnY3ditMb05xd0RrTDJEVzQ4TGlpL3dBSi9YUzl5ZHhZcm5IWjh0dUtZNTFrcFRIRlpObmFrTWxPWTZDbXJsbVVHS0xoYU9ZL0ZBWUZiYklBa2plZEZTRkxSWFlzK0l4MFNVM2xwbHRpclhFWUlDNHVkNVVWdUdQQkpxaEoyaWZnZTBOVU9oejhyYjNndUV4YVFMbTZ0c0hVcXVKYzkrWWpUUnJlT2hpL1ZVK0d3Z0JIelUwWVkxYlpzckd5U1RvQnZXa1cyWno2bXoySHRIRFZRS2VKTHFUM0FYTHgzWm0xbk4wOC9WWFAvcHpoaTF3WStxMFBnbUg1Z2Q0TUZZN3MxZ2FWUjlhaTlvY0docHpXekF4RWdqeVVuRGJYeG15bjVUL053ODJtUzJQaXc5TGNsdmVNbzVuRjNVV2FHbjJDcTBCbXA0a0VURVZHa201MDhFbVBKUDJqaVdZTWlyVExPOUVaMk5jNW9jdy8wT2FMOHh6V2k3TDlyc05qSURYWktwLzViaUFUL2FkSGZIa3N6OUsyR28wZTdERzVhdFNYT0RiTnlEZVdpMGwyL2tWTGNTNDhzMWhtQTJ2ajNWNnRTcTgrSjdpNCtlN3lFRHlVSmM0cHNyQW9jdWxObGRtVHNLSGdwNGNnWmdsNzBjVUpoMVlZbE1LR01RT1Bva2RXamNmUS9nbmFIMFk5T3AweTRoclFTNXhBYUJxU1RBSHFoMTM1QU0xcGdpNGt6eVhwUDBjZG1RMDA4YlY3dXF3dG1rMXBKZ243VHRJSXVJM0U4azBtOWJNNVZITXRHbDJDTVJnOEcyalNER2xvMUxYSE5VY1pjNXhNYjl3MHRkVW0ydTJlMDhNQjNyR01CKzJHbHduV0p6WldrY3d0WjJqMjNoYVZBdXJOY3h1Z0RKejVyd0d4cWJiN2NWa3RuZHZhZUpES0Q2Slk1emNvZG1FRjVFRFVHeFBMMVZjYWxxY1ZmNkNUalZ3ZUNsYjJ2eGRlYzJKcU40UVExdnF3QlFNVy9FRWt1eEZWMmJYK2E1cFBtWUpXOG9qTTUxQ2lING1vQWM3c3JSU3BuZ1RiTTczRDNMejd0Smp6aHF6bVZHVmFiamZLOWpjaG5XQkF0UEN5MmNJSlpKak9VcFZFaFY4TVo4VFhHZnZQcUdmUE5kUnErRHpCekFDMms4QXVBOFJMMmtscGw0SkVBblFxRmpOclptdzBocEJCQkdZQzM5Tng3MU93TzNBY3JvRWl6aHU0VDBYSExxcGZvN29kcFJyMHBjWHNaelI0U0hlVUg4MVgvd0FJL3dDNmZSYmJFN1ZaOXBqVEkxYUlrY1I0MUQrdGFIM0hlNWIvQUJSOFppdVdYcU1rU21GS2tLd1p1aEZ5NWNwQTZWWVlTcEYrU3IxSWE3M3BBWDJIcTVnRS9FMEFHeWJLdHd0VXN2N2t1S3hacXVEZnNnKzlYZG9qcmtzY0FBS2JudU56Ylc4YnJlcWdqR0hmcE4wVEdWb2FHY05md1ZaS08zZ2RmVFRka3NmbHhEbk9pWEF6Nnl0ejlZVTNXSkJCR2gwbnJvdkxzRlZEVE85V3VIMmtSRW1mMSt5MjR1U2xUTWVYanQyaXcyN3NFTmQzbUhjR3pmTHVCM0VLb3htME1SVkk3d09lNEFOQkxpZkNOMHV2eFZqaWNjWERLREErUG9tdFluS0tid0VXMHNtZHhPS2V6VmtjMUZPMEg4bHFxMUFGcHROdElXVHgySHlPdDdKdUR5L0pZempSckJ4Zmdqc1kvajhFenYzSGVVTlBZMlZCb2tqcEozbjNxVmhNSk9xTGg4UHZQdTNLWGhXK0tJbENFMldHRHc0YUxDRllVOE9DRkJmVmd4eVU3RHZKRXo2V1hUQkk1NVdSZG9pcXhoN3N5QnJUYzBQYVJ2OEFDNEVTcHV4UHBKcjRXaUtWTEQwV3RrbjJYUkoxZ0Y4RG9FVmgwQ3pHMXRyVm1WcWpBOHcxeEF1ZEpUNVA4NUNFVlBEUmNiWDdlNG5GQUNyUXc3dzB5QTZrSEFIU1lKS3JCMm14TFlMR1VhWkdtV2hSRWVlUlZuMTFXKys3MUtiOWNWditvNzFLeStSbWk0b3BWUmREdGh0R0lHSWUwY0d3MGVqWVZWdGF2V3JQbXRWZlZjQkFMaVRiVzBvSjJ0V2lPOGRIQ1NrK3RLdjMzZXBTY2s5bEtGYW9DYU1iMGFtMGh1WU9CaUpCTjc4QnZISGdrK3NxbjNqNnJtN1RxRDdSV2RJMHVpYmdkcXZwR1F3SGZCa2dxMi80emQvK1dqLzNLZ08xbnhHL2pKUS9yT3A5NU5TNjRRbm5aRVNMaXVTWUhMbHlSQUNxUTFrMlVjS2JRM29BUVZjcGc4TEoyQ2RlU28xZlVvbERSQUVpczZaS2psR09pRlIxUWdET3NVZW5WUXNTYitRK0NSaFI2THd0c0pVbmVyS2wxVk5nTkQrdHdWcmhYR0JjNnJvZ3pDYXlIelpiV2haN0hVY3dxTmk3Q1NPbjdmQlhOWTNIVWZKUVgvOEF2TzZOL3dERUk1QWhnellVaWs3S1FoWWtYUFZFYm9PaTUyZEpQbTJZYWZxeWxiR0VrbmVvZXcvYkEzZnNwK3lmYkkzWmo4MDQ3UkVzSmpjVlY4YnBPa3dyVEFFNUFlUVZGaXZhZXJ2Qyt3M29QaVZwRDdNem45VVdEQjRtOVFzajJyWkdMcmMzVDZnSDVyWjBCcCt1S3gvYkQvNVZUb3ovQU1RdE9iNms4UDJLVmN1SzVjeDBITGx5NUFITGtxUkFISllTSkVtQi85az0iLCJtZXNzYWdlc190aW1lb3V0IjoxMCwia2VlcF9sb2dnZWRfaW4iOnRydWUsImFwcF9wcm9maWxlIjp7ImRlY2ltYWxzIjozLCJtZXNzYWdlVGltZU91dCI6MTAsInZpZXdBbm9uRGV2aWNlcyI6dHJ1ZX0sIm11bHRpcGxlX2xvZ2luIjp0cnVlLCJzZWN1cmVfcGFzc3dvcmQiOnRydWV9LCJyb2xlcyI6WyJDdXN0b21lckFkbWluIl0sInBlcm1pc3Npb25zIjpbXX19.l_4tZ0R_EpfYVN5wionUOe6dLHKeKSBVRWDEhE5RAlmazRnsAOWJYFDXTvB8UObRRlDytT5u18cd3zO97_X5wg"}
response = requests.post(api_url, data=payload, headers=headers)
Change Password (Cambio de contrasena)
Servicio REST para cambiar la contraseña del usuario. Para esto el usuario debe estar autenticado y deberá enviar la contraseña antigua y la nueva, teniendo en cuenta que la contraseña antigua y la nueva deben ser distintas para que el cambio sea válido.
Parámetros
- old_password: Cadena de carácteres con la clave vigente.
- new_password: Cadena de carácteres con la nueva clave o clave para asignar.
Retorna
HTTP Status
- 200, si el cambio de contraseña es exitoso.
- 406, si existe error de autenticación del antiguo password.
- 500, cualquier otra excepción no manejada.
Ejemplo de uso.
import requests
api_url = "https://www.myserver.com/auth/change-password/"
headers = {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "JWT xasfdasxasdasd"}
payload = {"old_password": "tuMvERweRley", "new_password": "tuMvERweRley"}
response = requests.post(api_url, data=payload, headers=headers)
Request Password (Solicitud de contrasena)
Servicio REST para solicitar el envío de una contraseña nueva al correo electrónico.
Parámetros
- email: Correo electrónico utilizado para el acceso y al cual se enviará la clave correspondiente.
Retorna
HTTP Status
- 200, si el proceso culmina exitosamente.
- 406, la solicitud contiene datos incorrectos o no válidos, como un correo electrónico no registrado.
- 500, cualquier otra excepción no manejada.
Ejemplo de uso.
import requests
api_url = "https://www.myserver.com/auth/refresh/"
headers = {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "JWT xasfdasxasdasd"}
payload = {"old_password": "tuMvERweRley", "new_password": "tuMvERweRley"}
response = requests.post(api_url, data=payload, headers=headers)
Add User (Agregar usuario)
Servicio REST para crear un usuario. El servicio ofrece la posibilidad de enviar como parte de los datos el perfil de usuario, el listado de los grupos (roles) asignados y el listado de los permisos individuales asignados también al usuario.
Parámetros
- first_name (opcional): El primer nombre con el que se identifica el usuario.
- last_name (opcional): El apellido con el que se identifica el usuario.
- email: Correo electrónico asociado al usuario. Este correo se utilizará como nombre de usuario en el esquema de autenticación basado en "email".
- username (opcional): Identificador del usuario. Si no se envía el sistema automáticamente genera uno basado en un uuid.
- password: Clave que utilizará el usuario para el ingreso al sistema.
- is_staff (opcional): Identifica al usuario como parte del staff del sistema.
- profile: Diccionario de datos con los campos requeridos para el perfil del usuario.
- timezone (opcional): Nombre calificado de la zona horaria. Ejemplo "America/Bogota".
- theme (opcional): Tema que utilizará el usuario para la visibilización del aplicativo. Están disponibles los temas "dark" y "corporate".
- lang (opcional): Lenguaje que se utilizará principalmente en la interfaz del usuario y en los mensajes que el backend envía.
- keep_logged_in (opcional): Bandera que indica al sistema si mantiene abierta la sesión del usuario o no.
- message_timeout (opcional): Tiempo de espera configurado para mantener los mensajes en la interfaz activos.
- multiple_login (opcional): Indica si permite al usuario mantener varias sesiones abiertas del sistema en el mismo tipo de dispositivo.
- groups (opcional): Listado de los grupos (roles) que se asignan al usuario en el momento de su creación.
- permissions (opcional): Listado de los permisos especiales adicionales asignados al usuario en el momento de su creación.
Retorna
HTTP Status
- 200: Si la solicitud de password es exitosa.
JSON
{
"full_name": "Guest",
"email": "user@example.com",
"last_login": "2023-11-23T20:28:46.867Z",
"is_staff": true,
"is_superuser": true,
"id": 0,
"first_name": "string",
"last_name": "string",
"level": 5
}
Ejemplo de uso
{
"email": "user@example.com",
"last_login": "2023-11-23T20:28:46.865Z",
"is_staff": true,
"is_superuser": true,
"first_name": "string",
"last_name": "string"
}
Delete User (Eliminar usuario)
Servicio REST para eliminar un usuario por medio su ID.
Parámetros:
- id: Identificador del usuario que se desea eliminar.
Retorna:
HTTP Status
- 200, esto indica que la eliminación del usuario se ha realizado con éxito.
- 404, se produce cuando se intenta acceder a un objeto que no existe en la base de datos.
- 403, cuando se intenta eliminar un objeto que tiene registros secundarios protegidos, lo que significa que existen relaciones de clave externa que impiden la eliminación del objeto principal.
- 406, se utiliza para manejar errores de validación.
- 500, cualquier otra excepción no manejada.
JSON
{
"full_name": "Guest",
"email": "user@example.com",
"last_login": "2023-11-23T20:29:56.537Z",
"is_staff": true,
"is_superuser": true,
"id": 0,
"first_name": "string",
"last_name": "string",
"level": 5
}
Ejemplo de uso
{
"email": "user@example.com",
"last_login": "2023-11-23T20:29:56.536Z",
"is_staff": true,
"is_superuser": true,
"first_name": "string",
"last_name": "string"
}
User List (Lista de usuarios)
Servicio REST para obtener lista de usuarios. Agregue un filtro para obtener solo usuarios activos.
Retorna:
HTTP Status
- 200, si existen datos.
- 204, si los datos están vacíos.
JSON
[
{
"full_name": "Guest",
"email": "user@example.com",
"last_login": "2023-11-23T20:26:42.385Z",
"is_staff": true,
"is_superuser": true,
"id": 0,
"first_name": "string",
"last_name": "string",
"level": 5
}
]
Ejemplo de uso
{
"email": "user@example.com",
"last_login": "2023-11-23T20:26:42.381Z",
"is_staff": true,
"is_superuser": true,
"first_name": "string",
"last_name": "string"
}
User Update (Actualizacion de usuarios)
Este servicio REST permite actualizar la información de un usuario. Los datos a actualizar son opcionales, lo que significa que solo se deben incluir los campos que se desean modificar.
Parámetros:
- email: Correo electrónico asociado al usuario.
- first_name (opcional): El primer nombre con el que se identifica el usuario.
- last_name (opcional): El apellido con el que se identifica el usuario.
- username (opcional): Identificador del usuario. Si no se envía el sistema automáticamente genera uno basado en un uuid.
- password (opcional): Clave que utilizará el usuario para el ingreso al sistema.
- is_staff (opcional): Identifica al usuario como parte del staff del sistema.
Retorna:
HTTP Status
- 200, si la actualización es exitosa.
- 404, si el usuario específicado no existe.
- 406, en caso de que la solicitud no contenga "email" o "id"
- 500, cualquier otra excepción no manejada.
JSON
{
"full_name": "Guest",
"email": "user@example.com",
"last_login": "2023-11-23T20:30:44.721Z",
"is_staff": true,
"is_superuser": true,
"id": 0,
"first_name": "string",
"last_name": "string",
"level": 5
}
Ejemplo de uso
{
"email": "user@example.com",
"last_login": "2023-11-23T20:30:44.719Z",
"is_staff": true,
"is_superuser": true,
"first_name": "string",
"last_name": "string"
}
zibanu.django.auth.api.services.permission module
Contiene un conjunto de métodos para gestionar los permisos de los servicios relacionados con la autenticación y la autorización de Zibanu para Django.
Permission List (Listado de permisos)
Servicio REST listar los permisos que pueden tener los distintos usuarios.
Retorna:
HTTP Status
- 200, la solicitud fue exitosa, y la respuesta contendría la lista de permisos.
- 500, cualquier otra excepción no manejada.
JSON
[
{
"id": 0,
"name": "string"
}
]
Ejemplo de uso
{
"name": "string"
}
zibanu.django.auth.api.services.profile module
Contiene un conjunto de métodos para la gestión de perfiles de usuario de Zibanu para Django.
Update Profile (Actualizacion de perfil)
Servicio REST para actualizar el modelo UserProfile.
Parámetros:
- timezone (opcional): Nombre calificado de la zona horaria. Ejemplo "America/Bogota".
- theme (opcional): Tema que utilizará el usuario para la visibilización del aplicativo. Están disponibles los temas "dark" y "corporate".
- lang (opcional): Lenguaje que se utilizará principalmente en la interfaz del usuario y en los mensajes que el backend envía.
- avatar (opcional): Almacena la información o la referencia a la imagen seleccionada por el usuario para su avatar.
- keep_logged_in (opcional): Bandera que indica al sistema si mantiene abierta la sesión del usuario o no.
- message_timeout (opcional): Tiempo de espera configurado para mantener los mensajes en la interfaz activos.
- multiple_login (opcional): Indica si permite al usuario mantener varias sesiones abiertas del sistema en el mismo tipo de dispositivo.
Retorna:
HTTP Status
- 200, si la actualización del usuario se realiza correctamente.
- 406, si hay algún problema con los datos proporcionados en la solicitud que no cumple con ciertas validaciones definidas.
- 500, cualquier otra excepción no manejada.
JSON
{
"timezone": "Africa/Abidjan",
"theme": "string",
"lang": "str",
"avatar": "string",
"messages_timeout": 0,
"keep_logged_in": true,
"app_profile": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"multiple_login": true,
"secure_password": true
}
Ejemplo de uso
{
"timezone": "Africa/Abidjan",
"theme": "string",
"lang": "str",
"avatar": "string",
"messages_timeout": 0,
"keep_logged_in": true,
"app_profile": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"multiple_login": true,
"secure_password": true
}
zibanu.django.auth.api.services.group module
Contiene un conjunto de métodos para la gestión de grupos de usuarios de Zibanu para Django.
Group List (Lista de grupo)
Servicio REST para listar los grupos (roles).
Retorna:
HTTP Status
- 200, si la solicitud fue exitosa y la respuesta contiene la lista de resultados.
- 403, el usuario no tiene los permisos necesarios para acceder a la lista de resultados.
- 404, la lista de resultados solicitada no pudo ser encontrada.
- 500, cualquier otra excepción no manejada.
JSON
[
{
"id": 0,
"name": "string",
"level": "5"
}
]
Ejemplo de uso
{
"name": "string"
}
zibanu.django.auth.lib package
Paquete que contiene módulos, clases y utilidades relacionadas con la autenticación y autorización de Zibanu para Django.
zibanu.django.auth.lib.signals module
Este módulo tiene como objetivo manejar señales personalizadas de Django para capturar eventos relacionados con la autenticación y la gestión de contraseñas.
Se definen dos señales:
- Se utiliza para gestionar eventos relacionados con el cambio de contraseña.
on_change_password = dispatch.Signal()
- Se utiliza para gestionar eventos relacionados con el restablecimiento de contraseña.
on_request_password = dispatch.Signal()
Los decoradores @receiver
se utilizan para asociar funciones receptoras (event handlers) a las señales definidas. Cada
una de ellas se activará cuando se emita la señal correspondiente.
@receiver(on_change_password, dispatch_uid="on_change_password")
- Asigna la función receptora a la señal
on_change_password
. Se agrega un identificador único (dispatch_uid
) para garantizar que la conexión de la señal sea única y no se duplique.
@receiver(on_request_password, dispatch_uid="on_request_password")
- Asigna la función receptora a la señal
on_request_password
. Se agrega un identificador único (dispatch_uid
) para garantizar que la conexión de la señal sea única y no se duplique.
@receiver(user_logged_in, dispatch_uid="on_user_logged_in")
- Asigna la función receptora a la señal
user_logged_in
. Se agrega un identificador único (dispatch_uid
) para garantizar que la conexión de la señal sea única y no se duplique.
@receiver(user_login_failed, dispatch_uid="on_user_login_failed")
- Asigna la función receptora a la señal
user_login_failed
. Se agrega un identificador único (dispatch_uid
) para garantizar que la conexión de la señal sea única y no se duplique.
auth_receiver(sender: Any, user: Any = None, **kwargs)→ None:
Esta función actúa como un manejador para eventos capturados por las señales de cambio de contraseña o solicitud de contraseña.
Parámetros:
- sender: Clase de emisor de la señal.
- user: Objeto de usuario para obtener datos.
- **kwargs: Diccionario con campos y parámetros.
Retorno:
- Ninguno.
zibanu.django.auth.lib.utils module
Este modulo contiene la siguiente función:
get_user
: Obtiene el objeto de usuario de SimpleJWT TokenUser.
Parámetros:
- user: Objeto de usuario de tipo de usuario de token SimpleJWT o tipo de objeto de usuario
Retorna:
- user: Tipo de objeto de usuario de Django.
zibanu.django.auth.api.serializers package
Este directorio contiene serializadores para la API de autenticación de Zibanu para Django.
zibanu.django.auth.api.serializers.group module
GroupListSerializer es un serializador para una lista de grupos. Incluye los siguientes campos:
- id: El ID del grupo.
- name: El nombre del grupo.
zibanu.django.auth.api.serializers.permission module
PermissionSerializer es un serializador para un permiso. Incluye los siguientes campos:
- id: El ID del permiso.
- name: El nombre del permiso.
zibanu.django.auth.api.serializers.profile module
ProfileSerializer es un serializador para un perfil de usuario. Incluye los siguientes campos:
- timezone: La zona horaria del usuario.
- theme: El tema del usuario.
- lang: El idioma del usuario.
- avatar: El avatar del usuario.
- message_timeout: Tiempo de espera de los mensajes del usuario.
- keep_logged_in: Si el usuario desea permanecer conectado.
- app_profile: El perfil de la aplicación del usuario.
- multiple_login: Si el usuario permite múltiples inicios de sesión.
- secure_password: Si la contraseña del usuario es segura.
zibanu.django.auth.api.serializers.token module
TokenObtainSerializer es un serializador para obtener un token mediante la autenticación de correo electrónico. Incluye los siguientes campos:
- username_field: El campo que se usará para la autenticación del nombre de usuario.
- email: La dirección de correo electrónico del usuario.
- password: La contraseña del usuario.
TokenObtainSlidingSerializer es una subclase de TokenObtainSerializer que usa un token deslizante. Incluye los siguientes campos:
- token.
zibanu.django.auth.api.serializers.user module
La clase UserSerializer se utiliza para serializar y deserializar un solo objeto de usuario. Incluye los siguientes campos:UserSerializer es un serializador para un usuario. Incluye los siguientes campos:
- email.
- full_name.
- last_login.
- is_staff.
- is_superuser.
- is_active.
- profile.
- roles.
- first_name.
- last_name.
- permissions.
- username.
- password.
El método create
se utiliza para crear un nuevo objeto de usuario. Toma un diccionario de datos validados como entrada
y crea un nuevo objeto de usuario con los datos proporcionados. Si el objeto de usuario se crea correctamente, devuelve
el objeto de usuario. Si el objeto de usuario ya existe, genera una excepción ValidationError
.
UserListSerializer
UserListSerializer es un serializador para una lista de usuarios. Incluye los siguientes campos:
- full_name.
- email.
- last_login.
- username.
- is_staff.
- is_superuser.
El método get_full_name
se utiliza para obtener el nombre completo de un objeto de usuario. Toma un objeto de usuario
como entrada y devuelve el nombre completo del usuario.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file zibanu_django_auth-1.1.8.tar.gz
.
File metadata
- Download URL: zibanu_django_auth-1.1.8.tar.gz
- Upload date:
- Size: 154.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3571b98dd2b2d35d902d1bbd2d14a99b1db8da07a539c7c0fffce996f845146 |
|
MD5 | 89b0870909af7aba3295f00b64539586 |
|
BLAKE2b-256 | d7fe54c25c089f27adde2133dfa4c3f03573f04f875ed7b27229720c4b4ae808 |
File details
Details for the file zibanu_django_auth-1.1.8-py3-none-any.whl
.
File metadata
- Download URL: zibanu_django_auth-1.1.8-py3-none-any.whl
- Upload date:
- Size: 108.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d95357e92e4f0a1d554105fe0695ee15b9878ef3ef9fa98824860ac426f4f871 |
|
MD5 | 813d5493d006f8dfc0d50b6725739f94 |
|
BLAKE2b-256 | aa628fe50e95a60e42df59eebf35687f738dec2ee1cd0235512b03dbecc23f58 |