Localização de defeitos evolucionária baseada em fluxo de dados
Autor(a) principal: | |
---|---|
Data de Publicação: | 2020 |
Tipo de documento: | Dissertação |
Idioma: | por |
Título da fonte: | Repositório Institucional da UFG |
Texto Completo: | http://repositorio.bc.ufg.br/tede/handle/tede/10730 |
Resumo: | Context- Fault localization is the activity of precisely indicating the faulty commands ina buggy program. This is an activity known to be too costly and monotonous. Automatingthis process has been the objective of several studies, having proved to be a challengingproblem. A common strategy is to associate a suspiciousness value to each command inthe code. Most methods, which use this strategy, are heuristics that use the commandsexecuted during the software test as an information source. These approaches are knownto be based on the control-flow coverage spectrum.Objective- The present study seeks toinvestigate another source of information about faults, the data-flow, which is expressedby the relationship between the places of definition and places of use of variables. How thedata-flow can contribute to fault localization and how to use it in evolutionary strategiesare interests of this work.Approach- Two evolutionary approaches are presented, onebased on a genetic algorithm (GA) that seeks to combine different heuristics using control-flow and also data-flow as a sources of information about faults. And another, based ongenetic programming (GP), which uses new variables that express the data-flow coveragespectrum, to generate new equations, more fitted to fault localization.Results- The GAapproach was evaluated in 7 small C programs that make up theSiemens Suite,benchmarkwidely used in similar approaches, and also in a set of faulty versions of the Java programjsoup. The evaluation metrics used describe the effectiveness from an absolute pointof view, as well as the dependence on tiebreak strategies. In this context, although theapproach using only data-flow produces competitive results, the hybrid approach (control-flow and data-flow) stands out for maintaining good results in terms of effectiveness, andstill being less dependent on tiebreakers. The GP approach in turn was investigated foreffectiveness using popular metrics in this context, and also for efficiency, by countingthe cycles of executions (generations) necessary to present competitive results. Again, thehybrid strategy stands out for producing the same results as other methods, but requiringless generations to do so.Conclusions- The results of both approaches highlight thatalthough data-flow has good effectiveness in locating defects, hybrid strategies, usingcontrol- and data-flow as sources of information about defects, generally outperforms allthe methods used as a comparison. However, further investigations must be conducted indifferent sets of programs. |
id |
UFG-2_902ef501371b987732e5bcc1884c2e4f |
---|---|
oai_identifier_str |
oai:repositorio.bc.ufg.br:tede/10730 |
network_acronym_str |
UFG-2 |
network_name_str |
Repositório Institucional da UFG |
repository_id_str |
|
spelling |
Leitão Junior, Plínio de Sáhttp://lattes.cnpq.br/4480334653242457Leitão Junior, Plínio de SáSoares, Telma Woerle de LimaChaim, Marcos Lordellohttp://lattes.cnpq.br/9426509294797070Silva Junior, Deuslirio da2020-09-16T16:11:03Z2020-09-16T16:11:03Z2020-07-22SILVA, D. J. Localização de defeitos evolucionária baseada em fluxo de dados. 2020. 91 f. Dissertação (Mestrado em Ciência da Computação) - Universidade Federal de Goiás, Goiânia, 2020.http://repositorio.bc.ufg.br/tede/handle/tede/10730Context- Fault localization is the activity of precisely indicating the faulty commands ina buggy program. This is an activity known to be too costly and monotonous. Automatingthis process has been the objective of several studies, having proved to be a challengingproblem. A common strategy is to associate a suspiciousness value to each command inthe code. Most methods, which use this strategy, are heuristics that use the commandsexecuted during the software test as an information source. These approaches are knownto be based on the control-flow coverage spectrum.Objective- The present study seeks toinvestigate another source of information about faults, the data-flow, which is expressedby the relationship between the places of definition and places of use of variables. How thedata-flow can contribute to fault localization and how to use it in evolutionary strategiesare interests of this work.Approach- Two evolutionary approaches are presented, onebased on a genetic algorithm (GA) that seeks to combine different heuristics using control-flow and also data-flow as a sources of information about faults. And another, based ongenetic programming (GP), which uses new variables that express the data-flow coveragespectrum, to generate new equations, more fitted to fault localization.Results- The GAapproach was evaluated in 7 small C programs that make up theSiemens Suite,benchmarkwidely used in similar approaches, and also in a set of faulty versions of the Java programjsoup. The evaluation metrics used describe the effectiveness from an absolute pointof view, as well as the dependence on tiebreak strategies. In this context, although theapproach using only data-flow produces competitive results, the hybrid approach (control-flow and data-flow) stands out for maintaining good results in terms of effectiveness, andstill being less dependent on tiebreakers. The GP approach in turn was investigated foreffectiveness using popular metrics in this context, and also for efficiency, by countingthe cycles of executions (generations) necessary to present competitive results. Again, thehybrid strategy stands out for producing the same results as other methods, but requiringless generations to do so.Conclusions- The results of both approaches highlight thatalthough data-flow has good effectiveness in locating defects, hybrid strategies, usingcontrol- and data-flow as sources of information about defects, generally outperforms allthe methods used as a comparison. However, further investigations must be conducted indifferent sets of programs.Contexto- Localização de defeitos (Fault Localization) é descrita como o processo de precisamente indicar o(s) elemento(s) que torna(m) defeituoso um dado código de programa. Esta é uma atividade conhecida por ser demasiadamente custosa e monótona. Au-tomatizar esse processo têm sido o objetivo de diversos estudos, tendo se mostrado umproblema desafiador. Uma estratégia comum é associar um valor de propensão a defeitoa cada comando do código. A maioria dos métodos ,que utilizam esta estratégia, são heu-rísticas que usam como fonte de informação os comandos executados durante o teste desoftware. Estas abordagens são conhecidas por serem baseadas no espectro de coberturade fluxo de controle (control-flow).Objetivo- O presente estudo busca investigar outrafonte de informação sobre os defeitos, o fluxo de dados (data-flow), que se expressa pelarelação de locais de definição e locais uso de variáveis. Como o fluxo de dados pode con-tribuir para a localização de defeitos e como utilizá-lo em estratégias evolucionários sãointeresses deste trabalho.Abordagem- São apresentadas duas abordagens evolucioná-rias, uma baseada em algoritmo genético (GA) que busca combinar diferentes heurísticasutilizando fluxo de controle e também fluxo de dados como fonte de informação sobredefeitos. E outra baseada em programação genética (GP), que utiliza de novas variáveisque expressam o espectro de cobertura de fluxo de dados, para gerar novas equações,vocacionadas à localização de defeitos.Resultados- A abordagem GA foi avaliada em7 programas C pequenos que compõem oSiemens Suite,benchmarkbastante utilizadoem abordagens similares, e também em um conjunto de versões defeituosas do programajsoup. As métricas de avaliação utilizadas descrevem a eficácia do ponto de vista absoluto,e também a dependência por estratégias de desempate. Nesse contexto, apesar de a abor-dagem utilizando apenas fluxo de dados produzir resultados competitivos, a abordagemhíbrida (fluxo de controle e fluxo de dados) se destaca por manter bons resultados quantoa eficácia, e ainda ser menos dependente de desempates. A abordagem GP por sua vezfoi investigada quanto à eficácia utilizando métricas populares neste contexto, e tambémquanto a eficiência, através da contagem das ciclos de execuções (gerações) necessáriospara apresentar resultados competitivos. Novamente a estratégia híbrida se destaca porproduzir o mesmo resultas que outros métodos, mas demandando menos gerações paraisso.Conclusões- Os resultados de ambas as abordagens destacam que apesar de fluxode dados apresentar boa eficácia para a localização de defeitos, as estratégias híbridas,utilizando fluxo de controle e fluxo de dados como fontes de informação sobre defeitos, superam todas os métodos usados como comparação. Porém mais investiga-ções devem ser conduzidas em diferentes conjuntos de programas.Submitted by Luciana Ferreira (lucgeral@gmail.com) on 2020-09-16T14:50:22Z No. of bitstreams: 2 Dissertação - Deuslirio da Silva Junior - 2020.pdf: 1464850 bytes, checksum: 9fb4dc844e2f87d6bd452e689b5b4233 (MD5) license_rdf: 811 bytes, checksum: e39d27027a6cc9cb039ad269a5db8e34 (MD5)Approved for entry into archive by Luciana Ferreira (lucgeral@gmail.com) on 2020-09-16T16:11:03Z (GMT) No. of bitstreams: 2 Dissertação - Deuslirio da Silva Junior - 2020.pdf: 1464850 bytes, checksum: 9fb4dc844e2f87d6bd452e689b5b4233 (MD5) license_rdf: 811 bytes, checksum: e39d27027a6cc9cb039ad269a5db8e34 (MD5)Made available in DSpace on 2020-09-16T16:11:03Z (GMT). No. of bitstreams: 2 Dissertação - Deuslirio da Silva Junior - 2020.pdf: 1464850 bytes, checksum: 9fb4dc844e2f87d6bd452e689b5b4233 (MD5) license_rdf: 811 bytes, checksum: e39d27027a6cc9cb039ad269a5db8e34 (MD5) Previous issue date: 2020-07-22Coordenação de Aperfeiçoamento de Pessoal de Nível Superior - CAPESporUniversidade Federal de GoiásPrograma de Pós-graduação em Ciência da Computação (INF)UFGBrasilInstituto de Informática - INF (RG)Attribution-NonCommercial-NoDerivs 3.0 Brazilhttp://creativecommons.org/licenses/by-nc-nd/3.0/br/info:eu-repo/semantics/openAccessLocalização de defeitosSBSEDepuração de softwareFault localizationSBSESoftware debuggingCIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAOLocalização de defeitos evolucionária baseada em fluxo de dadosData-flow-based evolutionary fault localizationinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesis19500500500500271841reponame:Repositório Institucional da UFGinstname:Universidade Federal de Goiás (UFG)instacron:UFGORIGINALDissertação - Deuslirio da Silva Junior - 2020.pdfDissertação - Deuslirio da Silva Junior - 2020.pdfapplication/pdf1464850http://repositorio.bc.ufg.br/tede/bitstreams/83d56eb7-bb08-419d-91fe-af9b6f759796/download9fb4dc844e2f87d6bd452e689b5b4233MD53LICENSElicense.txtlicense.txttext/plain; charset=utf-81748http://repositorio.bc.ufg.br/tede/bitstreams/3264882b-87f4-4a8d-9fcd-5ca116f802e8/download8a4605be74aa9ea9d79846c1fba20a33MD51CC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8811http://repositorio.bc.ufg.br/tede/bitstreams/21e417b1-4666-4511-bfec-fd7f5b39672e/downloade39d27027a6cc9cb039ad269a5db8e34MD52tede/107302020-09-16 13:11:03.947http://creativecommons.org/licenses/by-nc-nd/3.0/br/Attribution-NonCommercial-NoDerivs 3.0 Brazilopen.accessoai:repositorio.bc.ufg.br:tede/10730http://repositorio.bc.ufg.br/tedeRepositório InstitucionalPUBhttp://repositorio.bc.ufg.br/oai/requesttasesdissertacoes.bc@ufg.bropendoar:2020-09-16T16:11:03Repositório Institucional da UFG - Universidade Federal de Goiás (UFG)falseTk9URTogUExBQ0UgWU9VUiBPV04gTElDRU5TRSBIRVJFClRoaXMgc2FtcGxlIGxpY2Vuc2UgaXMgcHJvdmlkZWQgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seS4KCk5PTi1FWENMVVNJVkUgRElTVFJJQlVUSU9OIExJQ0VOU0UKCkJ5IHNpZ25pbmcgYW5kIHN1Ym1pdHRpbmcgdGhpcyBsaWNlbnNlLCB5b3UgKHRoZSBhdXRob3Iocykgb3IgY29weXJpZ2h0Cm93bmVyKSBncmFudHMgdG8gRFNwYWNlIFVuaXZlcnNpdHkgKERTVSkgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHQgdG8gcmVwcm9kdWNlLAp0cmFuc2xhdGUgKGFzIGRlZmluZWQgYmVsb3cpLCBhbmQvb3IgZGlzdHJpYnV0ZSB5b3VyIHN1Ym1pc3Npb24gKGluY2x1ZGluZwp0aGUgYWJzdHJhY3QpIHdvcmxkd2lkZSBpbiBwcmludCBhbmQgZWxlY3Ryb25pYyBmb3JtYXQgYW5kIGluIGFueSBtZWRpdW0sCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYXVkaW8gb3IgdmlkZW8uCgpZb3UgYWdyZWUgdGhhdCBEU1UgbWF5LCB3aXRob3V0IGNoYW5naW5nIHRoZSBjb250ZW50LCB0cmFuc2xhdGUgdGhlCnN1Ym1pc3Npb24gdG8gYW55IG1lZGl1bSBvciBmb3JtYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZhdGlvbi4KCllvdSBhbHNvIGFncmVlIHRoYXQgRFNVIG1heSBrZWVwIG1vcmUgdGhhbiBvbmUgY29weSBvZiB0aGlzIHN1Ym1pc3Npb24gZm9yCnB1cnBvc2VzIG9mIHNlY3VyaXR5LCBiYWNrLXVwIGFuZCBwcmVzZXJ2YXRpb24uCgpZb3UgcmVwcmVzZW50IHRoYXQgdGhlIHN1Ym1pc3Npb24gaXMgeW91ciBvcmlnaW5hbCB3b3JrLCBhbmQgdGhhdCB5b3UgaGF2ZQp0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb250YWluZWQgaW4gdGhpcyBsaWNlbnNlLiBZb3UgYWxzbyByZXByZXNlbnQKdGhhdCB5b3VyIHN1Ym1pc3Npb24gZG9lcyBub3QsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBpbmZyaW5nZSB1cG9uCmFueW9uZSdzIGNvcHlyaWdodC4KCklmIHRoZSBzdWJtaXNzaW9uIGNvbnRhaW5zIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90IGhvbGQgY29weXJpZ2h0LAp5b3UgcmVwcmVzZW50IHRoYXQgeW91IGhhdmUgb2J0YWluZWQgdGhlIHVucmVzdHJpY3RlZCBwZXJtaXNzaW9uIG9mIHRoZQpjb3B5cmlnaHQgb3duZXIgdG8gZ3JhbnQgRFNVIHRoZSByaWdodHMgcmVxdWlyZWQgYnkgdGhpcyBsaWNlbnNlLCBhbmQgdGhhdApzdWNoIHRoaXJkLXBhcnR5IG93bmVkIG1hdGVyaWFsIGlzIGNsZWFybHkgaWRlbnRpZmllZCBhbmQgYWNrbm93bGVkZ2VkCndpdGhpbiB0aGUgdGV4dCBvciBjb250ZW50IG9mIHRoZSBzdWJtaXNzaW9uLgoKSUYgVEhFIFNVQk1JU1NJT04gSVMgQkFTRUQgVVBPTiBXT1JLIFRIQVQgSEFTIEJFRU4gU1BPTlNPUkVEIE9SIFNVUFBPUlRFRApCWSBBTiBBR0VOQ1kgT1IgT1JHQU5JWkFUSU9OIE9USEVSIFRIQU4gRFNVLCBZT1UgUkVQUkVTRU5UIFRIQVQgWU9VIEhBVkUKRlVMRklMTEVEIEFOWSBSSUdIVCBPRiBSRVZJRVcgT1IgT1RIRVIgT0JMSUdBVElPTlMgUkVRVUlSRUQgQlkgU1VDSApDT05UUkFDVCBPUiBBR1JFRU1FTlQuCgpEU1Ugd2lsbCBjbGVhcmx5IGlkZW50aWZ5IHlvdXIgbmFtZShzKSBhcyB0aGUgYXV0aG9yKHMpIG9yIG93bmVyKHMpIG9mIHRoZQpzdWJtaXNzaW9uLCBhbmQgd2lsbCBub3QgbWFrZSBhbnkgYWx0ZXJhdGlvbiwgb3RoZXIgdGhhbiBhcyBhbGxvd2VkIGJ5IHRoaXMKbGljZW5zZSwgdG8geW91ciBzdWJtaXNzaW9uLgo= |
dc.title.pt_BR.fl_str_mv |
Localização de defeitos evolucionária baseada em fluxo de dados |
dc.title.alternative.eng.fl_str_mv |
Data-flow-based evolutionary fault localization |
title |
Localização de defeitos evolucionária baseada em fluxo de dados |
spellingShingle |
Localização de defeitos evolucionária baseada em fluxo de dados Silva Junior, Deuslirio da Localização de defeitos SBSE Depuração de software Fault localization SBSE Software debugging CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO |
title_short |
Localização de defeitos evolucionária baseada em fluxo de dados |
title_full |
Localização de defeitos evolucionária baseada em fluxo de dados |
title_fullStr |
Localização de defeitos evolucionária baseada em fluxo de dados |
title_full_unstemmed |
Localização de defeitos evolucionária baseada em fluxo de dados |
title_sort |
Localização de defeitos evolucionária baseada em fluxo de dados |
author |
Silva Junior, Deuslirio da |
author_facet |
Silva Junior, Deuslirio da |
author_role |
author |
dc.contributor.advisor1.fl_str_mv |
Leitão Junior, Plínio de Sá |
dc.contributor.advisor1Lattes.fl_str_mv |
http://lattes.cnpq.br/4480334653242457 |
dc.contributor.referee1.fl_str_mv |
Leitão Junior, Plínio de Sá |
dc.contributor.referee2.fl_str_mv |
Soares, Telma Woerle de Lima |
dc.contributor.referee3.fl_str_mv |
Chaim, Marcos Lordello |
dc.contributor.authorLattes.fl_str_mv |
http://lattes.cnpq.br/9426509294797070 |
dc.contributor.author.fl_str_mv |
Silva Junior, Deuslirio da |
contributor_str_mv |
Leitão Junior, Plínio de Sá Leitão Junior, Plínio de Sá Soares, Telma Woerle de Lima Chaim, Marcos Lordello |
dc.subject.por.fl_str_mv |
Localização de defeitos SBSE Depuração de software |
topic |
Localização de defeitos SBSE Depuração de software Fault localization SBSE Software debugging CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO |
dc.subject.eng.fl_str_mv |
Fault localization SBSE Software debugging |
dc.subject.cnpq.fl_str_mv |
CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO |
description |
Context- Fault localization is the activity of precisely indicating the faulty commands ina buggy program. This is an activity known to be too costly and monotonous. Automatingthis process has been the objective of several studies, having proved to be a challengingproblem. A common strategy is to associate a suspiciousness value to each command inthe code. Most methods, which use this strategy, are heuristics that use the commandsexecuted during the software test as an information source. These approaches are knownto be based on the control-flow coverage spectrum.Objective- The present study seeks toinvestigate another source of information about faults, the data-flow, which is expressedby the relationship between the places of definition and places of use of variables. How thedata-flow can contribute to fault localization and how to use it in evolutionary strategiesare interests of this work.Approach- Two evolutionary approaches are presented, onebased on a genetic algorithm (GA) that seeks to combine different heuristics using control-flow and also data-flow as a sources of information about faults. And another, based ongenetic programming (GP), which uses new variables that express the data-flow coveragespectrum, to generate new equations, more fitted to fault localization.Results- The GAapproach was evaluated in 7 small C programs that make up theSiemens Suite,benchmarkwidely used in similar approaches, and also in a set of faulty versions of the Java programjsoup. The evaluation metrics used describe the effectiveness from an absolute pointof view, as well as the dependence on tiebreak strategies. In this context, although theapproach using only data-flow produces competitive results, the hybrid approach (control-flow and data-flow) stands out for maintaining good results in terms of effectiveness, andstill being less dependent on tiebreakers. The GP approach in turn was investigated foreffectiveness using popular metrics in this context, and also for efficiency, by countingthe cycles of executions (generations) necessary to present competitive results. Again, thehybrid strategy stands out for producing the same results as other methods, but requiringless generations to do so.Conclusions- The results of both approaches highlight thatalthough data-flow has good effectiveness in locating defects, hybrid strategies, usingcontrol- and data-flow as sources of information about defects, generally outperforms allthe methods used as a comparison. However, further investigations must be conducted indifferent sets of programs. |
publishDate |
2020 |
dc.date.accessioned.fl_str_mv |
2020-09-16T16:11:03Z |
dc.date.available.fl_str_mv |
2020-09-16T16:11:03Z |
dc.date.issued.fl_str_mv |
2020-07-22 |
dc.type.status.fl_str_mv |
info:eu-repo/semantics/publishedVersion |
dc.type.driver.fl_str_mv |
info:eu-repo/semantics/masterThesis |
format |
masterThesis |
status_str |
publishedVersion |
dc.identifier.citation.fl_str_mv |
SILVA, D. J. Localização de defeitos evolucionária baseada em fluxo de dados. 2020. 91 f. Dissertação (Mestrado em Ciência da Computação) - Universidade Federal de Goiás, Goiânia, 2020. |
dc.identifier.uri.fl_str_mv |
http://repositorio.bc.ufg.br/tede/handle/tede/10730 |
identifier_str_mv |
SILVA, D. J. Localização de defeitos evolucionária baseada em fluxo de dados. 2020. 91 f. Dissertação (Mestrado em Ciência da Computação) - Universidade Federal de Goiás, Goiânia, 2020. |
url |
http://repositorio.bc.ufg.br/tede/handle/tede/10730 |
dc.language.iso.fl_str_mv |
por |
language |
por |
dc.relation.program.fl_str_mv |
19 |
dc.relation.confidence.fl_str_mv |
500 500 500 500 |
dc.relation.department.fl_str_mv |
27 |
dc.relation.cnpq.fl_str_mv |
184 |
dc.relation.sponsorship.fl_str_mv |
1 |
dc.rights.driver.fl_str_mv |
Attribution-NonCommercial-NoDerivs 3.0 Brazil http://creativecommons.org/licenses/by-nc-nd/3.0/br/ info:eu-repo/semantics/openAccess |
rights_invalid_str_mv |
Attribution-NonCommercial-NoDerivs 3.0 Brazil http://creativecommons.org/licenses/by-nc-nd/3.0/br/ |
eu_rights_str_mv |
openAccess |
dc.publisher.none.fl_str_mv |
Universidade Federal de Goiás |
dc.publisher.program.fl_str_mv |
Programa de Pós-graduação em Ciência da Computação (INF) |
dc.publisher.initials.fl_str_mv |
UFG |
dc.publisher.country.fl_str_mv |
Brasil |
dc.publisher.department.fl_str_mv |
Instituto de Informática - INF (RG) |
publisher.none.fl_str_mv |
Universidade Federal de Goiás |
dc.source.none.fl_str_mv |
reponame:Repositório Institucional da UFG instname:Universidade Federal de Goiás (UFG) instacron:UFG |
instname_str |
Universidade Federal de Goiás (UFG) |
instacron_str |
UFG |
institution |
UFG |
reponame_str |
Repositório Institucional da UFG |
collection |
Repositório Institucional da UFG |
bitstream.url.fl_str_mv |
http://repositorio.bc.ufg.br/tede/bitstreams/83d56eb7-bb08-419d-91fe-af9b6f759796/download http://repositorio.bc.ufg.br/tede/bitstreams/3264882b-87f4-4a8d-9fcd-5ca116f802e8/download http://repositorio.bc.ufg.br/tede/bitstreams/21e417b1-4666-4511-bfec-fd7f5b39672e/download |
bitstream.checksum.fl_str_mv |
9fb4dc844e2f87d6bd452e689b5b4233 8a4605be74aa9ea9d79846c1fba20a33 e39d27027a6cc9cb039ad269a5db8e34 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositório Institucional da UFG - Universidade Federal de Goiás (UFG) |
repository.mail.fl_str_mv |
tasesdissertacoes.bc@ufg.br |
_version_ |
1798044357070159872 |