Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos
¿Es posible realizar la implementación, entrenamiento y ejecución de algoritmos supervisados para deep learning en equipos de bajos recursos? Bajo esta premisa se redacta el presente trabajo. Se trata de abordar uno de los inconvenientes que se presentan en la implementación de redes neuronales arti...
- Autores:
-
Medina Gonzalez , Steven
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2021
- Institución:
- Universidad Tecnológica de Pereira
- Repositorio:
- Repositorio Institucional UTP
- Idioma:
- spa
- OAI Identifier:
- oai:repositorio.utp.edu.co:11059/14012
- Acceso en línea:
- https://hdl.handle.net/11059/14012
https://repositorio.utp.edu.co/home
- Palabra clave:
- 000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación
Systems neuroscience
Algorithmic efficiency
Feature detection
Inteligencia artificial
Redes neuronales convolucionales
Algoritmo supervisado
- Rights
- openAccess
- License
- Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
id |
UTP2_2e2341f9f6fd0ece6d079b2de47ca239 |
---|---|
oai_identifier_str |
oai:repositorio.utp.edu.co:11059/14012 |
network_acronym_str |
UTP2 |
network_name_str |
Repositorio Institucional UTP |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
title |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
spellingShingle |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos 000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación Systems neuroscience Algorithmic efficiency Feature detection Inteligencia artificial Redes neuronales convolucionales Algoritmo supervisado |
title_short |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
title_full |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
title_fullStr |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
title_full_unstemmed |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
title_sort |
Implementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursos |
dc.creator.fl_str_mv |
Medina Gonzalez , Steven |
dc.contributor.advisor.none.fl_str_mv |
López Echeverry, Ana Maria |
dc.contributor.author.none.fl_str_mv |
Medina Gonzalez , Steven |
dc.subject.ddc.none.fl_str_mv |
000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación |
topic |
000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computación Systems neuroscience Algorithmic efficiency Feature detection Inteligencia artificial Redes neuronales convolucionales Algoritmo supervisado |
dc.subject.other.none.fl_str_mv |
Systems neuroscience Algorithmic efficiency Feature detection |
dc.subject.proposal.spa.fl_str_mv |
Inteligencia artificial Redes neuronales convolucionales Algoritmo supervisado |
description |
¿Es posible realizar la implementación, entrenamiento y ejecución de algoritmos supervisados para deep learning en equipos de bajos recursos? Bajo esta premisa se redacta el presente trabajo. Se trata de abordar uno de los inconvenientes que se presentan en la implementación de redes neuronales artificiales: analizar y determinar si es posible el entrenamiento, validación y prueba de redes neuronales convolucionales sobre hardware de bajos recursos. Para esto se implementarán dos algoritmos de entrenamiento supervisado para verificar el cumplimiento de los requisitos que se necesitan para su correcto desarrollo y funcionamiento. Se utilizarán 2 equipos con componentes diferentes, un equipo de bajos requisitos y otro con componentes más dedicados. |
publishDate |
2021 |
dc.date.issued.none.fl_str_mv |
2021 |
dc.date.accessioned.none.fl_str_mv |
2022-04-13T11:46:43Z |
dc.date.available.none.fl_str_mv |
2022-04-13T11:46:43Z |
dc.type.none.fl_str_mv |
Trabajo de grado - Pregrado |
dc.type.version.none.fl_str_mv |
info:eu-repo/semantics/acceptedVersion |
dc.type.coar.none.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
dc.type.content.none.fl_str_mv |
Text |
dc.type.driver.none.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
format |
http://purl.org/coar/resource_type/c_7a1f |
status_str |
acceptedVersion |
dc.identifier.uri.none.fl_str_mv |
https://hdl.handle.net/11059/14012 |
dc.identifier.instname.none.fl_str_mv |
Universidad Tecnológica de Pereira |
dc.identifier.reponame.none.fl_str_mv |
Repositorio institucional Universidad Tecnológica de Pereira |
dc.identifier.repourl.none.fl_str_mv |
https://repositorio.utp.edu.co/home |
url |
https://hdl.handle.net/11059/14012 https://repositorio.utp.edu.co/home |
identifier_str_mv |
Universidad Tecnológica de Pereira Repositorio institucional Universidad Tecnológica de Pereira |
dc.language.iso.none.fl_str_mv |
spa |
language |
spa |
dc.relation.references.none.fl_str_mv |
TORO VALDERAS, Antonio José. Implementación de redes neuronales en Raspberry Pi 3 con Movidius Neural Compute Stick [en línea]. Trabajo fin de Máster en Ingeniería Electrónica, Robótica y Automática. Universidad de Sevilla. 2020. [Consultado: 09-11-2021]. Disponible en: Depósito de investigación Universidad de Sevilla. https://idus.us.es/handle/11441/101503 RIZKI HARTAWAN, Dean y WALUYO PURBOYO, Tito y SETIANINGSIH, Casi. Disaster Victims Detection System Using Convolutional Neural Network (CNN) Method. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8784782 QUIROZ MARTÍNEZ, Miguel; VALVERDE LANDIVAR, Galo; PRIETO VILLAMAR, Jonathan y APUPALO DEL ROSARIO, Luis. Detección de personal no autorizado en el departamento de ti utilizando redes neuronales convolucionales en tiempo real con raspberry pi 3 B + [en línea]. Julio - Septiembre de 2020. vol. 5, nro. 3. [Consultado: 11 de noviembre de 2021.] Disponible en: https://revistas.utb.edu.ec/index.php/sr/article/view/897 MÉNDEZ GOMEZ, Javier. Sistema de reconocimiento facial basado en redes neuronales convencionales sobre el dispositivo Raspberry Pi [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/handle/11441/95442 IBERDROLA, ¿QUÉ ES LA INTELIGENCIA ARTIFICIAL?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://www.iberdrola.com/innovacion/que-es-inteligencia-artificial Wikipedia, Red neuronal artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_artificial Wikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucional Wikipedia, Aprendizaje supervisado [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Aprendizaje_supervisado Wikipedia, Visión artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Visi%C3%B3n_artificial Wikipedia, Sistema de reconocimiento facial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Sistema_de_reconocimiento_facial Cursos Gis, ¿Qué es Google Colab?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.cursosgis.com/que-es-google-colab/ CASTRO HURTADO, Víctor de. Diseño de un sistema de identificación de personas. [en línea]. Trabajo de grado en Ingeniería Informática. Universidad de Burgos. [Consultado: 11 de noviembre de 2021.] Disponible en: https://riubu.ubu.es/handle/10259/4987 Wikipedia, Unidad central de procesamiento. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Unidad_central_de_procesamiento Hardzone, Diferencia entre lo que es GPU y tarjeta gráfica. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://hardzone.es/2018/03/11/diferencia-gpu-tarjeta-grafica/ Oracle, ¿Qué es la inteligencia artificial? [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.oracle.com/co/artificial-intelligence/what-is-ai/ Wikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucional Psicología y mente, Redes neuronales profundas: qué son y cómo funcionan. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://psicologiaymente.com/cultura/redes-neuronales profundas Analytics Lane, Implementación del método descenso del gradiente en Python. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.analyticslane.com/2018/12/21/implementacion-del metodo-descenso-del-gradiente-en-python/ TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Primera Parte). 2018. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://torres.ai/deep-learning-inteligencia-artificial keras Talento, Diferencias entre Machine Learning, Inteligencia Artificial y Robótica [sitio web]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://talentocorporativo.com/diferencias-entre-machine learning-inteligencia-artificial-y-robotica/ PONCE CRUZ, Pedro. Inteligencia artificial con aplicaciones a la ingeniería. Editorial Alfaomega, 2011. Wikipedia, Perceptrón multicapa. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Perceptr%C3%B3n_multicapa Wikipedia commons. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://commons.wikimedia.org/wiki/File:ML_dataset_training_validation_test_sets.png Aprende IA, Diferencia entre aprendizaje supervisado y no supervisado. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://aprendeia.com/diferencia-entre-aprendizaje-supervisado-y-no supervisado ELAVARASAN, Dhivya y P. M. DURAIRAJ, Vincent. Crop Yield Prediction Using Deep Reinforcement Learning Model for Sustainable Agrarian Applications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9086620/ SANGMI, Moon; HYUNSUNG Kim y INTAE Hwang. Deep learning-based channel estimation and tracking for millimeter-wave vehicular communications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9143570 KHELIFI, Lazhar y MIGNOTTE, Max. Deep Learning for Change Detection in Remote Sensing Images: Comprehensive Review and Meta-Analysis. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9136674 BEUNZA NUIN, Juan José; PUERTAS SANZ, Enrique y CONDÉS MORENO, Emilia. Manual práctico de inteligencia artificial en entornos sanitarios. Editorial Elsevier, 2019. MUHAMMAD, Adnan; ASAD, Habib; JAWAD, Ashraf; BABAR, Shah y GOHAR, Ali. Improving M Learners’ Performance Through Deep Learning Techniques by Leveraging Features Weights. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9134760 DONGXIA, Zhang; XIAOQING, Han y CHUNYU, Deng. Review on the research and practice of deep learning and reinforcement learning in smart grids. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8468674 CIRESAN, Dan C.; MEIER, Ueli; MASCI, Jonathan; GAMBARDELLA, Luca M. y SCHMIDHUBER, Jurgen. Flexible, High Performance Convolutional Neural Networks for Image Classification. [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://people.idsia.ch/~juergen/ijcai2011.pdf LOPEZ PACHECO, Mario Antonio. Identificación de sistemas no lineales con redes neuronales convolucionales. [en línea]. Trabajo final de Grado de Maestro en Ciencias en la Especialidad de Control Automático. Centro de investigación y de estudios avanzados del instituto politécnico nacional. 2017. [Consultado: 09-11-2021]. Disponible en: https://ctrl.cinvestav.mx/~yuw/pdf/MaTesMLP.pdf Núñez Sánchez-Agustino, Francisco José. Diseño de un sistema de reconocimiento automático de matrículas de vehículos mediante una red neuronal convolucional. [en línea]. 2016. [Consultado: 09-11- 2021]. Disponible en: http://openaccess.uoc.edu/webapps/o2/bitstream/10609/52222/7/fnunezsTFM0616memoria.pdf Juan Barrios, Redes Neuronales Convolucionales. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/redes-neurales-convolucionales/ DURAN SUAREZ, Jaime. Redes Neuronales Convolucionales en R. [en línea] Trabajo de fin de grado en Ingeniería Robótica, Electrónica y Mecatrónica. 2017. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/bitstream/handle/11441/69564/TFG_Jaime%20Dur%C3%A1n%20Su%C3%A1rez.pdf Github, face-mask-detection-keras. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-keras Github, Proyecto-reconocimiento-de-rostro-utilizando-una-cnn [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/elesine/PROYECTO-RECONOCIMIENTO-DE ROSTRO-UTILIZANDO-UNA-CNN Towards data science, COVID-19: Face Mask Detection using TensorFlow and OpenCV. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://towardsdatascience.com/covid-19-face mask-detection-using-tensorflow-and-opencv-702dd833515b Health Big Data, Algoritmo para la detección de mascarilla [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/algoritmo-para-la-deteccion-del-uso-de-la-mascarilla/ Github, Detector de tapabocas con OpenCV y Keras/Tensorflow. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/josebenitezg/covid-19-detector-tapabocas Github, MaskDetection. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/DavidReveloLuna/MaskDetection Github, training the CNN.ipynb [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-keras/blob/master/2.0%20training%20the%20CNN.ipynb KAIMING, He; XIANGYU, Zhang; SHAOQING, Ren y JIAN, Sun. Deep Residual Learning for Image Recognition. En: IEEE [en línea] [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/7780459 Stack Overflow, How to split resnet50 model from top as well as from bottom [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://stackoverflow.com/questions/54207410/how-to-split resnet50-model-from-top-as-well-as-from-bottom Free code camp, Object Detection in Google Colab with Fizyr Retinanet. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://medium.com/free-code-camp/object-detection-in-colab-with fizyr-retinanet-efed36ac4af3 TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Segunda Parte). Alpha editorial, 2019. TORRES, Jordi. PYTHON DEEP LEARNING. Marcombo editorial, 2020. BOBADILLA, Jesus. Machine Learning y Deep Learning. Usando python, scikit y keras. Ediciones de la U editorial, 2021. Vahid Mirjalili, Sebastian Raschka. Python machine learning. Editorial Marcombo, 2019. BOBADILLA, Jesus. Machine Learning Y Deep Learning. Ediciones De La U Limitada, 2020. LOPEZ SOTELO, Jesus Alfonso. Deep Learning Teoria Y Aplicaciones. Alphaeditorial, 2021 |
dc.rights.license.none.fl_str_mv |
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0) |
dc.rights.uri.none.fl_str_mv |
https://creativecommons.org/licenses/by-nc-nd/4.0/ |
dc.rights.coar.none.fl_str_mv |
http://purl.org/coar/access_right/c_abf2 |
dc.rights.accessrights.none.fl_str_mv |
info:eu-repo/semantics/openAccess |
rights_invalid_str_mv |
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0) https://creativecommons.org/licenses/by-nc-nd/4.0/ http://purl.org/coar/access_right/c_abf2 |
eu_rights_str_mv |
openAccess |
dc.format.extent.none.fl_str_mv |
85 páginas |
dc.format.mimetype.none.fl_str_mv |
application/pdf |
dc.publisher.none.fl_str_mv |
Universidad Tecnológica de Pereira |
dc.publisher.program.none.fl_str_mv |
Ingeniería de Sistemas y Computación |
dc.publisher.faculty.none.fl_str_mv |
Facultad de Ingenierías |
dc.publisher.place.none.fl_str_mv |
Pereira |
publisher.none.fl_str_mv |
Universidad Tecnológica de Pereira |
institution |
Universidad Tecnológica de Pereira |
bitstream.url.fl_str_mv |
https://dspace7-utp.metabuscador.org/bitstreams/5843982c-93b1-4cf4-9999-a0db426d178c/download https://dspace7-utp.metabuscador.org/bitstreams/8b09abe8-e009-4fac-b4ab-ef2d8c6ab23d/download https://dspace7-utp.metabuscador.org/bitstreams/e7f9f851-1cd1-4771-bb57-2fe297063144/download https://dspace7-utp.metabuscador.org/bitstreams/5b57782e-2bdc-4d28-a558-13de5f70fcef/download |
bitstream.checksum.fl_str_mv |
53172e84c2aea45392effa33d41dcb1d 2f9959eaf5b71fae44bbf9ec84150c7a cd5bd656d217f4cb5997a21995ea8f87 ae2008092d94f73270b1ad1d4c5c5759 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio de la Universidad Tecnológica de Pereira |
repository.mail.fl_str_mv |
bdigital@metabiblioteca.com |
_version_ |
1815732606512136192 |
spelling |
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)Manifiesto (Manifestamos) en este documento la voluntad de autorizar a la Biblioteca Jorge Roa Martínez de la Universidad Tecnológica de Pereira la publicación en el Repositorio institucional (http://biblioteca.utp.edu.co), la versión electrónica de la OBRA titulada: ________________________________________________________________________________________________ ________________________________________________________________________________________________ ________________________________________________________________________________________________ La Universidad Tecnológica de Pereira, entidad académica sin ánimo de lucro, queda por lo tanto facultada para ejercer plenamente la autorización anteriormente descrita en su actividad ordinaria de investigación, docencia y publicación. La autorización otorgada se ajusta a lo que establece la Ley 23 de 1982. Con todo, en mi (nuestra) condición de autor (es) me (nos) reservo (reservamos) los derechos morales de la OBRA antes citada con arreglo al artículo 30 dehttps://creativecommons.org/licenses/by-nc-nd/4.0/http://purl.org/coar/access_right/c_abf2info:eu-repo/semantics/openAccessLópez Echeverry, Ana MariaMedina Gonzalez , Steven2022-04-13T11:46:43Z2022-04-13T11:46:43Z2021https://hdl.handle.net/11059/14012Universidad Tecnológica de PereiraRepositorio institucional Universidad Tecnológica de Pereirahttps://repositorio.utp.edu.co/home¿Es posible realizar la implementación, entrenamiento y ejecución de algoritmos supervisados para deep learning en equipos de bajos recursos? Bajo esta premisa se redacta el presente trabajo. Se trata de abordar uno de los inconvenientes que se presentan en la implementación de redes neuronales artificiales: analizar y determinar si es posible el entrenamiento, validación y prueba de redes neuronales convolucionales sobre hardware de bajos recursos. Para esto se implementarán dos algoritmos de entrenamiento supervisado para verificar el cumplimiento de los requisitos que se necesitan para su correcto desarrollo y funcionamiento. Se utilizarán 2 equipos con componentes diferentes, un equipo de bajos requisitos y otro con componentes más dedicados.¿Is it possible to implement, train, and run supervised algorithms for deep learning in low-resource devices? The afore question guides the composition of the present work. It is about addressing one of the drawbacks that occur in the implementation of artificial neural networks: analyze and determine if it is possible to train, validate, and test convolutional neural networks on low-resource hardware. In order to do so, this project implements two supervised training algorithms to verify the fulfillment of the requirements that are needed for its correct development and operation. Two devices with different components will be used, one with low-requirements and the other with better components.CONTENIDO Introducción 7 1. Planteamiento del problema 8 2. Justificación 9 3. Hipótesis 10 4. Objetivos 11 4.1. Objetivo general 11 4.2. Objetivos específicos 11 5. Marco de referencia 12 5.1. Marco teórico 12 5.2. Marco de antecedentes 13 5.3. Marco conceptual 15 6. Estado del arte 18 6.1. Machine Learning 18 6.2. Redes neuronales 19 6.2.1. Perceptrón 21 6.2.2. Perceptrón multicapa 22 6.2.3. Entrenamiento, validación y prueba de una red neuronal artificial 23 6.2.4. Proceso de aprendizaje de una red neuronal artificial 24 6.2.5. Funciones de activación 28 6.2.6. Descenso de gradiente estocástico 30 6.3. Deep Learning 31 6.4. Redes Neuronales Convolucionales 33 6.4.1. Capa de procesamiento de imágenes 35 6.4.2. Capa convolucional 35 6.4.3. Capa de submuestreo 38 6.4.4. Capa de clasificación 40 6.4.5. Capa dropout 40 7. Diseño metodológico 42 8. Elección de algoritmos 43 9. Implementación de algoritmos 46 9.1. HaarDetection 46 9.1.1. Librerías 46 9.1.2. Obtención del dataset 47 9.1.3. Entrenamiento de la red 51 9.1.4. Ejecución de la clasificación 53 9.2. MaskDetection 54 9.2.1. Librerías 54 9.2.2. Obtención del dataset 55 9.2.3. Entrenamiento de la red 57 9.2.4. Ejecución de la clasificación 61 10. Entrenamiento 63 10.1. Entrenamiento en el primer equipo 64 10.2. Entrenamiento en el Segundo equipo 69 10.3. Resultados obtenidos del entrenamiento 74 11. Pruebas 75 11.1. Resultados entre las implementaciones 76 12. Problemas encontrados 78 13. Conclusiones 80 14. Futuras mejoras 81 15. Bibliografía 82PregradoIngeniero(a) de Sistemas y Computación85 páginasapplication/pdfspaUniversidad Tecnológica de PereiraIngeniería de Sistemas y ComputaciónFacultad de IngenieríasPereira000 - Ciencias de la computación, información y obras generales::006 - Métodos especiales de computaciónSystems neuroscienceAlgorithmic efficiencyFeature detectionInteligencia artificialRedes neuronales convolucionalesAlgoritmo supervisadoImplementación y comparación de dos algoritmos supervisados en redes neuronales convolucionales orientadas a la detección de rostros para ejecutarse en hardware de bajos recursosTrabajo de grado - Pregradoinfo:eu-repo/semantics/acceptedVersionhttp://purl.org/coar/resource_type/c_7a1fTextinfo:eu-repo/semantics/bachelorThesisTORO VALDERAS, Antonio José. Implementación de redes neuronales en Raspberry Pi 3 con Movidius Neural Compute Stick [en línea]. Trabajo fin de Máster en Ingeniería Electrónica, Robótica y Automática. Universidad de Sevilla. 2020. [Consultado: 09-11-2021]. Disponible en: Depósito de investigación Universidad de Sevilla. https://idus.us.es/handle/11441/101503RIZKI HARTAWAN, Dean y WALUYO PURBOYO, Tito y SETIANINGSIH, Casi. Disaster Victims Detection System Using Convolutional Neural Network (CNN) Method. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8784782QUIROZ MARTÍNEZ, Miguel; VALVERDE LANDIVAR, Galo; PRIETO VILLAMAR, Jonathan y APUPALO DEL ROSARIO, Luis. Detección de personal no autorizado en el departamento de ti utilizando redes neuronales convolucionales en tiempo real con raspberry pi 3 B + [en línea]. Julio - Septiembre de 2020. vol. 5, nro. 3. [Consultado: 11 de noviembre de 2021.] Disponible en: https://revistas.utb.edu.ec/index.php/sr/article/view/897MÉNDEZ GOMEZ, Javier. Sistema de reconocimiento facial basado en redes neuronales convencionales sobre el dispositivo Raspberry Pi [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/handle/11441/95442IBERDROLA, ¿QUÉ ES LA INTELIGENCIA ARTIFICIAL?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://www.iberdrola.com/innovacion/que-es-inteligencia-artificialWikipedia, Red neuronal artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_artificialWikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucionalWikipedia, Aprendizaje supervisado [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Aprendizaje_supervisadoWikipedia, Visión artificial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Visi%C3%B3n_artificialWikipedia, Sistema de reconocimiento facial. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Sistema_de_reconocimiento_facialCursos Gis, ¿Qué es Google Colab?. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.cursosgis.com/que-es-google-colab/CASTRO HURTADO, Víctor de. Diseño de un sistema de identificación de personas. [en línea]. Trabajo de grado en Ingeniería Informática. Universidad de Burgos. [Consultado: 11 de noviembre de 2021.] Disponible en: https://riubu.ubu.es/handle/10259/4987Wikipedia, Unidad central de procesamiento. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Unidad_central_de_procesamientoHardzone, Diferencia entre lo que es GPU y tarjeta gráfica. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://hardzone.es/2018/03/11/diferencia-gpu-tarjeta-grafica/Oracle, ¿Qué es la inteligencia artificial? [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.oracle.com/co/artificial-intelligence/what-is-ai/Wikipedia, Red neuronal convolucional. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Red_neuronal_convolucionalPsicología y mente, Redes neuronales profundas: qué son y cómo funcionan. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://psicologiaymente.com/cultura/redes-neuronales profundasAnalytics Lane, Implementación del método descenso del gradiente en Python. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.analyticslane.com/2018/12/21/implementacion-del metodo-descenso-del-gradiente-en-python/TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Primera Parte). 2018. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://torres.ai/deep-learning-inteligencia-artificial kerasTalento, Diferencias entre Machine Learning, Inteligencia Artificial y Robótica [sitio web]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://talentocorporativo.com/diferencias-entre-machine learning-inteligencia-artificial-y-robotica/PONCE CRUZ, Pedro. Inteligencia artificial con aplicaciones a la ingeniería. Editorial Alfaomega, 2011.Wikipedia, Perceptrón multicapa. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://es.wikipedia.org/wiki/Perceptr%C3%B3n_multicapaWikipedia commons. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://commons.wikimedia.org/wiki/File:ML_dataset_training_validation_test_sets.pngAprende IA, Diferencia entre aprendizaje supervisado y no supervisado. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://aprendeia.com/diferencia-entre-aprendizaje-supervisado-y-no supervisadoELAVARASAN, Dhivya y P. M. DURAIRAJ, Vincent. Crop Yield Prediction Using Deep Reinforcement Learning Model for Sustainable Agrarian Applications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9086620/SANGMI, Moon; HYUNSUNG Kim y INTAE Hwang. Deep learning-based channel estimation and tracking for millimeter-wave vehicular communications. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9143570KHELIFI, Lazhar y MIGNOTTE, Max. Deep Learning for Change Detection in Remote Sensing Images: Comprehensive Review and Meta-Analysis. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9136674BEUNZA NUIN, Juan José; PUERTAS SANZ, Enrique y CONDÉS MORENO, Emilia. Manual práctico de inteligencia artificial en entornos sanitarios. Editorial Elsevier, 2019.MUHAMMAD, Adnan; ASAD, Habib; JAWAD, Ashraf; BABAR, Shah y GOHAR, Ali. Improving M Learners’ Performance Through Deep Learning Techniques by Leveraging Features Weights. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/9134760DONGXIA, Zhang; XIAOQING, Han y CHUNYU, Deng. Review on the research and practice of deep learning and reinforcement learning in smart grids. En: IEEE [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/8468674CIRESAN, Dan C.; MEIER, Ueli; MASCI, Jonathan; GAMBARDELLA, Luca M. y SCHMIDHUBER, Jurgen. Flexible, High Performance Convolutional Neural Networks for Image Classification. [en línea]. [Consultado: 11 de noviembre de 2021.] Disponible en: https://people.idsia.ch/~juergen/ijcai2011.pdfLOPEZ PACHECO, Mario Antonio. Identificación de sistemas no lineales con redes neuronales convolucionales. [en línea]. Trabajo final de Grado de Maestro en Ciencias en la Especialidad de Control Automático. Centro de investigación y de estudios avanzados del instituto politécnico nacional. 2017. [Consultado: 09-11-2021]. Disponible en: https://ctrl.cinvestav.mx/~yuw/pdf/MaTesMLP.pdfNúñez Sánchez-Agustino, Francisco José. Diseño de un sistema de reconocimiento automático de matrículas de vehículos mediante una red neuronal convolucional. [en línea]. 2016. [Consultado: 09-11- 2021]. Disponible en: http://openaccess.uoc.edu/webapps/o2/bitstream/10609/52222/7/fnunezsTFM0616memoria.pdfJuan Barrios, Redes Neuronales Convolucionales. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/redes-neurales-convolucionales/DURAN SUAREZ, Jaime. Redes Neuronales Convolucionales en R. [en línea] Trabajo de fin de grado en Ingeniería Robótica, Electrónica y Mecatrónica. 2017. [Consultado: 11 de noviembre de 2021.] Disponible en: https://idus.us.es/bitstream/handle/11441/69564/TFG_Jaime%20Dur%C3%A1n%20Su%C3%A1rez.pdfGithub, face-mask-detection-keras. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-kerasGithub, Proyecto-reconocimiento-de-rostro-utilizando-una-cnn [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/elesine/PROYECTO-RECONOCIMIENTO-DE ROSTRO-UTILIZANDO-UNA-CNNTowards data science, COVID-19: Face Mask Detection using TensorFlow and OpenCV. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://towardsdatascience.com/covid-19-face mask-detection-using-tensorflow-and-opencv-702dd833515bHealth Big Data, Algoritmo para la detección de mascarilla [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://www.juanbarrios.com/algoritmo-para-la-deteccion-del-uso-de-la-mascarilla/Github, Detector de tapabocas con OpenCV y Keras/Tensorflow. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/josebenitezg/covid-19-detector-tapabocasGithub, MaskDetection. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en:https://github.com/DavidReveloLuna/MaskDetectionGithub, training the CNN.ipynb [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://github.com/aieml/face-mask-detection-keras/blob/master/2.0%20training%20the%20CNN.ipynbKAIMING, He; XIANGYU, Zhang; SHAOQING, Ren y JIAN, Sun. Deep Residual Learning for Image Recognition. En: IEEE [en línea] [Consultado: 11 de noviembre de 2021.] Disponible en: https://ieeexplore.ieee.org/document/7780459Stack Overflow, How to split resnet50 model from top as well as from bottom [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://stackoverflow.com/questions/54207410/how-to-split resnet50-model-from-top-as-well-as-from-bottomFree code camp, Object Detection in Google Colab with Fizyr Retinanet. [sitio web] [Consultado: 11 de noviembre de 2021.] Disponible en: https://medium.com/free-code-camp/object-detection-in-colab-with fizyr-retinanet-efed36ac4af3TORRES, Jordi. Deep Learning Introducción Práctica Con Keras (Segunda Parte). Alpha editorial, 2019.TORRES, Jordi. PYTHON DEEP LEARNING. Marcombo editorial, 2020.BOBADILLA, Jesus. Machine Learning y Deep Learning. Usando python, scikit y keras. Ediciones de la U editorial, 2021.Vahid Mirjalili, Sebastian Raschka. Python machine learning. Editorial Marcombo, 2019.BOBADILLA, Jesus. Machine Learning Y Deep Learning. Ediciones De La U Limitada, 2020.LOPEZ SOTELO, Jesus Alfonso. Deep Learning Teoria Y Aplicaciones. Alphaeditorial, 2021PublicationORIGINALTRABAJO DE GRADO.PDFTRABAJO DE GRADO.PDFapplication/pdf3101090https://dspace7-utp.metabuscador.org/bitstreams/5843982c-93b1-4cf4-9999-a0db426d178c/download53172e84c2aea45392effa33d41dcb1dMD51LICENSElicense.txtlicense.txttext/plain; charset=utf-814828https://dspace7-utp.metabuscador.org/bitstreams/8b09abe8-e009-4fac-b4ab-ef2d8c6ab23d/download2f9959eaf5b71fae44bbf9ec84150c7aMD52TEXTTRABAJO DE GRADO.PDF.txtTRABAJO DE GRADO.PDF.txtExtracted texttext/plain128233https://dspace7-utp.metabuscador.org/bitstreams/e7f9f851-1cd1-4771-bb57-2fe297063144/downloadcd5bd656d217f4cb5997a21995ea8f87MD53THUMBNAILTRABAJO DE GRADO.PDF.jpgTRABAJO DE GRADO.PDF.jpgGenerated Thumbnailimage/jpeg7227https://dspace7-utp.metabuscador.org/bitstreams/5b57782e-2bdc-4d28-a558-13de5f70fcef/downloadae2008092d94f73270b1ad1d4c5c5759MD5411059/14012oai:dspace7-utp.metabuscador.org:11059/140122024-09-05 17:02:01.776https://creativecommons.org/licenses/by-nc-nd/4.0/Manifiesto (Manifestamos) en este documento la voluntad de autorizar a la Biblioteca Jorge Roa Martínez de la Universidad Tecnológica de Pereira la publicación en el Repositorio institucional (http://biblioteca.utp.edu.co), la versión electrónica de la OBRA titulada: ________________________________________________________________________________________________ ________________________________________________________________________________________________ ________________________________________________________________________________________________ La Universidad Tecnológica de Pereira, entidad académica sin ánimo de lucro, queda por lo tanto facultada para ejercer plenamente la autorización anteriormente descrita en su actividad ordinaria de investigación, docencia y publicación. La autorización otorgada se ajusta a lo que establece la Ley 23 de 1982. Con todo, en mi (nuestra) condición de autor (es) me (nos) reservo (reservamos) los derechos morales de la OBRA antes citada con arreglo al artículo 30 deopen.accesshttps://dspace7-utp.metabuscador.orgRepositorio de la Universidad Tecnológica de Pereirabdigital@metabiblioteca.comTEEgT0JSQSAoVEFMIFkgQ09NTyBTRSBERUZJTkUgTcOBUyBBREVMQU5URSkgU0UgT1RPUkdBIEJBSk8gTE9TIFRFUk1JTk9TIERFIEVTVEEgTElDRU5DSUEgUMOaQkxJQ0EgREUgQ1JFQVRJVkUgQ09NTU9OUyAo4oCcTFBDQ+KAnSBPIOKAnExJQ0VOQ0lB4oCdKS4gTEEgT0JSQSBFU1TDgSBQUk9URUdJREEgUE9SIERFUkVDSE9TIERFIEFVVE9SIFkvVSBPVFJBUyBMRVlFUyBBUExJQ0FCTEVTLiBRVUVEQSBQUk9ISUJJRE8gQ1VBTFFVSUVSIFVTTyBRVUUgU0UgSEFHQSBERSBMQSBPQlJBIFFVRSBOTyBDVUVOVEUgQ09OIExBIEFVVE9SSVpBQ0nDk04gUEVSVElORU5URSBERSBDT05GT1JNSURBRCBDT04gTE9TIFTDiVJNSU5PUyBERSBFU1RBIExJQ0VOQ0lBIFkgREUgTEEgTEVZIERFIERFUkVDSE8gREUgQVVUT1IuCgpNRURJQU5URSBFTCBFSkVSQ0lDSU8gREUgQ1VBTFFVSUVSQSBERSBMT1MgREVSRUNIT1MgUVVFIFNFIE9UT1JHQU4gRU4gRVNUQSBMSUNFTkNJQSwgVVNURUQgQUNFUFRBIFkgQUNVRVJEQSBRVUVEQVIgT0JMSUdBRE8gRU4gTE9TIFRFUk1JTk9TIFFVRSBTRSBTRcORQUxBTiBFTiBFTExBLiBFTCBMSUNFTkNJQU5URSBDT05DRURFIEEgVVNURUQgTE9TIERFUkVDSE9TIENPTlRFTklET1MgRU4gRVNUQSBMSUNFTkNJQSBDT05ESUNJT05BRE9TIEEgTEEgQUNFUFRBQ0nDk04gREUgU1VTIFRFUk1JTk9TIFkgQ09ORElDSU9ORVMuCjEuIERlZmluaWNpb25lcwoKYS4JT2JyYSBDb2xlY3RpdmEgZXMgdW5hIG9icmEsIHRhbCBjb21vIHVuYSBwdWJsaWNhY2nDs24gcGVyacOzZGljYSwgdW5hIGFudG9sb2fDrWEsIG8gdW5hIGVuY2ljbG9wZWRpYSwgZW4gbGEgcXVlIGxhIG9icmEgZW4gc3UgdG90YWxpZGFkLCBzaW4gbW9kaWZpY2FjacOzbiBhbGd1bmEsIGp1bnRvIGNvbiB1biBncnVwbyBkZSBvdHJhcyBjb250cmlidWNpb25lcyBxdWUgY29uc3RpdHV5ZW4gb2JyYXMgc2VwYXJhZGFzIGUgaW5kZXBlbmRpZW50ZXMgZW4gc8OtIG1pc21hcywgc2UgaW50ZWdyYW4gZW4gdW4gdG9kbyBjb2xlY3Rpdm8uIFVuYSBPYnJhIHF1ZSBjb25zdGl0dXllIHVuYSBvYnJhIGNvbGVjdGl2YSBubyBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgKGNvbW8gc2UgZGVmaW5lIGFiYWpvKSBwYXJhIGxvcyBwcm9ww7NzaXRvcyBkZSBlc3RhIGxpY2VuY2lhLiBhcXVlbGxhIHByb2R1Y2lkYSBwb3IgdW4gZ3J1cG8gZGUgYXV0b3JlcywgZW4gcXVlIGxhIE9icmEgc2UgZW5jdWVudHJhIHNpbiBtb2RpZmljYWNpb25lcywganVudG8gY29uIHVuYSBjaWVydGEgY2FudGlkYWQgZGUgb3RyYXMgY29udHJpYnVjaW9uZXMsIHF1ZSBjb25zdGl0dXllbiBlbiBzw60gbWlzbW9zIHRyYWJham9zIHNlcGFyYWRvcyBlIGluZGVwZW5kaWVudGVzLCBxdWUgc29uIGludGVncmFkb3MgYWwgdG9kbyBjb2xlY3Rpdm8sIHRhbGVzIGNvbW8gcHVibGljYWNpb25lcyBwZXJpw7NkaWNhcywgYW50b2xvZ8OtYXMgbyBlbmNpY2xvcGVkaWFzLgoKYi4JT2JyYSBEZXJpdmFkYSBzaWduaWZpY2EgdW5hIG9icmEgYmFzYWRhIGVuIGxhIG9icmEgb2JqZXRvIGRlIGVzdGEgbGljZW5jaWEgbyBlbiDDqXN0YSB5IG90cmFzIG9icmFzIHByZWV4aXN0ZW50ZXMsIHRhbGVzIGNvbW8gdHJhZHVjY2lvbmVzLCBhcnJlZ2xvcyBtdXNpY2FsZXMsIGRyYW1hdGl6YWNpb25lcywg4oCcZmljY2lvbmFsaXphY2lvbmVz4oCdLCB2ZXJzaW9uZXMgcGFyYSBjaW5lLCDigJxncmFiYWNpb25lcyBkZSBzb25pZG/igJ0sIHJlcHJvZHVjY2lvbmVzIGRlIGFydGUsIHJlc8O6bWVuZXMsIGNvbmRlbnNhY2lvbmVzLCBvIGN1YWxxdWllciBvdHJhIGVuIGxhIHF1ZSBsYSBvYnJhIHB1ZWRhIHNlciB0cmFuc2Zvcm1hZGEsIGNhbWJpYWRhIG8gYWRhcHRhZGEsIGV4Y2VwdG8gYXF1ZWxsYXMgcXVlIGNvbnN0aXR1eWFuIHVuYSBvYnJhIGNvbGVjdGl2YSwgbGFzIHF1ZSBubyBzZXLDoW4gY29uc2lkZXJhZGFzIHVuYSBvYnJhIGRlcml2YWRhIHBhcmEgZWZlY3RvcyBkZSBlc3RhIGxpY2VuY2lhLiAoUGFyYSBldml0YXIgZHVkYXMsIGVuIGVsIGNhc28gZGUgcXVlIGxhIE9icmEgc2VhIHVuYSBjb21wb3NpY2nDs24gbXVzaWNhbCBvIHVuYSBncmFiYWNpw7NuIHNvbm9yYSwgcGFyYSBsb3MgZWZlY3RvcyBkZSBlc3RhIExpY2VuY2lhIGxhIHNpbmNyb25pemFjacOzbiB0ZW1wb3JhbCBkZSBsYSBPYnJhIGNvbiB1bmEgaW1hZ2VuIGVuIG1vdmltaWVudG8gc2UgY29uc2lkZXJhcsOhIHVuYSBPYnJhIERlcml2YWRhIHBhcmEgbG9zIGZpbmVzIGRlIGVzdGEgbGljZW5jaWEpLgoKYy4JTGljZW5jaWFudGUsIGVzIGVsIGluZGl2aWR1byBvIGxhIGVudGlkYWQgdGl0dWxhciBkZSBsb3MgZGVyZWNob3MgZGUgYXV0b3IgcXVlIG9mcmVjZSBsYSBPYnJhIGVuIGNvbmZvcm1pZGFkIGNvbiBsYXMgY29uZGljaW9uZXMgZGUgZXN0YSBMaWNlbmNpYS4KCmQuCUF1dG9yIG9yaWdpbmFsLCBlcyBlbCBpbmRpdmlkdW8gcXVlIGNyZcOzIGxhIE9icmEuCgplLglPYnJhLCBlcyBhcXVlbGxhIG9icmEgc3VzY2VwdGlibGUgZGUgcHJvdGVjY2nDs24gcG9yIGVsIHLDqWdpbWVuIGRlIERlcmVjaG8gZGUgQXV0b3IgeSBxdWUgZXMgb2ZyZWNpZGEgZW4gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIGxpY2VuY2lhCgpmLglVc3RlZCwgZXMgZWwgaW5kaXZpZHVvIG8gbGEgZW50aWRhZCBxdWUgZWplcmNpdGEgbG9zIGRlcmVjaG9zIG90b3JnYWRvcyBhbCBhbXBhcm8gZGUgZXN0YSBMaWNlbmNpYSB5IHF1ZSBjb24gYW50ZXJpb3JpZGFkIG5vIGhhIHZpb2xhZG8gbGFzIGNvbmRpY2lvbmVzIGRlIGxhIG1pc21hIHJlc3BlY3RvIGEgbGEgT2JyYSwgbyBxdWUgaGF5YSBvYnRlbmlkbyBhdXRvcml6YWNpw7NuIGV4cHJlc2EgcG9yIHBhcnRlIGRlbCBMaWNlbmNpYW50ZSBwYXJhIGVqZXJjZXIgbG9zIGRlcmVjaG9zIGFsIGFtcGFybyBkZSBlc3RhIExpY2VuY2lhIHBlc2UgYSB1bmEgdmlvbGFjacOzbiBhbnRlcmlvci4KCjIuIERlcmVjaG9zIGRlIFVzb3MgSG9ucmFkb3MgeSBleGNlcGNpb25lcyBMZWdhbGVzLgpOYWRhIGVuIGVzdGEgTGljZW5jaWEgcG9kcsOhIHNlciBpbnRlcnByZXRhZG8gY29tbyB1bmEgZGlzbWludWNpw7NuLCBsaW1pdGFjacOzbiBvIHJlc3RyaWNjacOzbiBkZSBsb3MgZGVyZWNob3MgZGVyaXZhZG9zIGRlbCB1c28gaG9ucmFkbyB5IG90cmFzIGxpbWl0YWNpb25lcyBvIGV4Y2VwY2lvbmVzIGEgbG9zIGRlcmVjaG9zIGRlbCBhdXRvciBiYWpvIGVsIHLDqWdpbWVuIGxlZ2FsIHZpZ2VudGUgbyBkZXJpdmFkbyBkZSBjdWFscXVpZXIgb3RyYSBub3JtYSBxdWUgc2UgbGUgYXBsaXF1ZS4KCjMuIENvbmNlc2nDs24gZGUgbGEgTGljZW5jaWEuCkJham8gbG9zIHTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIGVsIExpY2VuY2lhbnRlIG90b3JnYSBhIFVzdGVkIHVuYSBsaWNlbmNpYSBtdW5kaWFsLCBsaWJyZSBkZSByZWdhbMOtYXMsIG5vIGV4Y2x1c2l2YSB5IHBlcnBldHVhIChkdXJhbnRlIHRvZG8gZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yKSBwYXJhIGVqZXJjZXIgZXN0b3MgZGVyZWNob3Mgc29icmUgbGEgT2JyYSB0YWwgeSBjb21vIHNlIGluZGljYSBhIGNvbnRpbnVhY2nDs246CgphLglSZXByb2R1Y2lyIGxhIE9icmEsIGluY29ycG9yYXIgbGEgT2JyYSBlbiB1bmEgbyBtw6FzIE9icmFzIENvbGVjdGl2YXMsIHkgcmVwcm9kdWNpciBsYSBPYnJhIGluY29ycG9yYWRhIGVuIGxhcyBPYnJhcyBDb2xlY3RpdmFzLgoKYi4JRGlzdHJpYnVpciBjb3BpYXMgbyBmb25vZ3JhbWFzIGRlIGxhcyBPYnJhcywgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYSwgaW5jbHV5w6luZG9sYXMgY29tbyBpbmNvcnBvcmFkYXMgZW4gT2JyYXMgQ29sZWN0aXZhcywgc2Vnw7puIGNvcnJlc3BvbmRhLgoKYy4JRGlzdHJpYnVpciBjb3BpYXMgZGUgbGFzIE9icmFzIERlcml2YWRhcyBxdWUgc2UgZ2VuZXJlbiwgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYS4KTG9zIGRlcmVjaG9zIG1lbmNpb25hZG9zIGFudGVyaW9ybWVudGUgcHVlZGVuIHNlciBlamVyY2lkb3MgZW4gdG9kb3MgbG9zIG1lZGlvcyB5IGZvcm1hdG9zLCBhY3R1YWxtZW50ZSBjb25vY2lkb3MgbyBxdWUgc2UgaW52ZW50ZW4gZW4gZWwgZnV0dXJvLiBMb3MgZGVyZWNob3MgYW50ZXMgbWVuY2lvbmFkb3MgaW5jbHV5ZW4gZWwgZGVyZWNobyBhIHJlYWxpemFyIGRpY2hhcyBtb2RpZmljYWNpb25lcyBlbiBsYSBtZWRpZGEgcXVlIHNlYW4gdMOpY25pY2FtZW50ZSBuZWNlc2FyaWFzIHBhcmEgZWplcmNlciBsb3MgZGVyZWNob3MgZW4gb3RybyBtZWRpbyBvIGZvcm1hdG9zLCBwZXJvIGRlIG90cmEgbWFuZXJhIHVzdGVkIG5vIGVzdMOhIGF1dG9yaXphZG8gcGFyYSByZWFsaXphciBvYnJhcyBkZXJpdmFkYXMuIFRvZG9zIGxvcyBkZXJlY2hvcyBubyBvdG9yZ2Fkb3MgZXhwcmVzYW1lbnRlIHBvciBlbCBMaWNlbmNpYW50ZSBxdWVkYW4gcG9yIGVzdGUgbWVkaW8gcmVzZXJ2YWRvcywgaW5jbHV5ZW5kbyBwZXJvIHNpbiBsaW1pdGFyc2UgYSBhcXVlbGxvcyBxdWUgc2UgbWVuY2lvbmFuIGVuIGxhcyBzZWNjaW9uZXMgNChkKSB5IDQoZSkuCgo0LiBSZXN0cmljY2lvbmVzLgpMYSBsaWNlbmNpYSBvdG9yZ2FkYSBlbiBsYSBhbnRlcmlvciBTZWNjacOzbiAzIGVzdMOhIGV4cHJlc2FtZW50ZSBzdWpldGEgeSBsaW1pdGFkYSBwb3IgbGFzIHNpZ3VpZW50ZXMgcmVzdHJpY2Npb25lczoKCmEuCVVzdGVkIHB1ZWRlIGRpc3RyaWJ1aXIsIGV4aGliaXIgcMO6YmxpY2FtZW50ZSwgZWplY3V0YXIgcMO6YmxpY2FtZW50ZSwgbyBwb25lciBhIGRpc3Bvc2ljacOzbiBww7pibGljYSBsYSBPYnJhIHPDs2xvIGJham8gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIHkgVXN0ZWQgZGViZSBpbmNsdWlyIHVuYSBjb3BpYSBkZSBlc3RhIGxpY2VuY2lhIG8gZGVsIElkZW50aWZpY2Fkb3IgVW5pdmVyc2FsIGRlIFJlY3Vyc29zIGRlIGxhIG1pc21hIGNvbiBjYWRhIGNvcGlhIGRlIGxhIE9icmEgcXVlIGRpc3RyaWJ1eWEsIGV4aGliYSBww7pibGljYW1lbnRlLCBlamVjdXRlIHDDumJsaWNhbWVudGUgbyBwb25nYSBhIGRpc3Bvc2ljacOzbiBww7pibGljYS4gTm8gZXMgcG9zaWJsZSBvZnJlY2VyIG8gaW1wb25lciBuaW5ndW5hIGNvbmRpY2nDs24gc29icmUgbGEgT2JyYSBxdWUgYWx0ZXJlIG8gbGltaXRlIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhIG8gZWwgZWplcmNpY2lvIGRlIGxvcyBkZXJlY2hvcyBkZSBsb3MgZGVzdGluYXRhcmlvcyBvdG9yZ2Fkb3MgZW4gZXN0ZSBkb2N1bWVudG8uIE5vIGVzIHBvc2libGUgc3VibGljZW5jaWFyIGxhIE9icmEuIFVzdGVkIGRlYmUgbWFudGVuZXIgaW50YWN0b3MgdG9kb3MgbG9zIGF2aXNvcyBxdWUgaGFnYW4gcmVmZXJlbmNpYSBhIGVzdGEgTGljZW5jaWEgeSBhIGxhIGNsw6F1c3VsYSBkZSBsaW1pdGFjacOzbiBkZSBnYXJhbnTDrWFzLiBVc3RlZCBubyBwdWVkZSBkaXN0cmlidWlyLCBleGhpYmlyIHDDumJsaWNhbWVudGUsIGVqZWN1dGFyIHDDumJsaWNhbWVudGUsIG8gcG9uZXIgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBjb24gYWxndW5hIG1lZGlkYSB0ZWNub2zDs2dpY2EgcXVlIGNvbnRyb2xlIGVsIGFjY2VzbyBvIGxhIHV0aWxpemFjacOzbiBkZSBlbGxhIGRlIHVuYSBmb3JtYSBxdWUgc2VhIGluY29uc2lzdGVudGUgY29uIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhLiBMbyBhbnRlcmlvciBzZSBhcGxpY2EgYSBsYSBPYnJhIGluY29ycG9yYWRhIGEgdW5hIE9icmEgQ29sZWN0aXZhLCBwZXJvIGVzdG8gbm8gZXhpZ2UgcXVlIGxhIE9icmEgQ29sZWN0aXZhIGFwYXJ0ZSBkZSBsYSBvYnJhIG1pc21hIHF1ZWRlIHN1amV0YSBhIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhLiBTaSBVc3RlZCBjcmVhIHVuYSBPYnJhIENvbGVjdGl2YSwgcHJldmlvIGF2aXNvIGRlIGN1YWxxdWllciBMaWNlbmNpYW50ZSBkZWJlLCBlbiBsYSBtZWRpZGEgZGUgbG8gcG9zaWJsZSwgZWxpbWluYXIgZGUgbGEgT2JyYSBDb2xlY3RpdmEgY3VhbHF1aWVyIHJlZmVyZW5jaWEgYSBkaWNobyBMaWNlbmNpYW50ZSBvIGFsIEF1dG9yIE9yaWdpbmFsLCBzZWfDum4gbG8gc29saWNpdGFkbyBwb3IgZWwgTGljZW5jaWFudGUgeSBjb25mb3JtZSBsbyBleGlnZSBsYSBjbMOhdXN1bGEgNChjKS4KCmIuCVVzdGVkIG5vIHB1ZWRlIGVqZXJjZXIgbmluZ3VubyBkZSBsb3MgZGVyZWNob3MgcXVlIGxlIGhhbiBzaWRvIG90b3JnYWRvcyBlbiBsYSBTZWNjacOzbiAzIHByZWNlZGVudGUgZGUgbW9kbyBxdWUgZXN0w6luIHByaW5jaXBhbG1lbnRlIGRlc3RpbmFkb3MgbyBkaXJlY3RhbWVudGUgZGlyaWdpZG9zIGEgY29uc2VndWlyIHVuIHByb3ZlY2hvIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLiBFbCBpbnRlcmNhbWJpbyBkZSBsYSBPYnJhIHBvciBvdHJhcyBvYnJhcyBwcm90ZWdpZGFzIHBvciBkZXJlY2hvcyBkZSBhdXRvciwgeWEgc2VhIGEgdHJhdsOpcyBkZSB1biBzaXN0ZW1hIHBhcmEgY29tcGFydGlyIGFyY2hpdm9zIGRpZ2l0YWxlcyAoZGlnaXRhbCBmaWxlLXNoYXJpbmcpIG8gZGUgY3VhbHF1aWVyIG90cmEgbWFuZXJhIG5vIHNlcsOhIGNvbnNpZGVyYWRvIGNvbW8gZXN0YXIgZGVzdGluYWRvIHByaW5jaXBhbG1lbnRlIG8gZGlyaWdpZG8gZGlyZWN0YW1lbnRlIGEgY29uc2VndWlyIHVuIHByb3ZlY2hvIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLCBzaWVtcHJlIHF1ZSBubyBzZSByZWFsaWNlIHVuIHBhZ28gbWVkaWFudGUgdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIGVuIHJlbGFjacOzbiBjb24gZWwgaW50ZXJjYW1iaW8gZGUgb2JyYXMgcHJvdGVnaWRhcyBwb3IgZWwgZGVyZWNobyBkZSBhdXRvci4KCmMuCVNpIHVzdGVkIGRpc3RyaWJ1eWUsIGV4aGliZSBww7pibGljYW1lbnRlLCBlamVjdXRhIHDDumJsaWNhbWVudGUgbyBlamVjdXRhIHDDumJsaWNhbWVudGUgZW4gZm9ybWEgZGlnaXRhbCBsYSBPYnJhIG8gY3VhbHF1aWVyIE9icmEgRGVyaXZhZGEgdSBPYnJhIENvbGVjdGl2YSwgVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RhIHRvZGEgbGEgaW5mb3JtYWNpw7NuIGRlIGRlcmVjaG8gZGUgYXV0b3IgZGUgbGEgT2JyYSB5IHByb3BvcmNpb25hciwgZGUgZm9ybWEgcmF6b25hYmxlIHNlZ8O6biBlbCBtZWRpbyBvIG1hbmVyYSBxdWUgVXN0ZWQgZXN0w6kgdXRpbGl6YW5kbzogKGkpIGVsIG5vbWJyZSBkZWwgQXV0b3IgT3JpZ2luYWwgc2kgZXN0w6EgcHJvdmlzdG8gKG8gc2V1ZMOzbmltbywgc2kgZnVlcmUgYXBsaWNhYmxlKSwgeS9vIChpaSkgZWwgbm9tYnJlIGRlIGxhIHBhcnRlIG8gbGFzIHBhcnRlcyBxdWUgZWwgQXV0b3IgT3JpZ2luYWwgeS9vIGVsIExpY2VuY2lhbnRlIGh1YmllcmVuIGRlc2lnbmFkbyBwYXJhIGxhIGF0cmlidWNpw7NuICh2LmcuLCB1biBpbnN0aXR1dG8gcGF0cm9jaW5hZG9yLCBlZGl0b3JpYWwsIHB1YmxpY2FjacOzbikgZW4gbGEgaW5mb3JtYWNpw7NuIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZWwgTGljZW5jaWFudGUsIHTDqXJtaW5vcyBkZSBzZXJ2aWNpb3MgbyBkZSBvdHJhcyBmb3JtYXMgcmF6b25hYmxlczsgZWwgdMOtdHVsbyBkZSBsYSBPYnJhIHNpIGVzdMOhIHByb3Zpc3RvOyBlbiBsYSBtZWRpZGEgZGUgbG8gcmF6b25hYmxlbWVudGUgZmFjdGlibGUgeSwgc2kgZXN0w6EgcHJvdmlzdG8sIGVsIElkZW50aWZpY2Fkb3IgVW5pZm9ybWUgZGUgUmVjdXJzb3MgKFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcikgcXVlIGVsIExpY2VuY2lhbnRlIGVzcGVjaWZpY2EgcGFyYSBzZXIgYXNvY2lhZG8gY29uIGxhIE9icmEsIHNhbHZvIHF1ZSB0YWwgVVJJIG5vIHNlIHJlZmllcmEgYSBsYSBub3RhIHNvYnJlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBvIGEgbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGVsIGxpY2VuY2lhbWllbnRvIGRlIGxhIE9icmE7IHkgZW4gZWwgY2FzbyBkZSB1bmEgT2JyYSBEZXJpdmFkYSwgYXRyaWJ1aXIgZWwgY3LDqWRpdG8gaWRlbnRpZmljYW5kbyBlbCB1c28gZGUgbGEgT2JyYSBlbiBsYSBPYnJhIERlcml2YWRhICh2LmcuLCAiVHJhZHVjY2nDs24gRnJhbmNlc2EgZGUgbGEgT2JyYSBkZWwgQXV0b3IgT3JpZ2luYWwsIiBvICJHdWnDs24gQ2luZW1hdG9ncsOhZmljbyBiYXNhZG8gZW4gbGEgT2JyYSBvcmlnaW5hbCBkZWwgQXV0b3IgT3JpZ2luYWwiKS4gVGFsIGNyw6lkaXRvIHB1ZWRlIHNlciBpbXBsZW1lbnRhZG8gZGUgY3VhbHF1aWVyIGZvcm1hIHJhem9uYWJsZTsgZW4gZWwgY2Fzbywgc2luIGVtYmFyZ28sIGRlIE9icmFzIERlcml2YWRhcyB1IE9icmFzIENvbGVjdGl2YXMsIHRhbCBjcsOpZGl0byBhcGFyZWNlcsOhLCBjb21vIG3DrW5pbW8sIGRvbmRlIGFwYXJlY2UgZWwgY3LDqWRpdG8gZGUgY3VhbHF1aWVyIG90cm8gYXV0b3IgY29tcGFyYWJsZSB5IGRlIHVuYSBtYW5lcmEsIGFsIG1lbm9zLCB0YW4gZGVzdGFjYWRhIGNvbW8gZWwgY3LDqWRpdG8gZGUgb3RybyBhdXRvciBjb21wYXJhYmxlLgoKZC4JUGFyYSBldml0YXIgdG9kYSBjb25mdXNpw7NuLCBlbCBMaWNlbmNpYW50ZSBhY2xhcmEgcXVlLCBjdWFuZG8gbGEgb2JyYSBlcyB1bmEgY29tcG9zaWNpw7NuIG11c2ljYWw6CgppLglSZWdhbMOtYXMgcG9yIGludGVycHJldGFjacOzbiB5IGVqZWN1Y2nDs24gYmFqbyBsaWNlbmNpYXMgZ2VuZXJhbGVzLiBFbCBMaWNlbmNpYW50ZSBzZSByZXNlcnZhIGVsIGRlcmVjaG8gZXhjbHVzaXZvIGRlIGF1dG9yaXphciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIG8gbGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGRlIGxhIG9icmEgeSBkZSByZWNvbGVjdGFyLCBzZWEgaW5kaXZpZHVhbG1lbnRlIG8gYSB0cmF2w6lzIGRlIHVuYSBzb2NpZWRhZCBkZSBnZXN0acOzbiBjb2xlY3RpdmEgZGUgZGVyZWNob3MgZGUgYXV0b3IgeSBkZXJlY2hvcyBjb25leG9zIChwb3IgZWplbXBsbywgU0FZQ08pLCBsYXMgcmVnYWzDrWFzIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIG8gcG9yIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIChwb3IgZWplbXBsbyBXZWJjYXN0KSBsaWNlbmNpYWRhIGJham8gbGljZW5jaWFzIGdlbmVyYWxlcywgc2kgbGEgaW50ZXJwcmV0YWNpw7NuIG8gZWplY3VjacOzbiBkZSBsYSBvYnJhIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBvcmllbnRhZGEgcG9yIG8gZGlyaWdpZGEgYSBsYSBvYnRlbmNpw7NuIGRlIHVuYSB2ZW50YWphIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLgoKaWkuCVJlZ2Fsw61hcyBwb3IgRm9ub2dyYW1hcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSByZWNvbGVjdGFyLCBpbmRpdmlkdWFsbWVudGUgbyBhIHRyYXbDqXMgZGUgdW5hIHNvY2llZGFkIGRlIGdlc3Rpw7NuIGNvbGVjdGl2YSBkZSBkZXJlY2hvcyBkZSBhdXRvciB5IGRlcmVjaG9zIGNvbmV4b3MgKHBvciBlamVtcGxvLCBsb3MgY29uc2FncmFkb3MgcG9yIGxhIFNBWUNPKSwgdW5hIGFnZW5jaWEgZGUgZGVyZWNob3MgbXVzaWNhbGVzIG8gYWxnw7puIGFnZW50ZSBkZXNpZ25hZG8sIGxhcyByZWdhbMOtYXMgcG9yIGN1YWxxdWllciBmb25vZ3JhbWEgcXVlIFVzdGVkIGNyZWUgYSBwYXJ0aXIgZGUgbGEgb2JyYSAo4oCcdmVyc2nDs24gY292ZXLigJ0pIHkgZGlzdHJpYnV5YSwgZW4gbG9zIHTDqXJtaW5vcyBkZWwgcsOpZ2ltZW4gZGUgZGVyZWNob3MgZGUgYXV0b3IsIHNpIGxhIGNyZWFjacOzbiBvIGRpc3RyaWJ1Y2nDs24gZGUgZXNhIHZlcnNpw7NuIGNvdmVyIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkZXN0aW5hZGEgbyBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuCgplLglHZXN0acOzbiBkZSBEZXJlY2hvcyBkZSBBdXRvciBzb2JyZSBJbnRlcnByZXRhY2lvbmVzIHkgRWplY3VjaW9uZXMgRGlnaXRhbGVzIChXZWJDYXN0aW5nKS4gUGFyYSBldml0YXIgdG9kYSBjb25mdXNpw7NuLCBlbCBMaWNlbmNpYW50ZSBhY2xhcmEgcXVlLCBjdWFuZG8gbGEgb2JyYSBzZWEgdW4gZm9ub2dyYW1hLCBlbCBMaWNlbmNpYW50ZSBzZSByZXNlcnZhIGVsIGRlcmVjaG8gZXhjbHVzaXZvIGRlIGF1dG9yaXphciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8sIHdlYmNhc3QpIHkgZGUgcmVjb2xlY3RhciwgaW5kaXZpZHVhbG1lbnRlIG8gYSB0cmF2w6lzIGRlIHVuYSBzb2NpZWRhZCBkZSBnZXN0acOzbiBjb2xlY3RpdmEgZGUgZGVyZWNob3MgZGUgYXV0b3IgeSBkZXJlY2hvcyBjb25leG9zIChwb3IgZWplbXBsbywgQUNJTlBSTyksIGxhcyByZWdhbMOtYXMgcG9yIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIChwb3IgZWplbXBsbywgd2ViY2FzdCksIHN1amV0YSBhIGxhcyBkaXNwb3NpY2lvbmVzIGFwbGljYWJsZXMgZGVsIHLDqWdpbWVuIGRlIERlcmVjaG8gZGUgQXV0b3IsIHNpIGVzdGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuCgo1LiBSZXByZXNlbnRhY2lvbmVzLCBHYXJhbnTDrWFzIHkgTGltaXRhY2lvbmVzIGRlIFJlc3BvbnNhYmlsaWRhZC4KQSBNRU5PUyBRVUUgTEFTIFBBUlRFUyBMTyBBQ09SREFSQU4gREUgT1RSQSBGT1JNQSBQT1IgRVNDUklUTywgRUwgTElDRU5DSUFOVEUgT0ZSRUNFIExBIE9CUkEgKEVOIEVMIEVTVEFETyBFTiBFTCBRVUUgU0UgRU5DVUVOVFJBKSDigJxUQUwgQ1VBTOKAnSwgU0lOIEJSSU5EQVIgR0FSQU5Uw41BUyBERSBDTEFTRSBBTEdVTkEgUkVTUEVDVE8gREUgTEEgT0JSQSwgWUEgU0VBIEVYUFJFU0EsIElNUEzDjUNJVEEsIExFR0FMIE8gQ1VBTFFVSUVSQSBPVFJBLCBJTkNMVVlFTkRPLCBTSU4gTElNSVRBUlNFIEEgRUxMQVMsIEdBUkFOVMONQVMgREUgVElUVUxBUklEQUQsIENPTUVSQ0lBQklMSURBRCwgQURBUFRBQklMSURBRCBPIEFERUNVQUNJw5NOIEEgUFJPUMOTU0lUTyBERVRFUk1JTkFETywgQVVTRU5DSUEgREUgSU5GUkFDQ0nDk04sIERFIEFVU0VOQ0lBIERFIERFRkVDVE9TIExBVEVOVEVTIE8gREUgT1RSTyBUSVBPLCBPIExBIFBSRVNFTkNJQSBPIEFVU0VOQ0lBIERFIEVSUk9SRVMsIFNFQU4gTyBOTyBERVNDVUJSSUJMRVMgKFBVRURBTiBPIE5PIFNFUiBFU1RPUyBERVNDVUJJRVJUT1MpLiBBTEdVTkFTIEpVUklTRElDQ0lPTkVTIE5PIFBFUk1JVEVOIExBIEVYQ0xVU0nDk04gREUgR0FSQU5Uw41BUyBJTVBMw41DSVRBUywgRU4gQ1VZTyBDQVNPIEVTVEEgRVhDTFVTScOTTiBQVUVERSBOTyBBUExJQ0FSU0UgQSBVU1RFRC4KCjYuIExpbWl0YWNpw7NuIGRlIHJlc3BvbnNhYmlsaWRhZC4KQSBNRU5PUyBRVUUgTE8gRVhJSkEgRVhQUkVTQU1FTlRFIExBIExFWSBBUExJQ0FCTEUsIEVMIExJQ0VOQ0lBTlRFIE5PIFNFUsOBIFJFU1BPTlNBQkxFIEFOVEUgVVNURUQgUE9SIERBw5FPIEFMR1VOTywgU0VBIFBPUiBSRVNQT05TQUJJTElEQUQgRVhUUkFDT05UUkFDVFVBTCwgUFJFQ09OVFJBQ1RVQUwgTyBDT05UUkFDVFVBTCwgT0JKRVRJVkEgTyBTVUJKRVRJVkEsIFNFIFRSQVRFIERFIERBw5FPUyBNT1JBTEVTIE8gUEFUUklNT05JQUxFUywgRElSRUNUT1MgTyBJTkRJUkVDVE9TLCBQUkVWSVNUT1MgTyBJTVBSRVZJU1RPUyBQUk9EVUNJRE9TIFBPUiBFTCBVU08gREUgRVNUQSBMSUNFTkNJQSBPIERFIExBIE9CUkEsIEFVTiBDVUFORE8gRUwgTElDRU5DSUFOVEUgSEFZQSBTSURPIEFEVkVSVElETyBERSBMQSBQT1NJQklMSURBRCBERSBESUNIT1MgREHDkU9TLiBBTEdVTkFTIExFWUVTIE5PIFBFUk1JVEVOIExBIEVYQ0xVU0nDk04gREUgQ0lFUlRBIFJFU1BPTlNBQklMSURBRCwgRU4gQ1VZTyBDQVNPIEVTVEEgRVhDTFVTScOTTiBQVUVERSBOTyBBUExJQ0FSU0UgQSBVU1RFRC4KCjcuIFTDqXJtaW5vLgoKYS4JRXN0YSBMaWNlbmNpYSB5IGxvcyBkZXJlY2hvcyBvdG9yZ2Fkb3MgZW4gdmlydHVkIGRlIGVsbGEgdGVybWluYXLDoW4gYXV0b23DoXRpY2FtZW50ZSBzaSBVc3RlZCBpbmZyaW5nZSBhbGd1bmEgY29uZGljacOzbiBlc3RhYmxlY2lkYSBlbiBlbGxhLiBTaW4gZW1iYXJnbywgbG9zIGluZGl2aWR1b3MgbyBlbnRpZGFkZXMgcXVlIGhhbiByZWNpYmlkbyBPYnJhcyBEZXJpdmFkYXMgbyBDb2xlY3RpdmFzIGRlIFVzdGVkIGRlIGNvbmZvcm1pZGFkIGNvbiBlc3RhIExpY2VuY2lhLCBubyB2ZXLDoW4gdGVybWluYWRhcyBzdXMgbGljZW5jaWFzLCBzaWVtcHJlIHF1ZSBlc3RvcyBpbmRpdmlkdW9zIG8gZW50aWRhZGVzIHNpZ2FuIGN1bXBsaWVuZG8gw61udGVncmFtZW50ZSBsYXMgY29uZGljaW9uZXMgZGUgZXN0YXMgbGljZW5jaWFzLiBMYXMgU2VjY2lvbmVzIDEsIDIsIDUsIDYsIDcsIHkgOCBzdWJzaXN0aXLDoW4gYSBjdWFscXVpZXIgdGVybWluYWNpw7NuIGRlIGVzdGEgTGljZW5jaWEuCgpiLglTdWpldGEgYSBsYXMgY29uZGljaW9uZXMgeSB0w6lybWlub3MgYW50ZXJpb3JlcywgbGEgbGljZW5jaWEgb3RvcmdhZGEgYXF1w60gZXMgcGVycGV0dWEgKGR1cmFudGUgZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yIGRlIGxhIG9icmEpLiBObyBvYnN0YW50ZSBsbyBhbnRlcmlvciwgZWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGEgcHVibGljYXIgeS9vIGVzdHJlbmFyIGxhIE9icmEgYmFqbyBjb25kaWNpb25lcyBkZSBsaWNlbmNpYSBkaWZlcmVudGVzIG8gYSBkZWphciBkZSBkaXN0cmlidWlybGEgZW4gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIExpY2VuY2lhIGVuIGN1YWxxdWllciBtb21lbnRvOyBlbiBlbCBlbnRlbmRpZG8sIHNpbiBlbWJhcmdvLCBxdWUgZXNhIGVsZWNjacOzbiBubyBzZXJ2aXLDoSBwYXJhIHJldm9jYXIgZXN0YSBsaWNlbmNpYSBvIHF1ZSBkZWJhIHNlciBvdG9yZ2FkYSAsIGJham8gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIGxpY2VuY2lhKSwgeSBlc3RhIGxpY2VuY2lhIGNvbnRpbnVhcsOhIGVuIHBsZW5vIHZpZ29yIHkgZWZlY3RvIGEgbWVub3MgcXVlIHNlYSB0ZXJtaW5hZGEgY29tbyBzZSBleHByZXNhIGF0csOhcy4gTGEgTGljZW5jaWEgcmV2b2NhZGEgY29udGludWFyw6Egc2llbmRvIHBsZW5hbWVudGUgdmlnZW50ZSB5IGVmZWN0aXZhIHNpIG5vIHNlIGxlIGRhIHTDqXJtaW5vIGVuIGxhcyBjb25kaWNpb25lcyBpbmRpY2FkYXMgYW50ZXJpb3JtZW50ZS4KCjguIFZhcmlvcy4KCmEuCUNhZGEgdmV6IHF1ZSBVc3RlZCBkaXN0cmlidXlhIG8gcG9uZ2EgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBvIHVuYSBPYnJhIENvbGVjdGl2YSwgZWwgTGljZW5jaWFudGUgb2ZyZWNlcsOhIGFsIGRlc3RpbmF0YXJpbyB1bmEgbGljZW5jaWEgZW4gbG9zIG1pc21vcyB0w6lybWlub3MgeSBjb25kaWNpb25lcyBxdWUgbGEgbGljZW5jaWEgb3RvcmdhZGEgYSBVc3RlZCBiYWpvIGVzdGEgTGljZW5jaWEuCgpiLglTaSBhbGd1bmEgZGlzcG9zaWNpw7NuIGRlIGVzdGEgTGljZW5jaWEgcmVzdWx0YSBpbnZhbGlkYWRhIG8gbm8gZXhpZ2libGUsIHNlZ8O6biBsYSBsZWdpc2xhY2nDs24gdmlnZW50ZSwgZXN0byBubyBhZmVjdGFyw6EgbmkgbGEgdmFsaWRleiBuaSBsYSBhcGxpY2FiaWxpZGFkIGRlbCByZXN0byBkZSBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhIHksIHNpbiBhY2Npw7NuIGFkaWNpb25hbCBwb3IgcGFydGUgZGUgbG9zIHN1amV0b3MgZGUgZXN0ZSBhY3VlcmRvLCBhcXXDqWxsYSBzZSBlbnRlbmRlcsOhIHJlZm9ybWFkYSBsbyBtw61uaW1vIG5lY2VzYXJpbyBwYXJhIGhhY2VyIHF1ZSBkaWNoYSBkaXNwb3NpY2nDs24gc2VhIHbDoWxpZGEgeSBleGlnaWJsZS4KCmMuCU5pbmfDum4gdMOpcm1pbm8gbyBkaXNwb3NpY2nDs24gZGUgZXN0YSBMaWNlbmNpYSBzZSBlc3RpbWFyw6EgcmVudW5jaWFkYSB5IG5pbmd1bmEgdmlvbGFjacOzbiBkZSBlbGxhIHNlcsOhIGNvbnNlbnRpZGEgYSBtZW5vcyBxdWUgZXNhIHJlbnVuY2lhIG8gY29uc2VudGltaWVudG8gc2VhIG90b3JnYWRvIHBvciBlc2NyaXRvIHkgZmlybWFkbyBwb3IgbGEgcGFydGUgcXVlIHJlbnVuY2llIG8gY29uc2llbnRhLgoKZC4JRXN0YSBMaWNlbmNpYSByZWZsZWphIGVsIGFjdWVyZG8gcGxlbm8gZW50cmUgbGFzIHBhcnRlcyByZXNwZWN0byBhIGxhIE9icmEgYXF1w60gbGljZW5jaWFkYS4gTm8gaGF5IGFycmVnbG9zLCBhY3VlcmRvcyBvIGRlY2xhcmFjaW9uZXMgcmVzcGVjdG8gYSBsYSBPYnJhIHF1ZSBubyBlc3TDqW4gZXNwZWNpZmljYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gRWwgTGljZW5jaWFudGUgbm8gc2UgdmVyw6EgbGltaXRhZG8gcG9yIG5pbmd1bmEgZGlzcG9zaWNpw7NuIGFkaWNpb25hbCBxdWUgcHVlZGEgc3VyZ2lyIGVuIGFsZ3VuYSBjb211bmljYWNpw7NuIGVtYW5hZGEgZGUgVXN0ZWQuIEVzdGEgTGljZW5jaWEgbm8gcHVlZGUgc2VyIG1vZGlmaWNhZGEgc2luIGVsIGNvbnNlbnRpbWllbnRvIG11dHVvIHBvciBlc2NyaXRvIGRlbCBMaWNlbmNpYW50ZSB5IFVzdGVkLgo= |