Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo

En el presente documento se expone el desarrollo de una simulación que ayuda a entender lo que sucede a nivel de red y protocolos cuando se ejecuta un ataque CSRF. A través del uso de tecnologías como Java, JavaScript, HTML, Angular, Spring Boot y GitHub se construyó una página web con funcionalidad...

Full description

Autores:
González Ruiz, Anderson Alexander
Rodríguez Angarita, July Paola
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2024
Institución:
Universidad Distrital Francisco José de Caldas
Repositorio:
RIUD: repositorio U. Distrital
Idioma:
spa
OAI Identifier:
oai:repository.udistrital.edu.co:11349/92838
Acceso en línea:
http://hdl.handle.net/11349/92838
Palabra clave:
CSRF
Autenticación
Atacante
Sesión
Vulnerabilidad
Seguridad web
Ingeniería en Telecomunicaciones -- Tesis y disertaciones académicas
Seguridad en computadores
Métodos de simulación
Cifrado de datos (Informática)
Aplicaciones web
CSRF
Authentication
Hacker
Session
Vulnerability
Web security
Rights
License
Attribution-NonCommercial-NoDerivatives 4.0 Internacional
id UDISTRITA2_d63396c80b88d1161d73a5328889cda6
oai_identifier_str oai:repository.udistrital.edu.co:11349/92838
network_acronym_str UDISTRITA2
network_name_str RIUD: repositorio U. Distrital
repository_id_str
dc.title.spa.fl_str_mv Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
dc.title.titleenglish.spa.fl_str_mv Simulation of a CSRF attack through a web application with an explanatory focus
title Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
spellingShingle Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
CSRF
Autenticación
Atacante
Sesión
Vulnerabilidad
Seguridad web
Ingeniería en Telecomunicaciones -- Tesis y disertaciones académicas
Seguridad en computadores
Métodos de simulación
Cifrado de datos (Informática)
Aplicaciones web
CSRF
Authentication
Hacker
Session
Vulnerability
Web security
title_short Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
title_full Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
title_fullStr Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
title_full_unstemmed Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
title_sort Simulación del ataque CSRF por medio de una aplicación web con enfoque explicativo
dc.creator.fl_str_mv González Ruiz, Anderson Alexander
Rodríguez Angarita, July Paola
dc.contributor.advisor.none.fl_str_mv Jacinto Gómez, Edwar
dc.contributor.author.none.fl_str_mv González Ruiz, Anderson Alexander
Rodríguez Angarita, July Paola
dc.contributor.orcid.none.fl_str_mv Jacinto Gómez,Edwar [0000-0003-4038-8137]
dc.subject.spa.fl_str_mv CSRF
Autenticación
Atacante
Sesión
Vulnerabilidad
Seguridad web
topic CSRF
Autenticación
Atacante
Sesión
Vulnerabilidad
Seguridad web
Ingeniería en Telecomunicaciones -- Tesis y disertaciones académicas
Seguridad en computadores
Métodos de simulación
Cifrado de datos (Informática)
Aplicaciones web
CSRF
Authentication
Hacker
Session
Vulnerability
Web security
dc.subject.lemb.none.fl_str_mv Ingeniería en Telecomunicaciones -- Tesis y disertaciones académicas
Seguridad en computadores
Métodos de simulación
Cifrado de datos (Informática)
Aplicaciones web
dc.subject.keyword.spa.fl_str_mv CSRF
Authentication
Hacker
Session
Vulnerability
Web security
description En el presente documento se expone el desarrollo de una simulación que ayuda a entender lo que sucede a nivel de red y protocolos cuando se ejecuta un ataque CSRF. A través del uso de tecnologías como Java, JavaScript, HTML, Angular, Spring Boot y GitHub se construyó una página web con funcionalidades similares a un portal bancario que permite configurar distintos niveles de seguridad, también se programó una aplicación en JavaScript vanilla desde la que se explica paso a paso cómo hacer el ataque lo cual permite al usuario tener la noción de las afectaciones que podría experimentar y saber cómo prevenirlas. Con esta proyecto se logró explicar de manera sencilla el impacto que puede causar la vulnerabilidad CSRF, también es de ayuda para crear conciencia a la hora de navegar en internet y se disminuyen las probabilidades de ser víctima de este tipo de ataque ya que se educa sobre las medidas de protección necesarias y buenas prácticas.
publishDate 2024
dc.date.created.none.fl_str_mv 2024-05-20
dc.date.accessioned.none.fl_str_mv 2025-02-20T17:49:21Z
dc.date.available.none.fl_str_mv 2025-02-20T17:49:21Z
dc.type.spa.fl_str_mv bachelorThesis
dc.type.degree.spa.fl_str_mv Monografía
dc.type.driver.spa.fl_str_mv info:eu-repo/semantics/bachelorThesis
dc.type.coar.spa.fl_str_mv http://purl.org/coar/resource_type/c_7a1f
format http://purl.org/coar/resource_type/c_7a1f
dc.identifier.uri.none.fl_str_mv http://hdl.handle.net/11349/92838
url http://hdl.handle.net/11349/92838
dc.language.iso.spa.fl_str_mv spa
language spa
dc.relation.references.none.fl_str_mv International Telecommunication Union (2021) Measuring digital development Facts and figures 2021. Geneva: ITU Publications. [Online]. Available: https://www.itu.int/en/ITU-D/Statistics/Documents/facts/FactsFigures2021.pdf
Unión Internacional de Telecomunicaciones. Función de la UIT en el fomento de la confianza en la utilización de las TIC (2021 Junio) [Online]. Available: https://www.itu.int/es/Pages/default.aspx
C. Tomé López. Fuego griego (2016 Noviembre 8) [Online]. Available: https://culturacientifica.com/2016/11/08/fuego-griego/
KirstenS, D. Wichers, Davisnw, P. Petefish, A. Weidman, M. Brooks, A. Mir, Dc, D. h3lix, J. Manico, R. Gilbert, Tgondrom, P. Krawczyk, Brandt, A. V. Minhaz, K. Lorenzo, A. Smith, C. Schelin, A. Elias-Bachrach, Sarciszewski, kingthorin, B. Spatafora. Cross Site Request Forgery (CSRF) [Online]. Available: https://owasp.org/www-community/attacks/csrf
R. Auger (2010 Abril 4) The Cross-Site Request Forgery (CSRF/XSRF) FAQ [Online]. Available: https://www.cgisecurity.com/csrf-faq.html
E. Saad, R. Mitchell, R. Rehim, V. Drake. (2021 Diciembre 30) OWASP Web Security Testing Guide [Online]. Available: https://github.com/OWASP/wstg
A. Ramrami, I. Albert. OWASP CSRFGuard [Online]. Available: https://owasp.org/www-project-csrfguard/
Minhaz, K. Wall, A. Naderi, J. Manico, A. Dahiya. OWASP CSRF Protector Project [Online]. Available: https://github.com/mebjas/CSRF-Protector-PHP
J. Garson. CSRF Falsificando peticiones (2016 Abril) [Online]. Available: https://owasp.org/www-pdf-archive//CSRF_falsificando_peticiones.pdf
A. Sarosi, Tutorial de Ataque CSRF y CSRF Tokens en Node.js [Online]. [4tomik], 26 de marzo de 2021. Available: https://www.youtube.com/watch?v=C9dvkIndTLA&list=PLsDn3GZhjpu-N6icEViDMjeZlJoWi6Jex& index=15
Cisco. What are cookies? What are the differences between them (session vs. persistent)? (2018 Julio 17) [Online]. Available: https://www.cisco.com/c/en/us/support/docs/security/web-security-appliance/117925-technote-csc-00. html
Kaspersky Lab. What are Cookies? [Online]. Available: https://www.kaspersky.com/resource-center/definitions/cookies
D. Johansson. Bypassing CSRF Protections, A Double Defeat of the Double-Submit Cookie Pattern [Online]. Available: https://owasp.org/www-pdf-archive/David_Johansson-Double_Defeat_of_Double-Submit_Cookie.pdf
IBM MQ. Identificación y autenticación (2021 Abril 20) [Online]. Available: https://www.ibm.com/docs/es/ibm-mq/7.5?topic=ssfksj-7-5-0-com-ibm-mq-sec-doc-q009740--htm
E. Kiriakos Piazza. Autenticación basada en Cookies de sesión vs Tokens [Online]. Available: https://platzi.com/tutoriales/1461-django-avanzado/7201-autenticacion-basada-en-cookies-de-sesion-v s-tokens/
dc.rights.*.fl_str_mv Attribution-NonCommercial-NoDerivatives 4.0 Internacional
Attribution-NonCommercial-NoDerivatives 4.0 Internacional
dc.rights.coar.fl_str_mv http://purl.org/coar/access_right/c_abf2
dc.rights.uri.*.fl_str_mv http://creativecommons.org/licenses/by-nc-nd/4.0/
dc.rights.acceso.spa.fl_str_mv Abierto (Texto Completo)
rights_invalid_str_mv Attribution-NonCommercial-NoDerivatives 4.0 Internacional
http://creativecommons.org/licenses/by-nc-nd/4.0/
Abierto (Texto Completo)
http://purl.org/coar/access_right/c_abf2
dc.format.mimetype.spa.fl_str_mv pdf
institution Universidad Distrital Francisco José de Caldas
bitstream.url.fl_str_mv https://repository.udistrital.edu.co/bitstreams/514cc199-fa2f-4a05-9847-744b5dc5a725/download
https://repository.udistrital.edu.co/bitstreams/e518336a-3829-48fc-9d5f-d09e7e4ff984/download
https://repository.udistrital.edu.co/bitstreams/aa181c2e-6470-4057-8030-b2d0aa8709e9/download
https://repository.udistrital.edu.co/bitstreams/8fbc7013-cafa-44b1-9540-0a4ed7551bf0/download
https://repository.udistrital.edu.co/bitstreams/bb522c77-ce34-4575-921a-27fa27067d8a/download
bitstream.checksum.fl_str_mv 92cbe85a63681c8295ca58b458e47676
06ba942e9c4997530b905c7b9a58ae5d
6c4ae9f0e188cd9ff706969e8d7abfa2
4460e5956bc1d1639be9ae6146a50347
997daf6c648c962d566d7b082dac908d
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Universidad Distrital
repository.mail.fl_str_mv repositorio@udistrital.edu.co
_version_ 1837007180790759424
spelling Jacinto Gómez, EdwarGonzález Ruiz, Anderson AlexanderRodríguez Angarita, July PaolaJacinto Gómez,Edwar [0000-0003-4038-8137]2025-02-20T17:49:21Z2025-02-20T17:49:21Z2024-05-20http://hdl.handle.net/11349/92838En el presente documento se expone el desarrollo de una simulación que ayuda a entender lo que sucede a nivel de red y protocolos cuando se ejecuta un ataque CSRF. A través del uso de tecnologías como Java, JavaScript, HTML, Angular, Spring Boot y GitHub se construyó una página web con funcionalidades similares a un portal bancario que permite configurar distintos niveles de seguridad, también se programó una aplicación en JavaScript vanilla desde la que se explica paso a paso cómo hacer el ataque lo cual permite al usuario tener la noción de las afectaciones que podría experimentar y saber cómo prevenirlas. Con esta proyecto se logró explicar de manera sencilla el impacto que puede causar la vulnerabilidad CSRF, también es de ayuda para crear conciencia a la hora de navegar en internet y se disminuyen las probabilidades de ser víctima de este tipo de ataque ya que se educa sobre las medidas de protección necesarias y buenas prácticas.This document presents the development of a simulation that helps understand what happens at the network and protocol level when a CSRF attack is executed. Using technologies such as Java, JavaScript, HTML, Angular, Spring Boot, and GitHub, a web page with functionalities similar to a banking portal was built, allowing different levels of security to be configured. Additionally, a vanilla JavaScript application was programmed to explain step-by-step how to carry out the attack, enabling users to understand the potential impacts and how to prevent them. This project successfully explains in a simple manner the impact that the CSRF vulnerability can have, helps raise awareness when browsing the internet, and reduces the likelihood of falling victim to this type of attack by educating users on the necessary protective measures and best practices.pdfspaAttribution-NonCommercial-NoDerivatives 4.0 InternacionalAttribution-NonCommercial-NoDerivatives 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2CSRFAutenticaciónAtacanteSesiónVulnerabilidadSeguridad webIngeniería en Telecomunicaciones -- Tesis y disertaciones académicasSeguridad en computadoresMétodos de simulaciónCifrado de datos (Informática)Aplicaciones webCSRFAuthenticationHackerSessionVulnerabilityWeb securitySimulación del ataque CSRF por medio de una aplicación web con enfoque explicativoSimulation of a CSRF attack through a web application with an explanatory focusbachelorThesisMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fInternational Telecommunication Union (2021) Measuring digital development Facts and figures 2021. Geneva: ITU Publications. [Online]. Available: https://www.itu.int/en/ITU-D/Statistics/Documents/facts/FactsFigures2021.pdfUnión Internacional de Telecomunicaciones. Función de la UIT en el fomento de la confianza en la utilización de las TIC (2021 Junio) [Online]. Available: https://www.itu.int/es/Pages/default.aspxC. Tomé López. Fuego griego (2016 Noviembre 8) [Online]. Available: https://culturacientifica.com/2016/11/08/fuego-griego/KirstenS, D. Wichers, Davisnw, P. Petefish, A. Weidman, M. Brooks, A. Mir, Dc, D. h3lix, J. Manico, R. Gilbert, Tgondrom, P. Krawczyk, Brandt, A. V. Minhaz, K. Lorenzo, A. Smith, C. Schelin, A. Elias-Bachrach, Sarciszewski, kingthorin, B. Spatafora. Cross Site Request Forgery (CSRF) [Online]. Available: https://owasp.org/www-community/attacks/csrfR. Auger (2010 Abril 4) The Cross-Site Request Forgery (CSRF/XSRF) FAQ [Online]. Available: https://www.cgisecurity.com/csrf-faq.htmlE. Saad, R. Mitchell, R. Rehim, V. Drake. (2021 Diciembre 30) OWASP Web Security Testing Guide [Online]. Available: https://github.com/OWASP/wstgA. Ramrami, I. Albert. OWASP CSRFGuard [Online]. Available: https://owasp.org/www-project-csrfguard/Minhaz, K. Wall, A. Naderi, J. Manico, A. Dahiya. OWASP CSRF Protector Project [Online]. Available: https://github.com/mebjas/CSRF-Protector-PHPJ. Garson. CSRF Falsificando peticiones (2016 Abril) [Online]. Available: https://owasp.org/www-pdf-archive//CSRF_falsificando_peticiones.pdfA. Sarosi, Tutorial de Ataque CSRF y CSRF Tokens en Node.js [Online]. [4tomik], 26 de marzo de 2021. Available: https://www.youtube.com/watch?v=C9dvkIndTLA&list=PLsDn3GZhjpu-N6icEViDMjeZlJoWi6Jex& index=15Cisco. What are cookies? What are the differences between them (session vs. persistent)? (2018 Julio 17) [Online]. Available: https://www.cisco.com/c/en/us/support/docs/security/web-security-appliance/117925-technote-csc-00. htmlKaspersky Lab. What are Cookies? [Online]. Available: https://www.kaspersky.com/resource-center/definitions/cookiesD. Johansson. Bypassing CSRF Protections, A Double Defeat of the Double-Submit Cookie Pattern [Online]. Available: https://owasp.org/www-pdf-archive/David_Johansson-Double_Defeat_of_Double-Submit_Cookie.pdfIBM MQ. Identificación y autenticación (2021 Abril 20) [Online]. Available: https://www.ibm.com/docs/es/ibm-mq/7.5?topic=ssfksj-7-5-0-com-ibm-mq-sec-doc-q009740--htmE. Kiriakos Piazza. Autenticación basada en Cookies de sesión vs Tokens [Online]. Available: https://platzi.com/tutoriales/1461-django-avanzado/7201-autenticacion-basada-en-cookies-de-sesion-v s-tokens/ORIGINALTrabajo de gradoTrabajo de gradoTrabajo de gradoapplication/pdf3892550https://repository.udistrital.edu.co/bitstreams/514cc199-fa2f-4a05-9847-744b5dc5a725/download92cbe85a63681c8295ca58b458e47676MD51AnexosAnexosAnexosapplication/zip3409022https://repository.udistrital.edu.co/bitstreams/e518336a-3829-48fc-9d5f-d09e7e4ff984/download06ba942e9c4997530b905c7b9a58ae5dMD52Licencia de uso y autorizaciónLicencia de uso y autorizaciónLicenciaapplication/pdf346077https://repository.udistrital.edu.co/bitstreams/aa181c2e-6470-4057-8030-b2d0aa8709e9/download6c4ae9f0e188cd9ff706969e8d7abfa2MD56CC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8805https://repository.udistrital.edu.co/bitstreams/8fbc7013-cafa-44b1-9540-0a4ed7551bf0/download4460e5956bc1d1639be9ae6146a50347MD57LICENSElicense.txtlicense.txttext/plain; charset=utf-87167https://repository.udistrital.edu.co/bitstreams/bb522c77-ce34-4575-921a-27fa27067d8a/download997daf6c648c962d566d7b082dac908dMD5811349/92838oai:repository.udistrital.edu.co:11349/928382025-02-20 12:52:31.063http://creativecommons.org/licenses/by-nc-nd/4.0/Attribution-NonCommercial-NoDerivatives 4.0 Internacionalopen.accesshttps://repository.udistrital.edu.coRepositorio Universidad Distritalrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK