diff --git a/gradle/variables.gradle b/gradle/variables.gradle index 83b28eee897e4702c88a5d02558a40da2d885048..f2e558396b41e0342e55e0fdc1239e685196a268 100644 --- a/gradle/variables.gradle +++ b/gradle/variables.gradle @@ -8,4 +8,5 @@ ext { junit_version = '5.7.2' mockk_version = '1.10.4' ktlint_plugin_version = '10.2.1' + onionwrapper_version = '0.0.1' } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml deleted file mode 100644 index 1636115623c8ad5fbdc0814e54baf591050781f2..0000000000000000000000000000000000000000 --- a/gradle/verification-metadata.xml +++ /dev/null @@ -1,4206 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<verification-metadata xmlns="https://schema.gradle.org/dependency-verification" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://schema.gradle.org/dependency-verification https://schema.gradle.org/dependency-verification/dependency-verification-1.1.xsd"> - <configuration> - <verify-metadata>true</verify-metadata> - <verify-signatures>false</verify-signatures> - <trusted-artifacts> - <trust file=".*-javadoc[.]jar$" regex="true"/> - <trust file=".*-sources[.]jar$" regex="true"/> - <trust group="com.android.tools.build" name="aapt2" file="aapt2-[0-9\.\-]+-(osx|windows).jar$" regex="true"/> - </trusted-artifacts> - </configuration> - <components> - <component group="androidx.activity" name="activity" version="1.6.0"> - <artifact name="activity-1.6.0.module"> - <sha256 value="b561e41c1bddb2160f79b9bc7541ad9ed110147ab2ccf63719a23d498470b043" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.activity" name="activity" version="1.6.1"> - <artifact name="activity-1.6.1.aar"> - <sha256 value="46d9c0e7547ac7276853366a590f891db2a86863387c0738cf1f11731dc8fd7e" origin="Generated by Gradle"/> - </artifact> - <artifact name="activity-1.6.1.module"> - <sha256 value="536ab6630c9abbd61d527788af0ae76a8500db6536252512cac3b529d84d2e3a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.activity" name="activity-ktx" version="1.6.1"> - <artifact name="activity-ktx-1.6.1.aar"> - <sha256 value="0561745b3ddce53db491221b2b0cd3a44cadfb091b85e7831fd8be344f117d6e" origin="Generated by Gradle"/> - </artifact> - <artifact name="activity-ktx-1.6.1.module"> - <sha256 value="eb2f3862d2073c395a5037fb3284de6073b7824df27c7ac934502d6a5ecfcdfa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.annotation" name="annotation" version="1.0.0"> - <artifact name="annotation-1.0.0.jar"> - <sha256 value="0baae9755f7caf52aa80cd04324b91ba93af55d4d1d17dcc9a7b53d99ef7c016" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotation-1.0.0.pom"> - <sha256 value="a179c12db43d9c0300c9db63f4811db496504be5401b951d422b78490ad1e5b4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.annotation" name="annotation" version="1.2.0"> - <artifact name="annotation-1.2.0.jar"> - <sha256 value="9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotation-1.2.0.module"> - <sha256 value="2efcab81ef91b211bacd206eaacd995a51f633a2e96b57a8fc00144c5f9c56b3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.annotation" name="annotation" version="1.3.0"> - <artifact name="annotation-1.3.0.jar"> - <sha256 value="97dc45afefe3a1e421da42b8b6e9f90491477c45fc6178203e3a5e8a05ee8553" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotation-1.3.0.module"> - <sha256 value="9516c2ae44284ea0bd3d0eade0ee638879b708cbe31e3af92ba96c300604ebc3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.annotation" name="annotation-experimental" version="1.0.0"> - <artifact name="annotation-experimental-1.0.0.pom"> - <sha256 value="6b73ff6608f4b1d6cbab620b65708a382d0b39901cf4e6b0d16f84a1b04d7732" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.annotation" name="annotation-experimental" version="1.1.0"> - <artifact name="annotation-experimental-1.1.0.aar"> - <sha256 value="0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotation-experimental-1.1.0.module"> - <sha256 value="0361d1526a4d7501255e19779e09e93cdbd07fee0e2f5c50b7a137432d510119" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.annotation" name="annotation-experimental" version="1.3.0"> - <artifact name="annotation-experimental-1.3.0.aar"> - <sha256 value="abfd29c8556e5bd0325a9f769ab9e9d154ff4a5515c476cdd5a2a8285b1b19dc" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotation-experimental-1.3.0.module"> - <sha256 value="5eebeaff01d042e06dcf292abf8964ad391e4b0159f0090f16253d6045d38da0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.appcompat" name="appcompat" version="1.6.1"> - <artifact name="appcompat-1.6.1.aar"> - <sha256 value="7ea5573b93ababd3bd32312451c6ea48a662b03a140dda81aebe75776a20a422" origin="Generated by Gradle"/> - </artifact> - <artifact name="appcompat-1.6.1.module"> - <sha256 value="f755380d80563eecca7db0bf6368b796afbefe381554c87b752bf9e291f3c1a6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.appcompat" name="appcompat-resources" version="1.6.1"> - <artifact name="appcompat-resources-1.6.1.aar"> - <sha256 value="db915dbf49357863de1669ff9fdd8e9008d65fe357af6cce9ae63043ad5f6617" origin="Generated by Gradle"/> - </artifact> - <artifact name="appcompat-resources-1.6.1.module"> - <sha256 value="c814c15c2ff34f094f8b6994b2cd51e6e8d062bcfc86912f55dd6e08f33acee7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.arch.core" name="core-common" version="2.1.0"> - <artifact name="core-common-2.1.0.jar"> - <sha256 value="fe1237bf029d063e7f29fe39aeaf73ef74c8b0a3658486fc29d3c54326653889" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-common-2.1.0.pom"> - <sha256 value="83bbb3960eaabc600ac366c94cb59414e441532a1d6aa9388b0b8bfface5cf01" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.arch.core" name="core-runtime" version="2.1.0"> - <artifact name="core-runtime-2.1.0.aar"> - <sha256 value="dd77615bd3dd275afb11b62df25bae46b10b4a117cd37943af45bdcbf8755852" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-runtime-2.1.0.pom"> - <sha256 value="c0c4ed0160cd2ca18390015de8b392b697c173327c6b2c0947d4e62f6958c05d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.cardview" name="cardview" version="1.0.0"> - <artifact name="cardview-1.0.0.aar"> - <sha256 value="1193c04c22a3d6b5946dae9f4e8c59d6adde6a71b6bd5d87fb99d82dda1afec7" origin="Generated by Gradle"/> - </artifact> - <artifact name="cardview-1.0.0.pom"> - <sha256 value="e64ef4e08b58358fe27b599e6fe80a1b153db014c644beee630ab271061c3e6c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.collection" name="collection" version="1.0.0"> - <artifact name="collection-1.0.0.pom"> - <sha256 value="a7913a5275ad68e555d2612ebe8c14c367b153e14ca48a1872a64899020e54ef" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.collection" name="collection" version="1.1.0"> - <artifact name="collection-1.1.0.jar"> - <sha256 value="632a0e5407461de774409352940e292a291037724207a787820c77daf7d33b72" origin="Generated by Gradle"/> - </artifact> - <artifact name="collection-1.1.0.pom"> - <sha256 value="67e9066ca4acfdc6e3cc508293c31ba0398057ff118e4f70b1e1813c9a3456d1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.collection" name="collection-ktx" version="1.1.0"> - <artifact name="collection-ktx-1.1.0.jar"> - <sha256 value="2bfc54475c047131913361f56d0f7f019c6e5bee53eeb0eb7d94a7c499a05227" origin="Generated by Gradle"/> - </artifact> - <artifact name="collection-ktx-1.1.0.pom"> - <sha256 value="721e76e74ee4158d3fe9759074b7eceed4ff7d84ed34a3faca5843fb874ac946" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.concurrent" name="concurrent-futures" version="1.0.0"> - <artifact name="concurrent-futures-1.0.0.jar"> - <sha256 value="5595a40e278a7b39fa78a09490e3d7f3faa95c7b01447148bd38b5ade0605c35" origin="Generated by Gradle"/> - </artifact> - <artifact name="concurrent-futures-1.0.0.pom"> - <sha256 value="4505b9a5e30a9418b59a9ad6702c3e4193aea6e691a3d03cf220c7640ad083e2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.concurrent" name="concurrent-futures" version="1.1.0"> - <artifact name="concurrent-futures-1.1.0.jar"> - <sha256 value="0ce067c514a0d1049d1bebdf709e344ed3266fe9744275682937cdcb13334e9e" origin="Generated by Gradle"/> - </artifact> - <artifact name="concurrent-futures-1.1.0.module"> - <sha256 value="77639a0b051e22510bad93affcea0ebd781ef124bf9b7621a95749937bcfcdfd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.constraintlayout" name="constraintlayout" version="2.1.4"> - <artifact name="constraintlayout-2.1.4.aar"> - <sha256 value="0df714c0b51e54710ebf746eb469d333176bbb3cb29f80775dc3ca4eb3162512" origin="Generated by Gradle"/> - </artifact> - <artifact name="constraintlayout-2.1.4.module"> - <sha256 value="1fd15b84220cf35693f57b235b84b9dd70f4c31ca8ad396383dec5a288d9df96" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.constraintlayout" name="constraintlayout-core" version="1.0.4"> - <artifact name="constraintlayout-core-1.0.4.jar"> - <sha256 value="3e477f4de231e58b25f5a992f3be45e97d332c34a39a9e3e7d4b78ae0ac2256f" origin="Generated by Gradle"/> - </artifact> - <artifact name="constraintlayout-core-1.0.4.module"> - <sha256 value="7cfe8d755d524185204c68fe512431aafa5487553adcf2356eec59eab9c64185" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.coordinatorlayout" name="coordinatorlayout" version="1.1.0"> - <artifact name="coordinatorlayout-1.1.0.aar"> - <sha256 value="44a9e30abf56af1025c52a0af506fee9c4131aa55efda52f9fd9451211c5e8cb" origin="Generated by Gradle"/> - </artifact> - <artifact name="coordinatorlayout-1.1.0.pom"> - <sha256 value="a67c52c9ddfaff2ffb2fd4b97cd94fa382e837ea8a5874d029e0a04fa63e5caf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.core" name="core" version="1.9.0"> - <artifact name="core-1.9.0.aar"> - <sha256 value="8bda3ee3a88887d54f6679fb6b6cd788629f73234ac91c8bbed924e721ec85b8" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-1.9.0.module"> - <sha256 value="8674ade1d12962469dd2d1e6edc03b465f20d180b0840a129bc40b351e8651d1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.core" name="core-ktx" version="1.1.0"> - <artifact name="core-ktx-1.1.0.pom"> - <sha256 value="729d11bad16d87c6212dc9ab80e9c770d333115062136e0732164a6b1696e11c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.core" name="core-ktx" version="1.2.0"> - <artifact name="core-ktx-1.2.0.aar"> - <sha256 value="dcb74d510d552b35eff73b0dd27b829649535f3902e5b5a1f26040383c10a940" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-ktx-1.2.0.pom"> - <sha256 value="29eaddba4e6a35e68a128e594ebae3b72ef7e767f1b273ef93dc2ed019ff97f6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.core" name="core-ktx" version="1.8.0"> - <artifact name="core-ktx-1.8.0.module"> - <sha256 value="a91bc3e02f209f643dd8275345a9e3003ce20d64fc0760eccf479c1709842f72" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.core" name="core-ktx" version="1.9.0"> - <artifact name="core-ktx-1.9.0.aar"> - <sha256 value="1542a1df7be908c95fee91b8dbc03fd974f53f11d84a85d881f95a52551c4051" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-ktx-1.9.0.module"> - <sha256 value="4d46646066c794f2812d5b33a9422d37e4f918c4d809cd1fb2579c7022ef2818" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.cursoradapter" name="cursoradapter" version="1.0.0"> - <artifact name="cursoradapter-1.0.0.aar"> - <sha256 value="a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564" origin="Generated by Gradle"/> - </artifact> - <artifact name="cursoradapter-1.0.0.pom"> - <sha256 value="62d95c89850af21030b19f14d5f7ecd6d8bcc9a3014c59002ec99624caac8100" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.customview" name="customview" version="1.1.0"> - <artifact name="customview-1.1.0.aar"> - <sha256 value="01f76ab043770a97b054046f9815717b82ce0355c02967d16c61981359dc189a" origin="Generated by Gradle"/> - </artifact> - <artifact name="customview-1.1.0.pom"> - <sha256 value="c814d435f73e9e6d169886d0eb96b5c5361feb48449fbbb315c908c03c588c94" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.databinding" name="databinding-common" version="7.3.1"> - <artifact name="databinding-common-7.3.1.jar"> - <sha256 value="6b4a121c5d274d34e0386aa019848a2e946ebd98e4a5f693b1df68a771a031be" origin="Generated by Gradle"/> - </artifact> - <artifact name="databinding-common-7.3.1.pom"> - <sha256 value="e9a130fb835c7a5db3ff6fd785983dd4a176c531b90c6d33f4b21d6a12d1cb64" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.databinding" name="databinding-compiler-common" version="7.3.1"> - <artifact name="databinding-compiler-common-7.3.1.jar"> - <sha256 value="a8f10f6422fa45ddda2b082ff3bcefada66b99a2698bafaa36b02e9f85dc1b3c" origin="Generated by Gradle"/> - </artifact> - <artifact name="databinding-compiler-common-7.3.1.pom"> - <sha256 value="ef554a1ba1f23baa3c106e8ab42b49b35bdd37c69dea0bda42e16a797ec665e2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.databinding" name="viewbinding" version="7.3.1"> - <artifact name="viewbinding-7.3.1.aar"> - <sha256 value="fdb16459f0f3f15aeff264ba645c8f41173bd9dd3a398af2d97f323b08870363" origin="Generated by Gradle"/> - </artifact> - <artifact name="viewbinding-7.3.1.module"> - <sha256 value="f72230a9f255936c3de726c98f04ed1babd17a828f55667da0a2bfd40c7e453a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.documentfile" name="documentfile" version="1.0.0"> - <artifact name="documentfile-1.0.0.aar"> - <sha256 value="865a061ef2fad16522f8433536b8d47208c46ff7c7745197dfa1eeb481869487" origin="Generated by Gradle"/> - </artifact> - <artifact name="documentfile-1.0.0.pom"> - <sha256 value="013288a9317a552706ce625fb24493e8223288529223ec578cf855a5ae9c16e5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.drawerlayout" name="drawerlayout" version="1.0.0"> - <artifact name="drawerlayout-1.0.0.pom"> - <sha256 value="da6733425a83f5ce850878fa7201082345fed7c668dd58550fdd19c0396c6fa4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.drawerlayout" name="drawerlayout" version="1.1.1"> - <artifact name="drawerlayout-1.1.1.aar"> - <sha256 value="2c5f0dca378eb78ca2c4403f9889c77daa3059302260f26a07fe9f63c08926fe" origin="Generated by Gradle"/> - </artifact> - <artifact name="drawerlayout-1.1.1.pom"> - <sha256 value="c12fa903ba53005962a72405f37896608718f41673fc4a62312e4536132f6f45" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.dynamicanimation" name="dynamicanimation" version="1.0.0"> - <artifact name="dynamicanimation-1.0.0.aar"> - <sha256 value="ce005162c229bf308d2d5b12fb6cad0874069cbbeaccee63a8193bd08d40de04" origin="Generated by Gradle"/> - </artifact> - <artifact name="dynamicanimation-1.0.0.pom"> - <sha256 value="44ce22ee620d28f17301bcc60ad49b69b7d0596c2a87b054ad1e3feac7b4a898" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.emoji2" name="emoji2" version="1.2.0"> - <artifact name="emoji2-1.2.0.aar"> - <sha256 value="f31a06c150ecb03073f55a6f7b0b74a240a6a8d727c14ce76726d020570dfa8c" origin="Generated by Gradle"/> - </artifact> - <artifact name="emoji2-1.2.0.module"> - <sha256 value="9d1996cca03777baa1f27cd15531db983a633dae37b90f85bd53501acb56699d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.emoji2" name="emoji2-views-helper" version="1.2.0"> - <artifact name="emoji2-views-helper-1.2.0.aar"> - <sha256 value="7ffa4d464d9db259fca0cdb50fbd4ab63d6872bcda59468b9f7555504c7d5ac4" origin="Generated by Gradle"/> - </artifact> - <artifact name="emoji2-views-helper-1.2.0.module"> - <sha256 value="a3a9db581abf1787b01ff15c40f059530e8e64f3937caa2d788f42eb39893268" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.fragment" name="fragment" version="1.3.6"> - <artifact name="fragment-1.3.6.module"> - <sha256 value="a140981a3e65f3cab354652682061d23d19b01e00ee712bc38a5e9b0f69eedcf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.fragment" name="fragment" version="1.5.5"> - <artifact name="fragment-1.5.5.aar"> - <sha256 value="e0a3174fed034556addf6d5beab068cf6b1e2da9db55ea512ba45cdb755c82a3" origin="Generated by Gradle"/> - </artifact> - <artifact name="fragment-1.5.5.module"> - <sha256 value="eb7e7828fe8bbcd990fa44fbd0022b63b316abc76fc54dca5f1644f9d8558dee" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.fragment" name="fragment-ktx" version="1.5.5"> - <artifact name="fragment-ktx-1.5.5.aar"> - <sha256 value="9a7064335312237b45cda04b898139e71361eb7288ec8b2a38c4bdb4befe088e" origin="Generated by Gradle"/> - </artifact> - <artifact name="fragment-ktx-1.5.5.module"> - <sha256 value="dc33a288b47e603176ecdea89a1660b1f7783a9423d4cba1dccf805cbd83f168" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.interpolator" name="interpolator" version="1.0.0"> - <artifact name="interpolator-1.0.0.aar"> - <sha256 value="33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a" origin="Generated by Gradle"/> - </artifact> - <artifact name="interpolator-1.0.0.pom"> - <sha256 value="0ddc07cc39699f48ecd9ec894b5830c0f09e22e82959294edf37217224c88b7b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.legacy" name="legacy-support-core-ui" version="1.0.0"> - <artifact name="legacy-support-core-ui-1.0.0.pom"> - <sha256 value="2baaf7f17551765524bd1e4d2f954a2a0178a112039cf549ba8b7d4b41e66931" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.legacy" name="legacy-support-core-utils" version="1.0.0"> - <artifact name="legacy-support-core-utils-1.0.0.aar"> - <sha256 value="a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7" origin="Generated by Gradle"/> - </artifact> - <artifact name="legacy-support-core-utils-1.0.0.pom"> - <sha256 value="8fd093008b3ee7c06e52c78da2af980a7b47b69b967fa91dad7af466f7a00a38" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-common" version="2.3.1"> - <artifact name="lifecycle-common-2.3.1.jar"> - <sha256 value="15848fb56db32f4c7cdc72b324003183d52a4884d6bf09be708ac7f587d139b5" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-common-2.3.1.module"> - <sha256 value="5fb7c8514d8c56cada5e29ef89dc0289e71942ab4cb0b2e6dca137b9dcb8fdd4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-common" version="2.5.1"> - <artifact name="lifecycle-common-2.5.1.jar"> - <sha256 value="20ad1520f625cf455e6afd7290988306d3a9886efa993e0860fbabf4bb3f7bda" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-common-2.5.1.module"> - <sha256 value="7d4bc2961cd5bd399e3621d434f0c453dd6cadf891f917a946cc291abdda8f1a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-common-java8" version="2.5.1"> - <artifact name="lifecycle-common-java8-2.5.1.jar"> - <sha256 value="69e1a62e5752ca3f43fb1607f161379bbe88b64af89c1a543c126160adf7cc53" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-common-java8-2.5.1.module"> - <sha256 value="11b1add50e65c46e4d780adf9697c16f4785a8a982b1841b7d093d3a0a3d10f0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-livedata" version="2.5.1"> - <artifact name="lifecycle-livedata-2.5.1.aar"> - <sha256 value="8ad18cf18a8f82d77b11aab49cf9b9b3d418e5f564b216e91d815cf038cefdfb" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-livedata-2.5.1.module"> - <sha256 value="b5f4a08193d7802ac3574d91ef442ae31c633ff3095f1c4973c80d68908a48bc" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-livedata-core" version="2.5.1"> - <artifact name="lifecycle-livedata-core-2.5.1.aar"> - <sha256 value="ee792103ca248bfaf150c45a93871e4cf7e8cebab990e0f62f7de5d4ff2f209f" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-livedata-core-2.5.1.module"> - <sha256 value="3f388e9e078901970c2bfcfc02fecae948de4b46be5211919ae07d012ca2980d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-livedata-core-ktx" version="2.5.1"> - <artifact name="lifecycle-livedata-core-ktx-2.5.1.aar"> - <sha256 value="95c235e6f33e7f201e9d24cd5e7095ed0ae1e5d2cb4778a6daa29671aa1fc388" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-livedata-core-ktx-2.5.1.module"> - <sha256 value="8076fd96e862164e46b34560bf40e02ae75965a28a209e47284ccbb7b5808e8c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-livedata-ktx" version="2.5.1"> - <artifact name="lifecycle-livedata-ktx-2.5.1.aar"> - <sha256 value="bf9193356d0d66248ede7e41f1cc242d0c60a64a75e67a777375f8d640e7cdf0" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-livedata-ktx-2.5.1.module"> - <sha256 value="1cedc0f971979cdec31f1542f263a8d41df6cfffc4857ea73a7d85643b73486d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-process" version="2.4.1"> - <artifact name="lifecycle-process-2.4.1.aar"> - <sha256 value="db649b3efa24e31052145310b002db91da346b3f89c093ec38c3046db45e794e" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-process-2.4.1.module"> - <sha256 value="e3aae3ed04b4744ff31452e98fd299e3adfd28d3b5723661d9678b92fa09ceb4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-runtime" version="2.5.1"> - <artifact name="lifecycle-runtime-2.5.1.aar"> - <sha256 value="33b0d73dc2f028fceb3599bacabe563c3db6d26f3513d889595863536a4ac8c0" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-runtime-2.5.1.module"> - <sha256 value="0027dc887fa3b243c23db40ab0f763fc7efacaafa15df923d233344acfe81a16" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-runtime-ktx" version="2.5.1"> - <artifact name="lifecycle-runtime-ktx-2.5.1.aar"> - <sha256 value="b3988ae01aae021ac666f232b85f88e8a75cacb2ac7bd6749cab73972540ce07" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-runtime-ktx-2.5.1.module"> - <sha256 value="488d174a07733b1cff27ddf426097f4e3fe71ed34c6a0000b56424f8d06c51fd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-viewmodel" version="2.5.1"> - <artifact name="lifecycle-viewmodel-2.5.1.aar"> - <sha256 value="14a27d5fb8a1436b1b7dec18bebaa66c830cdbbc8e28a81ce5f85b7c33b3ae9d" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-viewmodel-2.5.1.module"> - <sha256 value="01e413b73cbe38cb714dc5bdb21bd860931124c8e5f2369803f4aacc49081c9f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-viewmodel-ktx" version="2.5.1"> - <artifact name="lifecycle-viewmodel-ktx-2.5.1.aar"> - <sha256 value="30eecb351d81f0c429e186e65a892a42ce1d5bc5c80420bfece4ae279333023d" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-viewmodel-ktx-2.5.1.module"> - <sha256 value="e292838f93ba9df0ec8331659bd116ff8fbe7dce48c1482b3f1b0e887c1e3d6d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.lifecycle" name="lifecycle-viewmodel-savedstate" version="2.5.1"> - <artifact name="lifecycle-viewmodel-savedstate-2.5.1.aar"> - <sha256 value="8481141f97f0e6213dd33fcc89a784c4bd11a6ff7d4779a1cf6a0e9fbdbf24e0" origin="Generated by Gradle"/> - </artifact> - <artifact name="lifecycle-viewmodel-savedstate-2.5.1.module"> - <sha256 value="29acd5fe614b3f89123eb838f688d625eaa8b422c8d1905b48ad8e760cd7ad8b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.loader" name="loader" version="1.0.0"> - <artifact name="loader-1.0.0.aar"> - <sha256 value="11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025" origin="Generated by Gradle"/> - </artifact> - <artifact name="loader-1.0.0.pom"> - <sha256 value="c978d550808b47434aa49a63164110a50b55b0bcc6160a93a2e37d5110df8c5e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.localbroadcastmanager" name="localbroadcastmanager" version="1.0.0"> - <artifact name="localbroadcastmanager-1.0.0.aar"> - <sha256 value="e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8" origin="Generated by Gradle"/> - </artifact> - <artifact name="localbroadcastmanager-1.0.0.pom"> - <sha256 value="a000041f5a1f79283c5175e1bb60cf3683780f401c6a9d34fbe9751253fa6ff9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.multidex" name="multidex" version="2.0.1"> - <artifact name="multidex-2.0.1.aar"> - <sha256 value="42dd32ff9f97f85771b82a20003a8d70f68ab7b4ba328964312ce0732693db09" origin="Generated by Gradle"/> - </artifact> - <artifact name="multidex-2.0.1.pom"> - <sha256 value="0f10b63cfd5292d16678077bdb78363447b832801936c401fc26e68293f2106f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.multidex" name="multidex-instrumentation" version="2.0.0"> - <artifact name="multidex-instrumentation-2.0.0.aar"> - <sha256 value="fb8115694b1731c23c1bbb628f5baaee37a8f3b50d69a7733b55278e101e1488" origin="Generated by Gradle"/> - </artifact> - <artifact name="multidex-instrumentation-2.0.0.pom"> - <sha256 value="5056524d08992ebe1b3654c5b0db125497b930f177fa385952450e3b74d49bf2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-common" version="2.5.3"> - <artifact name="navigation-common-2.5.3.aar"> - <sha256 value="841406807a7c2254c66460bfb71e65a112a95c84ecd6253302b3657f83332026" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-common-2.5.3.module"> - <sha256 value="4b0bd6fb889a909af9a1ea9f7fd7271b319677dae8512d95cafdd49decc8ca0a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-common-ktx" version="2.5.3"> - <artifact name="navigation-common-ktx-2.5.3.aar"> - <sha256 value="6f5de047a79023c7767f5d27ec8bf8baad24d60659ed9781b021852ec0db6168" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-common-ktx-2.5.3.module"> - <sha256 value="459b2d0214420b6df2edb448c8a7c226dbecdb98b797685eb3da5f0a3b0adcbd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-fragment" version="2.5.3"> - <artifact name="navigation-fragment-2.5.3.aar"> - <sha256 value="8fd447ce032b1850bcded21855061d5dd209bf564dffb3a89451d0e642b26bec" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-fragment-2.5.3.module"> - <sha256 value="38a60d924ff27c38862ae16c3b4829a3afff8bc22f36cf8ec77feb5b63040602" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-fragment-ktx" version="2.5.3"> - <artifact name="navigation-fragment-ktx-2.5.3.aar"> - <sha256 value="47d8400282d0360f390c218c3c5206e8f7e8c61257ddac4136d7e1c67c560fa1" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-fragment-ktx-2.5.3.module"> - <sha256 value="8e2496a4f92130c6526ecd2b65a1ad5cef19306e6000e577c6dfd3412b977052" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-runtime" version="2.5.3"> - <artifact name="navigation-runtime-2.5.3.aar"> - <sha256 value="b57ffe10d3be3fc814ead4df2a40092069aad4741ac26f0a1e763c31144fe120" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-runtime-2.5.3.module"> - <sha256 value="923567493f7a3edab011bb1ca487c46b7ee7d497ca585a9986da6220f5b6c73a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-runtime-ktx" version="2.5.3"> - <artifact name="navigation-runtime-ktx-2.5.3.aar"> - <sha256 value="9ab94a34966c5501fac62979b96a5d64d1325b62caf707358616cf24df86caae" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-runtime-ktx-2.5.3.module"> - <sha256 value="a93359c849e6f5a3b04f786b9e7d730819d04790a178ed530f1e39eced3908a0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-safe-args-generator" version="2.5.3"> - <artifact name="navigation-safe-args-generator-2.5.3.jar"> - <sha256 value="7f576c31920eec76fde59e1c1db77e3ec18d542f72cb839c3c1c0442c743252f" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-safe-args-generator-2.5.3.module"> - <sha256 value="2c1de38509998390952a1c583ed657607af47c08bd226d43a6657ad09f2963f6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-safe-args-gradle-plugin" version="2.5.3"> - <artifact name="navigation-safe-args-gradle-plugin-2.5.3.jar"> - <sha256 value="12181b07b9f8541aea07561beb11641658b47440dab9b088cd4dd03c4381a375" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-safe-args-gradle-plugin-2.5.3.module"> - <sha256 value="77a190d15bf66d91e01c432fc2f7ad4c3088764c5fef9ca8cb428e1e92463f60" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-ui" version="2.5.3"> - <artifact name="navigation-ui-2.5.3.aar"> - <sha256 value="dcfefbd6274a6249d2843a547a554914fc86dc36479c15a631e33e7f22fc7d35" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-ui-2.5.3.module"> - <sha256 value="821c6675adc9f74037afd5a3e08f65b88dc81f707504a1759c94612bc9aa4b46" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.navigation" name="navigation-ui-ktx" version="2.5.3"> - <artifact name="navigation-ui-ktx-2.5.3.aar"> - <sha256 value="2443dedf8b4b2fbfd149970c7e4282d04d030614726107c0893fce33aa1870f7" origin="Generated by Gradle"/> - </artifact> - <artifact name="navigation-ui-ktx-2.5.3.module"> - <sha256 value="3cb7ca48b1c20c822fac10ea1866f92d67963337d4aeb4ad106ae20e8a3240ba" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.preference" name="preference" version="1.2.0"> - <artifact name="preference-1.2.0.aar"> - <sha256 value="c6fea18e055df05e407384a34d78a009f381af0529db6a7622ab2334b72fed7b" origin="Generated by Gradle"/> - </artifact> - <artifact name="preference-1.2.0.module"> - <sha256 value="24b86f07dbb8afc639e6c6de218c1fbf498a2eae51ae764dff33cca4d78f4406" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.preference" name="preference-ktx" version="1.2.0"> - <artifact name="preference-ktx-1.2.0.aar"> - <sha256 value="4c7116888722053aabafb29f020604b02826990c61387d37c0e23509ef17fa83" origin="Generated by Gradle"/> - </artifact> - <artifact name="preference-ktx-1.2.0.module"> - <sha256 value="02d9aaa209229ba950dc98a4ff145e4a83a8ab7418d05e4f9210a3db42e18b7a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.print" name="print" version="1.0.0"> - <artifact name="print-1.0.0.aar"> - <sha256 value="1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd" origin="Generated by Gradle"/> - </artifact> - <artifact name="print-1.0.0.pom"> - <sha256 value="62482c0594841bee24bb996abb6cb7b320a6a3b77dca9f0a0ba4fe3be5530aa7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.recyclerview" name="recyclerview" version="1.0.0"> - <artifact name="recyclerview-1.0.0.pom"> - <sha256 value="8831c06417fab6a9690c25f6e4b347b2e8c03cf6d47337be9c57e75b7fb23e6a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.recyclerview" name="recyclerview" version="1.1.0"> - <artifact name="recyclerview-1.1.0.aar"> - <sha256 value="f0d2b5a67d0a91ee1b1c73ef2b636a81f3563925ddd15a1d4e1c41ec28de7a4f" origin="Generated by Gradle"/> - </artifact> - <artifact name="recyclerview-1.1.0.pom"> - <sha256 value="fe321062a6e4e168b9c2b39a1137564c8784a2e5849402729768d5d7c4d972ef" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.resourceinspection" name="resourceinspection-annotation" version="1.0.1"> - <artifact name="resourceinspection-annotation-1.0.1.jar"> - <sha256 value="8cff870ec6fb31db48a52f4a792335b4bf8de07e03bd37823181526433ccd5cb" origin="Generated by Gradle"/> - </artifact> - <artifact name="resourceinspection-annotation-1.0.1.module"> - <sha256 value="352a11a8d8a4c1bd6cd2c2fefff9c94ca954d7b5202a0656959db95297f6a2b7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.savedstate" name="savedstate" version="1.2.0"> - <artifact name="savedstate-1.2.0.aar"> - <sha256 value="2de528d6898e95ef020d22d9ffdf9d1f77cbdd93f92d39dfaa5d5c43b0c311c8" origin="Generated by Gradle"/> - </artifact> - <artifact name="savedstate-1.2.0.module"> - <sha256 value="4247c23308abcb5d0ff8cdaf7dfd583f3c2a1016f68d13f1a41c21600b6fafd7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.savedstate" name="savedstate-ktx" version="1.2.0"> - <artifact name="savedstate-ktx-1.2.0.aar"> - <sha256 value="43112928d3cbb108801ee11130f303404bc4892cf78908811568195107bba7fe" origin="Generated by Gradle"/> - </artifact> - <artifact name="savedstate-ktx-1.2.0.module"> - <sha256 value="1c834feaa235c69ca9feacee06ba57d11d6f6a5fb4125a49dfce2679a313dfb7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.slidingpanelayout" name="slidingpanelayout" version="1.2.0"> - <artifact name="slidingpanelayout-1.2.0.aar"> - <sha256 value="5f53339be2a4f90a9abea3571dd59e70a8a49e7f15dd82974a3898b4652e8714" origin="Generated by Gradle"/> - </artifact> - <artifact name="slidingpanelayout-1.2.0.module"> - <sha256 value="3531bf0081b78538589f7e840fc0f7c70a45c4d8a2d17fb2f0eaceee2a99b59b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.startup" name="startup-runtime" version="1.0.0"> - <artifact name="startup-runtime-1.0.0.module"> - <sha256 value="40effca0d6ee1fde32bc296897e54ebbcc4cf4aa29b0c531036cbd2a824a3c24" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.startup" name="startup-runtime" version="1.1.1"> - <artifact name="startup-runtime-1.1.1.aar"> - <sha256 value="e0a6329a371262fe4c450372b70fdaf33b769ef6917094723787cfce896b1dd3" origin="Generated by Gradle"/> - </artifact> - <artifact name="startup-runtime-1.1.1.module"> - <sha256 value="cfd96cf6450c6e2b697598924729ad9a0495c5a4fcf4ebee7e2f81b07e415865" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test" name="annotation" version="1.0.1"> - <artifact name="annotation-1.0.1.aar"> - <sha256 value="c0754928effe1968c3a9a7b55d1dfc7ceb1e1e7c9f3f09f98afd42431f712492" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotation-1.0.1.pom"> - <sha256 value="39e978b32726354a67ea6efe8535ab6579f4760fd579c9deaacb347b0bff0c3e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test" name="core" version="1.5.0"> - <artifact name="core-1.5.0.aar"> - <sha256 value="2c06715c0d0843cee2143ab8bb322bb3f34d5247630402fc8c1b6a0eafa15b9f" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-1.5.0.pom"> - <sha256 value="18a6187c16b8d14b51b6a69e32de4a1416a0dc12cff3357d56fbe5feb70a15f2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test" name="monitor" version="1.6.1"> - <artifact name="monitor-1.6.1.aar"> - <sha256 value="2985ce8556989baf7c84342e7f687713c037a39a922e614d1a3ddf1ca3777079" origin="Generated by Gradle"/> - </artifact> - <artifact name="monitor-1.6.1.pom"> - <sha256 value="30c0dab3944d63721e2023b27ff35ef343130c9eb7b88f49f331b4e0f2ecfbce" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test" name="runner" version="1.5.2"> - <artifact name="runner-1.5.2.aar"> - <sha256 value="36cd6bc876daa1f183ccd11f9898e094c71f06960fde85a373422959613a44d6" origin="Generated by Gradle"/> - </artifact> - <artifact name="runner-1.5.2.pom"> - <sha256 value="505c188f187d91d76623b7898261ea0137d902aa1a4e143d88cc2c23742b4ac1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test.espresso" name="espresso-core" version="3.5.1"> - <artifact name="espresso-core-3.5.1.aar"> - <sha256 value="34b0493f4e002f205d961e562add0c0c31bb0acc657e89d89d4b188ac13f242c" origin="Generated by Gradle"/> - </artifact> - <artifact name="espresso-core-3.5.1.pom"> - <sha256 value="f15bd19444eef421f74195cc7043343af2b091a0cdb05a02cb8fcaba8816b50e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test.espresso" name="espresso-idling-resource" version="3.5.1"> - <artifact name="espresso-idling-resource-3.5.1.aar"> - <sha256 value="84fb8e2f5eda937771bee28582f5d2cfa61b0e9438d02041ca61b81e3dac3c87" origin="Generated by Gradle"/> - </artifact> - <artifact name="espresso-idling-resource-3.5.1.pom"> - <sha256 value="c9acad1f91f46e9ef59b000a3e995c9da9d6949dfa77ab8a2dadfb26f295cee1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test.ext" name="junit" version="1.1.5"> - <artifact name="junit-1.1.5.aar"> - <sha256 value="4307c0e60f5d701db9c59bcd9115af705113c36a9132fa3dbad58db1294e9bfd" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-1.1.5.pom"> - <sha256 value="4cff0df04cae25831e821ef2f9129245783460e98d0fd67d8f6824065a134c4e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.test.services" name="storage" version="1.4.2"> - <artifact name="storage-1.4.2.aar"> - <sha256 value="b34861f0cd920cb1089f08c3f27e5865b7f920284cc45f4ed12ef8d6980dac48" origin="Generated by Gradle"/> - </artifact> - <artifact name="storage-1.4.2.pom"> - <sha256 value="9b6301b11212641fa2cea00e48a98d0bf6f9de9fa4eabfdb31828b9a97c3ad89" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.tracing" name="tracing" version="1.0.0"> - <artifact name="tracing-1.0.0.aar"> - <sha256 value="07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612" origin="Generated by Gradle"/> - </artifact> - <artifact name="tracing-1.0.0.module"> - <sha256 value="fc8b21ebe5fa3a7c96ee098bcdcd00f077ebce73f243fa858e2b0671615f75d8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.transition" name="transition" version="1.2.0"> - <artifact name="transition-1.2.0.aar"> - <sha256 value="a1e059b3bc0b43a58dec0efecdcaa89c82d2bca552ea5bacf6656c46e853157e" origin="Generated by Gradle"/> - </artifact> - <artifact name="transition-1.2.0.pom"> - <sha256 value="247f12757acabd706b069445fd31c83c016cc7fe67b0468c582d043ea7d20de1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.transition" name="transition" version="1.3.0"> - <artifact name="transition-1.3.0.pom"> - <sha256 value="841ff952f002177c2573b3869f366d02b5e40cd7a22e73d6521febccdb0e9d6d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.transition" name="transition" version="1.4.1"> - <artifact name="transition-1.4.1.aar"> - <sha256 value="36d28d9ec33a8c64313842bce99c95736da5b27a6b3a513639050de82f075726" origin="Generated by Gradle"/> - </artifact> - <artifact name="transition-1.4.1.module"> - <sha256 value="dec13dbe9ab525bcb115b47b4f219ce262c4892859c653912f898964eccf79ae" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.vectordrawable" name="vectordrawable" version="1.1.0"> - <artifact name="vectordrawable-1.1.0.aar"> - <sha256 value="46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26" origin="Generated by Gradle"/> - </artifact> - <artifact name="vectordrawable-1.1.0.pom"> - <sha256 value="5b0e2d5b2179e54804785cbc21ce5f473b5e1ddd55a57da482e94dcd39492bb2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.vectordrawable" name="vectordrawable-animated" version="1.1.0"> - <artifact name="vectordrawable-animated-1.1.0.aar"> - <sha256 value="76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8" origin="Generated by Gradle"/> - </artifact> - <artifact name="vectordrawable-animated-1.1.0.pom"> - <sha256 value="276a20116b705fb75b9003ee9496c56f6fd3b32375fb232472811eba60a040bd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.versionedparcelable" name="versionedparcelable" version="1.1.1"> - <artifact name="versionedparcelable-1.1.1.aar"> - <sha256 value="57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4" origin="Generated by Gradle"/> - </artifact> - <artifact name="versionedparcelable-1.1.1.pom"> - <sha256 value="5f51e65873ca612de3838fa90d2ee95b8d040efd31b9c390a19bf94d615cdb2f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.viewpager" name="viewpager" version="1.0.0"> - <artifact name="viewpager-1.0.0.aar"> - <sha256 value="147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682" origin="Generated by Gradle"/> - </artifact> - <artifact name="viewpager-1.0.0.pom"> - <sha256 value="1f72f836339d03c6eb013f65075e76ca87075a577578eb4f95f74a3a5d253128" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.viewpager2" name="viewpager2" version="1.0.0"> - <artifact name="viewpager2-1.0.0.aar"> - <sha256 value="e95c0031d4cc247cd48196c6287e58d2cee54d9c79b85afea7c90920330275af" origin="Generated by Gradle"/> - </artifact> - <artifact name="viewpager2-1.0.0.pom"> - <sha256 value="4063bca7fe94fe65c98f4168f97ae10e02da0248598ad3ac21c432c7f608a17a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="androidx.window" name="window" version="1.0.0"> - <artifact name="window-1.0.0.aar"> - <sha256 value="3212985be4127373ca4d0ea7f8b81a250ae2105e924f7940105d067a0f9ac130" origin="Generated by Gradle"/> - </artifact> - <artifact name="window-1.0.0.module"> - <sha256 value="536773d2b2d65c26ce06b8c95e0fb415f1ad25d9b87330170f508689d3ad5ffb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="antlr" name="antlr" version="2.7.7"> - <artifact name="antlr-2.7.7.jar"> - <sha256 value="88fbda4b912596b9f56e8e12e580cc954bacfb51776ecfddd3e18fc1cf56dc4c" origin="Generated by Gradle"/> - </artifact> - <artifact name="antlr-2.7.7.pom"> - <sha256 value="100f793ba27f8b4e4204edb46171ebf36e54e0f94cfc02527fea07a0bb1fceb7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="ch.qos.logback" name="logback-classic" version="1.4.5"> - <artifact name="logback-classic-1.4.5.jar"> - <sha256 value="595431df58c74d515dd4c225b2d84d9f23e16a24daeaafd7c94b059312a8b493" origin="Generated by Gradle"/> - </artifact> - <artifact name="logback-classic-1.4.5.pom"> - <sha256 value="8bfb0ea99168c5f1c63888bbe5eacb4b7eacdf8a2d2226d9b0c023f3b5887fde" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="ch.qos.logback" name="logback-core" version="1.4.5"> - <artifact name="logback-core-1.4.5.jar"> - <sha256 value="8604e7c327556b097590701fba88dae84c581167f2746378f736b37269452380" origin="Generated by Gradle"/> - </artifact> - <artifact name="logback-core-1.4.5.pom"> - <sha256 value="68988021b6ecbf3d40fb74a3e8561e87ae66edc3a6d84e5c100880bea3208891" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="ch.qos.logback" name="logback-parent" version="1.4.5"> - <artifact name="logback-parent-1.4.5.pom"> - <sha256 value="af2ef873616180481564afb295b877d7558077cca9a3786b90ce5407b9434acc" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android" name="signflinger" version="7.3.1"> - <artifact name="signflinger-7.3.1.jar"> - <sha256 value="4232e4c3c87a06690b7e2a4958fb7495fcb75eea39f65eb6573377d852d57a63" origin="Generated by Gradle"/> - </artifact> - <artifact name="signflinger-7.3.1.pom"> - <sha256 value="9ee94579398d1f1281772ae67e4d35a5ce9c86fc001b8c97e3bc82f442a42660" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android" name="zipflinger" version="7.3.1"> - <artifact name="zipflinger-7.3.1.jar"> - <sha256 value="accf407c70267cf7eb583ed5aaa1358c2d8fdbdf9c77675010118af6b55c0d5c" origin="Generated by Gradle"/> - </artifact> - <artifact name="zipflinger-7.3.1.pom"> - <sha256 value="62fb407709c32a72509052e0c1ffd82a712af27ba2e20a3d256a576be632fd26" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.databinding" name="baseLibrary" version="7.3.1"> - <artifact name="baseLibrary-7.3.1.jar"> - <sha256 value="7ff63bd34cae029e479fca52751cc67ae23e00f2a4c71c30203968f33704aa96" origin="Generated by Gradle"/> - </artifact> - <artifact name="baseLibrary-7.3.1.pom"> - <sha256 value="7826539155a46211fff378d9aa9b6f50932e628b12c51592f959862777fa70fd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="annotations" version="30.3.1"> - <artifact name="annotations-30.3.1.jar"> - <sha256 value="77e5196bcafc283c5e987f0944f049eee0e68b532ebeb530d855f6f196db4f2a" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotations-30.3.1.pom"> - <sha256 value="4307abfc5293c3116003160611cd15ce195ebcd9144ead3d0d57f901e7a05f37" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="common" version="30.3.1"> - <artifact name="common-30.3.1.jar"> - <sha256 value="559f1484222d8947ecf4d18538295be6d12ff2b74dc22c3c85922c7ba33678e9" origin="Generated by Gradle"/> - </artifact> - <artifact name="common-30.3.1.pom"> - <sha256 value="ed356f798a698e5320ea8616108313df7ded97723c07a315d77287fc25cc9b1b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="desugar_jdk_libs" version="1.2.2"> - <artifact name="desugar_jdk_libs-1.2.2.jar"> - <sha256 value="563069c5ae127e5b3dff27aedd499271871e2eebca9830b18715c6726a6d1602" origin="Generated by Gradle"/> - </artifact> - <artifact name="desugar_jdk_libs-1.2.2.pom"> - <sha256 value="e0e87be252272df1f05ea3b22f18e1d37ef4f0b8e0bc84a0875c3af958b9a11f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="desugar_jdk_libs_configuration" version="1.2.2"> - <artifact name="desugar_jdk_libs_configuration-1.2.2.jar"> - <sha256 value="38a4386075f6e7b03dfee1cdcd7f2dd4de8e6d11d68bd4d9fccf44872bd0f4b0" origin="Generated by Gradle"/> - </artifact> - <artifact name="desugar_jdk_libs_configuration-1.2.2.pom"> - <sha256 value="176c3149cee760d29cc86e71fea4b68b0a0e9a02da0c4bac1db74aae09d11bae" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="dvlib" version="30.3.1"> - <artifact name="dvlib-30.3.1.jar"> - <sha256 value="d4b141bd617afaf292dbd7c4f48b6b3a0b4244ded12b0e241e7bdf755db1597c" origin="Generated by Gradle"/> - </artifact> - <artifact name="dvlib-30.3.1.pom"> - <sha256 value="2d2068fff0fa955065e22fcb3f4915ea2a53026d644e9cd3383f121f167d7d80" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="repository" version="30.3.1"> - <artifact name="repository-30.3.1.jar"> - <sha256 value="a3bd11b434ccde5df90de77fd853361d99c150778cce5638d1ce25f820b9e243" origin="Generated by Gradle"/> - </artifact> - <artifact name="repository-30.3.1.pom"> - <sha256 value="ec4d6dc6d8cff33b141ddc68f1a8e4bf13b6d716c6ee5312422d02b9686196f9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="sdk-common" version="30.3.1"> - <artifact name="sdk-common-30.3.1.jar"> - <sha256 value="fbe6b7dfb30b38ab1d17c5c6b660a8446ac2023fb0cfca3231126facedac2b7c" origin="Generated by Gradle"/> - </artifact> - <artifact name="sdk-common-30.3.1.pom"> - <sha256 value="ba06c761aa257cbe9821941f9a2db7dcea81d32e3c67339fce1caa47d996ac4d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools" name="sdklib" version="30.3.1"> - <artifact name="sdklib-30.3.1.jar"> - <sha256 value="57e147e5c3add5bfa1c53eb81aa24edbe2056fbd2210a00c9a71409ae498356b" origin="Generated by Gradle"/> - </artifact> - <artifact name="sdklib-30.3.1.pom"> - <sha256 value="3d432a52cfc29068f8dc606c2cf4a7620ae2eec2132991d78a1fb0d184884499" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.analytics-library" name="crash" version="30.3.1"> - <artifact name="crash-30.3.1.jar"> - <sha256 value="c904484c4180ef376a7f0cec5d7a57b6c785f199f15b76b2f5a2a85a0de81d20" origin="Generated by Gradle"/> - </artifact> - <artifact name="crash-30.3.1.pom"> - <sha256 value="79aadd5b369a571342283c2d1e425fcce8cc6477461934d61f8ec329c21313db" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.analytics-library" name="protos" version="30.3.1"> - <artifact name="protos-30.3.1.jar"> - <sha256 value="6695fe4be8c58274efbf0fa0ab9e465ceaf4f21792970d68d37591287ee7bed1" origin="Generated by Gradle"/> - </artifact> - <artifact name="protos-30.3.1.pom"> - <sha256 value="a168d79e94ca778c6e792718e20e33343fb7cd25b4a1b4d2aa188870d068a769" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.analytics-library" name="shared" version="30.3.1"> - <artifact name="shared-30.3.1.jar"> - <sha256 value="4a7ee8aad5796e058a2f414993424155172689ac332cd1a999db861949e2e1de" origin="Generated by Gradle"/> - </artifact> - <artifact name="shared-30.3.1.pom"> - <sha256 value="c90311670f113b881712908fbca10317cd6738df948d313db8f9af3298461c31" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.analytics-library" name="tracker" version="30.3.1"> - <artifact name="tracker-30.3.1.jar"> - <sha256 value="ec43dbc6cf1e93f5999262b483cb6ec93b372010c06c3800c50d9fca903dd1c2" origin="Generated by Gradle"/> - </artifact> - <artifact name="tracker-30.3.1.pom"> - <sha256 value="57488ee6b33d1a6bd76edbfb465b94fa32212a628bca08362aecb612ebf0cf61" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="aapt2" version="7.3.1-8691043"> - <artifact name="aapt2-7.3.1-8691043-linux.jar"> - <sha256 value="b1b149970191a11a840f1fdbfb4b60b6773df9ba20ee1c2e774b73bca686d0f3" origin="Generated by Gradle"/> - </artifact> - <artifact name="aapt2-7.3.1-8691043.pom"> - <sha256 value="73ac33e4e0cbfb8106e18fb6b5c14d87025c9d1d02a6a13f40e3064009cc8082" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="aapt2-proto" version="7.0.0-beta04-7396180"> - <artifact name="aapt2-proto-7.0.0-beta04-7396180.jar"> - <sha256 value="1ca4f1b0f550c6c25f63c1916da84f6e7a92c66b7ad38ab1d5d49a20552a5984" origin="Generated by Gradle"/> - </artifact> - <artifact name="aapt2-proto-7.0.0-beta04-7396180.module"> - <sha256 value="22b5d69296c06b99261c2b5485994af1e6e7e02beb6a8d213ce88dae76660755" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="aapt2-proto" version="7.3.1-8691043"> - <artifact name="aapt2-proto-7.3.1-8691043.jar"> - <sha256 value="d5e2f3e1e1eb06224b6875f5e513c72a65182342745718160caf191d46a96664" origin="Generated by Gradle"/> - </artifact> - <artifact name="aapt2-proto-7.3.1-8691043.module"> - <sha256 value="5c7a1bb618a92ef59c3d60cf80498f16460a6bf2feaafc4ae847d3fb6c59edac" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="aaptcompiler" version="7.3.1"> - <artifact name="aaptcompiler-7.3.1.jar"> - <sha256 value="2ce0937dfe28bcbe3e0c20ca0303fb5fa2873f0b2d1875d77509af1fbee50698" origin="Generated by Gradle"/> - </artifact> - <artifact name="aaptcompiler-7.3.1.module"> - <sha256 value="deca172074a27feedac6231c1ed7de970b5910f55891fc928cbfc6566461872f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="apksig" version="7.3.1"> - <artifact name="apksig-7.3.1.jar"> - <sha256 value="6d6a13a51ac3806c11af5f0967092055e35a67df6a74bff1544d9f5518c5ad55" origin="Generated by Gradle"/> - </artifact> - <artifact name="apksig-7.3.1.pom"> - <sha256 value="7d326b9c1d978e5a29e453fec3686dcf95721cb13ce6c036e24814f9d64960a5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="apkzlib" version="7.3.1"> - <artifact name="apkzlib-7.3.1.jar"> - <sha256 value="415c5d5adff68b0ebd700e27c04c150683e65d5731d47fdb018eae391f70768c" origin="Generated by Gradle"/> - </artifact> - <artifact name="apkzlib-7.3.1.pom"> - <sha256 value="c38b874b5766782b8c55c90d1b8f0ace6f081d90e292e62fcd9453bd62d8e904" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="builder" version="7.3.1"> - <artifact name="builder-7.3.1.jar"> - <sha256 value="53e55562cb42ff174c49077618ed8f3857b0a9a5e3d4055fdfecb287f65ae4f8" origin="Generated by Gradle"/> - </artifact> - <artifact name="builder-7.3.1.module"> - <sha256 value="513bbe21cae8da0ba9fe3f46a671bfa36eb683f20016a9fd3657e4da0bacdb86" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="builder-model" version="7.3.1"> - <artifact name="builder-model-7.3.1.jar"> - <sha256 value="9737e0b1873180027f58e9902b2fc832e0ce22d36dd9d78fc93a5ca32b6ca5b1" origin="Generated by Gradle"/> - </artifact> - <artifact name="builder-model-7.3.1.module"> - <sha256 value="18739a001a4cbefd79d226bee3d43db70d30b10fac743912c7b89ec53839fefd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="builder-test-api" version="7.3.1"> - <artifact name="builder-test-api-7.3.1.jar"> - <sha256 value="d52cc269826c8f29da811687e68a01d99e7ea07227749f5ee0df08799b218f26" origin="Generated by Gradle"/> - </artifact> - <artifact name="builder-test-api-7.3.1.module"> - <sha256 value="66c680c6b70ed7004d755482166b4b1c011054714e81bb8ffc86d4ef4957a42e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="bundletool" version="1.9.0"> - <artifact name="bundletool-1.9.0.jar"> - <sha256 value="5dd50122fd31c217bff5fa094dd1647058534120d8b709194a3ca8b984d9c099" origin="Generated by Gradle"/> - </artifact> - <artifact name="bundletool-1.9.0.pom"> - <sha256 value="8031aad7290cf4c27c4c5343d72e7597fd44a0d52269dac02714933b66ad633e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="gradle" version="7.3.1"> - <artifact name="gradle-7.3.1.jar"> - <sha256 value="93e03174bf18f41554b7ee767c9080937a5efe5015ec9bdf8cc97550d427f7a5" origin="Generated by Gradle"/> - </artifact> - <artifact name="gradle-7.3.1.module"> - <sha256 value="581d11ecc4fbb34142b5e8c07ad30c561a4a38cdc3e3cbe1580eb0ee48c7233e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="gradle-api" version="7.3.1"> - <artifact name="gradle-api-7.3.1.jar"> - <sha256 value="5a661315d1b7addcabfa981caa5ddac0c59b043580ad18886724df162a0a643f" origin="Generated by Gradle"/> - </artifact> - <artifact name="gradle-api-7.3.1.module"> - <sha256 value="16a88da35c0caf2263b388893b8cc82aa36462a7c4c678a1a6eda26888a5322a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="manifest-merger" version="30.3.1"> - <artifact name="manifest-merger-30.3.1.jar"> - <sha256 value="534ac50d45d1bbc80f4122c7fa221402442835029ef05ec056f4edf2776c8c9f" origin="Generated by Gradle"/> - </artifact> - <artifact name="manifest-merger-30.3.1.module"> - <sha256 value="50e135d2cc3a916e78d87b7b9f1fa97a8b1da7e462c4792716aff6ff716d364c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build" name="transform-api" version="2.0.0-deprecated-use-gradle-api"> - <artifact name="transform-api-2.0.0-deprecated-use-gradle-api.jar"> - <sha256 value="4de4a3d05e1c534c2db9e4588bf34082bb2bd232d8abb9727c430290ce225740" origin="Generated by Gradle"/> - </artifact> - <artifact name="transform-api-2.0.0-deprecated-use-gradle-api.pom"> - <sha256 value="7c62f3856e8abca1d79257925f26c12668693f5d95904056bbac88605cfd8575" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build.jetifier" name="jetifier-core" version="1.0.0-beta10"> - <artifact name="jetifier-core-1.0.0-beta10.jar"> - <sha256 value="26abb4a13927d9062169c504c9e94fe80e9ae3a4f7b5ab8875ab007536a91f5e" origin="Generated by Gradle"/> - </artifact> - <artifact name="jetifier-core-1.0.0-beta10.module"> - <sha256 value="f0917589a42d276163f10040ab5842e91883dcbdb1d48bfd1f1fcaa72c1ca7b7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.build.jetifier" name="jetifier-processor" version="1.0.0-beta10"> - <artifact name="jetifier-processor-1.0.0-beta10.jar"> - <sha256 value="c5067a7b928237a1271a5e9cb5710e9f80b4973293945bc51e3a4c864ea4bfed" origin="Generated by Gradle"/> - </artifact> - <artifact name="jetifier-processor-1.0.0-beta10.module"> - <sha256 value="36c25576b19993df360170528cc62b7246c37776d6158154a67cdf8fc2d58e13" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.ddms" name="ddmlib" version="30.3.1"> - <artifact name="ddmlib-30.3.1.jar"> - <sha256 value="58c4db5a94a5f8c933409335f6657a92ff9c87488a271b260315fbd020c07fe0" origin="Generated by Gradle"/> - </artifact> - <artifact name="ddmlib-30.3.1.pom"> - <sha256 value="8e30ecb86a8d8d1a76657a6f27ef45eda4efeb25121cfc3576320ae88f365027" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.emulator" name="proto" version="30.3.1"> - <artifact name="proto-30.3.1.jar"> - <sha256 value="a0f464cbd7f528aa15846611626c7afcd08649804ca72782c6e3f291a065a0c1" origin="Generated by Gradle"/> - </artifact> - <artifact name="proto-30.3.1.pom"> - <sha256 value="5e5bf987aa574415d7d005676064a7a8a2ce210331191ba403795ba2e23067de" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.external.com-intellij" name="intellij-core" version="30.3.1"> - <artifact name="intellij-core-30.3.1.jar"> - <sha256 value="8bb2aecfb8dd2208fe341a731ac44a9ec83f989c12449b82dff1eab493de0408" origin="Generated by Gradle"/> - </artifact> - <artifact name="intellij-core-30.3.1.pom"> - <sha256 value="6f7f1a6754d32802931568d2d9f72cbd29e15ae4954174460d2d1a95634a3a52" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.external.com-intellij" name="kotlin-compiler" version="30.3.1"> - <artifact name="kotlin-compiler-30.3.1.jar"> - <sha256 value="ccdc9e1abfafdec71f4f93a3a2ad6230a1384925b06fc277d4ed921de5bb6fd8" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-compiler-30.3.1.pom"> - <sha256 value="8b19303de985a52a77d68d48c33aaaf3aae5435dc2910a85d8b7df4c660ca7ad" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.external.org-jetbrains" name="uast" version="30.3.1"> - <artifact name="uast-30.3.1.jar"> - <sha256 value="47bf3fc2a6a9aa09f728788e869033341abd9d8cdb9fc61087dfb7cd576076d8" origin="Generated by Gradle"/> - </artifact> - <artifact name="uast-30.3.1.pom"> - <sha256 value="4cd888bbd4ca5be4b000e6de2de2456c38e7a027786a2544a710357b84b4aff4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.layoutlib" name="layoutlib-api" version="30.3.1"> - <artifact name="layoutlib-api-30.3.1.jar"> - <sha256 value="7ffb2c13ac92e2d2d454c617ec537ad3b8868a987118c4d3c62018125d656707" origin="Generated by Gradle"/> - </artifact> - <artifact name="layoutlib-api-30.3.1.pom"> - <sha256 value="0d1f4b4ef2fd286ea893ded13e369744ffce78231a9e8451ee5ecbf8319dc82b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.lint" name="lint" version="30.3.1"> - <artifact name="lint-30.3.1.jar"> - <sha256 value="685080782f6368cc68ac74db065b4c5c59d9c82599dc34be2ec39e425251b864" origin="Generated by Gradle"/> - </artifact> - <artifact name="lint-30.3.1.pom"> - <sha256 value="017ff11498c2dfa9285cbd6a148062821bdc54f930c5024d64aea2d708b72205" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.lint" name="lint-api" version="30.3.1"> - <artifact name="lint-api-30.3.1.jar"> - <sha256 value="cc6ebd7a146226363aa38bbb4a10d3e329079ac3201dbfeb562605be691d482c" origin="Generated by Gradle"/> - </artifact> - <artifact name="lint-api-30.3.1.pom"> - <sha256 value="74a933b756cec5b826446f850b7c539482128bcbed4f6202afb9c59695ca2b11" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.lint" name="lint-checks" version="30.3.1"> - <artifact name="lint-checks-30.3.1.jar"> - <sha256 value="a6a728be66b4e1cb61333f77f519f8213450989be0fbe125ff77e6241d07be8e" origin="Generated by Gradle"/> - </artifact> - <artifact name="lint-checks-30.3.1.pom"> - <sha256 value="5dfe62fc2a12d8ad0b968b6545d86ffd1d973bf2c6dfcebe860cba4462a633fd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.lint" name="lint-gradle" version="30.3.1"> - <artifact name="lint-gradle-30.3.1.jar"> - <sha256 value="331c4ac1769c26bf90657db219dcc639ca63fe2fbae9db1ff674dd0a62c74676" origin="Generated by Gradle"/> - </artifact> - <artifact name="lint-gradle-30.3.1.pom"> - <sha256 value="6e3f870baf662f03731526cc547f00b59e018ac925be857bedd218fdd84ee5c2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.lint" name="lint-model" version="30.3.1"> - <artifact name="lint-model-30.3.1.jar"> - <sha256 value="4b6fc00a29c8dc716fb3a53b200af711318d2a8db5fa6c3d874b6d6d65e44541" origin="Generated by Gradle"/> - </artifact> - <artifact name="lint-model-30.3.1.pom"> - <sha256 value="0bfaf35b7d570aa981155eaebf1ddc9035d93bed88b95913799f5aa9908b0ea6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.lint" name="lint-typedef-remover" version="30.3.1"> - <artifact name="lint-typedef-remover-30.3.1.jar"> - <sha256 value="0275a7633d55972fe46e3395819b9014cf04e2035be89e4a6eba6ac9559351ff" origin="Generated by Gradle"/> - </artifact> - <artifact name="lint-typedef-remover-30.3.1.pom"> - <sha256 value="8d6892d7d7d9cf73026edacd954047f997d18206b728e96fb28e6af1f5bdaff3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-device-provider-ddmlib" version="30.3.1"> - <artifact name="android-device-provider-ddmlib-30.3.1.jar"> - <sha256 value="c25a7927825b3e9a2152a59d6a3e4725091b1914052c1af87d49d261b77f1e09" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-device-provider-ddmlib-30.3.1.module"> - <sha256 value="a8192a5cd59747bf0213e60670d4fc460651faae1b8282895451df972c36db24" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-device-provider-ddmlib-proto" version="30.3.1"> - <artifact name="android-device-provider-ddmlib-proto-30.3.1.jar"> - <sha256 value="ea7615ea6db7602e937a4583fc6818162b108fb3cad6fe615a8f5ba82cd28dad" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-device-provider-ddmlib-proto-30.3.1.pom"> - <sha256 value="edc220fbfb7fddfea08e1d517ea24785704e310c414a4e6f1d8ba1a18abdd6d5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-device-provider-gradle" version="30.3.1"> - <artifact name="android-device-provider-gradle-30.3.1.jar"> - <sha256 value="f7f869a2a42e0c8d2adf0c6577ed05ae823c79cdb4abd05e5a5d159a1bd69048" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-device-provider-gradle-30.3.1.module"> - <sha256 value="8014f4db5d5d3f0e5aefd23b58f3b2cf264994321ce439a1f5b2b37dfa71d876" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-device-provider-gradle-proto" version="30.3.1"> - <artifact name="android-device-provider-gradle-proto-30.3.1.jar"> - <sha256 value="a71cb4625a39cb8ce04bc0833aefefb95638f9c7029f664da6ab9f91be3b9cd9" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-device-provider-gradle-proto-30.3.1.pom"> - <sha256 value="8e8fc9dab6a2b03d6530fca490fd8f28163b9a1d3b1421853a41dd20b6daa771" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-additional-test-output" version="30.3.1"> - <artifact name="android-test-plugin-host-additional-test-output-30.3.1.jar"> - <sha256 value="900bb26deddf1d5d3f743cc50636682063ae15003f5571a1f2f0503b7cbb605c" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-additional-test-output-30.3.1.module"> - <sha256 value="7c366b5713049866b0e0a9e0c8a544f1eac3130cb9e6179c4cd30bf972b919db" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-additional-test-output-proto" version="30.3.1"> - <artifact name="android-test-plugin-host-additional-test-output-proto-30.3.1.jar"> - <sha256 value="31c5a0b3a1323970eaacd771727ec13863b6dbe60079e0c0d029816b6413766d" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-additional-test-output-proto-30.3.1.pom"> - <sha256 value="df571cc9b52785309ee0d7810114dbab334c9a7fd4ddcb7fa2b96f30b99907a0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-coverage" version="30.3.1"> - <artifact name="android-test-plugin-host-coverage-30.3.1.jar"> - <sha256 value="c5005e1007cc760aea78d36087e96b1aa9b2415c7c92c258207de3beecb529de" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-coverage-30.3.1.module"> - <sha256 value="6b51602d1ddf7df967a94057c880e28557eebc5b101a9bc9baab69c3878f3404" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-coverage-proto" version="30.3.1"> - <artifact name="android-test-plugin-host-coverage-proto-30.3.1.jar"> - <sha256 value="18958a29190be8c685e5ae5b25d994280f3d8e019b3cfd921f0b492efd18893b" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-coverage-proto-30.3.1.pom"> - <sha256 value="5e4e15b21f90c75839bc33217bb56aeab59590a1ba6449f8a78d2a3b58d0b6ef" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-device-info" version="30.3.1"> - <artifact name="android-test-plugin-host-device-info-30.3.1.jar"> - <sha256 value="584b86493580b7266ce86dd95fcb8a9e66f58c30d6b80c6c71e50452229ed0b4" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-device-info-30.3.1.module"> - <sha256 value="f078c41a635da6c938c93c5a3c7297176cdb59998349842ae64f9cd6a388647d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-device-info-proto" version="30.3.1"> - <artifact name="android-test-plugin-host-device-info-proto-30.3.1.jar"> - <sha256 value="a165c63bf82996576c8dec307de916cc64e0db4c5a0c7d77f83c9a785887bcc3" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-device-info-proto-30.3.1.pom"> - <sha256 value="fdd839d47249a869324ff5dcbf02e5532e98bf281d5377304a934d92b93b6b41" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-logcat" version="30.3.1"> - <artifact name="android-test-plugin-host-logcat-30.3.1.jar"> - <sha256 value="937d3e721851cfcb0717e08eb6a74d41f738f5ded3b85f0e5fe7e90433aff376" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-logcat-30.3.1.module"> - <sha256 value="9c61a45bf2f6d8f206507a525c1b441b4f88871094e3eccd84915ce315745ea9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-retention" version="30.3.1"> - <artifact name="android-test-plugin-host-retention-30.3.1.jar"> - <sha256 value="326b3209806a9a36f6a061337e1a1077c7fa3e9aa63416c2baf59439b757d5e3" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-retention-30.3.1.module"> - <sha256 value="8d4878a3321ff39ce63e4e4dc542e31670953acd189fcba56e4132b966f72c27" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-host-retention-proto" version="30.3.1"> - <artifact name="android-test-plugin-host-retention-proto-30.3.1.jar"> - <sha256 value="c34f57d6f48971ee71b61ea6f17956934cc2de31dd83c84ae7bfec681e1f99d4" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-host-retention-proto-30.3.1.pom"> - <sha256 value="044126fb9ec4df035652e30f0c5fa91be4eee97de5e6484eb19e323872d9a946" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-result-listener-gradle" version="30.3.1"> - <artifact name="android-test-plugin-result-listener-gradle-30.3.1.jar"> - <sha256 value="75ff9083a45ffd502e1e4385e0741b69fd640ef6f72220849dc9c0db0179c58c" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-result-listener-gradle-30.3.1.module"> - <sha256 value="a79cebd6122c80faa3a72daa8fa691293387de63d166ab546ec3ac69fadae7ef" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.android.tools.utp" name="android-test-plugin-result-listener-gradle-proto" version="30.3.1"> - <artifact name="android-test-plugin-result-listener-gradle-proto-30.3.1.jar"> - <sha256 value="38d6b8fb2ca578c86aedb66b170ec61bff1e74eef238349702fdd5dabb1a73d8" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-result-listener-gradle-proto-30.3.1.pom"> - <sha256 value="f18bc1662a2fb8f95011818e7b9cc05399971d924d20791c5c898fcb903ce64f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml" name="oss-parent" version="43"> - <artifact name="oss-parent-43.pom"> - <sha256 value="e5585cc1c37079b2e3817a8997945736f158831844d59d0e4d3a45b27611f926" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson" name="jackson-base" version="2.13.5"> - <artifact name="jackson-base-2.13.5.pom"> - <sha256 value="f2e41218dd50b92ce4983c5d2c04209dd61cd1e00fc125e3600aa9eaf4501dea" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson" name="jackson-bom" version="2.13.5"> - <artifact name="jackson-bom-2.13.5.pom"> - <sha256 value="0a26b6f34ab93f9cfa80179888c6bf425f1c17dcd9c11db6561393930fdb746a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson" name="jackson-parent" version="2.13"> - <artifact name="jackson-parent-2.13.pom"> - <sha256 value="2bba89978172af1effcb4d143d09921a3f3082ca4dcf122b1ded98bf55b2ad57" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson.core" name="jackson-annotations" version="2.13.5"> - <artifact name="jackson-annotations-2.13.5.jar"> - <sha256 value="80aea8ed7232db5040ced4b3f982f29da95bb3d802343dbf6fd82ccd98c21c4f" origin="Generated by Gradle"/> - </artifact> - <artifact name="jackson-annotations-2.13.5.module"> - <sha256 value="5754476cdbfe1dce701ff41443b1474122fee5310780c9d16c4a0afef973bd94" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson.core" name="jackson-core" version="2.13.5"> - <artifact name="jackson-core-2.13.5.jar"> - <sha256 value="48f36a025311d0464ad8dda4512a20c79e279a9550f63f3179d731d94482474b" origin="Generated by Gradle"/> - </artifact> - <artifact name="jackson-core-2.13.5.module"> - <sha256 value="6266e6048af797bbeb46e5b1f1b9a383238d5928d40ff1318199045201ac32d9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson.core" name="jackson-databind" version="2.13.5"> - <artifact name="jackson-databind-2.13.5.jar"> - <sha256 value="5fedb24b2356491815d18267f65da9a21dd67413345ad7795f221afa25c78984" origin="Generated by Gradle"/> - </artifact> - <artifact name="jackson-databind-2.13.5.module"> - <sha256 value="1d0ce09d6a34e4c688980a5b6e3a7fc4aae114589df44a9aec97f6111ad85df2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.fasterxml.jackson.module" name="jackson-module-kotlin" version="2.13.5"> - <artifact name="jackson-module-kotlin-2.13.5.jar"> - <sha256 value="cf02c93eef0b76f993ac2beaedd8b18b689e77582152e07accf16ca30fa65cb5" origin="Generated by Gradle"/> - </artifact> - <artifact name="jackson-module-kotlin-2.13.5.module"> - <sha256 value="abed2a0cd9aef1a1fcaae828924f2ec9b8f92bdfb901900ba1d2566e1239ede2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.github.ajalt" name="clikt" version="2.2.0"> - <artifact name="clikt-2.2.0.jar"> - <sha256 value="beb3136d06764ec8ce0810a8fd6c8b7b49d04287d1deef3a07c016e43a458d33" origin="Generated by Gradle"/> - </artifact> - <artifact name="clikt-2.2.0.pom"> - <sha256 value="f78f39938875be9b744752a50bab9478ac2acae072e71fbfee6d4e2ca56013c8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.github.shyiko.klob" name="klob" version="0.2.1"> - <artifact name="klob-0.2.1.jar"> - <sha256 value="2f6174e3049008f263fd832813390df645ac5c7cfa79f170ace58690810476f2" origin="Generated by Gradle"/> - </artifact> - <artifact name="klob-0.2.1.pom"> - <sha256 value="fae032522e30b7811b4bd1e466c9f2be41801c018c13644bb0cbc38c0233cad3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.github.tony19" name="logback-android" version="3.0.0"> - <artifact name="logback-android-3.0.0.aar"> - <sha256 value="7755ead239b4f6f354134c9e27fb632fffab45aed7212c001f9d1d5b6f14a134" origin="Generated by Gradle"/> - </artifact> - <artifact name="logback-android-3.0.0.pom"> - <sha256 value="413c3597f13b73aa771918d29577a1eef7c2d4136aca7e54e687fcca0bddc7d3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.android" name="annotations" version="4.1.1.4"> - <artifact name="annotations-4.1.1.4.jar"> - <sha256 value="ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotations-4.1.1.4.pom"> - <sha256 value="e4bb54753c36a27a0e5d70154a5034fedd8feac4282295034bfd483d6c7aae78" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.android.material" name="material" version="1.8.0"> - <artifact name="material-1.8.0.aar"> - <sha256 value="adbec47686bc0c85cdcb2a9ec12a24f9c2aede17176f0b06e3683479db4792a7" origin="Generated by Gradle"/> - </artifact> - <artifact name="material-1.8.0.module"> - <sha256 value="94935b8018ddb4ef844eb107c46f2fa2bc6b548cf6642c26e30ab3ac6daa77ab" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.api.grpc" name="proto-google-common-protos" version="2.0.1"> - <artifact name="proto-google-common-protos-2.0.1.jar"> - <sha256 value="5ce71656118618731e34a5d4c61aa3a031be23446dc7de8b5a5e77b66ebcd6ef" origin="Generated by Gradle"/> - </artifact> - <artifact name="proto-google-common-protos-2.0.1.pom"> - <sha256 value="8b62bfd85d693ebcffd828232af7424f34fd212c5e28e5ed99b0dc5d2bc7d4f5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.auto" name="auto-parent" version="6"> - <artifact name="auto-parent-6.pom"> - <sha256 value="05f740c6648165db00cf618dd56c200c4725e358e6d54f5853e0bec15734ea0a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.auto.value" name="auto-value-annotations" version="1.6.2"> - <artifact name="auto-value-annotations-1.6.2.jar"> - <sha256 value="b48b04ddba40e8ac33bf036f06fc43995fc5084bd94bdaace807ce27d3bea3fb" origin="Generated by Gradle"/> - </artifact> - <artifact name="auto-value-annotations-1.6.2.pom"> - <sha256 value="1c76cd462fc96e7aa96dc70ce82f0d54063d6df16db35c9c7d9cc0d1a99d3fff" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.auto.value" name="auto-value-parent" version="1.6.2"> - <artifact name="auto-value-parent-1.6.2.pom"> - <sha256 value="27b640c82179f5cff62009c0b72033d9bc60f60e9902a66802274b7fe37fc81c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.code.findbugs" name="jsr305" version="2.0.2"> - <artifact name="jsr305-2.0.2.jar"> - <sha256 value="1e7f53fa5b8b5c807e986ba335665da03f18d660802d8bf061823089d1bee468" origin="Generated by Gradle"/> - </artifact> - <artifact name="jsr305-2.0.2.pom"> - <sha256 value="8bc2c4f67a6396a7333dece2d1f991ca7d0aea48b29592265e2239be91972579" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.code.findbugs" name="jsr305" version="3.0.2"> - <artifact name="jsr305-3.0.2.jar"> - <sha256 value="766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7" origin="Generated by Gradle"/> - </artifact> - <artifact name="jsr305-3.0.2.pom"> - <sha256 value="19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.code.gson" name="gson" version="2.8.6"> - <artifact name="gson-2.8.6.jar"> - <sha256 value="c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f" origin="Generated by Gradle"/> - </artifact> - <artifact name="gson-2.8.6.pom"> - <sha256 value="2174415a647332d30fda04bd1cfc708a3ecc84eaf7517f596188d8244e103911" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.code.gson" name="gson" version="2.9.0"> - <artifact name="gson-2.9.0.jar"> - <sha256 value="c96d60551331a196dac54b745aa642cd078ef89b6f267146b705f2c2cbef052d" origin="Generated by Gradle"/> - </artifact> - <artifact name="gson-2.9.0.pom"> - <sha256 value="7190d0b07f278e9f4c603f44e543940f81cf1a2559f851c6f298c9bb2be2978c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.code.gson" name="gson-parent" version="2.8.6"> - <artifact name="gson-parent-2.8.6.pom"> - <sha256 value="3736463859ec19267295e894940ae82a8f684413031122fe35ce7cff7e30a774" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.code.gson" name="gson-parent" version="2.9.0"> - <artifact name="gson-parent-2.9.0.pom"> - <sha256 value="af781c9a5766ffea311a0df0536576a64decc661aa110c4de5c73ac8bf434424" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.crypto.tink" name="tink" version="1.3.0-rc2"> - <artifact name="tink-1.3.0-rc2.jar"> - <sha256 value="3aa576b5671d0e26d83d7fdb7186810b5672f00bf8e72184260bcc7c2d7dc07a" origin="Generated by Gradle"/> - </artifact> - <artifact name="tink-1.3.0-rc2.pom"> - <sha256 value="5b9a11c11183d011de9a9a5490962d78a4d4bfe7579b0c5be4afb18a222e3f41" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="dagger" version="2.28.3"> - <artifact name="dagger-2.28.3.jar"> - <sha256 value="f1dd23f8ae34a8e91366723991ead0d6499d1a3e9163ce550c200b02d76a872b" origin="Generated by Gradle"/> - </artifact> - <artifact name="dagger-2.28.3.pom"> - <sha256 value="265ba959a8e13c3a06133f04b539169c1018daffd4d33f53c453ab4cb386f570" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="dagger" version="2.44.2"> - <artifact name="dagger-2.44.2.jar"> - <sha256 value="b6d35d56b47cbfc3e484f678d0bacb497c6c0ec2cc2a5e180d79d0788d313ab8" origin="Generated by Gradle"/> - </artifact> - <artifact name="dagger-2.44.2.pom"> - <sha256 value="697110ff4b9093ab7ac5cd3de66c24db71e61c61acb60de91922a09804218d89" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="dagger-compiler" version="2.44.2"> - <artifact name="dagger-compiler-2.44.2.jar"> - <sha256 value="6a3377f31695b9a53d47012a47e844432f7a6b9159fbf22ec10203de848de770" origin="Generated by Gradle"/> - </artifact> - <artifact name="dagger-compiler-2.44.2.pom"> - <sha256 value="fcfa1b3a24e98d57f95101b7a4e1b7d3cc2094f81fcb38ec64a5ab8bfc815f20" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="dagger-lint-aar" version="2.44.2"> - <artifact name="dagger-lint-aar-2.44.2.aar"> - <sha256 value="b7c63103e4705f07c989abb90bc2ba3438924b4b9be5e59828172bcb597c79e3" origin="Generated by Gradle"/> - </artifact> - <artifact name="dagger-lint-aar-2.44.2.pom"> - <sha256 value="fc738e51941c170d3bca0941653d3bc4389e1e73d45f33d8efbc452668346a5e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="dagger-producers" version="2.44.2"> - <artifact name="dagger-producers-2.44.2.jar"> - <sha256 value="01cf6464bb5c551860936ae161f45f153298d1e11c8dd3a81c0d7340ed68c1cc" origin="Generated by Gradle"/> - </artifact> - <artifact name="dagger-producers-2.44.2.pom"> - <sha256 value="8d8a9370327a6fc5c02a5443a358ff4cb99477f2976a67c7365936eaddb60e52" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="dagger-spi" version="2.44.2"> - <artifact name="dagger-spi-2.44.2.jar"> - <sha256 value="1fe86708acd729fa3322ac5968e5e835bb94a6cabe7991d6713e0cbf321e5e9b" origin="Generated by Gradle"/> - </artifact> - <artifact name="dagger-spi-2.44.2.pom"> - <sha256 value="cc6d46f11fdb42ba0be1e1266ced4709b00f10f5f38ec2d905fe3c69a1bd03a4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="hilt-android" version="2.44.2"> - <artifact name="hilt-android-2.44.2.aar"> - <sha256 value="736fa123fb6c887c4f78d777ea6bfcab379cce6227f0c34b93eb93d6eacd8660" origin="Generated by Gradle"/> - </artifact> - <artifact name="hilt-android-2.44.2.pom"> - <sha256 value="96af6636c7ecc01a06df293b8e3a622d0ae27af65816be8ac9f3ba197db14f41" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="hilt-android-gradle-plugin" version="2.44.2"> - <artifact name="hilt-android-gradle-plugin-2.44.2.jar"> - <sha256 value="3abe64ebd8175a33a12071f86aa687acbcfd52f3ef8602cb81fce6c4923b94af" origin="Generated by Gradle"/> - </artifact> - <artifact name="hilt-android-gradle-plugin-2.44.2.pom"> - <sha256 value="30b89bb3f49b26a70ffd803cba8d2c795c642ac815f0499cb7cdcff161d73876" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="hilt-compiler" version="2.44.2"> - <artifact name="hilt-compiler-2.44.2.jar"> - <sha256 value="76c59e60f045923f978143bd37aaef2274d344dc9bdeecafb290bc66de7c10b2" origin="Generated by Gradle"/> - </artifact> - <artifact name="hilt-compiler-2.44.2.pom"> - <sha256 value="19d9b317b225ec9d2fefb5a85bcc54f3fee57d56aee192d3aaebb177ac0ee3a8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.dagger" name="hilt-core" version="2.44.2"> - <artifact name="hilt-core-2.44.2.jar"> - <sha256 value="0df25c96836cc95cb7086cfe402a6145e95357a03b3ba16f8e4d3b237470a3fb" origin="Generated by Gradle"/> - </artifact> - <artifact name="hilt-core-2.44.2.pom"> - <sha256 value="1a42a09e0b9d99a116b62589c3ba7f0565355e7d8402f3350aa2348ba3333c04" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.devtools.ksp" name="symbol-processing-api" version="1.7.0-1.0.6"> - <artifact name="symbol-processing-api-1.7.0-1.0.6.jar"> - <sha256 value="adc29417be5ca9ff42118105fea4e36d9ef44987abfc41432309371a60198941" origin="Generated by Gradle"/> - </artifact> - <artifact name="symbol-processing-api-1.7.0-1.0.6.module"> - <sha256 value="13ba6554b7cedba01f52527e2a7fc6ef459e89729196785e86239c312adf2f8d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_annotations" version="2.15.0"> - <artifact name="error_prone_annotations-2.15.0.jar"> - <sha256 value="067047714349e7789a5bdbfad9d1c0af9f3a1eb28c55a0ee3f68e682f905c4eb" origin="Generated by Gradle"/> - </artifact> - <artifact name="error_prone_annotations-2.15.0.pom"> - <sha256 value="7bae617e32681ebbb289c203c905f646c2a0397598af786d961a54aaa3d2b1e6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_annotations" version="2.3.1"> - <artifact name="error_prone_annotations-2.3.1.pom"> - <sha256 value="3edce6b711ba368efe16b9b7aacb0214fbd648414cb9b965953a2e7ed89a819a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_annotations" version="2.3.4"> - <artifact name="error_prone_annotations-2.3.4.jar"> - <sha256 value="baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c" origin="Generated by Gradle"/> - </artifact> - <artifact name="error_prone_annotations-2.3.4.pom"> - <sha256 value="1326738a4b4f7ccacf607b866a11fb85193ef60f6a59461187ce7265f9be5bed" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_annotations" version="2.4.0"> - <artifact name="error_prone_annotations-2.4.0.jar"> - <sha256 value="5f2a0648230a662e8be049df308d583d7369f13af683e44ddf5829b6d741a228" origin="Generated by Gradle"/> - </artifact> - <artifact name="error_prone_annotations-2.4.0.pom"> - <sha256 value="7ea54bfa260ea03d4f084158d284ac8737a5507f77c80f9634da8bdcc018474f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_annotations" version="2.7.1"> - <artifact name="error_prone_annotations-2.7.1.jar"> - <sha256 value="cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3" origin="Generated by Gradle"/> - </artifact> - <artifact name="error_prone_annotations-2.7.1.pom"> - <sha256 value="31a872e1149c5f3a8bc05fb4de455e5ea608ecfad1af222cb7637ca6c762ee25" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_parent" version="2.15.0"> - <artifact name="error_prone_parent-2.15.0.pom"> - <sha256 value="11dcacd17aaac69a99405273badfdaa5f9661d60d179b8a44f503958baa55f88" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_parent" version="2.3.1"> - <artifact name="error_prone_parent-2.3.1.pom"> - <sha256 value="767525d9a81129cd081968382980336327be4162b1e2251a182911daa733c123" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_parent" version="2.3.4"> - <artifact name="error_prone_parent-2.3.4.pom"> - <sha256 value="40495b437a60d2398f0fdfc054b89d9c394a82347a274a0721c2e950a4302186" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_parent" version="2.4.0"> - <artifact name="error_prone_parent-2.4.0.pom"> - <sha256 value="dedda0cda4da752ac80de0d21c829cd3fb919bd2256814260eb3abce2f4e869a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="error_prone_parent" version="2.7.1"> - <artifact name="error_prone_parent-2.7.1.pom"> - <sha256 value="0a6e242e28104e8093405ae37969660a438b71c4c1b73fc4ff716db89da88de6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.errorprone" name="javac-shaded" version="9-dev-r4023-3"> - <artifact name="javac-shaded-9-dev-r4023-3.jar"> - <sha256 value="65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30" origin="Generated by Gradle"/> - </artifact> - <artifact name="javac-shaded-9-dev-r4023-3.pom"> - <sha256 value="7459fd63c1e73770ca44d37a7a685b731a946eb7cd701ccb284dcb0ce6de3f88" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.flatbuffers" name="flatbuffers-java" version="1.12.0"> - <artifact name="flatbuffers-java-1.12.0.jar"> - <sha256 value="3f8c088b4dd04a9858721f2e162508c94db0dd86f961e306ee63ef2eda871bf7" origin="Generated by Gradle"/> - </artifact> - <artifact name="flatbuffers-java-1.12.0.pom"> - <sha256 value="cb226baf546260770f21e8152a6aa88ba15230d739f750df480f2a668d43e0eb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.googlejavaformat" name="google-java-format" version="1.5"> - <artifact name="google-java-format-1.5.jar"> - <sha256 value="aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e" origin="Generated by Gradle"/> - </artifact> - <artifact name="google-java-format-1.5.pom"> - <sha256 value="994510ba3b16fb02e5ca17e8fd6158e2702fe95a1359c80be547b86b76a7aad5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.googlejavaformat" name="google-java-format-parent" version="1.5"> - <artifact name="google-java-format-parent-1.5.pom"> - <sha256 value="13aaf29158343f8b9c7dd7d3f58610290b05ad29ea69c7b9504869e47fbf6319" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="failureaccess" version="1.0.1"> - <artifact name="failureaccess-1.0.1.jar"> - <sha256 value="a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26" origin="Generated by Gradle"/> - </artifact> - <artifact name="failureaccess-1.0.1.pom"> - <sha256 value="e96042ce78fecba0da2be964522947c87b40a291b5fd3cd672a434924103c4b9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava" version="29.0-jre"> - <artifact name="guava-29.0-jre.jar"> - <sha256 value="b22c5fb66d61e7b9522531d04b2f915b5158e80aa0b40ee7282c8bfb07b0da25" origin="Generated by Gradle"/> - </artifact> - <artifact name="guava-29.0-jre.pom"> - <sha256 value="9027e934098903d287f1ba61c8b65f01d1d1e1da7a6fbcc04bf3de0544014426" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava" version="30.1-jre"> - <artifact name="guava-30.1-jre.jar"> - <sha256 value="e6dd072f9d3fe02a4600688380bd422bdac184caf6fe2418cfdd0934f09432aa" origin="Generated by Gradle"/> - </artifact> - <artifact name="guava-30.1-jre.pom"> - <sha256 value="9646d4cd50094d4abe507e555d3f76d77e34a4c5566b22fb130ef55d4ebbe927" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava" version="31.0.1-jre"> - <artifact name="guava-31.0.1-jre.jar"> - <sha256 value="d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9" origin="Generated by Gradle"/> - </artifact> - <artifact name="guava-31.0.1-jre.pom"> - <sha256 value="2be566920c21c60c5ccaf2827867caff766646e2113b7fcc3ee9c24a40b2f396" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava-parent" version="26.0-android"> - <artifact name="guava-parent-26.0-android.pom"> - <sha256 value="f8698ab46ca996ce889c1afc8ca4f25eb8ac6b034dc898d4583742360016cc04" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava-parent" version="29.0-jre"> - <artifact name="guava-parent-29.0-jre.pom"> - <sha256 value="6a57f9e02f78dfa2f4bda3416065a64426ae1b66de228cf6e196e2e1912553bf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava-parent" version="30.1-jre"> - <artifact name="guava-parent-30.1-jre.pom"> - <sha256 value="e2afb747ebc4fe2328d6a90fa88c5d8a83bb1e32061bb9b10ff43e2c47ad6e73" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="guava-parent" version="31.0.1-jre"> - <artifact name="guava-parent-31.0.1-jre.pom"> - <sha256 value="b3b6b6aa7099c11817acee85b322fd91f7ee32aea69fe083ee36c8735ec06788" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="listenablefuture" version="1.0"> - <artifact name="listenablefuture-1.0.jar"> - <sha256 value="e4ad7607e5c0477c6f890ef26a49cb8d1bb4dffb650bab4502afee64644e3069" origin="Generated by Gradle"/> - </artifact> - <artifact name="listenablefuture-1.0.pom"> - <sha256 value="53873caf26bc1ed8a567ea6c939ab2aaa3f47a5e32d5cade95ddf5080d23238a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.guava" name="listenablefuture" version="9999.0-empty-to-avoid-conflict-with-guava"> - <artifact name="listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"> - <sha256 value="b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" origin="Generated by Gradle"/> - </artifact> - <artifact name="listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom"> - <sha256 value="18d4b1db26153d4e55079ce1f76bb1fe05cdb862ef9954a88cbcc4ff38b8679b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.j2objc" name="j2objc-annotations" version="1.3"> - <artifact name="j2objc-annotations-1.3.jar"> - <sha256 value="21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b" origin="Generated by Gradle"/> - </artifact> - <artifact name="j2objc-annotations-1.3.pom"> - <sha256 value="5faca824ba115bee458730337dfdb2fcea46ba2fd774d4304edbf30fa6a3f055" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.jimfs" name="jimfs" version="1.1"> - <artifact name="jimfs-1.1.jar"> - <sha256 value="c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd" origin="Generated by Gradle"/> - </artifact> - <artifact name="jimfs-1.1.pom"> - <sha256 value="efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.jimfs" name="jimfs-parent" version="1.1"> - <artifact name="jimfs-parent-1.1.pom"> - <sha256 value="c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.protobuf" name="protobuf-bom" version="3.17.2"> - <artifact name="protobuf-bom-3.17.2.pom"> - <sha256 value="f36e5bc0bc0e6b0151fa83b17cd94dcb5a6b8c9e1b1499dc086edca99e99b805" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.protobuf" name="protobuf-java" version="3.17.2"> - <artifact name="protobuf-java-3.17.2.jar"> - <sha256 value="cf697452fbe7f6bdfdf65043797a16cd627b1dd4248be4b572fcb73f8c032cc0" origin="Generated by Gradle"/> - </artifact> - <artifact name="protobuf-java-3.17.2.pom"> - <sha256 value="721eef84bdd288eda3562af626ee2cb3426beaf58c5369710b54f51d484568fa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.protobuf" name="protobuf-java-util" version="3.17.2"> - <artifact name="protobuf-java-util-3.17.2.jar"> - <sha256 value="849925333aac23f46f9a154a52e441117017d5673e04e5636993bcc3cf1924d9" origin="Generated by Gradle"/> - </artifact> - <artifact name="protobuf-java-util-3.17.2.pom"> - <sha256 value="a5d6d2c74cf83c8ef4be4532b86f15ecb1dafbaad64e6da427c090dd4bf6c7bd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.protobuf" name="protobuf-parent" version="3.17.2"> - <artifact name="protobuf-parent-3.17.2.pom"> - <sha256 value="8d97664bbc2cf853baa89c28e07082e2e4ae7c4d2dca89a63b28bda093cdee86" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.testing.platform" name="android-device-provider-local" version="0.0.8-alpha07"> - <artifact name="android-device-provider-local-0.0.8-alpha07.jar"> - <sha256 value="e3438a2b4e664434e79d8f4998ca34ceb9cbf9cea9f8b061d9a8b3e7f4ae53af" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-device-provider-local-0.0.8-alpha07.pom"> - <sha256 value="5c64dcc920c2afa879362b0df73d41e084ff995db319ee3a9fb48a5563b3fcb4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.testing.platform" name="android-driver-instrumentation" version="0.0.8-alpha07"> - <artifact name="android-driver-instrumentation-0.0.8-alpha07.jar"> - <sha256 value="f22f504047649b3629c535c317312ee8838949568f983551636ec65d16bd4e7a" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-driver-instrumentation-0.0.8-alpha07.pom"> - <sha256 value="5c0e619a7847e4d84ba58ff42603c41705adb417a283ffec0820cb9ec63093c1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.testing.platform" name="android-test-plugin" version="0.0.8-alpha07"> - <artifact name="android-test-plugin-0.0.8-alpha07.jar"> - <sha256 value="0da8b65d8bb0c45a8c4c359ce9125ea2f5bf553a64f8c16421c33623461f1f50" origin="Generated by Gradle"/> - </artifact> - <artifact name="android-test-plugin-0.0.8-alpha07.pom"> - <sha256 value="f91dad99e9bdd9690bf049396fc1aa08d88b2a3ffd7e523581b8e644c2a876cf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.testing.platform" name="core" version="0.0.8-alpha07"> - <artifact name="core-0.0.8-alpha07.jar"> - <sha256 value="67def226f0d56ec093292d250bded3d7728cfa9f433cc6d44a1ccd25a87afd6b" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-0.0.8-alpha07.pom"> - <sha256 value="aec16d3e95d2369f96b0ef987d9b2c38fc8c9b200fcfac4300e5bc9db303e106" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.testing.platform" name="core-proto" version="0.0.8-alpha07"> - <artifact name="core-proto-0.0.8-alpha07.jar"> - <sha256 value="4645833caf5cf615d5ddb01a48f2188ec988370f103969e2fb931f8319bf3c0c" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-proto-0.0.8-alpha07.pom"> - <sha256 value="90874825be50478ed57721edd0ac4d496593df3cee0b8820f90c649053e5290a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.testing.platform" name="launcher" version="0.0.8-alpha07"> - <artifact name="launcher-0.0.8-alpha07.jar"> - <sha256 value="3c590e8d9f2b601a1c2e6ffe83a8cecd2d53286eeced7fec5ce40837d6adfe8f" origin="Generated by Gradle"/> - </artifact> - <artifact name="launcher-0.0.8-alpha07.pom"> - <sha256 value="4b3fff714711a4347b6167c4518684e3a74b7c69c40f2bf95ddb74fda6202ba2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.zxing" name="core" version="3.4.1"> - <artifact name="core-3.4.1.jar"> - <sha256 value="acfa30338c26267b6cab665509c2251bb96e8350bfcad89d59b949ba77011f8d" origin="Generated by Gradle"/> - </artifact> - <artifact name="core-3.4.1.pom"> - <sha256 value="b1a0faee424a3c775534c81fa16f5a5d5aa65ca40e6ad857f6961b333ea39fd3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.google.zxing" name="zxing-parent" version="3.4.1"> - <artifact name="zxing-parent-3.4.1.pom"> - <sha256 value="20281fe11b8e4bd4c17deec561444d1575bd532fecb73ecf6b89efdad7cd8938" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.googlecode.json-simple" name="json-simple" version="1.1"> - <artifact name="json-simple-1.1.jar"> - <sha256 value="2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439" origin="Generated by Gradle"/> - </artifact> - <artifact name="json-simple-1.1.pom"> - <sha256 value="47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.googlecode.juniversalchardet" name="juniversalchardet" version="1.0.3"> - <artifact name="juniversalchardet-1.0.3.jar"> - <sha256 value="757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76" origin="Generated by Gradle"/> - </artifact> - <artifact name="juniversalchardet-1.0.3.pom"> - <sha256 value="7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.h2database" name="h2" version="1.4.192"> - <artifact name="h2-1.4.192.jar"> - <sha256 value="225b22e9857235c46c93861410b60b8c81c10dc8985f4faf188985ba5445126c" origin="Generated by Gradle"/> - </artifact> - <artifact name="h2-1.4.192.pom"> - <sha256 value="4dbc7d778367a3ce5a150c9739e74b3431d55a4d8a627b06eb635e9b36a74855" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest" name="ktlint" version="0.43.2"> - <artifact name="ktlint-0.43.2.jar"> - <sha256 value="99ec69ef0628695c24dbbc2cc4b8d7c61a754697d624f5233fc65f43faf2d235" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-0.43.2.module"> - <sha256 value="8bbdf6bc56cb12aa8ddea097e9ae862cde9a7c11bc32332dedda73241fb220dc" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-core" version="0.43.2"> - <artifact name="ktlint-core-0.43.2.jar"> - <sha256 value="401515a76b780a32ef9dfeaf69f77316934c4bb90f339488638311789eca7a1a" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-core-0.43.2.module"> - <sha256 value="aa276dfa9dcfab2f0459c81e7f903712058230d0908d545cc4bc8674273a51d7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-reporter-baseline" version="0.43.2"> - <artifact name="ktlint-reporter-baseline-0.43.2.jar"> - <sha256 value="733ee7e2cadb321d6597b3501c70c7da73117adaa0c6bc084dfc16c455d68806" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-reporter-baseline-0.43.2.module"> - <sha256 value="3b6466c5813d2deb31a534ae694c41c36b93aec787eb2a8aff162a1288c63533" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-reporter-checkstyle" version="0.43.2"> - <artifact name="ktlint-reporter-checkstyle-0.43.2.jar"> - <sha256 value="becafb4006b9f2e82c99749864a1a8de340ee84ac7271631a68981a44f51e808" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-reporter-checkstyle-0.43.2.module"> - <sha256 value="3937057372b1cab189647a1e2fa25aa19cb5f72168ca663421b9e250b4e77d05" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-reporter-html" version="0.43.2"> - <artifact name="ktlint-reporter-html-0.43.2.jar"> - <sha256 value="800392e150d3266e72ca53c6ccca3136d4e26445dd9216c6ac6cfc1ba3afafe5" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-reporter-html-0.43.2.module"> - <sha256 value="432a6fbb008f1373d3e8bde4ab9d905620ff87fd9f3b50a5654b7717f0a3eaab" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-reporter-json" version="0.43.2"> - <artifact name="ktlint-reporter-json-0.43.2.jar"> - <sha256 value="9d4a94190d96d671000a06a50c9d1ce111d0dcf629bef8b4f0221a9e3f3699a0" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-reporter-json-0.43.2.module"> - <sha256 value="7e7be45882eb7abc67a62d12980018f2bb067d88d9947395a84ad678099b5179" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-reporter-plain" version="0.43.2"> - <artifact name="ktlint-reporter-plain-0.43.2.jar"> - <sha256 value="1cab63f431ec4e9463df7a767f131ccfa8d76259c01fecc63a4c000063e8ee43" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-reporter-plain-0.43.2.module"> - <sha256 value="ea97899a3d8b6f8e18c7ae1a5d2f7147f976844f1bd2a51c27b7d8285d90a5ec" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-reporter-sarif" version="0.43.2"> - <artifact name="ktlint-reporter-sarif-0.43.2.jar"> - <sha256 value="ed0046aaa4a2e4544197bfdccf88d472ef413a55ad05b6dc8aae41338e9d3748" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-reporter-sarif-0.43.2.module"> - <sha256 value="7ff665bb3f0f36af38b80087c9a0067a9dff3c89b6a2c1c78a1f6e1455eb1d09" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-ruleset-experimental" version="0.43.2"> - <artifact name="ktlint-ruleset-experimental-0.43.2.jar"> - <sha256 value="d89e0edcdca0ae375c090565e323520ab5d424d82fd6ac6290ea986d360f0b11" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-ruleset-experimental-0.43.2.module"> - <sha256 value="2d85cd883fe88c4b5429f266de027afca9f9c53a4f49bf14822a4fdf4abeb67a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-ruleset-standard" version="0.43.2"> - <artifact name="ktlint-ruleset-standard-0.43.2.jar"> - <sha256 value="6774dc9d42aa7c7fdd4a7f3732b56fdab99ba78ce0c4eb5159036525657d0014" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-ruleset-standard-0.43.2.module"> - <sha256 value="7ce4e3721b8a6a2e0dd9607e8e5e5b337f5be4f9ed3f6a5dde9ff6d189355303" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.pinterest.ktlint" name="ktlint-ruleset-test" version="0.43.2"> - <artifact name="ktlint-ruleset-test-0.43.2.jar"> - <sha256 value="7270c4d98b2cda268c25397a02b7dea0ab8cb923958cb3853121e0d9366ce797" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-ruleset-test-0.43.2.module"> - <sha256 value="563610a5366be7595d02e889710d3920836be0ed4c23402d9be2e31831488280" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.puppycrawl.tools" name="checkstyle" version="8.37"> - <artifact name="checkstyle-8.37.jar"> - <sha256 value="3c8d29393129090b9f46a7f6852a70ff1e9d7bd581343e3d0fb895ad33c524fa" origin="Generated by Gradle"/> - </artifact> - <artifact name="checkstyle-8.37.pom"> - <sha256 value="3a0378497be7ecd70eb601bc5589370ef94bd157a77080207146a4b6e9eb9ac3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.squareup" name="javapoet" version="1.10.0"> - <artifact name="javapoet-1.10.0.pom"> - <sha256 value="1690340a222279f2cbadf373e88826fa20f7f3cc3ec0252f36818fed32701ab1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.squareup" name="javapoet" version="1.13.0"> - <artifact name="javapoet-1.13.0.jar"> - <sha256 value="4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291" origin="Generated by Gradle"/> - </artifact> - <artifact name="javapoet-1.13.0.pom"> - <sha256 value="54a34fa8502a46bc90efdb49262600591fa80bf9a34f5a4c798311aec16ca977" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.squareup" name="javawriter" version="2.1.1"> - <artifact name="javawriter-2.1.1.jar"> - <sha256 value="f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e" origin="Generated by Gradle"/> - </artifact> - <artifact name="javawriter-2.1.1.pom"> - <sha256 value="d47fc646324c22c66f2b0e0e743c850dde9a51990c53925e7501d960f2e8df84" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.squareup" name="javawriter" version="2.5.0"> - <artifact name="javawriter-2.5.0.jar"> - <sha256 value="fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0" origin="Generated by Gradle"/> - </artifact> - <artifact name="javawriter-2.5.0.pom"> - <sha256 value="e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.squareup" name="kotlinpoet" version="1.11.0"> - <artifact name="kotlinpoet-1.11.0.jar"> - <sha256 value="2887ada1ca03dd83baa2758640d87e840d1907564db0ef88d2289c868a980492" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinpoet-1.11.0.module"> - <sha256 value="2d6ad09e7cacb9da63c6fdf333e3432b39942d5586336f02eb06f5b5450f34a0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.squareup" name="kotlinpoet" version="1.8.0"> - <artifact name="kotlinpoet-1.8.0.jar"> - <sha256 value="a4f7f1f1306a97740b2c18c6089cddf65626764c4cd848aa83363681268e57f0" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinpoet-1.8.0.module"> - <sha256 value="a776fef6cca4e715843bddd15a20eb8a47da44e47c6002c4a35c929bca3811d0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.activation" name="all" version="1.2.0"> - <artifact name="all-1.2.0.pom"> - <sha256 value="1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.activation" name="all" version="1.2.1"> - <artifact name="all-1.2.1.pom"> - <sha256 value="360883bf64486ecef161b8f282f6503536dd1a670d53a0a871c8fb20170e6795" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.activation" name="javax.activation" version="1.2.0"> - <artifact name="javax.activation-1.2.0.jar"> - <sha256 value="993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce" origin="Generated by Gradle"/> - </artifact> - <artifact name="javax.activation-1.2.0.pom"> - <sha256 value="f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.istack" name="istack-commons" version="3.0.8"> - <artifact name="istack-commons-3.0.8.pom"> - <sha256 value="a0f0517e8512f0fbcc7b8295c12f6566a3d0c2d86d655639dc662ef8c0c7ebe5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.istack" name="istack-commons-runtime" version="3.0.8"> - <artifact name="istack-commons-runtime-3.0.8.jar"> - <sha256 value="4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef" origin="Generated by Gradle"/> - </artifact> - <artifact name="istack-commons-runtime-3.0.8.pom"> - <sha256 value="c2e014d34cb84ed287d064986c45c305a4124228a7337eccf6c421d14d708f1c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.xml.bind" name="jaxb-bom-ext" version="2.3.2"> - <artifact name="jaxb-bom-ext-2.3.2.pom"> - <sha256 value="1a7dec2b27e7e055744cdb8cf1b90def4fd473acd1b804eff098139358959bd7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.xml.bind.mvn" name="jaxb-parent" version="2.3.2"> - <artifact name="jaxb-parent-2.3.2.pom"> - <sha256 value="20dd6dc34ab7549ac40da1d82e92222ec4347ad0ec0cb118ef6c5703bed53a18" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.xml.bind.mvn" name="jaxb-runtime-parent" version="2.3.2"> - <artifact name="jaxb-runtime-parent-2.3.2.pom"> - <sha256 value="b24f8d51f184a68bc1b86d48c0e3cfefeb21a44ede1c5f7303c58ae0488533ec" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.xml.bind.mvn" name="jaxb-txw-parent" version="2.3.2"> - <artifact name="jaxb-txw-parent-2.3.2.pom"> - <sha256 value="b55d3efa9b158f483a30e92c78ccb600f93314733d089eba9b74436f01b314a4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.xml.fastinfoset" name="FastInfoset" version="1.2.16"> - <artifact name="FastInfoset-1.2.16.jar"> - <sha256 value="056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511" origin="Generated by Gradle"/> - </artifact> - <artifact name="FastInfoset-1.2.16.pom"> - <sha256 value="e147d258ab6e6691f70599a952400e6e6c7558f8c9c028dbe1be23178308e830" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.sun.xml.fastinfoset" name="fastinfoset-project" version="1.2.16"> - <artifact name="fastinfoset-project-1.2.16.pom"> - <sha256 value="90582425adc1f40b41362dafb95173931225acaa5e79620d5e6bd52f646292ba" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="com.typesafe" name="config" version="1.4.2"> - <artifact name="config-1.4.2.jar"> - <sha256 value="0076c249b4387d8369146528fd5dacb3efba098dc02ecf9ac81debdfc2e12fd5" origin="Generated by Gradle"/> - </artifact> - <artifact name="config-1.4.2.pom"> - <sha256 value="01a26e4bc7f1be9edfc2eee94d104863f9a8fbe0ba8ff9297711f3e591374c42" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="commons-beanutils" name="commons-beanutils" version="1.9.4"> - <artifact name="commons-beanutils-1.9.4.jar"> - <sha256 value="7d938c81789028045c08c065e94be75fc280527620d5bd62b519d5838532368a" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-beanutils-1.9.4.pom"> - <sha256 value="c35cca7b61d4678d9578cbc0b901b8717b539abf9254441da78b8fe60de064d0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="commons-codec" name="commons-codec" version="1.10"> - <artifact name="commons-codec-1.10.jar"> - <sha256 value="4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-codec-1.10.pom"> - <sha256 value="bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="commons-codec" name="commons-codec" version="1.11"> - <artifact name="commons-codec-1.11.jar"> - <sha256 value="e599d5318e97aa48f42136a2927e6dfa4e8881dff0e6c8e3109ddbbff51d7b7d" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-codec-1.11.pom"> - <sha256 value="c1e7140d1dea8fdf3528bc1e3c5444ac0b541297311f45f9806c213ec3ee9a10" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="commons-collections" name="commons-collections" version="3.2.2"> - <artifact name="commons-collections-3.2.2.jar"> - <sha256 value="eeeae917917144a68a741d4c0dff66aa5c5c5fd85593ff217bced3fc8ca783b8" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-collections-3.2.2.pom"> - <sha256 value="d5d81fcc288c0d8c711c302007cada4aa9a226ed1a112d4baa64cb1d6322170b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="commons-io" name="commons-io" version="2.4"> - <artifact name="commons-io-2.4.jar"> - <sha256 value="cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-io-2.4.pom"> - <sha256 value="b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="commons-logging" name="commons-logging" version="1.2"> - <artifact name="commons-logging-1.2.jar"> - <sha256 value="daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-logging-1.2.pom"> - <sha256 value="c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="info.picocli" name="picocli" version="3.9.6"> - <artifact name="picocli-3.9.6.jar"> - <sha256 value="9442a6a18d869354a0d922ba37b40032aa1b0a172f414a7a644de39d1972f1f4" origin="Generated by Gradle"/> - </artifact> - <artifact name="picocli-3.9.6.pom"> - <sha256 value="591b1069a770b361de09d44a94cec2a16e06094a96e7ebf578f2bdf37f9cd3d4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="info.picocli" name="picocli" version="4.5.2"> - <artifact name="picocli-4.5.2.jar"> - <sha256 value="b4395e9a67932616efd2245d984bf5fcd453c2c5049558c3ce959ac2af4d3fac" origin="Generated by Gradle"/> - </artifact> - <artifact name="picocli-4.5.2.pom"> - <sha256 value="2bfb96ae5a01400703a2f4a438eac20b04764ba53669e7bffeaa4026302c4ee2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.github.detekt.sarif4k" name="sarif4k" version="0.0.1"> - <artifact name="sarif4k-0.0.1.jar"> - <sha256 value="41ec72cf2521783224581c76aaa7e97d4a50f396a66d642500ff4777b395a376" origin="Generated by Gradle"/> - </artifact> - <artifact name="sarif4k-0.0.1.module"> - <sha256 value="1256ce1616f6efb1594b172e667f0efa5e12b005e88f0e28aa2eaa3bf3af74b8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-api" version="1.39.0"> - <artifact name="grpc-api-1.39.0.jar"> - <sha256 value="4e80074dc2c627372044599cf873bf644450a218c58af48c03d5bb086cced484" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-api-1.39.0.pom"> - <sha256 value="e9c53f52f3a2d486afc1cb036aaa2744c0f9da52b3fe7cdc1dccf257bd0c9205" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-context" version="1.39.0"> - <artifact name="grpc-context-1.39.0.jar"> - <sha256 value="97fe70b4e7da86ed4fe3deb16d83fc89c7e5b764ebac8c9dd5d51dd4b5aa920c" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-context-1.39.0.pom"> - <sha256 value="fdf5e3ed7e2fe56c202168c81b603a69a9e1434fa87bc5b889d4e7211217425f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-core" version="1.39.0"> - <artifact name="grpc-core-1.39.0.jar"> - <sha256 value="3febeb19e18873369efa9bf08edd4e49c4fa3ebdad44e704ac6ea352b62b6be2" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-core-1.39.0.pom"> - <sha256 value="3061586b03fbd8489a8f6820175f0732b9ef1c36692cd5b6c47d25e41c5de29e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-netty" version="1.39.0"> - <artifact name="grpc-netty-1.39.0.jar"> - <sha256 value="672da08c944010494c29ce7ee8323194949d8520e4ea4fe0e6d44e65b9489700" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-netty-1.39.0.pom"> - <sha256 value="2128d47f127e3b0fcadcc0d19b9b4770975dfbe8c7fe2c71e93a607fadf7c8c2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-protobuf" version="1.39.0"> - <artifact name="grpc-protobuf-1.39.0.jar"> - <sha256 value="9a9d94b93fbe8d34ca375108ca147d7b35a53da05109f412d1875448f4488244" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-protobuf-1.39.0.pom"> - <sha256 value="a27c0d8719a6b37fd97879559fc2dd0b0261c70ddbe578571be8843dc6592d9b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-protobuf-lite" version="1.39.0"> - <artifact name="grpc-protobuf-lite-1.39.0.jar"> - <sha256 value="94d9c5ee88abe06a741b4e62d05df6251409e2ccc8e510575891ce3d780c164e" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-protobuf-lite-1.39.0.pom"> - <sha256 value="4d44961933b9b2f8d235b763d77803231cb5bf3359f8ec013e3c343388b22c09" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.grpc" name="grpc-stub" version="1.39.0"> - <artifact name="grpc-stub-1.39.0.jar"> - <sha256 value="c85782e20da6eadbf07537f35d52bf2abafd891ae14c27b7d36a4d450575eeb3" origin="Generated by Gradle"/> - </artifact> - <artifact name="grpc-stub-1.39.0.pom"> - <sha256 value="df0ff24c5cf3ec470287840f45a1ffdb6e02fad6dddefdeedd584f6499dd98e7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-cio" version="2.2.3"> - <artifact name="ktor-client-cio-2.2.3.module"> - <sha256 value="121c78d5db26e50fed17e1970c3a22e58e09bf7d7071c581bb8e20d0fed436cd" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-cio-metadata-2.2.3-all.jar"> - <sha256 value="c75add3d852cb75fbecb28b1b664cb4ffd2868e7ea4106d4ec251274add95aaf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-cio-jvm" version="2.2.3"> - <artifact name="ktor-client-cio-jvm-2.2.3.jar"> - <sha256 value="8c1f4fc89e81f321f538a9c7b1eda64a5166ee59e382656d2f516f41608eb9f8" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-cio-jvm-2.2.3.module"> - <sha256 value="71639aad0326d0ba60fcc55e00336aa103c7032c795355ccad203d546af923de" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-content-negotiation" version="2.2.3"> - <artifact name="ktor-client-content-negotiation-2.2.3.module"> - <sha256 value="c970a7598a68272e45f68f39118fdd4047a66b891a7983ae87befe597efa3de9" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-content-negotiation-metadata-2.2.3-all.jar"> - <sha256 value="8f5da8e6855084397f606d42631ceb3b31012bfc8684a59713115a28c6579dad" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-content-negotiation-jvm" version="2.2.3"> - <artifact name="ktor-client-content-negotiation-jvm-2.2.3.jar"> - <sha256 value="ecf5e05bc4eebc7475c8f39cddfcce552b0b943497bd45370f38ca4a48c9db7b" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-content-negotiation-jvm-2.2.3.module"> - <sha256 value="db4af7bc7973a7bcaf3801b257ae6c847f5e8ab1c637856e6c17b3341737f4c9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-core" version="2.2.3"> - <artifact name="ktor-client-core-2.2.3.module"> - <sha256 value="f2b23b90edd379a8cbc7acab940ef300189c39d5d08e0236b18dac41268c5e81" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-core-metadata-2.2.3-all.jar"> - <sha256 value="95e9b1981175a5bb5913f8ce417882ed704bb973bfb554326aab71d7334adecb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-core-jvm" version="2.2.3"> - <artifact name="ktor-client-core-jvm-2.2.3.jar"> - <sha256 value="b5421c126e911ca9d87fcbffbd14e125950e025cd5524502b565da68a1c19210" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-core-jvm-2.2.3.module"> - <sha256 value="ff917752b902fb9c36b78606a0eefe94fb87504aa406dc533cd727f58206c329" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-logging" version="2.2.3"> - <artifact name="ktor-client-logging-2.2.3.module"> - <sha256 value="398e71dc0346e4005383fa80c0af94d9d7006c3929bd1bc65e7f9bfd5e3f8f3b" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-logging-metadata-2.2.3-all.jar"> - <sha256 value="22505bdf825046bd76fe21149ef94117061dcf28f076ae8dd665c83cfaa7f384" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-client-logging-jvm" version="2.2.3"> - <artifact name="ktor-client-logging-jvm-2.2.3.jar"> - <sha256 value="507df70b7ea839f8230aa91e1a3eeb468901f371d25cb7120bb7a9167d4bc7d6" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-client-logging-jvm-2.2.3.module"> - <sha256 value="09acad855d3e380114f3a06f2e5d0bd062e528d72a311491836d8910eed95d08" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-events" version="2.2.3"> - <artifact name="ktor-events-2.2.3.module"> - <sha256 value="aa6675df972f385db55ec8ffd0e7764c2f43761d75fce6988bb7672e56a90fad" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-events-metadata-2.2.3-all.jar"> - <sha256 value="b54d2dc051d05f0b165a8e717a0d80be4b8459e1782024e87ece7c3a4a6b2704" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-events-jvm" version="2.2.3"> - <artifact name="ktor-events-jvm-2.2.3.jar"> - <sha256 value="379804998d036e906ca380258ad0c40366ec3aff836c6ffe7865712d576aacb2" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-events-jvm-2.2.3.module"> - <sha256 value="e42ccb8b58ed7928f0b6cea7e65500cc22bca19f027150992bbc4fafaf6f7f49" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-http" version="2.2.3"> - <artifact name="ktor-http-2.2.3.module"> - <sha256 value="e40b39b8a91f9407135ab742beb025acd2aa8ddd9322c869e742a7e4c2917d38" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-http-metadata-2.2.3-all.jar"> - <sha256 value="71d59a0fb5c5f9cd09a00b58f6121ddb62a6ded01d13d9c367b82dc72f111846" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-http-cio" version="2.2.3"> - <artifact name="ktor-http-cio-2.2.3.module"> - <sha256 value="c667229196d919205621878e87228f86128c8a70ce53f7d7f7a321dbaa39d8d8" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-http-cio-metadata-2.2.3-all.jar"> - <sha256 value="992e47798b13df2eef7eb93de3c73f5f3d2e0bde20e00ae279522d5ee0acd856" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-http-cio-jvm" version="2.2.3"> - <artifact name="ktor-http-cio-jvm-2.2.3.jar"> - <sha256 value="32805216d439bd084db4c176f606d8eb6d19a489d0cf13dd8ef70bdf46751985" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-http-cio-jvm-2.2.3.module"> - <sha256 value="8496517b8c2abaf423f1fe886639b1c3fe3552ec57075d53902c7b7039ac7bfa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-http-jvm" version="2.2.3"> - <artifact name="ktor-http-jvm-2.2.3.jar"> - <sha256 value="5f2af591d586a993633d2fdd5b2cf5221bf41e00fcd3f35051e06ff6b0f1fb43" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-http-jvm-2.2.3.module"> - <sha256 value="f3b197e102a56b421fdf4b25467abd7c5fc4d68b4ae5a6212e6500ae9ea52cec" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-io" version="2.2.3"> - <artifact name="ktor-io-2.2.3.module"> - <sha256 value="c56318475d34b04742df4d5ac8517c1ccaa144ef3085faca28da0e2cab31e370" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-io-metadata-2.2.3-all.jar"> - <sha256 value="142b360ff20a598258a1cea29958485d5d55b885af3cb9811eeee0cecec9ba2d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-io-jvm" version="2.2.3"> - <artifact name="ktor-io-jvm-2.2.3.jar"> - <sha256 value="d04a8f86c6893e680fb0ec4df83ecc62d56f7d65e20489c475fc838a04662ebc" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-io-jvm-2.2.3.module"> - <sha256 value="6acc100ef3d4d8ca74425077ca53155e510879a47276014dd1dd41bc4d2e1892" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-network" version="2.2.3"> - <artifact name="ktor-network-2.2.3.module"> - <sha256 value="9feaa568a22b81b6eb1e5887a4ffccb46c6db670edc5aef9b136391c8882817d" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-network-metadata-2.2.3-all.jar"> - <sha256 value="9a228bbfd188cd64cdc78e3a54b950bce920fd90f248fdfb77a9f1fe8c517afd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-network-jvm" version="2.2.3"> - <artifact name="ktor-network-jvm-2.2.3.jar"> - <sha256 value="7c49d818864a3a724dc4b9da7bc5f9bd4b9ea918e82d155e19988860f8283858" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-network-jvm-2.2.3.module"> - <sha256 value="20e6e75c2f8283bc35eca5ff46ab0c7083a18e5d77373047a92e64aaa3febf83" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-network-tls" version="2.2.3"> - <artifact name="ktor-network-tls-2.2.3.module"> - <sha256 value="d7a0d172da50f161addedb8f1850e745021b43406bef7d7f8e23738faaa265f6" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-network-tls-metadata-2.2.3-all.jar"> - <sha256 value="5515190c2b0a3130350685d948c683389f341963e6119e14d987dc98ae6454a7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-network-tls-jvm" version="2.2.3"> - <artifact name="ktor-network-tls-jvm-2.2.3.jar"> - <sha256 value="4c5aff3130d641a91924b7c8e4d17d3a5dc14d743a5901df6ca43a6d5a41f1fd" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-network-tls-jvm-2.2.3.module"> - <sha256 value="1f3617ce441d26a7a2292f8215c24688da3dd1629ddd2339b62523f23fee00f8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-serialization" version="2.2.3"> - <artifact name="ktor-serialization-2.2.3.module"> - <sha256 value="bd26860f96637dbd28d3c6fc3ff463a8a99dfce3de4abb36dac086e062423a20" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-serialization-metadata-2.2.3-all.jar"> - <sha256 value="499ff72e537506413a972a34c711a52bd329e8174460c28ca51a42a5f63a45b0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-serialization-jackson" version="2.2.3"> - <artifact name="ktor-serialization-jackson-2.2.3.module"> - <sha256 value="b4afdbbe18742f0305adc7e47214440d828d7ba750c7c09f7c9d9b91bf28df3f" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-serialization-jackson-metadata-2.2.3-all.jar"> - <sha256 value="77299b0672a00909a463522c9315005eb130db795b02d622035e54f32dd50643" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-serialization-jackson-jvm" version="2.2.3"> - <artifact name="ktor-serialization-jackson-jvm-2.2.3.jar"> - <sha256 value="5aea934969558b67f9984a5005d34b188be2c6a113f651a4a745098a3011da47" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-serialization-jackson-jvm-2.2.3.module"> - <sha256 value="b98cba270e37452934f74804f923838e581c58eb2611a1c05839f62e2aef383a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-serialization-jvm" version="2.2.3"> - <artifact name="ktor-serialization-jvm-2.2.3.jar"> - <sha256 value="993dd046c40568681d487f1a0778519e0332e06685299d1d2c0c087e47604497" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-serialization-jvm-2.2.3.module"> - <sha256 value="d9c449ea131b9c6fd46092e0d9c4c846c3c4f9de1cb563f9585917530ac77c91" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-auth" version="2.2.3"> - <artifact name="ktor-server-auth-2.2.3.module"> - <sha256 value="8121ce7502baf98421c785b1fad12dce4c5ada879cf19bfcaa578c7071987a3a" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-auth-metadata-2.2.3-all.jar"> - <sha256 value="f78ff8a130cb7543ccba61565cfe9958162bd458061aa95e35f80a26c18339ef" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-auth-jvm" version="2.2.3"> - <artifact name="ktor-server-auth-jvm-2.2.3.jar"> - <sha256 value="c2aec991edf3a640b61fe54b479c6dc1b14b6170f458a93da170270e5b3e5a3e" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-auth-jvm-2.2.3.module"> - <sha256 value="d41d9c8a06489aa799f9f81e89b7a77e7609213f41b81bfab86081638a2e06c8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-call-logging" version="2.2.3"> - <artifact name="ktor-server-call-logging-2.2.3.module"> - <sha256 value="65fb3daf9b80f13cc773d4521591de37d969275d2c68a6a3ea589e76d3638c68" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-call-logging-metadata-2.2.3-all.jar"> - <sha256 value="17023a74ac4efe371057767f537c2a675dc14be62fa59b195bd994d8976cfca5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-call-logging-jvm" version="2.2.3"> - <artifact name="ktor-server-call-logging-jvm-2.2.3.jar"> - <sha256 value="0741bc50d83f2851c1f0811dbce4ca3398fdca20e72f9db1a9e67521143d2fc6" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-call-logging-jvm-2.2.3.module"> - <sha256 value="dfb729697a47ec448fe5e59eb0d51beb23137cffb3fe33c15721392626320b3a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-content-negotiation" version="2.2.3"> - <artifact name="ktor-server-content-negotiation-2.2.3.module"> - <sha256 value="066ff0f11c4745878d290b725426172279a28677671b47dd8590611879c6e111" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-content-negotiation-metadata-2.2.3-all.jar"> - <sha256 value="774d953aab28be347f8060cd35ee1833191a85558f43607a08df72a907be3b1c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-content-negotiation-jvm" version="2.2.3"> - <artifact name="ktor-server-content-negotiation-jvm-2.2.3.jar"> - <sha256 value="fe3c1340028c2d53474aac8f09c84bac2533580eb47951b4656f8a800473fe20" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-content-negotiation-jvm-2.2.3.module"> - <sha256 value="22d97212a8bf8279f2f79e1a91fcd7484bef351d884b972c1d3b749dbeb2041b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-core" version="2.2.3"> - <artifact name="ktor-server-core-2.2.3.module"> - <sha256 value="2ccee7f007c656891d8c92de23b48e053af48e2975a4c3c8f62163eaf5c2f409" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-core-metadata-2.2.3-all.jar"> - <sha256 value="9615e051b305fcd5fe528b0808e53b6dcd58e305e3fa69a3f8631cb17f62ec5c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-core-jvm" version="2.2.3"> - <artifact name="ktor-server-core-jvm-2.2.3.jar"> - <sha256 value="9268ca267f46848456437d508cee1dd499ecf9ee389f3bdccdeecb02a9225e88" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-core-jvm-2.2.3.module"> - <sha256 value="2975813ec4e85a9b4c34001963acc9176461112aab72511f2715d0829a013881" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-host-common" version="2.2.3"> - <artifact name="ktor-server-host-common-2.2.3.module"> - <sha256 value="14a6dcbc5e09725f336bdef15363f98164f52af5cbf9557443fd0413bac44235" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-host-common-jvm" version="2.2.3"> - <artifact name="ktor-server-host-common-jvm-2.2.3.jar"> - <sha256 value="6340fa2787de734bd659453394dddacd432fa61c4b3a5fe1435ac13699c77eb4" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-host-common-jvm-2.2.3.module"> - <sha256 value="5bb57241e042635e9f33fc1471fb7f6b1e649de3842221a8116eccf31ba71b66" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-netty" version="2.2.3"> - <artifact name="ktor-server-netty-2.2.3.module"> - <sha256 value="730e0e17b55309dd181d535208d26448bfb03621718267cc69547d6d0b69552b" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-netty-metadata-2.2.3-all.jar"> - <sha256 value="015cd3a80868b4b8792b19a8cd7f928f1e811ae17b6768be8e97a702739c8b30" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-netty-jvm" version="2.2.3"> - <artifact name="ktor-server-netty-jvm-2.2.3.jar"> - <sha256 value="58e6f0526fa0db7bfe28e368aa2d2aaafaca0011169007de7d88622484432985" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-netty-jvm-2.2.3.module"> - <sha256 value="b16d4e6e2f4380d2cb165515f791ae524643d9d8abfe73ad78ce08a8d6566095" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-sessions" version="2.2.3"> - <artifact name="ktor-server-sessions-2.2.3.module"> - <sha256 value="1a825679adafb97a74937231d131e30b7ac8bf32a92d8b2b34b8050a1ef1d63b" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-sessions-metadata-2.2.3-all.jar"> - <sha256 value="2e26ab847da43c851353dd83876fe59455f407a1d63e5afa58513e8c7be98f91" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-server-sessions-jvm" version="2.2.3"> - <artifact name="ktor-server-sessions-jvm-2.2.3.jar"> - <sha256 value="9e4ac64b0be3a9fd4bcc322ff233b6e9933460bac2b70adcfc683c14d1c56d0a" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-server-sessions-jvm-2.2.3.module"> - <sha256 value="66de8dbf12729b1aae88fd34ffcd7394fef0668b8dd1d95c7e9a6f10ae123d25" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-utils" version="2.2.3"> - <artifact name="ktor-utils-2.2.3.module"> - <sha256 value="59d3dfd8dca7df0ce69038b7ee61e1b303a3a515616c3e976c8914f8348ccc86" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-utils-metadata-2.2.3-all.jar"> - <sha256 value="91b271254ad77f0c096750fdbecd85a7c57d0c1ac9ce62c8f1a40d55c0bac3ec" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-utils-jvm" version="2.2.3"> - <artifact name="ktor-utils-jvm-2.2.3.jar"> - <sha256 value="19cff4686cba391205fa3df5f6010211888c3e62999fa1acc0efc4ac1218d071" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-utils-jvm-2.2.3.module"> - <sha256 value="90149e8af4c442408f8f4f480dd7d29000d10feb2812c3d794ce1f688fcea1aa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-websocket-serialization" version="2.2.3"> - <artifact name="ktor-websocket-serialization-2.2.3.module"> - <sha256 value="171e3448436222b367e74076e798ca3c4856961df83b157adcb9596fc3885886" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-websocket-serialization-metadata-2.2.3-all.jar"> - <sha256 value="edde7163e81132816b12694141bdf10c40b693f43fc05ee1444ae14d2f65be7a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-websocket-serialization-jvm" version="2.2.3"> - <artifact name="ktor-websocket-serialization-jvm-2.2.3.jar"> - <sha256 value="5f3544086b1b5d0d72985868614bc3ed616d9411db039c4d13ad61104ff66a88" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-websocket-serialization-jvm-2.2.3.module"> - <sha256 value="5529cd3d8ca5284ac5cae18e407b76940066cb2f5329397597ed04767c057d12" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-websockets" version="2.2.3"> - <artifact name="ktor-websockets-2.2.3.module"> - <sha256 value="7347bfc4c648784c657794af1d7bbc201e8fff9fc1593ff91fd705b23cab2a32" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-websockets-metadata-2.2.3-all.jar"> - <sha256 value="bc0b3a5f6dd97c1ba3abb3a51a05d60bd7acd9230d23e1876242b65d041e1ba1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.ktor" name="ktor-websockets-jvm" version="2.2.3"> - <artifact name="ktor-websockets-jvm-2.2.3.jar"> - <sha256 value="355bef98a44cb588ca983d5552a8c76de29e4e75123e771087b4f279b5735aba" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktor-websockets-jvm-2.2.3.module"> - <sha256 value="da9726977a3b36eea4fd3da952d1cde64570758011cb0e929245524f5ddd21f9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk" version="1.10.4"> - <artifact name="mockk-1.10.4.jar"> - <sha256 value="e26d4eb8c9c0c5ac00acb9bfeedfe0feb10055bf7e80db57539936413ea38f7c" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-1.10.4.module"> - <sha256 value="05aa56437d96cccb8c2fd814e5e1008818d5a6ebd91de1d221961082e7109660" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk-agent-api" version="1.10.4"> - <artifact name="mockk-agent-api-1.10.4.jar"> - <sha256 value="8deb59189b48d5870a746f954ca681424040544812c7ae295f3bef87a9499cfe" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-agent-api-1.10.4.module"> - <sha256 value="0f87d2432ea679cfeefb1e14e5751938859598720898dd6d5cc062072eb30903" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk-agent-common" version="1.10.4"> - <artifact name="mockk-agent-common-1.10.4.jar"> - <sha256 value="13b81a3297a3c15ed9f62b838aaede20347018f07c30cad2ca74a4dd99786f8f" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-agent-common-1.10.4.module"> - <sha256 value="68c15dca435f519adede947bbf1911c9a76632142aa3e9684cde33f81bb3fa74" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk-agent-jvm" version="1.10.4"> - <artifact name="mockk-agent-jvm-1.10.4.jar"> - <sha256 value="51eb22de58c44f140384e61878e8c0da0fcf80c60a139d28ef7b027ea4bc2042" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-agent-jvm-1.10.4.module"> - <sha256 value="e4aadc9a0f01c17d2c2c5e431a00c1aaebc37e19d06efae8fc914c433b994050" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk-common" version="1.10.4"> - <artifact name="mockk-common-1.10.4.jar"> - <sha256 value="aaf3cc99442100767dc72776f250113f992facfb43bf6ba9a5282d1c8aaecd00" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-common-1.10.4.module"> - <sha256 value="79dc304ef7e11b357b69d722403d6a45cd39b5e889df1279f19dcfdfc8dbcf50" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk-dsl" version="1.10.4"> - <artifact name="mockk-dsl-1.10.4.jar"> - <sha256 value="b97d750bebfd7da92a020f5417deface710c58802a78a8fff68661f77eaa3037" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-dsl-1.10.4.module"> - <sha256 value="0ca3fffca89e72351097734d90ed5ece7d2ca9248fd42f325abe5574f5d97d6f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.mockk" name="mockk-dsl-jvm" version="1.10.4"> - <artifact name="mockk-dsl-jvm-1.10.4.jar"> - <sha256 value="2432e2d0dfd31c3cb33e12137b8c712358cb0c4cddbd27b5bd6c55db2068e1a1" origin="Generated by Gradle"/> - </artifact> - <artifact name="mockk-dsl-jvm-1.10.4.module"> - <sha256 value="a84872b35a79cb151005e4b6c0771d35d2b952ddc8a3df3e92c018a007c13c9d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-buffer" version="4.1.52.Final"> - <artifact name="netty-buffer-4.1.52.Final.jar"> - <sha256 value="41ca1035aee6e0f8177597d0a7610a5aa2c6e6fac744ac81fde4e5e58f639675" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-buffer-4.1.52.Final.pom"> - <sha256 value="585266cbf6e147e3fe209300a70d5f0c4db64ccd702bc00690c42a33defe0060" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-buffer" version="4.1.86.Final"> - <artifact name="netty-buffer-4.1.86.Final.jar"> - <sha256 value="e42e15f47c865266b1faa6e038ebfd7ddadcf9f4ae9e6617edd4881dbd4abe88" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-buffer-4.1.86.Final.pom"> - <sha256 value="02e5584e5fb069853b418a91435e57771a7679f71ff04c7a2be517cdd386645d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec" version="4.1.52.Final"> - <artifact name="netty-codec-4.1.52.Final.jar"> - <sha256 value="3c7e78dcce7e353d86ac7dba2c251ab5cddd4eb86eaa889cfe4229782b828e52" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-4.1.52.Final.pom"> - <sha256 value="3e4aa78b0c8308bede6f6e17ecfee6126b2abdeadb0e3da25aae67756966fa54" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec" version="4.1.86.Final"> - <artifact name="netty-codec-4.1.86.Final.jar"> - <sha256 value="0456840b5c851dad6cab881cd1a9ad5d916db65d81048145df1d9a6d03325bea" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-4.1.86.Final.pom"> - <sha256 value="e8f2e40efdbe8a0257621ba550d952e7744ad709577fe213417b2fc9af332542" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec-http" version="4.1.52.Final"> - <artifact name="netty-codec-http-4.1.52.Final.jar"> - <sha256 value="b5da28d0ea878b07d3111acf5e4faf41288ef2302b26414190fdd1a7d973c80c" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-http-4.1.52.Final.pom"> - <sha256 value="4c7c220ae780374c781c82d1e2b79c8eb744da903bd2ad82d4a26bb149180c0b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec-http" version="4.1.86.Final"> - <artifact name="netty-codec-http-4.1.86.Final.jar"> - <sha256 value="3f6ceb3112cfcf7b70545eb5111220ce57db54d593f23f64c38333bb22c40b84" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-http-4.1.86.Final.pom"> - <sha256 value="1a4d9f63ae836b96075a1ad0fd004b50e01eae382ac7a067a8f1a1b679ffbf5e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec-http2" version="4.1.52.Final"> - <artifact name="netty-codec-http2-4.1.52.Final.jar"> - <sha256 value="eb527a42d2289d12dee6d4753ca2715978a37bbb41c71915ce4e9539c49f93a1" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-http2-4.1.52.Final.pom"> - <sha256 value="1f9974433d8610b987b25ba3ebe9f91b599e220e0d44acc298cf39f055e8f3d3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec-http2" version="4.1.86.Final"> - <artifact name="netty-codec-http2-4.1.86.Final.jar"> - <sha256 value="e8e8e28e6ab6bb989aed904778922045f388cfb420bc1eb37abf4df8801db167" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-http2-4.1.86.Final.pom"> - <sha256 value="13bf71441042b4fbd6beb93e54c2e7572d75514272e8909eac9c58c4533844d1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-codec-socks" version="4.1.52.Final"> - <artifact name="netty-codec-socks-4.1.52.Final.jar"> - <sha256 value="fecc577e0bb7721d6768cfc1846ee172911d16ab80dfbd9995d9657a551d4ea7" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-codec-socks-4.1.52.Final.pom"> - <sha256 value="1d96921ae95e64a03c4ed75e9ea57b27ae30ab527ef92212cfda597267ce39f9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-common" version="4.1.52.Final"> - <artifact name="netty-common-4.1.52.Final.jar"> - <sha256 value="0d1f101e4db7d530ed04d7cabd57d95c0750f059bb6b3fadfed0c80d4734c717" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-common-4.1.52.Final.pom"> - <sha256 value="3658eb7929a4672b59afee222bae7a1227454c6fa39339ca4cac7a5ef30f3aa7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-common" version="4.1.86.Final"> - <artifact name="netty-common-4.1.86.Final.jar"> - <sha256 value="a35a3f16e7cd45c5d8529aa3e7702d4ef3b36213ea332db59744ea348fc2ae99" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-common-4.1.86.Final.pom"> - <sha256 value="3e1632ad6317dc3db8ad3b7757d23f9779571d728dbc6ad4032a19a88b50eb89" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-handler" version="4.1.52.Final"> - <artifact name="netty-handler-4.1.52.Final.jar"> - <sha256 value="2cdc21fbfae04940c85929039779c93f51f618f5efb216079319dcfcf32a55c1" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-handler-4.1.52.Final.pom"> - <sha256 value="b374bba0bca6312fe6dbefb1a013ac7457c1a80c9f18ebcc059bdc2deb163147" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-handler" version="4.1.86.Final"> - <artifact name="netty-handler-4.1.86.Final.jar"> - <sha256 value="e69b42292929b278dc522e25177ddf7c54025484b55879f8227349adfbe1c04d" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-handler-4.1.86.Final.pom"> - <sha256 value="32d36bba4da5f64bfdbdabb43c71955e7cd0e9d6790531d4d3fe97882a7e60ab" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-handler-proxy" version="4.1.52.Final"> - <artifact name="netty-handler-proxy-4.1.52.Final.jar"> - <sha256 value="e8d07863ceb4bd4806e255a1d532c8650f0f3b2d4d006ad6d21812e941b42fdc" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-handler-proxy-4.1.52.Final.pom"> - <sha256 value="696e3501d1ac73aa382555d1bd6c2c6831ad5fe3db106e5c82e808292f5be9b8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-parent" version="4.1.52.Final"> - <artifact name="netty-parent-4.1.52.Final.pom"> - <sha256 value="be4bea6f606d47a8a5c3573047d04426d33b9db591baa6bce1e230fe223f903e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-parent" version="4.1.86.Final"> - <artifact name="netty-parent-4.1.86.Final.pom"> - <sha256 value="1d922b7da8beb1031cac2a5fafcf719ce672cb2cb69eecc9c383f30acc165013" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-resolver" version="4.1.52.Final"> - <artifact name="netty-resolver-4.1.52.Final.jar"> - <sha256 value="6eeb72a233979cb45b0b4d6d46c5a41332c57c0cf8a803b1efc60dbbecba09a6" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-resolver-4.1.52.Final.pom"> - <sha256 value="9b082e55f2f2711a84aac6702ce700b79fc90450381238e602b396ac76510152" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-resolver" version="4.1.86.Final"> - <artifact name="netty-resolver-4.1.86.Final.jar"> - <sha256 value="7628a1309d7f2443dc41d8923a7f269e2981b9616f80a999eb7264ae6bcbfdba" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-resolver-4.1.86.Final.pom"> - <sha256 value="abf2242fae08c0200b182f753faa6f3f483ec1da6ddb068ee717f04ce04207f9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport" version="4.1.52.Final"> - <artifact name="netty-transport-4.1.52.Final.jar"> - <sha256 value="9a3e6f8c0e55de363eb1ea10fe781797eca394e62186df2ae0b4eb2bce0b4541" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-4.1.52.Final.pom"> - <sha256 value="58a8aaa6566d95660046ce4c8ec8c4c711182bea7d8b7e994968e08418ddb37f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport" version="4.1.86.Final"> - <artifact name="netty-transport-4.1.86.Final.jar"> - <sha256 value="f6726dcd54e4922b46b3b4f4467b443a70a30eb08a62620c8fe502d8cb802c9f" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-4.1.86.Final.pom"> - <sha256 value="85cf5ac77c1bf74c51a851557b1757139eb4cd2d0a5b61cae2849f46fcb595da" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport-classes-epoll" version="4.1.86.Final"> - <artifact name="netty-transport-classes-epoll-4.1.86.Final.jar"> - <sha256 value="3cc7eb87d85d6b4bf3d596a172a92df09f8d746c2b283c85543c95795b51edda" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-classes-epoll-4.1.86.Final.pom"> - <sha256 value="95169be36126702b102a21dbbd7b4def77fd9c81689834642afd571ea9b8c35d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport-classes-kqueue" version="4.1.86.Final"> - <artifact name="netty-transport-classes-kqueue-4.1.86.Final.jar"> - <sha256 value="8059837d5304e5d0cab6afa010d4c319dfe8444ca936df28031d2ed636b2ebab" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-classes-kqueue-4.1.86.Final.pom"> - <sha256 value="17e60dd77f58d362e798587b6ef5b705bd9b1bbdbba6fcd81d2f40bac0d69db4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport-native-epoll" version="4.1.86.Final"> - <artifact name="netty-transport-native-epoll-4.1.86.Final.jar"> - <sha256 value="bbbd9d367cb7371a34b39f75f4422d0a09667c72007dfb861e6cdd4b5b4a35cf" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-native-epoll-4.1.86.Final.pom"> - <sha256 value="1539818dc23ef0ba8615b4c081486ec178ffb14672221da30dbb7f137a2e0c2f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport-native-kqueue" version="4.1.86.Final"> - <artifact name="netty-transport-native-kqueue-4.1.86.Final.jar"> - <sha256 value="28ca127aa734d71f472483253e4de77e215bc6eaf12480c8268c8ff7d6bcaba5" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-native-kqueue-4.1.86.Final.pom"> - <sha256 value="66bdb65c89884633131b184a7582a5c4aeedbf06a6eca769a13f5705ef06d1f9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.netty" name="netty-transport-native-unix-common" version="4.1.86.Final"> - <artifact name="netty-transport-native-unix-common-4.1.86.Final.jar"> - <sha256 value="ec26d03a06565791d57e997f793677ee4d3fc47b290b7951898c2ecd0232f115" origin="Generated by Gradle"/> - </artifact> - <artifact name="netty-transport-native-unix-common-4.1.86.Final.pom"> - <sha256 value="1cb4e2279eb417edce284f71bdf9614183264f22f050dc53726f56df0f520b95" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="io.perfmark" name="perfmark-api" version="0.23.0"> - <artifact name="perfmark-api-0.23.0.jar"> - <sha256 value="c705b5c10c18ff3032b9e81742bc2f6b0e5607f6a6dfc0c8ad0cff75d4913042" origin="Generated by Gradle"/> - </artifact> - <artifact name="perfmark-api-0.23.0.module"> - <sha256 value="84a12f34817d1f2f79df810bcbaacb29900678384d3dd0502df0bd963a4f3fdb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="it.unimi.dsi" name="fastutil" version="8.4.0"> - <artifact name="fastutil-8.4.0.jar"> - <sha256 value="2ad2824a4a0a0eb836b52ee2fc84ba2134f44bce7bfa54015ae3f31c710a3071" origin="Generated by Gradle"/> - </artifact> - <artifact name="fastutil-8.4.0.pom"> - <sha256 value="110e6f66c7d5ed3c91408eb0b49d40791614decc842eb92d7547ae7f88482822" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="jakarta.activation" name="jakarta.activation-api" version="1.2.1"> - <artifact name="jakarta.activation-api-1.2.1.jar"> - <sha256 value="8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b" origin="Generated by Gradle"/> - </artifact> - <artifact name="jakarta.activation-api-1.2.1.pom"> - <sha256 value="42585cb07dda7f23aa04eb5e0940061944a246a67ad3d16942fbe569ff03cd31" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="jakarta.xml.bind" name="jakarta.xml.bind-api" version="2.3.2"> - <artifact name="jakarta.xml.bind-api-2.3.2.jar"> - <sha256 value="69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea" origin="Generated by Gradle"/> - </artifact> - <artifact name="jakarta.xml.bind-api-2.3.2.pom"> - <sha256 value="b537b388dbab4cc0690b9d2fb0c74124d672531734567acf6e53130eab131ad6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="jakarta.xml.bind" name="jakarta.xml.bind-api-parent" version="2.3.2"> - <artifact name="jakarta.xml.bind-api-parent-2.3.2.pom"> - <sha256 value="15a55b7d537c9f9970aead28d2af97c059f65ff6102f76bbd29f1247dd8a6dfb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="javax.annotation" name="javax.annotation-api" version="1.3.2"> - <artifact name="javax.annotation-api-1.3.2.jar"> - <sha256 value="e04ba5195bcd555dc95650f7cc614d151e4bcd52d29a10b8aa2197f3ab89ab9b" origin="Generated by Gradle"/> - </artifact> - <artifact name="javax.annotation-api-1.3.2.pom"> - <sha256 value="46a4a251ca406e78e4853d7a2bae83282844a4992851439ee9a1f23716f06b97" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="javax.inject" name="javax.inject" version="1"> - <artifact name="javax.inject-1.jar"> - <sha256 value="91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff" origin="Generated by Gradle"/> - </artifact> - <artifact name="javax.inject-1.pom"> - <sha256 value="943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="junit" name="junit" version="4.13.2"> - <artifact name="junit-4.13.2.jar"> - <sha256 value="8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-4.13.2.pom"> - <sha256 value="569b6977ee4603c965c1c46c3058fa6e969291b0160eb6964dd092cd89eadd94" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.bytebuddy" name="byte-buddy" version="1.10.14"> - <artifact name="byte-buddy-1.10.14.jar"> - <sha256 value="0e6b935bfcb3e451d525956acad53ec86ff916d714abdbd32b3d2039771896f8" origin="Generated by Gradle"/> - </artifact> - <artifact name="byte-buddy-1.10.14.pom"> - <sha256 value="3b39ca3d5ebb9ab757f9d42dcd6b677c88b4828edca7f6079f11bbf2ef3cee58" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.bytebuddy" name="byte-buddy-agent" version="1.10.14"> - <artifact name="byte-buddy-agent-1.10.14.jar"> - <sha256 value="30272167eceb1cb68fa84730a12d1abfd1daed6ae0c19fdefee47a9a9a0cfd33" origin="Generated by Gradle"/> - </artifact> - <artifact name="byte-buddy-agent-1.10.14.pom"> - <sha256 value="8712c22885e16de69179f921d501516493a7cef64997995fc428e7e58b12ea8d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.bytebuddy" name="byte-buddy-parent" version="1.10.14"> - <artifact name="byte-buddy-parent-1.10.14.pom"> - <sha256 value="1fceef152e3962c8fbb3a860110324c7b14f417b925b07edf6ba997cdcf52eb9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.java" name="jvnet-parent" version="1"> - <artifact name="jvnet-parent-1.pom"> - <sha256 value="281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.java" name="jvnet-parent" version="3"> - <artifact name="jvnet-parent-3.pom"> - <sha256 value="30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.java.dev.jna" name="jna" version="5.6.0"> - <artifact name="jna-5.6.0.jar"> - <sha256 value="5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf" origin="Generated by Gradle"/> - </artifact> - <artifact name="jna-5.6.0.pom"> - <sha256 value="5fe81b0255978f24616d37b10608b79498a5f3073e1d9b2038d8736a831f2608" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.java.dev.jna" name="jna" version="5.8.0"> - <artifact name="jna-5.8.0.jar"> - <sha256 value="930273cc1c492f25661ea62413a6da3fd7f6e01bf1c4dcc0817fc8696a7b07ac" origin="Generated by Gradle"/> - </artifact> - <artifact name="jna-5.8.0.pom"> - <sha256 value="5e53d8e637f93b83014e2302fb7e63fd7b83ab000a7f794aa340020ffb880d4a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.java.dev.jna" name="jna-platform" version="5.6.0"> - <artifact name="jna-platform-5.6.0.jar"> - <sha256 value="9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7" origin="Generated by Gradle"/> - </artifact> - <artifact name="jna-platform-5.6.0.pom"> - <sha256 value="1beb35cb4184e6c906a7e32eaebd852dd3da0a263962e99134ab945832394e28" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.java.dev.jna" name="jna-platform" version="5.8.0"> - <artifact name="jna-platform-5.8.0.jar"> - <sha256 value="ffd93fe1bc07de6f33eabf3d051c3636e01a01c17cb0da8448c53a2ac5e3bf7a" origin="Generated by Gradle"/> - </artifact> - <artifact name="jna-platform-5.8.0.pom"> - <sha256 value="6c00fa34f1d7c19e73821b7423a5e974b63b64ce30323d15a92a6b5e734613dd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.ltgt.gradle.incap" name="incap" version="0.2"> - <artifact name="incap-0.2.jar"> - <sha256 value="b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd" origin="Generated by Gradle"/> - </artifact> - <artifact name="incap-0.2.pom"> - <sha256 value="1a4a08a1e88d32052cd82dc2f740b34d3048e2c0e6a7c2bfe2309ed00771f73a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.sf.jopt-simple" name="jopt-simple" version="4.9"> - <artifact name="jopt-simple-4.9.jar"> - <sha256 value="26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5" origin="Generated by Gradle"/> - </artifact> - <artifact name="jopt-simple-4.9.pom"> - <sha256 value="7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.sf.kxml" name="kxml2" version="2.3.0"> - <artifact name="kxml2-2.3.0.jar"> - <sha256 value="f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2" origin="Generated by Gradle"/> - </artifact> - <artifact name="kxml2-2.3.0.pom"> - <sha256 value="31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="net.sf.saxon" name="Saxon-HE" version="10.3"> - <artifact name="Saxon-HE-10.3.jar"> - <sha256 value="660a89162a577cfd73bc3db3c53cbec7e82d4ab2051247f31927f135aff7c908" origin="Generated by Gradle"/> - </artifact> - <artifact name="Saxon-HE-10.3.pom"> - <sha256 value="15f448f0ed9f6e54c6adee3bb68bf9f366edaf238f616df7841f1dcd77378698" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.antlr" name="antlr4-master" version="4.8-1"> - <artifact name="antlr4-master-4.8-1.pom"> - <sha256 value="ad82764672b9fcb42369422574d583b5512e1d7de1d3143951f27c5eb0f4c8e6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.antlr" name="antlr4-runtime" version="4.8-1"> - <artifact name="antlr4-runtime-4.8-1.jar"> - <sha256 value="bdcf58107ba1a499b25e3db205086767dd409d3f5ab12c90f2d429f55ec774a6" origin="Generated by Gradle"/> - </artifact> - <artifact name="antlr4-runtime-4.8-1.pom"> - <sha256 value="ab60bcd5af00a48e36854ab97769bb5b7bd81ff20efc2abdf6792a66c5803e9d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="13"> - <artifact name="apache-13.pom"> - <sha256 value="ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="15"> - <artifact name="apache-15.pom"> - <sha256 value="36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="16"> - <artifact name="apache-16.pom"> - <sha256 value="9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="18"> - <artifact name="apache-18.pom"> - <sha256 value="7831307285fd475bbc36b20ae38e7882f11c3153b1d5930f852d44eda8f33c17" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="19"> - <artifact name="apache-19.pom"> - <sha256 value="91f7a33096ea69bac2cbaf6d01feb934cac002c48d8c8cfa9c240b40f1ec21df" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="21"> - <artifact name="apache-21.pom"> - <sha256 value="af10c108da014f17cafac7b52b2b4b5a3a1c18265fa2af97a325d9143537b380" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache" name="apache" version="9"> - <artifact name="apache-9.pom"> - <sha256 value="4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-compress" version="1.20"> - <artifact name="commons-compress-1.20.jar"> - <sha256 value="0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e" origin="Generated by Gradle"/> - </artifact> - <artifact name="commons-compress-1.20.pom"> - <sha256 value="d95678e3af56b17c7db6cff9645efad5eb59be9f3c1caaaf5f0146edf04691d7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="25"> - <artifact name="commons-parent-25.pom"> - <sha256 value="467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="34"> - <artifact name="commons-parent-34.pom"> - <sha256 value="3a2e69d06d641d1f3b293126dc9e2e4ea6563bf8c36c87e0ab6fa4292d04b79c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="35"> - <artifact name="commons-parent-35.pom"> - <sha256 value="7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="39"> - <artifact name="commons-parent-39.pom"> - <sha256 value="87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="42"> - <artifact name="commons-parent-42.pom"> - <sha256 value="cd313494c670b483ec256972af1698b330e598f807002354eb765479f604b09c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="47"> - <artifact name="commons-parent-47.pom"> - <sha256 value="8a8ecb570553bf9f1ffae211a8d4ca9ee630c17afe59293368fba7bd9b42fcb7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.commons" name="commons-parent" version="48"> - <artifact name="commons-parent-48.pom"> - <sha256 value="1e1f7de9370a7b7901f128f1dacd1422be74e3f47f9558b0f79e04c0637ca0b4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpclient" version="4.5.13"> - <artifact name="httpclient-4.5.13.jar"> - <sha256 value="6fe9026a566c6a5001608cf3fc32196641f6c1e5e1986d1037ccdbd5f31ef743" origin="Generated by Gradle"/> - </artifact> - <artifact name="httpclient-4.5.13.pom"> - <sha256 value="78eb9ada74929fcd63d07adc4f49236841a45cc29d5f817bf45801f513fd7e6c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpclient" version="4.5.6"> - <artifact name="httpclient-4.5.6.jar"> - <sha256 value="c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7" origin="Generated by Gradle"/> - </artifact> - <artifact name="httpclient-4.5.6.pom"> - <sha256 value="7efc1241e73e7fbb268bfd33242d11ebd3ca07061d7d85f2962dc32a0f0b8855" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpcomponents-client" version="4.5.13"> - <artifact name="httpcomponents-client-4.5.13.pom"> - <sha256 value="9cba594c08db7271d0c20e9845d622bb39e69583910b45e7d5df82f6058d4dd9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpcomponents-client" version="4.5.6"> - <artifact name="httpcomponents-client-4.5.6.pom"> - <sha256 value="b042b41f2391edb00d35f7f4e509aed2123648c1d246ce58d0f7b905c9fe1f73" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpcomponents-core" version="4.4.13"> - <artifact name="httpcomponents-core-4.4.13.pom"> - <sha256 value="c554e7008e4517c7ef54e005cc8b74f4c87a54a0ea2c6f57be5d0569df51936b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpcomponents-parent" version="10"> - <artifact name="httpcomponents-parent-10.pom"> - <sha256 value="caaf967d94afb21753f36082c6086206bd1f48825ff596932cceba72b65d39fa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpcomponents-parent" version="11"> - <artifact name="httpcomponents-parent-11.pom"> - <sha256 value="a901f87b115c55070c7ee43efff63e20e7b02d30af2443ae292bf1f4e532d3aa" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpcore" version="4.4.13"> - <artifact name="httpcore-4.4.13.jar"> - <sha256 value="e06e89d40943245fcfa39ec537cdbfce3762aecde8f9c597780d2b00c2b43424" origin="Generated by Gradle"/> - </artifact> - <artifact name="httpcore-4.4.13.pom"> - <sha256 value="8f812d9fa7b72a3d4aa7f825278932a5df344b42a6d8398905879431a1bf9a97" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apache.httpcomponents" name="httpmime" version="4.5.6"> - <artifact name="httpmime-4.5.6.jar"> - <sha256 value="0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e" origin="Generated by Gradle"/> - </artifact> - <artifact name="httpmime-4.5.6.pom"> - <sha256 value="dfbfd6ffe2a784ca9817c46365aa7f8a578320b805bde39d6f55a0b09d8aa8ca" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.apiguardian" name="apiguardian-api" version="1.1.0"> - <artifact name="apiguardian-api-1.1.0.jar"> - <sha256 value="a9aae9ff8ae3e17a2a18f79175e82b16267c246fbbd3ca9dfbbb290b08dcfdd4" origin="Generated by Gradle"/> - </artifact> - <artifact name="apiguardian-api-1.1.0.pom"> - <sha256 value="a945b9cb5cd9b77b2c711844e659c43ec070ef59d9f509fa9f4c1861b4862711" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.bitbucket.b_c" name="jose4j" version="0.7.0"> - <artifact name="jose4j-0.7.0.jar"> - <sha256 value="eb14f69c0395d4a106c6c46fe6dff080c4608ccabc99b1f03933d374383d9bbe" origin="Generated by Gradle"/> - </artifact> - <artifact name="jose4j-0.7.0.pom"> - <sha256 value="13128ccf90fb31f18d8109b484516649d5db0e47284d860e71a4cf3148153ed8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.bouncycastle" name="bcpkix-jdk15on" version="1.67"> - <artifact name="bcpkix-jdk15on-1.67.jar"> - <sha256 value="efbca754880ce3922ca47a43c1f0b72c45731450a0ef193b9db33bf4bb38ce5f" origin="Generated by Gradle"/> - </artifact> - <artifact name="bcpkix-jdk15on-1.67.pom"> - <sha256 value="a9bb30bd987dc305b05ee53e9f27e6e902fc10ce3c6e99618cff0362d796b04d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.bouncycastle" name="bcprov-jdk15on" version="1.67"> - <artifact name="bcprov-jdk15on-1.67.jar"> - <sha256 value="fa0041a36f9f20af3c6b8dbf6eb49a969e2c9cc029049d61acc526ba3247b3ef" origin="Generated by Gradle"/> - </artifact> - <artifact name="bcprov-jdk15on-1.67.pom"> - <sha256 value="a473a77476dd631630ebb3a37b34812f94e6a7245c39765a14d7231b90e0645b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="dont-kill-me-lib" version="0.2.5"> - <artifact name="dont-kill-me-lib-0.2.5.aar"> - <sha256 value="55cd9d511b7016ab573905d64bc54e222e2633144d36389192b8b34485b31b9d" origin="Generated by Gradle"/> - </artifact> - <artifact name="dont-kill-me-lib-0.2.5.module"> - <sha256 value="89181e4ec8815db835f00da7a2c11590716a44e06a8300a57a985b9d5c91c7a1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="jtorctl" version="0.5"> - <artifact name="jtorctl-0.5.jar"> - <sha256 value="43f8c7d390169772b9a2c82ab806c8414c136a2a8636c555e22754bb7260793b" origin="Generated by Gradle"/> - </artifact> - <artifact name="jtorctl-0.5.pom"> - <sha256 value="b7b1ad2d2ac1b90fa51e0e5b50fb8d2eb4d6d641aeb7ec7ca5c8e689cc5f7a0d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="null-safety" version="0.1"> - <artifact name="null-safety-0.1.jar"> - <sha256 value="161760de5e838cb982bafa973df820675d4397098e9a91637a36a306d43ba011" origin="Generated by Gradle"/> - </artifact> - <artifact name="null-safety-0.1.pom"> - <sha256 value="972c760e2b1b75895f4dacd6c03ec50b32bf70c844304a6ed531536f13eb90d9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="obfs4proxy-android" version="0.0.14-tor2"> - <artifact name="obfs4proxy-android-0.0.14-tor2.jar"> - <sha256 value="a0a93770d6760ce57d9dbd31cc7177687374e00c3361dac22ab75e3b6e0f289e" origin="Generated by Gradle"/> - </artifact> - <artifact name="obfs4proxy-android-0.0.14-tor2.pom"> - <sha256 value="37eeb13e66274b9b7bdec5ed8a5902a127cf19bc7e5ae40d220ece8cf1886779" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="obfs4proxy-linux" version="0.0.14-tor2"> - <artifact name="obfs4proxy-linux-0.0.14-tor2.jar"> - <sha256 value="bb2431092b5ad998ad620b0223e725c0f7e43f1b02af2f097a2544edc1fd9738" origin="Generated by Gradle"/> - </artifact> - <artifact name="obfs4proxy-linux-0.0.14-tor2.pom"> - <sha256 value="9feb0d95ecef6e394b2a55ec4e451ec659f84a705345976053de166b157a0460" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="snowflake-android" version="2.5.1"> - <artifact name="snowflake-android-2.5.1.jar"> - <sha256 value="88ec81c17b1b6fa884d06839dec0330e328b45c89f88c970a213ce91ca8eac87" origin="Generated by Gradle"/> - </artifact> - <artifact name="snowflake-android-2.5.1.pom"> - <sha256 value="982c1b2e81d7f8e8e82013a3b5de3501cb24cece1411a5cd834965d5b40634b3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="snowflake-linux" version="2.5.1"> - <artifact name="snowflake-linux-2.5.1.jar"> - <sha256 value="edc807dcb7758365970d95525e4749349a27f462d0e2df6505ad1ca65fb296d2" origin="Generated by Gradle"/> - </artifact> - <artifact name="snowflake-linux-2.5.1.pom"> - <sha256 value="5603bc6b5e8787e478ae8b1cb0a0b66f838503fafa1698bb3b6bd3c503db4d95" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="tor-android" version="0.4.7.13-2"> - <artifact name="tor-android-0.4.7.13-2.jar"> - <sha256 value="453fd463b234a2104edd7f0d02d0649cbb5c5efbe47a76df3828f55a3f90f8b5" origin="Generated by Gradle"/> - </artifact> - <artifact name="tor-android-0.4.7.13-2.pom"> - <sha256 value="aeec80c4f8dd7005273909816e483f176f09fbbf9578d3b377dcf57a39cbfd8c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.briarproject" name="tor-linux" version="0.4.7.13-2"> - <artifact name="tor-linux-0.4.7.13-2.jar"> - <sha256 value="1e4ca9e0f724e1f17fcce570832704942cc3be26c4c2eccbe5aae29f35afa307" origin="Generated by Gradle"/> - </artifact> - <artifact name="tor-linux-0.4.7.13-2.pom"> - <sha256 value="6213bab60da54cda7e1989bc15c504702023734443936820a0acae20380bfecc" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.checkerframework" name="checker-compat-qual" version="2.5.5"> - <artifact name="checker-compat-qual-2.5.5.jar"> - <sha256 value="11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a" origin="Generated by Gradle"/> - </artifact> - <artifact name="checker-compat-qual-2.5.5.pom"> - <sha256 value="42f21ebd9183be049ee5afc822b345403a5da764037875734a039b0d6e0353be" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.checkerframework" name="checker-qual" version="2.11.1"> - <artifact name="checker-qual-2.11.1.jar"> - <sha256 value="015224a4b1dc6de6da053273d4da7d39cfea20e63038169fc45ac0d1dc9c5938" origin="Generated by Gradle"/> - </artifact> - <artifact name="checker-qual-2.11.1.pom"> - <sha256 value="cf2e0c90d8f757455f4a258ea609739053663bd5da6a79d9bd53f935a47de79c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.checkerframework" name="checker-qual" version="2.5.8"> - <artifact name="checker-qual-2.5.8.pom"> - <sha256 value="33ac6a0f1341ae96647c7d4465f4aa3d24fe97d2697bcee2ceae6fc8b5ef2c3c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.checkerframework" name="checker-qual" version="3.12.0"> - <artifact name="checker-qual-3.12.0.jar"> - <sha256 value="ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb" origin="Generated by Gradle"/> - </artifact> - <artifact name="checker-qual-3.12.0.module"> - <sha256 value="d047949c1b81091c2c3913771fac2f32a2fa549ba3d5d548cc8c0b6dfa493777" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.checkerframework" name="checker-qual" version="3.5.0"> - <artifact name="checker-qual-3.5.0.jar"> - <sha256 value="729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4" origin="Generated by Gradle"/> - </artifact> - <artifact name="checker-qual-3.5.0.pom"> - <sha256 value="2836b3b8a78edb31a1803592e60fc767b21f2d190764631ba6efa0837bb35721" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.codehaus.groovy" name="groovy" version="3.0.9"> - <artifact name="groovy-3.0.9.jar"> - <sha256 value="77bf86897f295f8cae2e1f46b1eca109f487ba81b66ef24a2b6dcba1eb7d6ce7" origin="Generated by Gradle"/> - </artifact> - <artifact name="groovy-3.0.9.pom"> - <sha256 value="3e26864c233e00441d0eadfd82fb95abbcbec516b8e9512bc5c5e94be846dcff" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.codehaus.mojo" name="animal-sniffer-annotations" version="1.19"> - <artifact name="animal-sniffer-annotations-1.19.jar"> - <sha256 value="e67ec27ceeaf13ab5d54cf5fdbcc544c41b4db8d02d9f006678cca2c7c13ee9d" origin="Generated by Gradle"/> - </artifact> - <artifact name="animal-sniffer-annotations-1.19.pom"> - <sha256 value="3a9d5113d80dcc19c5c8e641bd7068ba0a2df804201f5688ad27d0094c6cf1d2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.codehaus.mojo" name="animal-sniffer-parent" version="1.19"> - <artifact name="animal-sniffer-parent-1.19.pom"> - <sha256 value="67ab5727f7ad38ef1be72a0539ab9036a7644f3ebbf010687e6dd975a21e95b8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.codehaus.mojo" name="mojo-parent" version="50"> - <artifact name="mojo-parent-50.pom"> - <sha256 value="f819cad1b15b6a7791c8b601e96bde33765e4681395807db4537d2f0dedd493b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ec4j.core" name="ec4j-core" version="0.3.0"> - <artifact name="ec4j-core-0.3.0.jar"> - <sha256 value="cadef0207077074b11a12be442f89ab6cf93fbc2f848702d9371a9611414d558" origin="Generated by Gradle"/> - </artifact> - <artifact name="ec4j-core-0.3.0.pom"> - <sha256 value="fd1b5d4ca1511b3cbc9c91af75ef361228b4f9fb100192d3c865471844ddc6e9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ec4j.core" name="ec4j-core-parent" version="0.3.0"> - <artifact name="ec4j-core-parent-0.3.0.pom"> - <sha256 value="90a311043353c087db3ff2f34802967358a2e488245d887b39c21b66f73ede65" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.eclipse.ee4j" name="project" version="1.0.2"> - <artifact name="project-1.0.2.pom"> - <sha256 value="7495a07a797e88e43c3bc1a87421bd8b1fc55e32291fa18e4e32d8031ddc873f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.eclipse.ee4j" name="project" version="1.0.5"> - <artifact name="project-1.0.5.pom"> - <sha256 value="916b4794d8d8220a59a3fdf6a64dbe794aeb23395e888b81ae36a9b5a2c591a6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.eclipse.jetty" name="jetty-parent" version="21"> - <artifact name="jetty-parent-21.pom"> - <sha256 value="7972e9ec6f3852a8ee1ee5d4d10dcc9dcd6077b125f935aa96b367a6c82337f5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.eclipse.jetty.alpn" name="alpn-api" version="1.1.3.v20160715"> - <artifact name="alpn-api-1.1.3.v20160715.jar"> - <sha256 value="07be99758b699e194f70fb9784d94202dc6c98212877829e3d72b020f2660576" origin="Generated by Gradle"/> - </artifact> - <artifact name="alpn-api-1.1.3.v20160715.pom"> - <sha256 value="16b46f7aa520ed50d4478a0cf677638dedc0143b4234c278f160cb4bd25482af" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.fusesource" name="fusesource-pom" version="1.12"> - <artifact name="fusesource-pom-1.12.pom"> - <sha256 value="c40d960daadcef7b01c1b1c6657afbac4fffb5e53168f8fcb0b28b84e6fdcca1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.fusesource.jansi" name="jansi" version="2.4.0"> - <artifact name="jansi-2.4.0.jar"> - <sha256 value="6cd91991323dd7b2fb28ca93d7ac12af5a86a2f53279e2b35827b30313fd0b9f" origin="Generated by Gradle"/> - </artifact> - <artifact name="jansi-2.4.0.pom"> - <sha256 value="ac40a9f2d0c1ee631fc3b08ef8e2f0bd14ba22011ca76ff1bcf65fb569eadf35" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.glassfish.jaxb" name="jaxb-bom" version="2.3.2"> - <artifact name="jaxb-bom-2.3.2.pom"> - <sha256 value="a1018bb54678ed9f5acb2f7a4084e385ff510201f4e9dbf5f75dc6a675f66be7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.glassfish.jaxb" name="jaxb-runtime" version="2.3.2"> - <artifact name="jaxb-runtime-2.3.2.jar"> - <sha256 value="e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b" origin="Generated by Gradle"/> - </artifact> - <artifact name="jaxb-runtime-2.3.2.pom"> - <sha256 value="9448a5ad7fa68a6083dfbe4f42c8c83e082b9202a105401fc68e944c26548b34" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.glassfish.jaxb" name="txw2" version="2.3.2"> - <artifact name="txw2-2.3.2.jar"> - <sha256 value="4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe" origin="Generated by Gradle"/> - </artifact> - <artifact name="txw2-2.3.2.pom"> - <sha256 value="a79dd002fb038183ff286a2635be2e68c103b87e0e64717d8d44bfd017fd33ea" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.hamcrest" name="hamcrest-core" version="1.3"> - <artifact name="hamcrest-core-1.3.jar"> - <sha256 value="66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9" origin="Generated by Gradle"/> - </artifact> - <artifact name="hamcrest-core-1.3.pom"> - <sha256 value="fde386a7905173a1b103de6ab820727584b50d0e32282e2797787c20a64ffa93" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.hamcrest" name="hamcrest-integration" version="1.3"> - <artifact name="hamcrest-integration-1.3.jar"> - <sha256 value="70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2" origin="Generated by Gradle"/> - </artifact> - <artifact name="hamcrest-integration-1.3.pom"> - <sha256 value="42f0be9bf98c12dacdcb99dd141d83d4dc5bb7c37a6f26684cd3ff2287667fba" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.hamcrest" name="hamcrest-library" version="1.3"> - <artifact name="hamcrest-library-1.3.jar"> - <sha256 value="711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c" origin="Generated by Gradle"/> - </artifact> - <artifact name="hamcrest-library-1.3.pom"> - <sha256 value="1ceb4bfb0f098ae29b935044b2363e11323313fe3ed2055df8b79737d5056277" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.hamcrest" name="hamcrest-parent" version="1.3"> - <artifact name="hamcrest-parent-1.3.pom"> - <sha256 value="6d535f94efb663bdb682c9f27a50335394688009642ba7a9677504bc1be4129b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jacoco" name="org.jacoco.agent" version="0.8.7"> - <artifact name="org.jacoco.agent-0.8.7.jar"> - <sha256 value="9cbcc986e0fbe821a78ff1f8f7d5216f200e5eb124e7f6837d1dc4a77b28b143" origin="Generated by Gradle"/> - </artifact> - <artifact name="org.jacoco.agent-0.8.7.pom"> - <sha256 value="e7b2cdd2df3a6bc239a231b1775be09e50b748e9c388579fb3ea4f990357722f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jacoco" name="org.jacoco.ant" version="0.8.7"> - <artifact name="org.jacoco.ant-0.8.7.jar"> - <sha256 value="97ca96a382c3f23a44d8eb4c4e6c3742a30cb8005774a76ced0fc4806ce49605" origin="Generated by Gradle"/> - </artifact> - <artifact name="org.jacoco.ant-0.8.7.pom"> - <sha256 value="a6084588725cf7e9f28372d5f73eb90ea95ef91976f128fa8059f946831b1fb8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jacoco" name="org.jacoco.build" version="0.8.7"> - <artifact name="org.jacoco.build-0.8.7.pom"> - <sha256 value="83408107930e1683a9b7647da7ab75eb83d80fa470c1641b79b5aecbbef1b783" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jacoco" name="org.jacoco.core" version="0.8.7"> - <artifact name="org.jacoco.core-0.8.7.jar"> - <sha256 value="ad7739b5fb5969aa1a8aead3d74ed54dc82ed012f1f10f336bd1b96e71c1a13c" origin="Generated by Gradle"/> - </artifact> - <artifact name="org.jacoco.core-0.8.7.pom"> - <sha256 value="6832c751d8cd6071af646fde63baa13bdd183693fd60f7757f68536e5f867825" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jacoco" name="org.jacoco.report" version="0.8.7"> - <artifact name="org.jacoco.report-0.8.7.jar"> - <sha256 value="cc89258623700a6c932592153cb528785876b6da183d5431f97efbba6f020e5b" origin="Generated by Gradle"/> - </artifact> - <artifact name="org.jacoco.report-0.8.7.pom"> - <sha256 value="2fbbc19e3c1dd791a2252efa829d926a7988793e9b78c0b26abc98492950c4ba" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.javassist" name="javassist" version="3.26.0-GA"> - <artifact name="javassist-3.26.0-GA.jar"> - <sha256 value="ca5625874ff0a34f2422173a511b33c225218c146a3c961b18940efff430462d" origin="Generated by Gradle"/> - </artifact> - <artifact name="javassist-3.26.0-GA.pom"> - <sha256 value="f456c4f92b56a329830e3b1123b8bdd6f569172a66976361f7a0044395a28317" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jdom" name="jdom2" version="2.0.6"> - <artifact name="jdom2-2.0.6.jar"> - <sha256 value="1345f11ba606d15603d6740551a8c21947c0215640770ec67271fe78bea97cf5" origin="Generated by Gradle"/> - </artifact> - <artifact name="jdom2-2.0.6.pom"> - <sha256 value="47b23a79fe336b741b82434c6e049d68165256e405e75c10921fd72fa8a65d8d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains" name="annotations" version="13.0"> - <artifact name="annotations-13.0.jar"> - <sha256 value="ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478" origin="Generated by Gradle"/> - </artifact> - <artifact name="annotations-13.0.pom"> - <sha256 value="965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.intellij.deps" name="trove4j" version="1.0.20181211"> - <artifact name="trove4j-1.0.20181211.jar"> - <sha256 value="affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601" origin="Generated by Gradle"/> - </artifact> - <artifact name="trove4j-1.0.20181211.pom"> - <sha256 value="310a6aa2d90534c32b8f46f1fc98cd0edae95dcdfca23e2847e5efa9ae0c019a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.intellij.deps" name="trove4j" version="1.0.20200330"> - <artifact name="trove4j-1.0.20200330.jar"> - <sha256 value="c5fd725bffab51846bf3c77db1383c60aaaebfe1b7fe2f00d23fe1b7df0a439d" origin="Generated by Gradle"/> - </artifact> - <artifact name="trove4j-1.0.20200330.pom"> - <sha256 value="87721cbaa65a3c97d8b1ba9d207840f164c9fe38759fc9ea10ffe26565f8d3e9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-android-extensions" version="1.7.22"> - <artifact name="kotlin-android-extensions-1.7.22.jar"> - <sha256 value="7fe244dafb2b66b1442ea5fc3f627c68f1417e3658526f3c6e5b8e8f152905e2" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-android-extensions-1.7.22.pom"> - <sha256 value="46b179c2e6dd250fabdeb62f1890b6638f4372370dd0ad686bb758b5fbbfcd86" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-annotation-processing-gradle" version="1.7.22"> - <artifact name="kotlin-annotation-processing-gradle-1.7.22.jar"> - <sha256 value="782a1df09fb59c25599c80b264b20aec836957254ba3abcfc4f7484c2e556707" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-annotation-processing-gradle-1.7.22.pom"> - <sha256 value="fb827f5448ede93c55948a57161708cb76eec35c55a3df34f8cc48ddb39d83ed" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-build-common" version="1.7.22"> - <artifact name="kotlin-build-common-1.7.22.jar"> - <sha256 value="9447ccfb26809cae098288f24c20bd11bf8f8be2df09177565f08b04bad9723d" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-build-common-1.7.22.pom"> - <sha256 value="c51d62a48dc51a2ea8a29b148deef42d60cd57cff9edc40a1b6903d8381d0391" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-compiler-embeddable" version="1.5.31"> - <artifact name="kotlin-compiler-embeddable-1.5.31.jar"> - <sha256 value="e39811a9e4c102e779c659eefe90b041c66ce87578c1bfdac07cf504d1551745" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-compiler-embeddable-1.5.31.pom"> - <sha256 value="d44b2ceaf284bae932d798581e422bb6bd2c8e59f4f38bbd1fe2a1da5a3c7534" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-compiler-embeddable" version="1.7.22"> - <artifact name="kotlin-compiler-embeddable-1.7.22.jar"> - <sha256 value="87e5a8ba0eba2feb087ba94ceb9c28d0096fc1f6f3b55ef45a9d103ed5ef76c7" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-compiler-embeddable-1.7.22.pom"> - <sha256 value="7cbd358d8750698bed3149e07d39064bfdd50341a800ec2614681d1c4c82fe13" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-compiler-runner" version="1.7.22"> - <artifact name="kotlin-compiler-runner-1.7.22.jar"> - <sha256 value="1d2e5efc3d8fda3a46bdee78f3fd369c2e800ba264db6a5056f48f0eb1fff2ef" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-compiler-runner-1.7.22.pom"> - <sha256 value="1c325436d2cfcf35bc4570b85cfe253fb9fc80e9cac9d51fe71984c9f6af2f78" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-daemon-client" version="1.7.22"> - <artifact name="kotlin-daemon-client-1.7.22.jar"> - <sha256 value="8dfc4a3cd970e326b8e33fc635598c51df0939b0fc592a43b40318c7316c2e31" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-daemon-client-1.7.22.pom"> - <sha256 value="8fd5a592f1fbc1cdbf217740d295599e51465d060782fb125e10687bdd484a9a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-daemon-embeddable" version="1.5.31"> - <artifact name="kotlin-daemon-embeddable-1.5.31.jar"> - <sha256 value="f61eaf89e5e3848631650b25cdfb66fe8cae0281a054d9d986716000a15ba8d6" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-daemon-embeddable-1.5.31.pom"> - <sha256 value="6a551a74ab8a20caedf9adbcd4ebe96333eaab5dfe355f91bb01516cc31cb776" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-daemon-embeddable" version="1.7.22"> - <artifact name="kotlin-daemon-embeddable-1.7.22.jar"> - <sha256 value="4ce267ac5e84a9532d7269fcbc732ebab27e0d76ade71aeeedb369f746b281be" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-daemon-embeddable-1.7.22.pom"> - <sha256 value="340bbb13a2a6e9f669270f01b93e4c75ac5e05268e7d51089557fb80f08180f1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin" version="1.7.22"> - <artifact name="kotlin-gradle-plugin-1.7.22-gradle71.jar"> - <sha256 value="55ecf2b912409a068164f7124028e99aa6e3f0490f326fdcfd40594ec6999d14" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-gradle-plugin-1.7.22.module"> - <sha256 value="41ac550f4b2f36eb89ca3c58bb55fb3f94215628a4e439f97265fde0d8d5cf23" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-api" version="1.7.22"> - <artifact name="kotlin-gradle-plugin-api-1.7.22-gradle71.jar"> - <sha256 value="f313c47a551eb0860b9b4ef2939e8190ac4630e4ea14858a8635fb6d221b7479" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-gradle-plugin-api-1.7.22.jar"> - <sha256 value="f313c47a551eb0860b9b4ef2939e8190ac4630e4ea14858a8635fb6d221b7479" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-gradle-plugin-api-1.7.22.module"> - <sha256 value="ecbc68ddbc3b07c309340364a8603278c2e17a8761f77169ef6e8962ebe3b27f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-idea" version="1.7.22"> - <artifact name="kotlin-gradle-plugin-idea-1.7.22.jar"> - <sha256 value="0b576acb3781a9cb5610aa61c5b7afdf3290fc2d9d8a0cd4bfe1537b875c45e6" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-gradle-plugin-idea-1.7.22.module"> - <sha256 value="d4a6af8509cedbd9bf967e7e6ff32e25e627f2f2e51f4c4738176fa17c57dfb0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-idea-proto" version="1.7.22"> - <artifact name="kotlin-gradle-plugin-idea-proto-1.7.22.jar"> - <sha256 value="afba7cd17b7505bcd4ef03d6e0f1f40453cd9233d2decc8f1de8ed43e3e17f89" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-gradle-plugin-idea-proto-1.7.22.pom"> - <sha256 value="94fb6fb501919aab6d23b13ddb313af1d7e63e10aacbd21a2c9d78311e5e2383" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-model" version="1.7.22"> - <artifact name="kotlin-gradle-plugin-model-1.7.22.jar"> - <sha256 value="e6fa7d9028eec3b6c455deeae044003aca7cc67dc5497be0b165545a625b5c0c" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-gradle-plugin-model-1.7.22.module"> - <sha256 value="82b090899e4b7fa9dba5d63ed9b7acc254c10f4155aba20687ea6d4ae52cb5f3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-klib-commonizer-api" version="1.7.22"> - <artifact name="kotlin-klib-commonizer-api-1.7.22.jar"> - <sha256 value="ac27eafbcd7d58e8f57da8a6d72f9c0e536ac94191b3a902f10921c50ddb662c" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-klib-commonizer-api-1.7.22.pom"> - <sha256 value="aaa605f9c6b39b916843f4c299b3acd8bbbe597d6c5eac9e769d9765cdfe1cf7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-klib-commonizer-embeddable" version="1.7.22"> - <artifact name="kotlin-klib-commonizer-embeddable-1.7.22.jar"> - <sha256 value="de8c31a8092fb68ef80f34a3cbdfb1dcd40207b67cff87d40b5c479ec6a68ece" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-klib-commonizer-embeddable-1.7.22.pom"> - <sha256 value="16ddecae0229c52d1b347598e637bae4ff2c8b6363d7e0086cd6b66dfcc896dc" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-native-utils" version="1.7.22"> - <artifact name="kotlin-native-utils-1.7.22.jar"> - <sha256 value="0eb89f2b9aebfc57ffdba4c2b79f7784d59e29c8c11e4ce514c4760903d3131b" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-native-utils-1.7.22.pom"> - <sha256 value="3e5434b3bbbaaf1e93dbab137f4be1c6e512c11563f38ae30fba66c3145f0e58" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-project-model" version="1.7.22"> - <artifact name="kotlin-project-model-1.7.22.jar"> - <sha256 value="d91afff84ae690c3b9665a369a8a681399e83eb26108e5e170c24913722d1bde" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-project-model-1.7.22.pom"> - <sha256 value="d96b9ee8cdf5206a726cb6f15a730425245f53c695fd83c4c8f5f034846b3e9c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="1.5.31"> - <artifact name="kotlin-reflect-1.5.31.jar"> - <sha256 value="6e0f5490e6b9649ddd2670534e4d3a03bd283c3358b8eef5d1304fd5f8a5a4fb" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-reflect-1.5.31.pom"> - <sha256 value="562b4baaeeac7c725894a105fc51cd3d67e0a259e71140d555426c33270b3014" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="1.6.10"> - <artifact name="kotlin-reflect-1.6.10.jar"> - <sha256 value="3277ac102ae17aad10a55abec75ff5696c8d109790396434b496e75087854203" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-reflect-1.6.10.pom"> - <sha256 value="57905524274a00ae028aaccc27283f6bc5925a934a046c1cc5d06c8ee4d6d5a9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="1.7.22"> - <artifact name="kotlin-reflect-1.7.22.jar"> - <sha256 value="4d4471d1cbc203d3f9e51d6123956dddbb96d5747f1aee02463c7b920feb2baf" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-reflect-1.7.22.pom"> - <sha256 value="e8872fc76b139645d07c17da3b3c71829410630b16cb108f74cd74bed634ca71" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-script-runtime" version="1.5.31"> - <artifact name="kotlin-script-runtime-1.5.31.jar"> - <sha256 value="24e450fee7645ed3590981dddccf397c0d9ebb725815c94c4f555cc3db2f9f96" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-script-runtime-1.5.31.pom"> - <sha256 value="f8c358cf05174fe56641628623ba317c9dc370e0e9de805b08b9d118c3c585b7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-script-runtime" version="1.7.22"> - <artifact name="kotlin-script-runtime-1.7.22.jar"> - <sha256 value="caaa3dd214e8145e7e32deef571640cb65b55909e2af55fc26b30a1acb33930a" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-script-runtime-1.7.22.pom"> - <sha256 value="320e2fb1360d6d620c014b1edb2e6a9f50661a8332676ece76a88f5015cf66a3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-scripting-common" version="1.7.22"> - <artifact name="kotlin-scripting-common-1.7.22.jar"> - <sha256 value="98596c09f94c024685a50db5bc3d0d47dee104da9987d41e4f9ca1c72fa2dfca" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-scripting-common-1.7.22.pom"> - <sha256 value="9fc0627917370bc122942dc87973b7bb3c7d63afce3ea472a0308f7547611cae" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-scripting-compiler-embeddable" version="1.7.22"> - <artifact name="kotlin-scripting-compiler-embeddable-1.7.22.jar"> - <sha256 value="0e28cfe570bebd8c3962bdefed1011905673ab8095312703fa22805efe3c5913" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-scripting-compiler-embeddable-1.7.22.pom"> - <sha256 value="56285c0911faee26c4dc8d86876c63597b4465efb4f22635b0acdf3721e57685" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-scripting-compiler-impl-embeddable" version="1.7.22"> - <artifact name="kotlin-scripting-compiler-impl-embeddable-1.7.22.jar"> - <sha256 value="c8667734536a5661230bd7732809385827e087a75f8088958d384042581c3633" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-scripting-compiler-impl-embeddable-1.7.22.pom"> - <sha256 value="7b8cee67a9d73206eda395d9b0dd46d2f4e9e691c00eca98b1014f84bead33e3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-scripting-jvm" version="1.7.22"> - <artifact name="kotlin-scripting-jvm-1.7.22.jar"> - <sha256 value="f5410993723ff3437638b4acfee9cf5da373091459024fa8a54e1d9ad101c754" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-scripting-jvm-1.7.22.pom"> - <sha256 value="c86e98f0ac653e12d0b2ea9f506662b2a4c497f378a08eb1866b8c9c9e152e26" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.3.71"> - <artifact name="kotlin-stdlib-1.3.71.pom"> - <sha256 value="ff03e9989faa2d40fa4a9098aaad71e247f27ea4d24b0754da642eb0924bd8c5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.5.31"> - <artifact name="kotlin-stdlib-1.5.31.jar"> - <sha256 value="4800ceacb2ec0bb9959a087154b8e35318ead1ea4eba32d4bb1b9734222a7e68" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-1.5.31.pom"> - <sha256 value="8f76760104ac4e873009c9f033dd1bad75b9d3b8f9521d63db1264d844852e6c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.7.0"> - <artifact name="kotlin-stdlib-1.7.0.jar"> - <sha256 value="aa88e9625577957f3249a46cb6e166ee09b369e600f7a11d148d16b0a6d87f05" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-1.7.0.pom"> - <sha256 value="0ac59fbb4cd9188aa08146004a25295c375209efab93125a77f5037e9565764e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.7.10"> - <artifact name="kotlin-stdlib-1.7.10.jar"> - <sha256 value="e771fe74250a943e8f6346713201ff1d8cb95c3a5d1a91a22b65a9e04f6a8901" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-1.7.10.pom"> - <sha256 value="6cc0cf5a2bc02dee060ebb90c3535fc3ddbd7a3bab210ace3e142aaf81764d81" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.7.22"> - <artifact name="kotlin-stdlib-1.7.22.jar"> - <sha256 value="f98505f50a6a1c1dc002d6102e4b419af93d011d5a10696e75a38935a96ea92f" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-1.7.22.pom"> - <sha256 value="9503bbf87beceb77a8b1b4b058cfd5e7e3d4bc37debc4704446b343f2d5521ee" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.5.31"> - <artifact name="kotlin-stdlib-common-1.5.31.jar"> - <sha256 value="dfa2a18e26b028388ee1968d199bf6f166f737ab7049c25a5e2da614404e22ad" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-common-1.5.31.pom"> - <sha256 value="b615e946b8c3d2bea99652ecda97d57ecf83bf5f34c65d286790af23e51283c2" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.7.0"> - <artifact name="kotlin-stdlib-common-1.7.0.jar"> - <sha256 value="59c6ff64fe9a6604afce03e8aaa75f83586c6030ac71fb0b34ee7cdefed3618f" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-common-1.7.0.pom"> - <sha256 value="261a99e52e7de9d2b248ab8998a5046ce641fe1e28237f69df150ec4be9a301a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.7.10"> - <artifact name="kotlin-stdlib-common-1.7.10.jar"> - <sha256 value="19f102efe9629f8eabc63853ad15c533e47c47f91fca09285c5bde86e59f91d4" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-common-1.7.10.pom"> - <sha256 value="1011c63b88ee94cdff5d596937307559bc55037b733cc00ce63cda3cfae0a8eb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.7.22"> - <artifact name="kotlin-stdlib-common-1.7.22.jar"> - <sha256 value="79488cdf284c4b5b3998d302eae9bf0980fa441e3906c6a53d1174f978a3e484" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-common-1.7.22.pom"> - <sha256 value="f89830e782f61f2f471568a26c675ec4addccff0fd71640f955f705a29193ad5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.5.31"> - <artifact name="kotlin-stdlib-jdk7-1.5.31.jar"> - <sha256 value="a25bf47353ce899d843cbddee516d621a73473e7fba97f8d0301e7b4aed7c15f" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk7-1.5.31.pom"> - <sha256 value="23138489ee293a68197068877745f700bfa11af989187bed3c3074cd8c079778" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.7.0"> - <artifact name="kotlin-stdlib-jdk7-1.7.0.jar"> - <sha256 value="07e91be9b2ca20672d2bdb7e181b766e73453a2da13492b5ddaee8fa47aea239" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk7-1.7.0.pom"> - <sha256 value="ae23a4c6a2bdfc0cd5a7bbae87d998a11e0356be49fefa0a9af6c3ff6da2a02b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.7.20"> - <artifact name="kotlin-stdlib-jdk7-1.7.20.jar"> - <sha256 value="524da3c1a2ad56fd52c4ae2272ef3de421de8d2047ab1c51fc306d351243f2f5" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk7-1.7.20.pom"> - <sha256 value="3b91f670de0b0f4c78549a2f5e60b57548a33ab6416b1054ef63865d6c62ae95" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.7.22"> - <artifact name="kotlin-stdlib-jdk7-1.7.22.jar"> - <sha256 value="ade7768d98940a303856529af373f75ffd5e2695b4dc198e9b18396afa53f9e0" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk7-1.7.22.pom"> - <sha256 value="b671680bdb7d5abada79400f3b876f38b2121ff819323afd322cf21941b95b65" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.5.31"> - <artifact name="kotlin-stdlib-jdk8-1.5.31.jar"> - <sha256 value="b548f7767aacf029d2417e47440742bd6d3ebede19b60386e23554ce5c4c5fdc" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk8-1.5.31.pom"> - <sha256 value="45110aab0074792b815807b02b2daf18d2b37e8747ac0692aad7a0d02da893df" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.7.0"> - <artifact name="kotlin-stdlib-jdk8-1.7.0.jar"> - <sha256 value="cf058e11db1dfc9944680c8c61b95ac689aaaa8a3eb30bced028100f038f030b" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk8-1.7.0.pom"> - <sha256 value="97e1b53abe45f138b587953f5043e399c380f555a6233d55795e7aee03d0a731" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.7.20"> - <artifact name="kotlin-stdlib-jdk8-1.7.20.jar"> - <sha256 value="1da0d306c995945e1f807240ef64b5cd2dd5ac58612afb1a8596143d10b7ded5" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk8-1.7.20.pom"> - <sha256 value="491ffbc948a3477491a7fbd43a368c5731cfafe6432af80783b2bbfe67e09fa7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.7.22"> - <artifact name="kotlin-stdlib-jdk8-1.7.22.jar"> - <sha256 value="315102ff1cc2e706286b227147b8db23783db911a89298976a90a22e071cd117" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-stdlib-jdk8-1.7.22.pom"> - <sha256 value="eaf3c2d3e37a514f42eb4c95561a4656915a265749796af9dcae28c7ca604358" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-test" version="1.7.22"> - <artifact name="kotlin-test-1.7.22.jar"> - <sha256 value="f3060dd22a0c43ebc24b0b94df44874e8098eb05e8428a2215d0fe57832f9d37" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-test-1.7.22.module"> - <sha256 value="36d55caad797da459b38d0eb6883c00249c169c5906c43269998402ce92224be" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-test-annotations-common" version="1.7.22"> - <artifact name="kotlin-test-annotations-common-1.7.22.jar"> - <sha256 value="35628f9f01e95b6162dc4b48e3cd49afdc3f463a751b6d793d6ab64459efaaef" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-test-annotations-common-1.7.22.pom"> - <sha256 value="86ae8bc4fe2c6de72d7838a7a27e93fa1d26acc796c25aa3ad2f739e875c31ce" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-test-common" version="1.7.22"> - <artifact name="kotlin-test-common-1.7.22.jar"> - <sha256 value="e9af870a320f3bc7e13dc2357888a34c2684d3c58ff028b6bc57aadbd84d424b" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-test-common-1.7.22.pom"> - <sha256 value="1a1b646da3ee0d2b7379e4d0ed887382a2f73cb93f90a0417f3afb370efcb08f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-test-junit5" version="1.7.22"> - <artifact name="kotlin-test-junit5-1.7.22.jar"> - <sha256 value="bfb9fd2ef4742fb78180976e241596dc06913c2638da38a5f6906780f824811d" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-test-junit5-1.7.22.module"> - <sha256 value="4b4c4539245ad4972e439f5b337c4942081f44fd1645af81fa5de4c47c6f3e8e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-tooling-core" version="1.7.22"> - <artifact name="kotlin-tooling-core-1.7.22.jar"> - <sha256 value="3797f1835342fbc12ec9c1d4f98332ba028291a33251a907c9227d8fd94aee48" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-tooling-core-1.7.22.pom"> - <sha256 value="4443f57c47c42f0d631c3c08c46c4a7d50d8e3bffa9e48b03bdce8ecd166e99e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-util-io" version="1.7.22"> - <artifact name="kotlin-util-io-1.7.22.jar"> - <sha256 value="4fc16f4f146c216f65b39071a39aa0adc4c9e38c8c9f3ffdd4ad3767f8bc9cb5" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-util-io-1.7.22.pom"> - <sha256 value="17b7ae73c1bc2b5532c7880c3f7e8b8fdb8070eab223dc748a31b55d0c13ebec" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlin" name="kotlin-util-klib" version="1.7.22"> - <artifact name="kotlin-util-klib-1.7.22.jar"> - <sha256 value="082f1a76da6a181b78dc6347abf6c480b16dd05d9bc0e49bc0996184de87ab4a" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlin-util-klib-1.7.22.pom"> - <sha256 value="db6e316aa64d5239dc22b23ba69b2f6340754421776b14f747955c54faac4bef" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="atomicfu" version="0.18.5"> - <artifact name="atomicfu-0.18.5.module"> - <sha256 value="997ded89d1b5f6952dc024e18972e15b606bc3cb78af8345aa00df2c58984631" origin="Generated by Gradle"/> - </artifact> - <artifact name="atomicfu-metadata-0.18.5-all.jar"> - <sha256 value="6890b4702234287cb2e81bdfa2a7bf61f83ef07faa741c7015155226b7832653" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-android" version="1.6.1"> - <artifact name="kotlinx-coroutines-android-1.6.1.jar"> - <sha256 value="961ebde8138779a299430ca325a86e28c490527a87ba518362fa45c44c7e7e95" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-android-1.6.1.module"> - <sha256 value="558a3e6e5cc501f13aac0436bd08bb342d10de9f8bcfd3ba6d582f433e92c3b1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-android" version="1.6.4"> - <artifact name="kotlinx-coroutines-android-1.6.4.jar"> - <sha256 value="3fdc0eed5bc4b83ee9622774520a2db25470370eacd1581cac1e37704f095b00" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-android-1.6.4.module"> - <sha256 value="68516559e6f84a621b9783cd892a64630ccd7875843588ddb3f0501425e33f15" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-bom" version="1.6.1"> - <artifact name="kotlinx-coroutines-bom-1.6.1.pom"> - <sha256 value="43e780ec3da6959c7d2c97fd6b4462ca9997e9c03cd6c43ee92f6604022d4bae" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-bom" version="1.6.4"> - <artifact name="kotlinx-coroutines-bom-1.6.4.pom"> - <sha256 value="ab2614855fba66aa8a42514dbe3d5a884315ffe1ed63f5932e710a8006245ce1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.5.2"> - <artifact name="kotlinx-coroutines-core-1.5.2.module"> - <sha256 value="7b9f6960c6689d1a79d82ca3b00b8347bd57d15fe4070a3dd34e826e76136392" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.6.1"> - <artifact name="kotlinx-coroutines-core-1.6.1.module"> - <sha256 value="79fe6569a9fffb409e51c64d5f8c54d27c4aa3735886155899d28ed2c9dfbc48" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.6.4"> - <artifact name="kotlinx-coroutines-core-1.6.4.module"> - <sha256 value="a6eed4a1835588e7c84fcd7b0475fce9a7b3444c870ebc797b88ba64ccf4576b" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-core-metadata-1.6.4-all.jar"> - <sha256 value="ae24d84fd33c5aaba1564b168142d0f210b0e257e0a0077e32616acc59e67fb7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core-jvm" version="1.5.0"> - <artifact name="kotlinx-coroutines-core-jvm-1.5.0.jar"> - <sha256 value="78d6cc7135f84d692ff3752fcfd1fa1bbe0940d7df70652e4f1eaeec0c78afbb" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-core-jvm-1.5.0.module"> - <sha256 value="c885dd0281076c5843826de317e3cbcdc3d8859dbeef53ae1cfacd1b9c60f96e" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core-jvm" version="1.5.2"> - <artifact name="kotlinx-coroutines-core-jvm-1.5.2.jar"> - <sha256 value="2314c48aa1a39c05c11f3b385cdf3c56b1745f064314e4feabecebc1572b3ac1" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-core-jvm-1.5.2.module"> - <sha256 value="e229f81e6bc098067936a4b8264ea48fbe728ffc50faf4a78e0002793a6cd8ff" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core-jvm" version="1.6.1"> - <artifact name="kotlinx-coroutines-core-jvm-1.6.1.module"> - <sha256 value="f31b672a11feb0ee49d5d49143067e93c33f5866768ae42b9a324b53cdad36e1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core-jvm" version="1.6.4"> - <artifact name="kotlinx-coroutines-core-jvm-1.6.4.jar"> - <sha256 value="c24c8bb27bb320c4a93871501a7e5e0c61607638907b197aef675513d4c820be" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-core-jvm-1.6.4.module"> - <sha256 value="0d94c8a41483e7c2707ebd693e1b1357a84152998ce85550ebbc54ca4321a3a7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-jdk8" version="1.6.4"> - <artifact name="kotlinx-coroutines-jdk8-1.6.4.jar"> - <sha256 value="88c64b8eea3eb90597d2fb0fd30f3cf782fbcdad06312e5665a618f070f02119" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-jdk8-1.6.4.module"> - <sha256 value="bdc4b3683b5af45d0894f56ffdb1f81d6bbde9d54a2e14abf1d9487e9e144e07" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-slf4j" version="1.6.4"> - <artifact name="kotlinx-coroutines-slf4j-1.6.4.jar"> - <sha256 value="e8e47a5d7ff57e89e096a409486308ad58a2f392724145973f11f679e7d11d23" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-coroutines-slf4j-1.6.4.module"> - <sha256 value="88bb72ff43e8e597b33efc4577a3680d54696a2c2f70814149ef087ce3ccc381" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-metadata-jvm" version="0.5.0"> - <artifact name="kotlinx-metadata-jvm-0.5.0.jar"> - <sha256 value="ca063a96639b08b9eaa0de4d65e899480740a6efbe28ab9a8681a2ced03055a4" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-metadata-jvm-0.5.0.pom"> - <sha256 value="52d84bd1dbff23b674806670de4e757985b2c54f41cadca48846e667d1d44ffd" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core" version="1.1.0"> - <artifact name="kotlinx-serialization-core-1.1.0.module"> - <sha256 value="a21890616c068b55580ca3cf008b3d5d7f9613c980b754b4ad5a5bf74e8babf5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core" version="1.4.1"> - <artifact name="kotlinx-serialization-core-1.4.1.module"> - <sha256 value="60e581c397ddb9461ec1f1dee5bbb4a23bb7ec7d09b296024196220022aa7090" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-serialization-core-metadata-1.4.1-all.jar"> - <sha256 value="11d00f05f4c0e1a894ef4cbc4370ba818d21ef70ebb015c8731af43751cfa233" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-jvm" version="1.1.0"> - <artifact name="kotlinx-serialization-core-jvm-1.1.0.jar"> - <sha256 value="69d18c700cfdf207b3e9bf6f5d58e7de08482d9e34d7c2a0adcb1db8082df943" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-serialization-core-jvm-1.1.0.module"> - <sha256 value="717848769dd22e377f9b757423c4ba9d6bda1e88eb280f69076b0eeed76c22b5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-jvm" version="1.4.1"> - <artifact name="kotlinx-serialization-core-jvm-1.4.1.jar"> - <sha256 value="eba7f1c854296e4ce1418fb01360f8f10c5683e7c45aa3472018417a067636f3" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-serialization-core-jvm-1.4.1.module"> - <sha256 value="73bc94bdd5fc86621509a6715c3fe344904ee7db5806a0c61792ce2356089ee9" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json" version="1.1.0"> - <artifact name="kotlinx-serialization-json-1.1.0.module"> - <sha256 value="199470decb8a86c0fefd7bd52eb6e49bac251f2bc213628be0e2f6393fbde82d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json" version="1.4.1"> - <artifact name="kotlinx-serialization-json-1.4.1.module"> - <sha256 value="e9922300aff663e55ecef7d3fca305cb60a14755b1f980d94039e3c1cab645cc" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-serialization-json-metadata-1.4.1-all.jar"> - <sha256 value="c316fc2b8445af447f11239388069b781a50e6747b1dc3218b1f155bb9410d19" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json-jvm" version="1.1.0"> - <artifact name="kotlinx-serialization-json-jvm-1.1.0.jar"> - <sha256 value="cea6836d3a3990b7ac59f61a9534a0bf1c8d3932bd206080a3a13622ec7587d1" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-serialization-json-jvm-1.1.0.module"> - <sha256 value="c30d0af4fcd3b614a68e89e7a31a47ead7a2ab4aa0c2138fa734bb6b574ab0e8" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jetbrains.kotlinx" name="kotlinx-serialization-json-jvm" version="1.4.1"> - <artifact name="kotlinx-serialization-json-jvm-1.4.1.jar"> - <sha256 value="af604c46737121d4225fdb60ef0e17766a3c94b7c1c9ef76b4e3a5c7733d557e" origin="Generated by Gradle"/> - </artifact> - <artifact name="kotlinx-serialization-json-jvm-1.4.1.module"> - <sha256 value="c8fbfde4b5ee1e41a69175165e839991d1501665a7590e23162326501ac6122c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jlleitschuh.gradle" name="ktlint-gradle" version="10.2.1"> - <artifact name="ktlint-gradle-10.2.1.jar"> - <sha256 value="713e46aade2205951fdea248152ec3ae155774efae0ae0517b6036dc20957d51" origin="Generated by Gradle"/> - </artifact> - <artifact name="ktlint-gradle-10.2.1.module"> - <sha256 value="21faf203321dbf69d78cb37818a7e3487371db2d024e63dc0c3b5329cbe085a7" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jlleitschuh.gradle.ktlint" name="org.jlleitschuh.gradle.ktlint.gradle.plugin" version="10.2.1"> - <artifact name="org.jlleitschuh.gradle.ktlint.gradle.plugin-10.2.1.pom"> - <sha256 value="6f01d5356bfb148919c98b3c63862c2ff2a97d211ee535377a03640152417eb0" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.json" name="json" version="20180813"> - <artifact name="json-20180813.jar"> - <sha256 value="518080049ba83181914419d11a25d9bc9833a2d729b6a6e7469fa52851356da8" origin="Generated by Gradle"/> - </artifact> - <artifact name="json-20180813.pom"> - <sha256 value="c7e660c50bf4ecda0fc81ab62b489db9171e207fa784ddcb48c6c85bb40b49f5" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.junit" name="junit-bom" version="5.7.2"> - <artifact name="junit-bom-5.7.2.module"> - <sha256 value="f3bceb1c59dd4f6993f4304dffa580172b8df65a76cd36fa4fd92c0578d28ad8" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-bom-5.7.2.pom"> - <sha256 value="cd14aaa869991f82021c585d570d31ff342bcba58bb44233b70193771b96487b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.junit.jupiter" name="junit-jupiter-api" version="5.7.2"> - <artifact name="junit-jupiter-api-5.7.2.jar"> - <sha256 value="bc98326ecbc501e1860a2bc9780aebe5777bd29cf00059f88c2a56f48fbc9ce6" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-jupiter-api-5.7.2.module"> - <sha256 value="1de0edba8f1dc65a26432b060389908785c411df0b4ffc82082448368269df11" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.junit.jupiter" name="junit-jupiter-engine" version="5.7.2"> - <artifact name="junit-jupiter-engine-5.7.2.jar"> - <sha256 value="8a35afb26cd5e8393cb763ff13d26a52a507a35c5b2d7650d42024a7226b80db" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-jupiter-engine-5.7.2.module"> - <sha256 value="fae1cc30209ac96227ad73bad7fec09f59e7ff5f95eb4efdd5b5f1803750c597" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.junit.jupiter" name="junit-jupiter-params" version="5.7.2"> - <artifact name="junit-jupiter-params-5.7.2.jar"> - <sha256 value="17569f7da0ce2ebeab875aa8aa79c0f2c42433ea208291e73fc1a3c9d6143115" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-jupiter-params-5.7.2.module"> - <sha256 value="9ab5d96840df62428b23aaab30f42e6ca0d50661c57ddecc61304aa51a278e6a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.junit.platform" name="junit-platform-commons" version="1.7.2"> - <artifact name="junit-platform-commons-1.7.2.jar"> - <sha256 value="738d0df021a0611fff5d277634e890cc91858fa72227cf0bcf36232a7caf014c" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-platform-commons-1.7.2.module"> - <sha256 value="530b193fd3e45d64571236d23119ba649f71233b4bd248d088326708af186fa1" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.junit.platform" name="junit-platform-engine" version="1.7.2"> - <artifact name="junit-platform-engine-1.7.2.jar"> - <sha256 value="abebbfa420fa8ffdc51083c06807e8692dd9bf8c52455dcdb72474ab90425573" origin="Generated by Gradle"/> - </artifact> - <artifact name="junit-platform-engine-1.7.2.module"> - <sha256 value="7042d64b2c357de809bf85cb6fe8002ef3269eed7bf724ece8025350d93f3dc3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.jvnet.staxex" name="stax-ex" version="1.8.1"> - <artifact name="stax-ex-1.8.1.jar"> - <sha256 value="20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a" origin="Generated by Gradle"/> - </artifact> - <artifact name="stax-ex-1.8.1.pom"> - <sha256 value="8fc84f36ce6da6ce8c893b6538199a7f69a69a0706d9b17a3ee6a3a09452eed6" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.objenesis" name="objenesis" version="3.1"> - <artifact name="objenesis-3.1.jar"> - <sha256 value="cdb3d038c188de6f46ffd5cd930be2d5e5dba59c53b26437995d534e3db2fb80" origin="Generated by Gradle"/> - </artifact> - <artifact name="objenesis-3.1.pom"> - <sha256 value="d46072a46dff7707e06545777486b18d73e052231e3139cd3d9c3f347bc4e6e4" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.objenesis" name="objenesis-parent" version="3.1"> - <artifact name="objenesis-parent-3.1.pom"> - <sha256 value="1493584824e110e22d6047584978ca2fc9907987102369bdb1e3773d54963ada" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.opentest4j" name="opentest4j" version="1.2.0"> - <artifact name="opentest4j-1.2.0.jar"> - <sha256 value="58812de60898d976fb81ef3b62da05c6604c18fd4a249f5044282479fc286af2" origin="Generated by Gradle"/> - </artifact> - <artifact name="opentest4j-1.2.0.pom"> - <sha256 value="a96e671816c1ff8803bdec74c9241f025bdfb277da5d2b4ee02266405936f994" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ow2" name="ow2" version="1.5"> - <artifact name="ow2-1.5.pom"> - <sha256 value="0f8a1b116e760b8fe6389c51b84e4b07a70fc11082d4f936e453b583dd50b43b" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ow2.asm" name="asm" version="9.1"> - <artifact name="asm-9.1.jar"> - <sha256 value="cda4de455fab48ff0bcb7c48b4639447d4de859a7afc30a094a986f0936beba2" origin="Generated by Gradle"/> - </artifact> - <artifact name="asm-9.1.pom"> - <sha256 value="c683a90dd68f2b1788cbdfc4647ea9405ef5925b371c199f8fd39d44d3cede8d" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ow2.asm" name="asm-analysis" version="9.1"> - <artifact name="asm-analysis-9.1.jar"> - <sha256 value="81a88041b1b8beda5a8a99646098046c48709538270c49def68abff25ac3be34" origin="Generated by Gradle"/> - </artifact> - <artifact name="asm-analysis-9.1.pom"> - <sha256 value="ac5454c11b03431ca951df71fb4e86c8c4c80df6979f95b757caed3ab0f47156" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ow2.asm" name="asm-commons" version="9.1"> - <artifact name="asm-commons-9.1.jar"> - <sha256 value="afcb26dc1fc12c0c4a99ada670908dd82e18dfc488caf5ee92546996b470c00c" origin="Generated by Gradle"/> - </artifact> - <artifact name="asm-commons-9.1.pom"> - <sha256 value="a0f651b27b8afe9c0e612d7a0266eacb5f7b1c787bc4b5ac8245f3d7a1181b7f" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ow2.asm" name="asm-tree" version="9.1"> - <artifact name="asm-tree-9.1.jar"> - <sha256 value="fd00afa49e9595d7646205b09cecb4a776a8ff0ba06f2d59b8f7bf9c704b4a73" origin="Generated by Gradle"/> - </artifact> - <artifact name="asm-tree-9.1.pom"> - <sha256 value="b6a00d9207c035460f81c7d70ed41253f0d216652bed45fa1a3052ffcd50b94c" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.ow2.asm" name="asm-util" version="9.1"> - <artifact name="asm-util-9.1.jar"> - <sha256 value="380e2ecd16f7cc0f1a76ba9ba049179b5760a57b282a87a4c653caeff2cd5bd6" origin="Generated by Gradle"/> - </artifact> - <artifact name="asm-util-9.1.pom"> - <sha256 value="8ddd74f1a1e2b93c709d976d0205e74fbf39d005703c9626a5ed5cc574cafbcf" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.reflections" name="reflections" version="0.9.12"> - <artifact name="reflections-0.9.12.jar"> - <sha256 value="d168f58d32f2ae7ac5a8d5d9092adeee526c604b41125dcb45eea877960a99cf" origin="Generated by Gradle"/> - </artifact> - <artifact name="reflections-0.9.12.pom"> - <sha256 value="626969f40dd5333580b8afd91211bc8b69e37f7f50c1995ae8f93aef50e1ac68" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.slf4j" name="slf4j-api" version="1.7.30"> - <artifact name="slf4j-api-1.7.30.jar"> - <sha256 value="cdba07964d1bb40a0761485c6b1e8c2f8fd9eb1d19c53928ac0d7f9510105c57" origin="Generated by Gradle"/> - </artifact> - <artifact name="slf4j-api-1.7.30.pom"> - <sha256 value="7e0747751e9b67e19dcb5206f04ea22cc03d250c422426402eadd03513f2c314" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.slf4j" name="slf4j-api" version="2.0.6"> - <artifact name="slf4j-api-2.0.6.jar"> - <sha256 value="2f2a92d410b268139d7d63b75ed25e21995cfe4100c19bf23577cfdbc8077bda" origin="Generated by Gradle"/> - </artifact> - <artifact name="slf4j-api-2.0.6.pom"> - <sha256 value="8b4e86c53d2783608f1aea213d906c5bac5c0433e00b19239bb16764b9fa3736" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.slf4j" name="slf4j-parent" version="1.7.30"> - <artifact name="slf4j-parent-1.7.30.pom"> - <sha256 value="11647956e48a0c5bfb3ac33f6da7e83f341002b6857efd335a505b687be34b75" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.slf4j" name="slf4j-parent" version="2.0.6"> - <artifact name="slf4j-parent-2.0.6.pom"> - <sha256 value="1482650cbe31e408c1dc89021cbae1d3044ad4a01bf8f62ba360b6a813a13124" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.sonatype.oss" name="oss-parent" version="7"> - <artifact name="oss-parent-7.pom"> - <sha256 value="b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.sonatype.oss" name="oss-parent" version="9"> - <artifact name="oss-parent-9.pom"> - <sha256 value="fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="org.tensorflow" name="tensorflow-lite-metadata" version="0.1.0-rc2"> - <artifact name="tensorflow-lite-metadata-0.1.0-rc2.jar"> - <sha256 value="2c2a264f842498c36d34d2a7b91342490d9a962862c85baac1acd54ec2fca6d9" origin="Generated by Gradle"/> - </artifact> - <artifact name="tensorflow-lite-metadata-0.1.0-rc2.pom"> - <sha256 value="9a4f5e5674366c156c90391662f03ed7c5971d6aa63832df74a271da6ff82e96" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="xerces" name="xercesImpl" version="2.12.0"> - <artifact name="xercesImpl-2.12.0.jar"> - <sha256 value="b50d3a4ca502faa4d1c838acb8aa9480446953421f7327e338c5dda3da5e76d0" origin="Generated by Gradle"/> - </artifact> - <artifact name="xercesImpl-2.12.0.pom"> - <sha256 value="138ebb33cce7080fd5cdb4fb90a0ee550173d7e8d41024da8c0d788b1460a1f3" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="xml-apis" name="xml-apis" version="1.4.01"> - <artifact name="xml-apis-1.4.01.jar"> - <sha256 value="a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad" origin="Generated by Gradle"/> - </artifact> - <artifact name="xml-apis-1.4.01.pom"> - <sha256 value="09a82ff150ac86bfa31145e0a6afd89a02e4504785f5da112e4fae1425020e92" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="xmlpull" name="xmlpull" version="1.1.3.1"> - <artifact name="xmlpull-1.1.3.1.jar"> - <sha256 value="34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63" origin="Generated by Gradle"/> - </artifact> - <artifact name="xmlpull-1.1.3.1.pom"> - <sha256 value="8f10ffd8df0d3e9819c8cc8402709c6b248bc53a954ef6e45470d9ae3a5735fb" origin="Generated by Gradle"/> - </artifact> - </component> - <component group="xpp3" name="xpp3" version="1.1.4c"> - <artifact name="xpp3-1.1.4c.jar"> - <sha256 value="0341395a481bb887803957145a6a37879853dd625e9244c2ea2509d9bb7531b9" origin="Generated by Gradle"/> - </artifact> - <artifact name="xpp3-1.1.4c.pom"> - <sha256 value="4e54622f5dc0f8b6c51e28650268f001e3b55d076c8e3a9d9731c050820c0a3d" origin="Generated by Gradle"/> - </artifact> - </component> - </components> -</verification-metadata> diff --git a/mailbox-android/build.gradle b/mailbox-android/build.gradle index 0ec395a65f86af64553be6af44d1443110a38d47..f46e5c7de16eacb13229461bd9f6814fd4f74c83 100644 --- a/mailbox-android/build.gradle +++ b/mailbox-android/build.gradle @@ -77,7 +77,8 @@ configurations { dependencies { implementation project(path: ':mailbox-core', configuration: 'default') - implementation 'org.briarproject:dont-kill-me-lib:0.2.5' + implementation 'org.briarproject:dont-kill-me-lib:0.2.6' + implementation "org.briarproject:onionwrapper-android:$onionwrapper_version" implementation 'com.github.tony19:logback-android:3.0.0' implementation 'androidx.appcompat:appcompat:1.6.1' @@ -116,6 +117,12 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + + constraints { + // Work around duplicate class issues caused by dont-kill-me-lib, this project, and the + // IDEA plugin using different versions of Kotlin + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0' + } } def torLibsDir = 'src/main/jniLibs' diff --git a/mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java b/mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java new file mode 100644 index 0000000000000000000000000000000000000000..0b243089269742b7e4723e7558399b9a21feeb71 --- /dev/null +++ b/mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java @@ -0,0 +1,20 @@ +package org.briarproject.android.dontkillmelib.wakelock; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import dagger.hilt.InstallIn; +import dagger.hilt.components.SingletonComponent; + +@Module +@InstallIn(SingletonComponent.class) +public class AndroidWakeLockModule { + + @Provides + @Singleton + AndroidWakeLockManager provideWakeLockManager( + AndroidWakeLockManagerImpl wakeLockManager) { + return wakeLockManager; + } +} diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt index 7c50e19a02e550320111a27fcd1771c9085bd4f5..e52d5e25767c4b6dc448fe4a64b15357c35e5a8d 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt +++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt @@ -30,6 +30,8 @@ import androidx.core.app.ServiceCompat import androidx.core.app.ServiceCompat.stopForeground import androidx.core.content.ContextCompat import dagger.hilt.android.AndroidEntryPoint +import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLock +import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManager import org.briarproject.mailbox.R import org.briarproject.mailbox.android.MailboxNotificationManager.Companion.NOTIFICATION_MAIN_ID import org.briarproject.mailbox.android.StatusManager.Starting @@ -42,8 +44,6 @@ import org.briarproject.mailbox.core.lifecycle.LifecycleManager.StartResult.LIFE import org.briarproject.mailbox.core.lifecycle.LifecycleManager.StartResult.SERVICE_ERROR import org.briarproject.mailbox.core.lifecycle.LifecycleManager.StartResult.SUCCESS import org.briarproject.mailbox.core.system.AndroidExecutor -import org.briarproject.mailbox.core.system.AndroidWakeLock -import org.briarproject.mailbox.core.system.AndroidWakeLockManager import org.briarproject.mailbox.core.system.System import org.briarproject.mailbox.core.util.LogUtils.warn import org.slf4j.LoggerFactory.getLogger diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/StatusManager.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/StatusManager.kt index 6d2bce89ca6c22484d27ccc892fa2298dabaa80d..c4f9266ee8bf7db5ab4605d825c8dd9af620ad7f 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/StatusManager.kt +++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/StatusManager.kt @@ -52,7 +52,7 @@ import org.briarproject.mailbox.core.setup.SetupManager import org.briarproject.mailbox.core.system.AndroidExecutor import org.briarproject.mailbox.core.tor.NetworkStatusEvent import org.briarproject.mailbox.core.tor.TorPlugin -import org.briarproject.mailbox.core.tor.TorState +import org.briarproject.mailbox.core.tor.TorPluginState import org.briarproject.mailbox.core.util.LogUtils.info import org.slf4j.LoggerFactory import java.util.concurrent.atomic.AtomicReference @@ -96,7 +96,7 @@ class StatusManager @Inject constructor( private val online: AtomicReference<Boolean?> = AtomicReference(null) private val lifecycleState: StateFlow<LifecycleState> = lifecycleManager.lifecycleStateFlow - private val torPluginState: StateFlow<TorState> = torPlugin.state + private val torPluginState: StateFlow<TorPluginState> = torPlugin.state private val setupComplete: StateFlow<SetupComplete> = setupManager.setupComplete @UiThread @@ -199,17 +199,17 @@ class StatusManager @Inject constructor( isCancelable = false, ) // RUNNING - tor != TorState.Published -> when (tor) { - TorState.StartingStopping -> Starting( + tor != TorPluginState.Published -> when (tor) { + TorPluginState.StartingStopping -> Starting( status = getString(R.string.startup_init_app), isCancelable = true, ) - is TorState.Enabling -> Starting( + is TorPluginState.Enabling -> Starting( status = getString(R.string.startup_bootstrapping_tor, tor.percent), isCancelable = true, ) - TorState.ClockSkewed -> ErrorClockSkew - TorState.Inactive -> ErrorNoNetwork + TorPluginState.ClockSkewed -> ErrorClockSkew + TorPluginState.Inactive -> ErrorNoNetwork else -> Starting( status = getString(R.string.startup_publishing_onion_service), isCancelable = true, diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidSystemModule.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidSystemModule.java index 55c3773453db0862d894478815e3b72721ff1907..f4b2c6769316a55d043fa927f7f4d8e136dc86d6 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidSystemModule.java +++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidSystemModule.java @@ -68,11 +68,4 @@ public class AndroidSystemModule { Executor provideEventExecutor(AndroidExecutor androidExecutor) { return androidExecutor::runOnUiThread; } - - @Provides - @Singleton - AndroidWakeLockManager provideWakeLockManager( - AndroidWakeLockManagerImpl wakeLockManager) { - return wakeLockManager; - } } diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockImpl.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockImpl.java deleted file mode 100644 index b56534715e94dd7075d119e30065fecde974b236..0000000000000000000000000000000000000000 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockImpl.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.system; - -import org.slf4j.Logger; - -import java.util.concurrent.atomic.AtomicInteger; - -import javax.annotation.concurrent.GuardedBy; -import javax.annotation.concurrent.ThreadSafe; - -import static org.briarproject.mailbox.core.util.LogUtils.trace; -import static org.slf4j.LoggerFactory.getLogger; - -/** - * A wrapper around a {@link SharedWakeLock} that provides the more convenient - * semantics of {@link AndroidWakeLock} (i.e. calls to acquire() and release() - * don't need to be balanced). - */ -@ThreadSafe -class AndroidWakeLockImpl implements AndroidWakeLock { - - private static final Logger LOG = getLogger(AndroidWakeLockImpl.class); - - private static final AtomicInteger INSTANCE_ID = new AtomicInteger(0); - - private final SharedWakeLock sharedWakeLock; - private final String tag; - - private final Object lock = new Object(); - @GuardedBy("lock") - private boolean held = false; - - AndroidWakeLockImpl(SharedWakeLock sharedWakeLock, String tag) { - this.sharedWakeLock = sharedWakeLock; - this.tag = tag + "_" + INSTANCE_ID.getAndIncrement(); - } - - @Override - public void acquire() { - synchronized (lock) { - if (held) { - trace(LOG, () -> tag + " already acquired"); - } else { - trace(LOG, () -> tag + " acquiring shared wake lock"); - held = true; - sharedWakeLock.acquire(); - } - } - } - - @Override - public void release() { - synchronized (lock) { - if (held) { - trace(LOG, () -> tag + " releasing shared wake lock"); - held = false; - sharedWakeLock.release(); - } else { - trace(LOG, () -> tag + " already released"); - } - } - } -} diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockManager.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockManager.java deleted file mode 100644 index 8d717149a29c837393a378cf1ac39e82544c86b2..0000000000000000000000000000000000000000 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockManager.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.system; - -public interface AndroidWakeLockManager { - - /** - * Creates a wake lock with the given tag. The tag is only used for - * logging; the underlying OS wake lock will use its own tag. - */ - AndroidWakeLock createWakeLock(String tag); -} diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockManagerImpl.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockManagerImpl.java deleted file mode 100644 index c00275eff38f81abe57be4cbf39db37d2073a64a..0000000000000000000000000000000000000000 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLockManagerImpl.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.system; - -import android.app.Application; -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.PowerManager; - -import java.util.concurrent.ScheduledExecutorService; - -import javax.inject.Inject; - -import static android.content.Context.POWER_SERVICE; -import static android.os.PowerManager.PARTIAL_WAKE_LOCK; -import static java.util.Objects.requireNonNull; -import static java.util.concurrent.TimeUnit.MINUTES; -import static java.util.concurrent.TimeUnit.SECONDS; - -class AndroidWakeLockManagerImpl implements AndroidWakeLockManager { - - /** - * How often to replace the wake lock. - */ - private static final long LOCK_DURATION_MS = MINUTES.toMillis(1); - - /** - * Automatically release the lock this many milliseconds after it's due - * to have been replaced and released. - */ - private static final long SAFETY_MARGIN_MS = SECONDS.toMillis(30); - - private final SharedWakeLock sharedWakeLock; - - @Inject - AndroidWakeLockManagerImpl(Application app, - ScheduledExecutorService scheduledExecutorService) { - PowerManager powerManager = (PowerManager) - requireNonNull(app.getSystemService(POWER_SERVICE)); - String tag = getWakeLockTag(app); - sharedWakeLock = new RenewableWakeLock(powerManager, - scheduledExecutorService, PARTIAL_WAKE_LOCK, tag, - LOCK_DURATION_MS, SAFETY_MARGIN_MS); - } - - @Override - public AndroidWakeLock createWakeLock(String tag) { - return new AndroidWakeLockImpl(sharedWakeLock, tag); - } - - private String getWakeLockTag(Context ctx) { - PackageManager pm = ctx.getPackageManager(); - if (isInstalled(pm, "com.huawei.powergenie")) { - return "LocationManagerService"; - } else if (isInstalled(pm, "com.evenwell.PowerMonitor")) { - return "AudioIn"; - } - return ctx.getPackageName(); - } - - private boolean isInstalled(PackageManager pm, String packageName) { - try { - pm.getPackageInfo(packageName, 0); - return true; - } catch (PackageManager.NameNotFoundException e) { - return false; - } - } - -} diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/RenewableWakeLock.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/RenewableWakeLock.java deleted file mode 100644 index 87d9647aa1cb781e4af0b70819f38ebb89ac33d8..0000000000000000000000000000000000000000 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/RenewableWakeLock.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.system; - -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; - -import org.slf4j.Logger; - -import java.util.concurrent.Future; -import java.util.concurrent.ScheduledExecutorService; - -import javax.annotation.Nullable; -import javax.annotation.concurrent.GuardedBy; -import javax.annotation.concurrent.ThreadSafe; - -import static java.util.Objects.requireNonNull; -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static org.briarproject.mailbox.core.util.LogUtils.info; -import static org.briarproject.mailbox.core.util.LogUtils.trace; -import static org.briarproject.mailbox.core.util.LogUtils.warn; -import static org.slf4j.LoggerFactory.getLogger; - -@ThreadSafe -class RenewableWakeLock implements SharedWakeLock { - - private static final Logger LOG = getLogger(RenewableWakeLock.class); - - private final PowerManager powerManager; - private final ScheduledExecutorService scheduledExecutorService; - private final int levelAndFlags; - private final String tag; - private final long durationMs, safetyMarginMs; - - private final Object lock = new Object(); - @GuardedBy("lock") - @Nullable - private WakeLock wakeLock; - @GuardedBy("lock") - @Nullable - private Future<?> future; - @GuardedBy("lock") - private int refCount = 0; - @GuardedBy("lock") - private long acquired = 0; - - RenewableWakeLock(PowerManager powerManager, - ScheduledExecutorService scheduledExecutorService, - int levelAndFlags, - String tag, - long durationMs, - long safetyMarginMs) { - this.powerManager = powerManager; - this.scheduledExecutorService = scheduledExecutorService; - this.levelAndFlags = levelAndFlags; - this.tag = tag; - this.durationMs = durationMs; - this.safetyMarginMs = safetyMarginMs; - } - - @Override - public void acquire() { - synchronized (lock) { - refCount++; - if (refCount == 1) { - info(LOG, () -> "Acquiring wake lock " + tag); - wakeLock = powerManager.newWakeLock(levelAndFlags, tag); - // We do our own reference counting so we can replace the lock - // TODO: Check whether using a ref-counted wake lock affects - // power management apps - wakeLock.setReferenceCounted(false); - wakeLock.acquire(durationMs + safetyMarginMs); - future = scheduledExecutorService.schedule(this::renew, - durationMs, MILLISECONDS); - acquired = android.os.SystemClock.elapsedRealtime(); - } else { - trace(LOG, () -> "Wake lock " + tag + " has " + refCount + - " holders"); - } - } - } - - private void renew() { - info(LOG, () -> "Renewing wake lock " + tag); - synchronized (lock) { - if (wakeLock == null) { - LOG.info("Already released"); - return; - } - trace(LOG, - () -> "Wake lock " + tag + " has " + refCount + " holders"); - long now = android.os.SystemClock.elapsedRealtime(); - long expiry = acquired + durationMs + safetyMarginMs; - if (now > expiry) { - warn(LOG, () -> "Wake lock expired " + (now - expiry) + - " ms ago"); - } - WakeLock oldWakeLock = wakeLock; - wakeLock = powerManager.newWakeLock(levelAndFlags, tag); - wakeLock.setReferenceCounted(false); - wakeLock.acquire(durationMs + safetyMarginMs); - oldWakeLock.release(); - future = scheduledExecutorService.schedule(this::renew, durationMs, - MILLISECONDS); - acquired = now; - } - } - - @Override - public void release() { - synchronized (lock) { - refCount--; - if (refCount == 0) { - info(LOG, () -> "Releasing wake lock " + tag); - requireNonNull(future).cancel(false); - future = null; - requireNonNull(wakeLock).release(); - wakeLock = null; - acquired = 0; - } else { - trace(LOG, () -> "Wake lock " + tag + " has " + refCount + - " holders"); - } - } - } -} - diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/SharedWakeLock.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/SharedWakeLock.java deleted file mode 100644 index 92613288c4ab3ec2bd5ba2b990a4a5b49c813922..0000000000000000000000000000000000000000 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/SharedWakeLock.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.system; - -interface SharedWakeLock { - - /** - * Acquires the wake lock. This increments the wake lock's reference count, - * so unlike {@link AndroidWakeLock#acquire()} every call to this method - * must be followed by a balancing call to {@link #release()}. - */ - void acquire(); - - /** - * Releases the wake lock. This decrements the wake lock's reference count, - * so unlike {@link AndroidWakeLock#release()} every call to this method - * must follow a balancing call to {@link #acquire()}. - */ - void release(); - -} diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt index f76410529e95f78ff31eb806379c7ef970d8dff2..2e3c5c404dd4c0e538867952ef785b5b0083e6b8 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt +++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt @@ -19,23 +19,23 @@ package org.briarproject.mailbox.core.tor -import android.annotation.SuppressLint +import android.app.Application import android.content.Context -import android.content.res.Resources import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.flow.StateFlow +import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManager import org.briarproject.mailbox.core.event.EventBus +import org.briarproject.mailbox.core.event.EventExecutor import org.briarproject.mailbox.core.lifecycle.IoExecutor import org.briarproject.mailbox.core.lifecycle.LifecycleManager +import org.briarproject.mailbox.core.lifecycle.ServiceException import org.briarproject.mailbox.core.server.WebServerManager import org.briarproject.mailbox.core.settings.SettingsManager -import org.briarproject.mailbox.core.system.AndroidWakeLockManager -import org.briarproject.mailbox.core.system.Clock import org.briarproject.mailbox.core.system.LocationUtils -import org.briarproject.mailbox.core.system.ResourceProvider +import org.briarproject.onionwrapper.CircumventionProvider import org.slf4j.Logger import org.slf4j.LoggerFactory.getLogger import java.util.concurrent.Executor @@ -49,48 +49,55 @@ internal class AndroidTorModule { private val LOG: Logger = getLogger(AndroidTorModule::class.java) } - @Provides - @Singleton - fun provideResourceProvider(@ApplicationContext ctx: Context): ResourceProvider { - return ResourceProvider { name, _ -> - val res: Resources = ctx.resources - // extension is ignored on Android, resources are retrieved without it - @SuppressLint("DiscouragedApi") // we really want this API, don't know name before - val resId = res.getIdentifier(name, "raw", ctx.packageName) - res.openRawResource(resId) - } - } - @Provides @Singleton fun provideAndroidTorPlugin( - @ApplicationContext app: Context, + app: Application, @IoExecutor ioExecutor: Executor, + @EventExecutor eventExecutor: Executor, settingsManager: SettingsManager, networkManager: NetworkManager, locationUtils: LocationUtils, - clock: Clock, - resourceProvider: ResourceProvider, circumventionProvider: CircumventionProvider, androidWakeLockManager: AndroidWakeLockManager, lifecycleManager: LifecycleManager, eventBus: EventBus, webServerManager: WebServerManager, - ): TorPlugin = AndroidTorPlugin( - ioExecutor, - app, - settingsManager, - networkManager, - locationUtils, - clock, - resourceProvider, - circumventionProvider, - androidWakeLockManager, - architecture, - app.getDir("tor", Context.MODE_PRIVATE) - ) { webServerManager.port }.also { - lifecycleManager.registerService(it) - eventBus.addListener(it) + ): TorPlugin { + if (architecture == null) { + return object : TorPlugin { + + override fun startService() { + throw ServiceException("Tor not supported on this architecture") + } + + override fun stopService() { + } + + override fun getState(): StateFlow<TorPluginState> { + throw UnsupportedOperationException() + } + + override fun getHiddenServiceAddress(): String { + throw UnsupportedOperationException() + } + } + } + return AndroidTorPlugin( + ioExecutor, + eventExecutor, + app, + settingsManager, + networkManager, + locationUtils, + circumventionProvider, + androidWakeLockManager, + architecture, + app.getDir("tor", Context.MODE_PRIVATE) + ) { webServerManager.port }.also { + lifecycleManager.registerService(it) + eventBus.addListener(it) + } } private val architecture: String? diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java index 95ab9f408488b422bd84e743b120beb7a8a9b7de..29f88d530931c5ab9dc836414d91841135b19653 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java +++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java @@ -19,225 +19,47 @@ package org.briarproject.mailbox.core.tor; +import android.app.Application; import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; import android.os.Build; +import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLock; +import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManager; import org.briarproject.mailbox.core.settings.SettingsManager; -import org.briarproject.mailbox.core.system.AndroidWakeLock; -import org.briarproject.mailbox.core.system.AndroidWakeLockManager; -import org.briarproject.mailbox.core.system.Clock; import org.briarproject.mailbox.core.system.LocationUtils; -import org.briarproject.mailbox.core.system.ResourceProvider; -import org.slf4j.Logger; +import org.briarproject.onionwrapper.AndroidTorWrapper; +import org.briarproject.onionwrapper.CircumventionProvider; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Locale; import java.util.concurrent.Executor; import java.util.function.IntSupplier; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -import javax.annotation.Nullable; - -import androidx.annotation.ChecksSdkIntAtLeast; import static android.os.Build.VERSION.SDK_INT; import static java.util.Arrays.asList; -import static org.briarproject.mailbox.core.util.LogUtils.info; -import static org.slf4j.LoggerFactory.getLogger; +import static org.briarproject.mailbox.core.tor.TorConstants.CONTROL_PORT; +import static org.briarproject.mailbox.core.tor.TorConstants.SOCKS_PORT; public class AndroidTorPlugin extends AbstractTorPlugin { - private static final List<String> LIBRARY_ARCHITECTURES = - asList("armeabi-v7a", "arm64-v8a", "x86", "x86_64"); - - private static final String TOR_LIB_NAME = "libtor.so"; - private static final String OBFS4_LIB_NAME = "libobfs4proxy.so"; - private static final String SNOWFLAKE_LIB_NAME = "libsnowflake.so"; - - private static final Logger LOG = getLogger(AndroidTorPlugin.class); - - private final Context ctx; - private final AndroidWakeLock wakeLock; - private final File torLib, obfs4Lib, snowflakeLib; - AndroidTorPlugin(Executor ioExecutor, - Context ctx, + Executor eventExecutor, + Application app, SettingsManager settingsManager, NetworkManager networkManager, LocationUtils locationUtils, - Clock clock, - ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, AndroidWakeLockManager wakeLockManager, - @Nullable String architecture, + String architecture, File torDirectory, IntSupplier portSupplier) { - super(ioExecutor, settingsManager, networkManager, locationUtils, clock, - resourceProvider, circumventionProvider, architecture, - torDirectory, portSupplier); - this.ctx = ctx; - wakeLock = wakeLockManager.createWakeLock("TorPlugin"); - String nativeLibDir = ctx.getApplicationInfo().nativeLibraryDir; - torLib = new File(nativeLibDir, TOR_LIB_NAME); - obfs4Lib = new File(nativeLibDir, OBFS4_LIB_NAME); - snowflakeLib = new File(nativeLibDir, SNOWFLAKE_LIB_NAME); - } - - @Override - protected int getProcessId() { - return android.os.Process.myPid(); - } - - @Override - protected long getLastUpdateTime() { - try { - PackageManager pm = ctx.getPackageManager(); - PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), 0); - return pi.lastUpdateTime; - } catch (NameNotFoundException e) { - throw new AssertionError(e); - } - } - - @Override - protected void enableNetwork(boolean enable) throws IOException { - if (enable) wakeLock.acquire(); - super.enableNetwork(enable); - if (!enable) wakeLock.release(); - } - - @Override - @ChecksSdkIntAtLeast(api = 25) - protected boolean canVerifyLetsEncryptCerts() { - return SDK_INT >= 25; - } - - @Override - public void stopService() { - super.stopService(); - wakeLock.release(); - } - - @Override - protected File getTorExecutableFile() { - return torLib.exists() ? torLib : super.getTorExecutableFile(); - } - - @Override - protected File getObfs4ExecutableFile() { - return obfs4Lib.exists() ? obfs4Lib : super.getObfs4ExecutableFile(); - } - - @Override - protected File getSnowflakeExecutableFile() { - return snowflakeLib.exists() - ? snowflakeLib : super.getSnowflakeExecutableFile(); - } - - @Override - protected void installTorExecutable() throws IOException { - installExecutable(super.getTorExecutableFile(), torLib, TOR_LIB_NAME); - } - - @Override - protected void installObfs4Executable() throws IOException { - installExecutable(super.getObfs4ExecutableFile(), obfs4Lib, - OBFS4_LIB_NAME); - } - - @Override - protected void installSnowflakeExecutable() throws IOException { - installExecutable(super.getSnowflakeExecutableFile(), snowflakeLib, - SNOWFLAKE_LIB_NAME); - } - - private void installExecutable(File extracted, File lib, String libName) - throws IOException { - if (lib.exists()) { - // If an older version left behind a binary, delete it - if (extracted.exists()) { - if (extracted.delete()) LOG.info("Deleted old binary"); - else LOG.info("Failed to delete old binary"); - } - } else if (SDK_INT < 29) { - // The binary wasn't extracted at install time. Try to extract it - extractLibraryFromApk(libName, extracted); - } else { - // No point extracting the binary, we won't be allowed to execute it - throw new FileNotFoundException(lib.getAbsolutePath()); - } - } - - private void extractLibraryFromApk(String libName, File dest) - throws IOException { - File sourceDir = new File(ctx.getApplicationInfo().sourceDir); - if (sourceDir.isFile()) { - // Look for other APK files in the same directory, if we're allowed - File parent = sourceDir.getParentFile(); - if (parent != null) sourceDir = parent; - } - List<String> libPaths = getSupportedLibraryPaths(libName); - for (File apk : findApkFiles(sourceDir)) { - ZipInputStream zin = new ZipInputStream(new FileInputStream(apk)); - for (ZipEntry e = zin.getNextEntry(); e != null; - e = zin.getNextEntry()) { - if (libPaths.contains(e.getName())) { - String ex = e.getName(); - info(LOG, () -> "Extracting " + ex + " from " + - apk.getAbsolutePath()); - extract(zin, dest); // Zip input stream will be closed - return; - } - } - zin.close(); - } - throw new FileNotFoundException(libName); - } - - /** - * Returns all files with the extension .apk or .APK under the given root. - */ - private List<File> findApkFiles(File root) { - List<File> files = new ArrayList<>(); - findApkFiles(root, files); - return files; - } - - private void findApkFiles(File f, List<File> files) { - if (f.isFile() && - f.getName().toLowerCase(Locale.ROOT).endsWith(".apk")) { - files.add(f); - } else if (f.isDirectory()) { - File[] children = f.listFiles(); - if (children != null) { - for (File child : children) findApkFiles(child, files); - } - } - } - - /** - * Returns the paths at which libraries with the given name would be found - * inside an APK file, for all architectures supported by the device, in - * order of preference. - */ - private List<String> getSupportedLibraryPaths(String libName) { - List<String> architectures = new ArrayList<>(); - for (String abi : getSupportedArchitectures()) { - if (LIBRARY_ARCHITECTURES.contains(abi)) { - architectures.add("lib/" + abi + "/" + libName); - } - } - return architectures; + super(ioExecutor, settingsManager, networkManager, locationUtils, + circumventionProvider, portSupplier, SDK_INT >= 25, + new AndroidTorWrapper(app, wakeLockManager, ioExecutor, + eventExecutor, architecture, torDirectory, SOCKS_PORT, + CONTROL_PORT)); } static Collection<String> getSupportedArchitectures() { diff --git a/mailbox-core/build.gradle b/mailbox-core/build.gradle index c9d66e768cb1815d2d74c7fc3b19ec1e1f5b59d6..b4903ecc0391081b2581afb95ba1c070a2e9c4cc 100644 --- a/mailbox-core/build.gradle +++ b/mailbox-core/build.gradle @@ -19,13 +19,14 @@ dependencies { api 'com.google.code.findbugs:jsr305:3.0.2' api 'javax.inject:javax.inject:1' // required for @Qualifier in @Wakeful api 'org.briarproject:null-safety:0.1' + api "org.slf4j:slf4j-api:2.0.6" + api "org.briarproject:onionwrapper-core:$onionwrapper_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" // used by jackson implementation "com.google.dagger:hilt-core:$hilt_version" kapt "com.google.dagger:dagger-compiler:$hilt_version" - implementation 'org.briarproject:jtorctl:0.5' - def ktor_version = '2.2.3' implementation "io.ktor:ktor-server-core:$ktor_version" implementation "io.ktor:ktor-server-netty:$ktor_version" @@ -40,7 +41,6 @@ dependencies { implementation('com.fasterxml.jackson.module:jackson-module-kotlin') { version { strictly "$jackson_version" } } - api "org.slf4j:slf4j-api:2.0.6" //noinspection GradleDependency implementation 'com.h2database:h2:1.4.192' // The last version that supports Java 1.6 diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/CoreModule.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/CoreModule.kt index 7b123f5042d3562301e0b99451d2382639b6f8df..8937ec439d39039d3a3964c7ff1f16794d69d667 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/CoreModule.kt +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/CoreModule.kt @@ -32,6 +32,7 @@ import org.briarproject.mailbox.core.settings.SettingsModule import org.briarproject.mailbox.core.setup.SetupModule import org.briarproject.mailbox.core.system.Clock import org.briarproject.mailbox.core.tor.TorModule +import org.briarproject.onionwrapper.CircumventionModule import javax.inject.Singleton @Module( @@ -44,6 +45,7 @@ import javax.inject.Singleton WebServerModule::class, SettingsModule::class, TorModule::class, + CircumventionModule::class, ] ) @InstallIn(SingletonComponent::class) diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/ResourceProvider.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/ResourceProvider.java deleted file mode 100644 index dad5768b0ce7f5d98ae80c5d20e6b4e91baa1d20..0000000000000000000000000000000000000000 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/ResourceProvider.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.system; - -import java.io.InputStream; - -public interface ResourceProvider { - - InputStream getResourceInputStream(String name, String extension); -} diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java index 88166a3f30312a09cd32fbf5ff82f0f8b0a0bef8..e0eaea61b94e7ef7c647e917db2b2fa3c6b3e002 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java @@ -19,10 +19,6 @@ package org.briarproject.mailbox.core.tor; -import net.freehaven.tor.control.EventHandler; -import net.freehaven.tor.control.TorControlConnection; -import net.freehaven.tor.control.TorNotRunningException; - import org.briarproject.mailbox.core.PoliteExecutor; import org.briarproject.mailbox.core.db.DbException; import org.briarproject.mailbox.core.event.Event; @@ -31,33 +27,23 @@ import org.briarproject.mailbox.core.lifecycle.IoExecutor; import org.briarproject.mailbox.core.lifecycle.ServiceException; import org.briarproject.mailbox.core.settings.Settings; import org.briarproject.mailbox.core.settings.SettingsManager; -import org.briarproject.mailbox.core.system.Clock; import org.briarproject.mailbox.core.system.LocationUtils; -import org.briarproject.mailbox.core.system.ResourceProvider; -import org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType; +import org.briarproject.onionwrapper.CircumventionProvider; +import org.briarproject.onionwrapper.CircumventionProvider.BridgeType; +import org.briarproject.onionwrapper.TorWrapper; +import org.briarproject.onionwrapper.TorWrapper.HiddenServiceProperties; +import org.briarproject.onionwrapper.TorWrapper.Observer; +import org.briarproject.onionwrapper.TorWrapper.TorState; import org.slf4j.Logger; -import java.io.ByteArrayInputStream; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; -import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import java.util.Map; -import java.util.Scanner; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.IntSupplier; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; @@ -67,44 +53,21 @@ import kotlinx.coroutines.flow.StateFlow; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; -import static java.util.Collections.singletonMap; import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow; -import static net.freehaven.tor.control.TorControlCommands.HS_ADDRESS; -import static net.freehaven.tor.control.TorControlCommands.HS_PRIVKEY; -import static org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType.MEEK; -import static org.briarproject.mailbox.core.tor.TorConstants.CONTROL_PORT; import static org.briarproject.mailbox.core.tor.TorConstants.HS_ADDRESS_V3; import static org.briarproject.mailbox.core.tor.TorConstants.HS_PRIVATE_KEY_V3; import static org.briarproject.mailbox.core.tor.TorConstants.SETTINGS_NAMESPACE; -import static org.briarproject.mailbox.core.tor.TorConstants.SOCKS_PORT; -import static org.briarproject.mailbox.core.util.IoUtils.copyAndClose; -import static org.briarproject.mailbox.core.util.IoUtils.tryToClose; import static org.briarproject.mailbox.core.util.LogUtils.info; import static org.briarproject.mailbox.core.util.LogUtils.logException; -import static org.briarproject.mailbox.core.util.LogUtils.warn; import static org.briarproject.mailbox.core.util.PrivacyUtils.scrubOnion; -import static org.briarproject.nullsafety.NullSafety.requireNonNull; +import static org.briarproject.onionwrapper.CircumventionProvider.BridgeType.MEEK; +import static org.briarproject.onionwrapper.CircumventionProvider.BridgeType.SNOWFLAKE; import static org.slf4j.LoggerFactory.getLogger; -public abstract class AbstractTorPlugin - implements TorPlugin, EventHandler, EventListener { +public abstract class AbstractTorPlugin implements TorPlugin, EventListener { private static final Logger LOG = getLogger(AbstractTorPlugin.class); - private static final String[] EVENTS = { - "CIRC", - "ORCONN", - "STATUS_GENERAL", - "STATUS_CLIENT", - "HS_DESC", - "NOTICE", - "WARN", - "ERR" - }; - private static final String OWNER = "__OwningControllerProcess"; - private static final int COOKIE_TIMEOUT_MS = 3000; - private static final int COOKIE_POLLING_INTERVAL_MS = 200; /** * The number of uploads of our onion service descriptor we wait for * before we consider our onion service to be published. @@ -112,162 +75,80 @@ public abstract class AbstractTorPlugin * but this might be a reasonable heuristic. */ private static final int HS_DESC_UPLOADS = 1; - private final Pattern bootstrapPattern = - Pattern.compile("^Bootstrapped (\\d{1,3})%.*$"); - private final Pattern clockSkewPattern = Pattern.compile("CLOCK_SKEW"); private final Executor ioExecutor; private final Executor connectionStatusExecutor; private final SettingsManager settingsManager; private final NetworkManager networkManager; private final LocationUtils locationUtils; - private final Clock clock; - @Nullable - private final String architecture; private final CircumventionProvider circumventionProvider; - private final ResourceProvider resourceProvider; - private final File torDirectory, configFile; - private final File doneFile, cookieFile; private final IntSupplier portSupplier; + private final boolean canVerifyLetsEncryptCerts; + private final TorWrapper tor; private final AtomicBoolean used = new AtomicBoolean(false); protected final PluginState state = new PluginState(); - private volatile Socket controlSocket = null; - private volatile TorControlConnection controlConnection = null; - - protected abstract int getProcessId(); - - protected abstract long getLastUpdateTime(); - AbstractTorPlugin(Executor ioExecutor, SettingsManager settingsManager, NetworkManager networkManager, LocationUtils locationUtils, - Clock clock, - ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, - @Nullable String architecture, - File torDirectory, - IntSupplier portSupplier) { + IntSupplier portSupplier, + boolean canVerifyLetsEncryptCerts, + TorWrapper tor) { this.ioExecutor = ioExecutor; this.settingsManager = settingsManager; this.networkManager = networkManager; this.locationUtils = locationUtils; - this.clock = clock; - this.resourceProvider = resourceProvider; this.circumventionProvider = circumventionProvider; - this.architecture = architecture; - this.torDirectory = torDirectory; - configFile = new File(torDirectory, "torrc"); - doneFile = new File(torDirectory, "done"); - cookieFile = new File(torDirectory, ".tor/control_auth_cookie"); this.portSupplier = portSupplier; + this.canVerifyLetsEncryptCerts = canVerifyLetsEncryptCerts; + this.tor = tor; // Don't execute more than one connection status check at a time connectionStatusExecutor = new PoliteExecutor("TorPlugin", ioExecutor, 1); - } + tor.setObserver(new Observer() { - protected File getTorExecutableFile() { - return new File(torDirectory, "tor"); - } + @Override + public void onState(@Nonnull TorState s) { + state.onStateChanged(s); + } - protected File getObfs4ExecutableFile() { - return new File(torDirectory, "obfs4proxy"); - } + @Override + public void onBootstrapPercentage(int percentage) { + state.setBootstrapPercent(percentage); + } + + @Override + public void onHsDescriptorUpload(@Nonnull String onion) { + state.onServiceDescriptorUploaded(); + } - protected File getSnowflakeExecutableFile() { - return new File(torDirectory, "snowflake"); + @Override + public void onClockSkewDetected(long skewSeconds) { + state.onClockSkewDetected(); + } + }); } - public StateFlow<TorState> getState() { + public StateFlow<TorPluginState> getState() { return state.state; } @Override public void startService() throws ServiceException { if (used.getAndSet(true)) throw new IllegalStateException(); - if (!torDirectory.exists()) { - if (!torDirectory.mkdirs()) { - LOG.warn("Could not create Tor directory."); - throw new ServiceException(); - } - } + // Start Tor try { - // Install or update the assets if necessary - if (!assetsAreUpToDate()) installAssets(); - // Start from the default config every time - extract(getConfigInputStream(), configFile); - } catch (IOException e) { - throw new ServiceException(e); - } - if (cookieFile.exists() && !cookieFile.delete()) - LOG.warn("Old auth cookie not deleted"); - // Start a new Tor process - LOG.info("Starting Tor"); - File torFile = getTorExecutableFile(); - String torPath = torFile.getAbsolutePath(); - String configPath = configFile.getAbsolutePath(); - String pid = String.valueOf(getProcessId()); - Process torProcess; - ProcessBuilder pb = - new ProcessBuilder(torPath, "-f", configPath, OWNER, pid); - Map<String, String> env = pb.environment(); - env.put("HOME", torDirectory.getAbsolutePath()); - pb.directory(torDirectory); - pb.redirectErrorStream(true); - try { - torProcess = pb.start(); - } catch (SecurityException | IOException e) { - throw new ServiceException(e); - } - try { - // Wait for the Tor process to start - waitForTorToStart(torProcess); - // Wait for the auth cookie file to be created/updated - long start = clock.currentTimeMillis(); - while (cookieFile.length() < 32) { - if (clock.currentTimeMillis() - start > COOKIE_TIMEOUT_MS) { - LOG.warn("Auth cookie not created"); - if (LOG.isInfoEnabled()) listFiles(torDirectory); - throw new ServiceException(); - } - //noinspection BusyWait - Thread.sleep(COOKIE_POLLING_INTERVAL_MS); - } - LOG.info("Auth cookie created"); + tor.start(); } catch (InterruptedException e) { LOG.warn("Interrupted while starting Tor"); Thread.currentThread().interrupt(); - throw new ServiceException(); - } - try { - // Open a control connection and authenticate using the cookie file - controlSocket = new Socket("127.0.0.1", CONTROL_PORT); - controlConnection = new TorControlConnection(controlSocket); - controlConnection.authenticate(read(cookieFile)); - // Tell Tor to exit when the control connection is closed - controlConnection.takeOwnership(); - controlConnection.resetConf(singletonList(OWNER)); - // Register to receive events from the Tor process - controlConnection.setEventHandler(this); - controlConnection.setEvents(asList(EVENTS)); - // Check whether Tor has already bootstrapped - String info = controlConnection.getInfo("status/bootstrap-phase"); - if (info != null && info.contains("PROGRESS=100")) { - LOG.info("Tor has already bootstrapped"); - state.setBootstrapPercent(100); - } - // Check whether Tor has already built a circuit - info = controlConnection.getInfo("status/circuit-established"); - if ("1".equals(info)) { - LOG.info("Tor has already built a circuit"); - state.setCircuitBuilt(true); - } + throw new ServiceException(e); } catch (IOException e) { throw new ServiceException(e); } - state.setStarted(); // Check whether we're online updateConnectionStatus(networkManager.getNetworkStatus()); // Create a hidden service if necessary @@ -279,138 +160,13 @@ public abstract class AbstractTorPlugin throw new AssertionError(e); } info(LOG, () -> "Binding hidden service to port: " + port); - publishHiddenService(String.valueOf(port)); + publishHiddenService(port); }); } - private boolean assetsAreUpToDate() { - return doneFile.lastModified() > getLastUpdateTime(); - } - - private void installAssets() throws ServiceException { - if (architecture == null) - throw new ServiceException( - "Tor not supported on this architecture"); - try { - // The done file may already exist from a previous installation - //noinspection ResultOfMethodCallIgnored - doneFile.delete(); - installTorExecutable(); - installObfs4Executable(); - installSnowflakeExecutable(); - if (!doneFile.createNewFile()) - LOG.warn("Failed to create done file"); - } catch (IOException e) { - throw new ServiceException(e); - } - } - - protected void extract(InputStream in, File dest) throws IOException { - @SuppressWarnings("IOStreamConstructor") // not in Java 6 minSdk 16 - OutputStream out = new FileOutputStream(dest); - copyAndClose(in, out); - } - - protected void installTorExecutable() throws IOException { - info(LOG, () -> "Installing Tor binary for " + architecture); - File torFile = getTorExecutableFile(); - extract(getExecutableInputStream("tor"), torFile); - if (!torFile.setExecutable(true, true)) throw new IOException(); - } - - protected void installObfs4Executable() throws IOException { - info(LOG, () -> "Installing obfs4proxy binary for " + architecture); - File obfs4File = getObfs4ExecutableFile(); - extract(getExecutableInputStream("obfs4proxy"), obfs4File); - if (!obfs4File.setExecutable(true, true)) throw new IOException(); - } - protected void installSnowflakeExecutable() throws IOException { - info(LOG, () -> "Installing snowflake binary for " + architecture); - File snowflakeFile = getSnowflakeExecutableFile(); - extract(getExecutableInputStream("snowflake"), snowflakeFile); - if (!snowflakeFile.setExecutable(true, true)) throw new IOException(); - } - - private InputStream getExecutableInputStream(String basename) { - String ext = ""; - return requireNonNull(resourceProvider - .getResourceInputStream(architecture + "/" + basename, ext)); - } - - private static void append(StringBuilder strb, String name, Object value) { - strb.append(name); - strb.append(" "); - strb.append(value); - strb.append("\n"); - } - - private InputStream getConfigInputStream() { - File dataDirectory = new File(torDirectory, ".tor"); - StringBuilder strb = new StringBuilder(); - append(strb, "ControlPort", CONTROL_PORT); - append(strb, "CookieAuthentication", 1); - append(strb, "DataDirectory", dataDirectory.getAbsolutePath()); - append(strb, "DisableNetwork", 1); - append(strb, "RunAsDaemon", 1); - append(strb, "SafeSocks", 1); - append(strb, "SocksPort", SOCKS_PORT); - strb.append("GeoIPFile\n"); - strb.append("GeoIPv6File\n"); - append(strb, "ConnectionPadding", 0); - String obfs4Path = getObfs4ExecutableFile().getAbsolutePath(); - append(strb, "ClientTransportPlugin obfs4 exec", obfs4Path); - append(strb, "ClientTransportPlugin meek_lite exec", obfs4Path); - String snowflakePath = getSnowflakeExecutableFile().getAbsolutePath(); - append(strb, "ClientTransportPlugin snowflake exec", snowflakePath); - //noinspection CharsetObjectCanBeUsed - return new ByteArrayInputStream( - strb.toString().getBytes(Charset.forName("UTF-8"))); - } - - private void listFiles(File f) { - if (f.isDirectory()) { - File[] children = f.listFiles(); - if (children != null) for (File child : children) listFiles(child); - } else { - LOG.info(f.getAbsolutePath() + " " + f.length()); - } - } - - private byte[] read(File f) throws IOException { - byte[] b = new byte[(int) f.length()]; - FileInputStream in = new FileInputStream(f); - try { - int offset = 0; - while (offset < b.length) { - int read = in.read(b, offset, b.length - offset); - if (read == -1) throw new EOFException(); - offset += read; - } - return b; - } finally { - tryToClose(in, LOG); - } - } - - protected void waitForTorToStart(Process torProcess) - throws InterruptedException, ServiceException { - Scanner stdout = new Scanner(torProcess.getInputStream()); - // Log the first line of stdout (contains Tor and library versions) - if (stdout.hasNextLine()) LOG.info(stdout.nextLine()); - // Read the process's stdout (and redirected stderr) until it detaches - while (stdout.hasNextLine()) stdout.nextLine(); - stdout.close(); - // Wait for the process to detach or exit - int exit = torProcess.waitFor(); - if (exit != 0) { - warn(LOG, () -> "Tor exited with value " + exit); - throw new ServiceException(); - } - } - @IoExecutor - private void publishHiddenService(String port) { - if (!state.isTorRunning()) return; + private void publishHiddenService(int port) { + if (!tor.isTorRunning()) return; Settings s; try { @@ -424,39 +180,21 @@ public abstract class AbstractTorPlugin } @IoExecutor - private void createV3HiddenService(String port, @Nullable String privKey) { + private void createV3HiddenService(int port, @Nullable String privKey) { LOG.info("Creating v3 hidden service"); - Map<Integer, String> portLines = singletonMap(80, "127.0.0.1:" + port); - Map<String, String> response; + HiddenServiceProperties hsProps; try { - // Use the control connection to set up the hidden service - if (privKey == null) { - response = controlConnection.addOnion("NEW:ED25519-V3", - portLines, null); - } else { - response = controlConnection.addOnion(privKey, portLines); - } - } catch (TorNotRunningException e) { - throw new RuntimeException(e); + hsProps = tor.publishHiddenService(port, 80, privKey); } catch (IOException e) { logException(LOG, e, "Error while add onion service"); return; } - if (!response.containsKey(HS_ADDRESS)) { - LOG.warn("Tor did not return a hidden service address"); - return; - } - if (privKey == null && !response.containsKey(HS_PRIVKEY)) { - LOG.warn("Tor did not return a private key"); - return; - } - Settings s = new Settings(); - String onion3 = response.get(HS_ADDRESS); - s.put(HS_ADDRESS_V3, onion3); - info(LOG, () -> "V3 hidden service " + scrubOnion(onion3)); + info(LOG, () -> "V3 hidden service " + scrubOnion(hsProps.onion)); if (privKey == null) { - s.put(HS_PRIVATE_KEY_V3, response.get(HS_PRIVKEY)); + Settings s = new Settings(); + s.put(HS_ADDRESS_V3, hsProps.onion); + s.put(HS_PRIVATE_KEY_V3, hsProps.privKey); try { settingsManager.mergeSettings(s, SETTINGS_NAMESPACE); } catch (DbException e) { @@ -471,166 +209,27 @@ public abstract class AbstractTorPlugin return s.get(HS_ADDRESS_V3); } - protected void enableNetwork(boolean enable) throws IOException { - if (!state.enableNetwork(enable)) return; // Unchanged - controlConnection.setConf("DisableNetwork", enable ? "0" : "1"); - } - private void enableBridges(List<BridgeType> bridgeTypes, String countryCode) throws IOException { - if (!state.setBridgeTypes(bridgeTypes)) return; // Unchanged if (bridgeTypes.isEmpty()) { - controlConnection.setConf("UseBridges", "0"); - controlConnection.resetConf(singletonList("Bridge")); + tor.disableBridges(); } else { - Collection<String> conf = new ArrayList<>(); - conf.add("UseBridges 1"); - boolean letsEncrypt = canVerifyLetsEncryptCerts(); + List<String> bridges = new ArrayList<>(); for (BridgeType bridgeType : bridgeTypes) { - conf.addAll(circumventionProvider - .getBridges(bridgeType, countryCode, letsEncrypt)); + bridges.addAll(circumventionProvider.getBridges(bridgeType, + countryCode, canVerifyLetsEncryptCerts)); } - controlConnection.setConf(conf); + tor.enableBridges(bridges); } } - /** - * Returns true if this device can verify Let's Encrypt certificates signed - * with the IdentTrust DST Root X3 certificate, which expired at the end of - * September 2021. - */ - protected boolean canVerifyLetsEncryptCerts() { - return true; - } - @Override public void stopService() { - state.setStopped(); - if (controlSocket != null && controlConnection != null) { - try { - LOG.info("Stopping Tor"); - controlConnection.shutdownTor("TERM"); - controlSocket.close(); - } catch (IOException e) { - logException(LOG, e, - "Error while sending tor shutdown instructions"); - } - } - } - - @Override - public void circuitStatus(String status, String id, String path) { - // In case of races between receiving CIRCUIT_ESTABLISHED and setting - // DisableNetwork, set our circuitBuilt flag if not already set - if (status.equals("BUILT") && state.setCircuitBuilt(true)) { - LOG.info("Circuit built"); - } - } - - @Override - public void streamStatus(String status, String id, String target) { - } - - @Override - public void orConnStatus(String status, String orName) { - info(LOG, () -> "OR connection " + status); - - if (status.equals("CONNECTED")) state.onOrConnectionConnected(); - else if (status.equals("CLOSED")) state.onOrConnectionClosed(); - } - - @Override - public void bandwidthUsed(long read, long written) { - } - - @Override - public void newDescriptors(List<String> orList) { - } - - @Override - public void message(String severity, String msg) { - info(LOG, () -> severity + " " + msg); - if (severity.equals("NOTICE")) { - Matcher matcher = bootstrapPattern.matcher(msg); - if (matcher.matches()) { - String percentStr = matcher.group(1); - int percent = Integer.parseInt(percentStr); - state.setBootstrapPercent(percent); - } - } else if (severity.equals("WARN")) { - Matcher matcher = clockSkewPattern.matcher(msg); - if (matcher.find()) state.setClockSkewed(); - } - } - - @Override - public void unrecognized(String type, String msg) { - if (type.equals("STATUS_CLIENT")) { - handleClientStatus(removeSeverity(msg)); - } else if (type.equals("STATUS_GENERAL")) { - handleGeneralStatus(removeSeverity(msg)); - } else if (type.equals("HS_DESC") && msg.startsWith("UPLOADED")) { - LOG.info("V3 descriptor uploaded"); - state.onServiceDescriptorUploaded(); - } - } - - private String removeSeverity(String msg) { - return msg.replaceFirst("[^ ]+ ", ""); - } - - private void handleClientStatus(String msg) { - if (msg.startsWith("BOOTSTRAP PROGRESS=100")) { - LOG.info("Bootstrapped"); - state.setBootstrapPercent(100); - } else if (msg.startsWith("CIRCUIT_ESTABLISHED")) { - if (state.setCircuitBuilt(true)) { - LOG.info("Circuit built"); - } - } else if (msg.startsWith("CIRCUIT_NOT_ESTABLISHED")) { - if (state.setCircuitBuilt(false)) { - LOG.info("Circuit not built"); - // TODO: Disable and re-enable network to prompt Tor to rebuild - // its guard/bridge connections? This will also close any - // established circuits, which might still be functioning - } - } - } - - private void handleGeneralStatus(String msg) { - if (msg.startsWith("CLOCK_JUMPED")) { - Long time = parseLongArgument(msg, "TIME"); - if (time != null) { - warn(LOG, () -> "Clock jumped " + time + " seconds"); - } - } else if (msg.startsWith("CLOCK_SKEW")) { - Long skew = parseLongArgument(msg, "SKEW"); - if (skew != null) { - warn(LOG, () -> "Clock is skewed by " + skew + " seconds"); - } - } - } - - @Nullable - private Long parseLongArgument(String msg, String argName) { - String[] args = msg.split(" "); - for (String arg : args) { - if (arg.startsWith(argName + "=")) { - try { - return Long.parseLong(arg.substring(argName.length() + 1)); - } catch (NumberFormatException e) { - break; - } - } - } - warn(LOG, () -> "Failed to parse " + argName + " from '" + msg + "'"); - return null; - } - - @Override - public void controlConnectionClosed() { - if (state.isTorRunning()) { - throw new RuntimeException("Control connection closed"); + try { + tor.stop(); + } catch (IOException e) { + logException(LOG, e, + "Error while sending tor shutdown instructions"); } } @@ -643,7 +242,7 @@ public abstract class AbstractTorPlugin private void updateConnectionStatus(NetworkStatus status) { connectionStatusExecutor.execute(() -> { - if (!state.isTorRunning()) return; + if (!tor.isTorRunning()) return; boolean online = status.isConnected(); boolean wifi = status.isWifi(); boolean ipv6Only = status.isIpv6Only(); @@ -667,7 +266,7 @@ public abstract class AbstractTorPlugin enableNetwork = true; if (bridgesWork) { if (ipv6Only) { - bridgeTypes = singletonList(MEEK); + bridgeTypes = asList(MEEK, SNOWFLAKE); } else { bridgeTypes = circumventionProvider .getSuitableBridgeTypes(country); @@ -689,73 +288,27 @@ public abstract class AbstractTorPlugin try { if (enableNetwork) { enableBridges(bridgeTypes, country); - enableConnectionPadding(enableConnectionPadding); - enableIpv6(ipv6Only); + tor.enableConnectionPadding(enableConnectionPadding); + tor.enableIpv6(ipv6Only); } - enableNetwork(enableNetwork); + tor.enableNetwork(enableNetwork); } catch (IOException e) { logException(LOG, e, "Error enabling network"); } }); } - private void enableConnectionPadding(boolean enable) throws IOException { - if (!state.enableConnectionPadding(enable)) return; // Unchanged - try { - controlConnection.setConf("ConnectionPadding", enable ? "1" : "0"); - } catch (TorNotRunningException e) { - throw new RuntimeException(e); - } - } - - private void enableIpv6(boolean enable) throws IOException { - if (!state.enableIpv6(enable)) return; // Unchanged - try { - controlConnection.setConf("ClientUseIPv4", enable ? "0" : "1"); - controlConnection.setConf("ClientUseIPv6", enable ? "1" : "0"); - } catch (TorNotRunningException e) { - throw new RuntimeException(e); - } - } - @ThreadSafe - protected static class PluginState { - - private final MutableStateFlow<TorState> state = - MutableStateFlow(TorState.StartingStopping.INSTANCE); + private class PluginState { - @GuardedBy("this") - private boolean started = false, - stopped = false, - networkInitialised = false, - networkEnabled = false, - paddingEnabled = false, - ipv6Enabled = false, - circuitBuilt = false, - clockSkewed = false; - @GuardedBy("this") - private int bootstrapPercent = 0, numServiceUploads = 0; + private final MutableStateFlow<TorPluginState> state = + MutableStateFlow(TorPluginState.StartingStopping.INSTANCE); @GuardedBy("this") - private int orConnectionsConnected = 0; + private boolean clockSkewed = false; @GuardedBy("this") - private List<BridgeType> bridgeTypes = emptyList(); - - synchronized void setStarted() { - started = true; - state.setValue(getCurrentState()); - } - - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - synchronized boolean isTorRunning() { - return started && !stopped; - } - - synchronized void setStopped() { - stopped = true; - state.setValue(getCurrentState()); - } + private int bootstrapPercent = 0, numServiceUploads = 0; synchronized void setBootstrapPercent(int percent) { if (percent < 0 || percent > 100) { @@ -766,116 +319,43 @@ public abstract class AbstractTorPlugin state.setValue(getCurrentState()); } - synchronized void setClockSkewed() { + synchronized void onClockSkewDetected() { clockSkewed = true; state.setValue(getCurrentState()); } - /** - * Sets the `circuitBuilt` flag and returns true if the flag has - * changed. - */ - private synchronized boolean setCircuitBuilt(boolean built) { - if (built == circuitBuilt) return false; // Unchanged - circuitBuilt = built; - if (bootstrapPercent == 100) clockSkewed = false; - state.setValue(getCurrentState()); - return true; // Changed - } - synchronized void onServiceDescriptorUploaded() { numServiceUploads++; state.setValue(getCurrentState()); } - /** - * Sets the `networkEnabled` flag and returns true if the flag has - * changed. - */ - synchronized boolean enableNetwork(boolean enable) { - boolean wasInitialised = networkInitialised; - boolean wasEnabled = networkEnabled; - networkInitialised = true; - networkEnabled = enable; - if (!enable) circuitBuilt = false; - if (!wasInitialised || enable != wasEnabled) { - state.setValue(getCurrentState()); - } - return enable != wasEnabled; - } - - /** - * Sets the `paddingEnabled` flag and returns true if the flag has - * changed. Doesn't affect getState(). - */ - private synchronized boolean enableConnectionPadding(boolean enable) { - if (enable == paddingEnabled) return false; // Unchanged - paddingEnabled = enable; - return true; // Changed + synchronized void onStateChanged(TorState torState) { + state.setValue(getCurrentState(torState)); } - /** - * Sets the `ipv6Enabled` flag and returns true if the flag has - * changed. Doesn't affect getState(). - */ - private synchronized boolean enableIpv6(boolean enable) { - if (enable == ipv6Enabled) return false; // Unchanged - ipv6Enabled = enable; - return true; // Changed - } - - /** - * Sets the list of bridge types being used and returns true if the - * list has changed. The list is empty if bridges are disabled. - * Doesn't affect getState(). - */ - private synchronized boolean setBridgeTypes(List<BridgeType> types) { - if (types.equals(bridgeTypes)) return false; // Unchanged - bridgeTypes = types; - return true; // Changed - } - - private synchronized TorState getCurrentState() { - if (!started || stopped) { - return TorState.StartingStopping.INSTANCE; - } - if (!networkInitialised) { - return new TorState.Enabling(bootstrapPercent); - } - if (!networkEnabled) return TorState.Inactive.INSTANCE; - if (clockSkewed) return TorState.ClockSkewed.INSTANCE; - if (bootstrapPercent == 100 && circuitBuilt && - orConnectionsConnected > 0) { - return (numServiceUploads >= HS_DESC_UPLOADS) ? - TorState.Published.INSTANCE : TorState.Active.INSTANCE; - } else return new TorState.Enabling(bootstrapPercent); + private synchronized TorPluginState getCurrentState() { + return getCurrentState(tor.getTorState()); } - private synchronized void onOrConnectionConnected() { - int oldConnected = orConnectionsConnected; - orConnectionsConnected++; - logOrConnections(); - if (oldConnected == 0) state.setValue(getCurrentState()); - } - - private synchronized void onOrConnectionClosed() { - int oldConnected = orConnectionsConnected; - orConnectionsConnected--; - if (orConnectionsConnected < 0) { - LOG.warn("Count was zero before connection closed"); - orConnectionsConnected = 0; - } - logOrConnections(); - if (orConnectionsConnected == 0 && oldConnected != 0) { - state.setValue(getCurrentState()); + private synchronized TorPluginState getCurrentState(TorState torState) { + if (torState == TorState.STARTING_STOPPING) { + return TorPluginState.StartingStopping.INSTANCE; + } else if (torState == TorState.CONNECTING) { + return new TorPluginState.Enabling(bootstrapPercent); + } else if (torState == TorState.DISABLED) { + return TorPluginState.Inactive.INSTANCE; + } else if (torState == TorState.CONNECTED) { + if (clockSkewed) { + // TODO: Should we also report clock skew while connecting? + return TorPluginState.ClockSkewed.INSTANCE; + } else if (numServiceUploads >= HS_DESC_UPLOADS) { + return TorPluginState.Published.INSTANCE; + } else { + return TorPluginState.Active.INSTANCE; + } + } else { + throw new AssertionError(); } } - - @GuardedBy("this") - private void logOrConnections() { - info(LOG, () -> - orConnectionsConnected + " OR connections connected"); - } - } } diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/CircumventionProvider.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/CircumventionProvider.java deleted file mode 100644 index 1978eca5cbf42a7469848ad0afb71ceaf2cb963f..0000000000000000000000000000000000000000 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/CircumventionProvider.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.tor; - -import org.briarproject.mailbox.core.lifecycle.IoExecutor; -import org.briarproject.nullsafety.NotNullByDefault; - -import java.util.List; - -@NotNullByDefault -public interface CircumventionProvider { - - enum BridgeType { - DEFAULT_OBFS4, - NON_DEFAULT_OBFS4, - VANILLA, - MEEK, - SNOWFLAKE - } - - /** - * Countries where Tor is blocked, i.e. vanilla Tor connection won't work. - * <p> - * See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 - * and https://trac.torproject.org/projects/tor/wiki/doc/OONI/censorshipwiki - */ - String[] BLOCKED = {"BY", "CN", "EG", "IR", "RU", "TM", "VE"}; - - /** - * Countries where bridge connections are likely to work. - * Should be a subset of {@link #BLOCKED} and the union of - * {@link #DEFAULT_BRIDGES}, {@link #NON_DEFAULT_BRIDGES} and - * {@link #DPI_BRIDGES}. - */ - String[] BRIDGES = {"BY", "CN", "EG", "IR", "RU", "TM", "VE"}; - - /** - * Countries where default obfs4 or vanilla bridges are likely to work. - * Should be a subset of {@link #BRIDGES}. - */ - String[] DEFAULT_BRIDGES = {"EG", "VE"}; - - /** - * Countries where non-default obfs4 or vanilla bridges are likely to work. - * Should be a subset of {@link #BRIDGES}. - */ - String[] NON_DEFAULT_BRIDGES = {"BY", "RU"}; - - /** - * Countries where vanilla bridges are blocked via DPI but non-default - * obfs4 bridges, meek and snowflake may work. Should be a subset of - * {@link #BRIDGES}. - */ - String[] DPI_BRIDGES = {"CN", "IR", "TM"}; - - /** - * Returns true if bridge connections of some type work in the given - * country. - */ - boolean doBridgesWork(String countryCode); - - /** - * Returns the types of bridge connection that are suitable for the given - * country, or {@link #DEFAULT_BRIDGES} if no bridge type is known - * to work. - */ - List<BridgeType> getSuitableBridgeTypes(String countryCode); - - @IoExecutor - List<String> getBridges(BridgeType type, String countryCode, - boolean letsEncrypt); -} diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/CircumventionProviderImpl.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/CircumventionProviderImpl.java deleted file mode 100644 index 2f5d3261f0ed36b918a7ace18b4ae1b1b607d372..0000000000000000000000000000000000000000 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/CircumventionProviderImpl.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Briar Mailbox - * Copyright (C) 2021-2022 The Briar Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -package org.briarproject.mailbox.core.tor; - -import org.briarproject.mailbox.core.lifecycle.IoExecutor; -import org.briarproject.nullsafety.NotNullByDefault; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Scanner; -import java.util.Set; -import java.util.TreeMap; - -import javax.annotation.concurrent.Immutable; -import javax.inject.Inject; - -import static java.util.Arrays.asList; -import static org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4; -import static org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType.MEEK; -import static org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType.NON_DEFAULT_OBFS4; -import static org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType.SNOWFLAKE; -import static org.briarproject.mailbox.core.tor.CircumventionProvider.BridgeType.VANILLA; -import static org.briarproject.nullsafety.NullSafety.requireNonNull; - -@Immutable -@NotNullByDefault -class CircumventionProviderImpl implements CircumventionProvider { - - private final static String BRIDGE_FILE_NAME = "bridges"; - private final static String SNOWFLAKE_PARAMS_FILE_NAME = "snowflake-params"; - private final static String DEFAULT_COUNTRY_CODE = "ZZ"; - - private static final Set<String> BRIDGE_COUNTRIES = - new HashSet<>(asList(BRIDGES)); - private static final Set<String> DEFAULT_OBFS4_BRIDGE_COUNTRIES = - new HashSet<>(asList(DEFAULT_BRIDGES)); - private static final Set<String> NON_DEFAULT_BRIDGE_COUNTRIES = - new HashSet<>(asList(NON_DEFAULT_BRIDGES)); - private static final Set<String> DPI_COUNTRIES = - new HashSet<>(asList(DPI_BRIDGES)); - - @Inject - CircumventionProviderImpl() { - } - - @Override - public boolean doBridgesWork(String countryCode) { - return BRIDGE_COUNTRIES.contains(countryCode); - } - - @Override - public List<BridgeType> getSuitableBridgeTypes(String countryCode) { - if (DEFAULT_OBFS4_BRIDGE_COUNTRIES.contains(countryCode)) { - return asList(DEFAULT_OBFS4, VANILLA); - } else if (NON_DEFAULT_BRIDGE_COUNTRIES.contains(countryCode)) { - return asList(NON_DEFAULT_OBFS4, VANILLA); - } else if (DPI_COUNTRIES.contains(countryCode)) { - return asList(NON_DEFAULT_OBFS4, MEEK, SNOWFLAKE); - } else { - return asList(DEFAULT_OBFS4, VANILLA); - } - } - - @Override - @IoExecutor - public List<String> getBridges(BridgeType type, String countryCode, - boolean letsEncrypt) { - InputStream is = requireNonNull(getClass().getClassLoader() - .getResourceAsStream(BRIDGE_FILE_NAME)); - Scanner scanner = new Scanner(is); - - List<String> bridges = new ArrayList<>(); - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - if ((type == DEFAULT_OBFS4 && line.startsWith("d ")) || - (type == NON_DEFAULT_OBFS4 && line.startsWith("n ")) || - (type == VANILLA && line.startsWith("v ")) || - (type == MEEK && line.startsWith("m "))) { - bridges.add(line.substring(2)); - } else if (type == SNOWFLAKE && line.startsWith("s ")) { - String params = getSnowflakeParams(countryCode, letsEncrypt); - bridges.add(line.substring(2) + " " + params); - } - } - scanner.close(); - return bridges; - } - - // Package access for testing - @SuppressWarnings("WeakerAccess") - String getSnowflakeParams(String countryCode, boolean letsEncrypt) { - Map<String, String> params = loadSnowflakeParams(); - if (countryCode.isEmpty()) countryCode = DEFAULT_COUNTRY_CODE; - // If we have parameters for this country code, return them - String value = params.get(makeKey(countryCode, letsEncrypt)); - if (value != null) return value; - // Return the default parameters - value = params.get(makeKey(DEFAULT_COUNTRY_CODE, letsEncrypt)); - return requireNonNull(value); - } - - private Map<String, String> loadSnowflakeParams() { - InputStream is = requireNonNull(getClass().getClassLoader() - .getResourceAsStream(SNOWFLAKE_PARAMS_FILE_NAME)); - Scanner scanner = new Scanner(is); - Map<String, String> params = new TreeMap<>(); - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - if (line.length() < 5) continue; - String key = line.substring(0, 4); // Country code, space, digit - String value = line.substring(5); - params.put(key, value); - } - scanner.close(); - return params; - } - - private String makeKey(String countryCode, boolean letsEncrypt) { - return countryCode + " " + (letsEncrypt ? "1" : "0"); - } -} diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorModule.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorModule.kt index 10482e0e7be454773c5f6c3853c6a367129560ee..74fc3f7aa5a76f77d3050335e52d726f0c47e6b2 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorModule.kt +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorModule.kt @@ -35,12 +35,6 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) internal class TorModule { - @Provides - @Singleton - fun provideCircumventionProvider(provider: CircumventionProviderImpl): CircumventionProvider { - return provider - } - @Provides @Singleton @IoExecutor diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java index ba71ad303f9915f8bb326d6ef2bb61c011eabbe4..bbc28f42779005a40bd06206cb6c34c8939a2c85 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.StateFlow; public interface TorPlugin extends Service { - StateFlow<TorState> getState(); + StateFlow<TorPluginState> getState(); String getHiddenServiceAddress() throws DbException; diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorState.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPluginState.kt similarity index 82% rename from mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorState.kt rename to mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPluginState.kt index cb8858be5aa031db2fe7e76cacf5aecac4c837ab..2f798276ea2f07b8c9b6219e47f4650cc191c0ab 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorState.kt +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPluginState.kt @@ -19,36 +19,36 @@ package org.briarproject.mailbox.core.tor -sealed class TorState { +sealed class TorPluginState { /** * The plugin has not finished starting or has been stopped. */ - object StartingStopping : TorState() + object StartingStopping : TorPluginState() /** * The plugin is being enabled and can't yet make or receive * connections. */ - class Enabling(val percent: Int) : TorState() + class Enabling(val percent: Int) : TorPluginState() /** * Tor has detected a wrong system clock. The user should be advised to check their clock * and timezone settings. */ - object ClockSkewed : TorState() + object ClockSkewed : TorPluginState() /** * The plugin is enabled and can make or receive connections. */ - object Active : TorState() + object Active : TorPluginState() /** * The plugin has published the onion service. */ - object Published : TorState() + object Published : TorPluginState() /** * The plugin is enabled but can't make or receive connections */ - object Inactive : TorState() + object Inactive : TorPluginState() } diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLock.java b/mailbox-core/src/main/java/org/briarproject/onionwrapper/CircumventionModule.kt similarity index 64% rename from mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLock.java rename to mailbox-core/src/main/java/org/briarproject/onionwrapper/CircumventionModule.kt index 76f9dd7fde9c9a529e16a09f38623821623eed36..813b8d5e1295415cfc5fc44197237beceea70d16 100644 --- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/system/AndroidWakeLock.java +++ b/mailbox-core/src/main/java/org/briarproject/onionwrapper/CircumventionModule.kt @@ -17,19 +17,21 @@ * */ -package org.briarproject.mailbox.core.system; +package org.briarproject.onionwrapper -public interface AndroidWakeLock { +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton - /** - * Acquires the wake lock. This has no effect if the wake lock has already - * been acquired. - */ - void acquire(); +@Module +@InstallIn(SingletonComponent::class) +internal class CircumventionModule { - /** - * Releases the wake lock. This has no effect if the wake lock has already - * been released. - */ - void release(); + @Provides + @Singleton + fun provideCircumventionProvider(provider: CircumventionProviderImpl): CircumventionProvider { + return provider + } } diff --git a/mailbox-core/src/main/resources/bridges b/mailbox-core/src/main/resources/bridges deleted file mode 100644 index e365f524259407c5552a84daac9012cfd35a9590..0000000000000000000000000000000000000000 --- a/mailbox-core/src/main/resources/bridges +++ /dev/null @@ -1,35 +0,0 @@ -d Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 -d Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 -d Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 -d Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 -d Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cert=4TLQPJrTSaDffMK7Nbao6LC7G9OW/NHkUwIdjLSS3KYf0Nv4/nQiiI8dY2TcsQx01NniOg iat-mode=0 -d Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0 -d Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0 -d Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0 -d Bridge obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0 -d Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 -d Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0 -n Bridge obfs4 185.181.11.86:443 A961609729E7FDF520B4E81F1F1B8FA1045285C3 cert=e5faG9Zk4Ni+e7z2YgGfevyKPQlMvkVGi4ublSsHYjaBovKeNXpOhbeFxzbZZoAzxAoGUQ iat-mode=0 -n Bridge obfs4 120.29.217.52:5223 40FE3DB9800272F9CDC76422F8ED7883280EE96D cert=/71PS4l8c/XJ4DIItlH9xMqNvPFg2RUTrHvPlQWh48u5et8h/yyyjCcYphUadDsfBWpaGQ iat-mode=0 -n Bridge obfs4 185.177.207.138:8443 53716FE26F23C8C6A71A2BC5D9D8DC64747278C7 cert=6jcYVilMEzxdsWghSrQFpYYJlkkir/GPIXw/EnddUK3S8ToVpMG8u1SwMOEdEs735RrMHw iat-mode=0 -n Bridge obfs4 45.142.181.131:42069 6EBCF6B02DA2B982F4080A7119D737366AFB74FA cert=9HyWH/BCwWzNirZdTQtluCgJk+gFhpOqydIuyQ1iDvpnqsAynKF+zcPE/INZFefm86UlBg iat-mode=0 -n Bridge obfs4 152.67.77.101:4096 B82DB9CDDF887AB8A859420E07DF298E30AF8A6E cert=21OWn3yFo+hulmQNAOtF5uwwOqWtdT5PrLhk8BG9DpOd0/k5DEkQEYPyDdXbS9nZ0E5BJA iat-mode=0 -n Bridge obfs4 94.142.246.132:8088 135C158527AA9FE9A2F26EC515EB6999D813D347 cert=wTUz0/5FhAZRkitil5MprGbSF3JzjxjxI1kAmxAdSeDy98NgcLr11f/qUXWDC76Y97RiSg iat-mode=0 -n Bridge obfs4 152.70.180.20:1993 3327C43587E66AD5F874C4234A1D72C938AD7318 cert=s7xLRUO2psaX7TMUP2YhXdxItR4U6K7D+E3gQaS/+yWUppevtazIibq4dN1g5Reu6dD2QQ iat-mode=0 -n Bridge obfs4 144.202.12.254:10002 4E220F45CD404C8A3082A36326A5ED19BB8D4404 cert=iLz5YYWO4pUw7U7MRNOSvE0qO+IVeE4kVfFVWPO3coH3FmZtrkvlaTklfXxHZaCcXWBgaA iat-mode=0 -n Bridge obfs4 109.14.168.159:5082 BFE1416DEFFE969581F016A4A319A87FFB26BA91 cert=n3X1CDdKBPXPIzfKh83p3ydfMzb0AD9gKC+/gIpHb7+xjjAnYO9x3LT+T/MvOIfAXxYySg iat-mode=0 -n Bridge obfs4 185.177.207.132:8443 4FB781F7A9DD39DA53A7996907817FC479874D19 cert=UL2gCAXWW5kEWY4TQ0lNeu6OAmzh40bXYVhMnTWVG8USnyy/zEKGSIPgmwTDMumWr9c1Pg iat-mode=0 -n Bridge obfs4 213.108.110.149:7499 519344140473CF91030B08F91521F9A6C144ED6C cert=k9fSL/d491qAkGmi2VeSwVlfuyO02jBeN54qxzzQISxpfm3b+a6kJpo8/Bfy1ACbHZIJUg iat-mode=0 -n Bridge obfs4 158.174.114.97:3456 32665CD4CBE19092CA47A53D317B8BFF5810441C cert=ne5Zt0TcMedSGmFwAs/AV6J6E9Hn7mG5mR6vQNpEfyuCZK1VRpQvU1LvvtesSu4CXqZtYQ iat-mode=0 -n Bridge obfs4 64.4.175.62:8000 8B72740D150795ACB5101AA5F95D1ACDA4FE6B3E cert=vduuNhJ5U/8hjZmllP6AFfXSlSZsnrimdR8Tm8DY9dxWS4n2j92fNc0qHihUwRqwcOfIcg iat-mode=0 -n Bridge obfs4 82.64.115.17:990 B08238781C2CD80DBD95AEABEB6F6C75F2E2CEB6 cert=1udeMlFNs3sJ20zwpPE6nShZqqwDb3F1ET4KzfSfD+fktkue9zNx9H3t+yLCPAsg+6UTUA iat-mode=1 -n Bridge obfs4 87.161.120.147:9292 9418EEBE8AEAE32CC381AF51610366E8B24651E0 cert=DFRm74qsD1i2/ypaGochpX6CS1j9JTFAKEYaHXrgrx6M2LG5Cvppdt3Ob7lULfhqgtAUdg iat-mode=0 -n Bridge obfs4 157.90.245.231:8599 C23CD468EC04555E2B37BE81A771E681049DEA6A cert=UsmDelrbwg4jc6BMvZJ0TS8klUIa2qkbRu3xwQc3ZXPEgpMqyTYUxcVwyPbIU5KmAHsmAA iat-mode=0 -v Bridge 92.243.15.235:9001 477EAD3C04036B48235F1F27FC91420A286A4B7F -v Bridge 213.108.108.145:17674 A39C0FE47963B6E8CFE9815549864DE544935A31 -v Bridge 213.196.191.96:9060 05E222E2A8C234234FE0CEB58B08A93B8FC360DB -v Bridge 75.100.92.154:22815 465E990FA8A752DDE861EDF31E42454ACC037AB4 -v Bridge 87.100.193.2:9010 13FB63452AADFA082BD2BC3E1E320AD301F07877 -v Bridge 65.21.240.163:33245 20BD59649212CFE7412BFC9B94C3CCCFD8F807A8 -m Bridge meek_lite 192.0.2.18:80 BE776A53492E1E044A26F17306E1BC46A55A1625 url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com utls=hellochrome_auto -s Bridge snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72 diff --git a/mailbox-core/src/main/resources/snowflake-params b/mailbox-core/src/main/resources/snowflake-params deleted file mode 100644 index a6cbd85636605b68128edef8e9628896c25b879f..0000000000000000000000000000000000000000 --- a/mailbox-core/src/main/resources/snowflake-params +++ /dev/null @@ -1,4 +0,0 @@ -ZZ 1 url=https://snowflake-broker.torproject.net.global.prod.fastly.net/ front=cdn.sstatic.net ice=stun:stun.l.google.com:19302,stun:stun.voip.blackberry.com:3478,stun:stun.altar.com.pl:3478,stun:stun.antisip.com:3478,stun:stun.bluesip.net:3478,stun:stun.dus.net:3478,stun:stun.epygi.com:3478,stun:stun.sonetel.com:3478,stun:stun.sonetel.net:3478,stun:stun.stunprotocol.org:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.voys.nl:3478 utls-imitate=hellochrome_auto -ZZ 0 url=https://snowflake-broker.azureedge.net/ front=ajax.aspnetcdn.com ice=stun:stun.l.google.com:19302,stun:stun.voip.blackberry.com:3478,stun:stun.altar.com.pl:3478,stun:stun.antisip.com:3478,stun:stun.bluesip.net:3478,stun:stun.dus.net:3478,stun:stun.epygi.com:3478,stun:stun.sonetel.com:3478,stun:stun.sonetel.net:3478,stun:stun.stunprotocol.org:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.voys.nl:3478 utls-imitate=hellochrome_auto -TM 1 url=https://snowflake-broker.azureedge.net/ front=ajax.aspnetcdn.com ice=stun:206.53.159.130:3479,stun:176.119.42.11:3479,stun:94.23.17.185:3479,stun:217.74.179.29:3479,stun:83.125.8.47:3479,stun:23.253.102.137:3479,stun:52.26.251.34:3479,stun:52.26.251.34:3479,stun:18.191.223.12:3479,stun:154.73.34.8:3479,stun:185.125.180.70:3479,stun:195.35.115.37:3479 utls-imitate=hellochrome_auto -TM 0 url=https://snowflake-broker.azureedge.net/ front=ajax.aspnetcdn.com ice=stun:206.53.159.130:3479,stun:176.119.42.11:3479,stun:94.23.17.185:3479,stun:217.74.179.29:3479,stun:83.125.8.47:3479,stun:23.253.102.137:3479,stun:52.26.251.34:3479,stun:52.26.251.34:3479,stun:18.191.223.12:3479,stun:154.73.34.8:3479,stun:185.125.180.70:3479,stun:195.35.115.37:3479 utls-imitate=hellochrome_auto diff --git a/mailbox-lib/build.gradle b/mailbox-lib/build.gradle index f0569e004697ad7f8a3d9a5b76d7423f86d298ea..e61f746230508ced44541ea541add71f01e7b251 100644 --- a/mailbox-lib/build.gradle +++ b/mailbox-lib/build.gradle @@ -21,9 +21,8 @@ configurations { dependencies { implementation project(path: ':mailbox-core', configuration: 'default') - def jna_version = '5.8.0' - implementation "net.java.dev.jna:jna:$jna_version" - implementation "net.java.dev.jna:jna-platform:$jna_version" + implementation "org.briarproject:onionwrapper-java:$onionwrapper_version" + tor "org.briarproject:tor-linux:$tor_version" tor "org.briarproject:obfs4proxy-linux:$obfs4_version" tor "org.briarproject:snowflake-linux:$snowflake_version" diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/FakeTorPlugin.kt b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/FakeTorPlugin.kt index 1a67a600e42883a4f337a49c0460aa12620e7b10..d56ec5cfb1c9207dba95387effb3d229e71b87fc 100644 --- a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/FakeTorPlugin.kt +++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/FakeTorPlugin.kt @@ -6,17 +6,17 @@ import javax.inject.Inject class FakeTorPlugin @Inject constructor() : TorPlugin { - private val state = MutableStateFlow<TorState>(TorState.StartingStopping) + private val state = MutableStateFlow<TorPluginState>(TorPluginState.StartingStopping) override fun startService() { - state.value = TorState.Published + state.value = TorPluginState.Published } override fun stopService() { - state.value = TorState.StartingStopping + state.value = TorPluginState.StartingStopping } - override fun getState(): StateFlow<TorState> { + override fun getState(): StateFlow<TorPluginState> { return state } diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt index 4de1339cc62bf46579b2f4a40f54a4dff065130b..94a56973bc65b5fa4effe7533a9ce42e4ccb83b6 100644 --- a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt +++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt @@ -24,15 +24,15 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import org.briarproject.mailbox.core.event.EventBus +import org.briarproject.mailbox.core.event.EventExecutor import org.briarproject.mailbox.core.files.FileProvider import org.briarproject.mailbox.core.lifecycle.IoExecutor import org.briarproject.mailbox.core.lifecycle.LifecycleManager import org.briarproject.mailbox.core.server.WebServerManager import org.briarproject.mailbox.core.settings.SettingsManager -import org.briarproject.mailbox.core.system.Clock import org.briarproject.mailbox.core.system.LocationUtils -import org.briarproject.mailbox.core.system.ResourceProvider import org.briarproject.mailbox.core.util.OsUtils.isLinux +import org.briarproject.onionwrapper.CircumventionProvider import org.slf4j.Logger import org.slf4j.LoggerFactory.getLogger import java.io.File @@ -48,22 +48,14 @@ class JavaTorModule { private val LOG: Logger = getLogger(JavaTorModule::class.java) } - @Provides - @Singleton - fun provideResourceProvider() = ResourceProvider { name, extension -> - val cl = javaClass.classLoader - cl.getResourceAsStream(name + extension) - } - @Provides @Singleton fun provideJavaTorPlugin( @IoExecutor ioExecutor: Executor, + @EventExecutor eventExecutor: Executor, settingsManager: SettingsManager, networkManager: NetworkManager, locationUtils: LocationUtils, - clock: Clock, - resourceProvider: ResourceProvider, circumventionProvider: CircumventionProvider, lifecycleManager: LifecycleManager, eventBus: EventBus, @@ -73,11 +65,10 @@ class JavaTorModule { val torDir = File(fileProvider.root, "tor") return JavaTorPlugin( ioExecutor, + eventExecutor, settingsManager, networkManager, locationUtils, - clock, - resourceProvider, circumventionProvider, architecture, torDir diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java index 6681285fecf551ed5ad66518d900a53951ec9ef1..dd4d55e590bbfeb21a3b074684252fcb948c521d 100644 --- a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java +++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java @@ -19,63 +19,32 @@ package org.briarproject.mailbox.core.tor; -import com.sun.jna.Library; -import com.sun.jna.Native; - import org.briarproject.mailbox.core.settings.SettingsManager; -import org.briarproject.mailbox.core.system.Clock; import org.briarproject.mailbox.core.system.LocationUtils; -import org.briarproject.mailbox.core.system.ResourceProvider; +import org.briarproject.onionwrapper.CircumventionProvider; +import org.briarproject.onionwrapper.UnixTorWrapper; import java.io.File; -import java.net.URI; -import java.net.URISyntaxException; -import java.security.CodeSource; import java.util.concurrent.Executor; import java.util.function.IntSupplier; -import javax.annotation.Nullable; +import static org.briarproject.mailbox.core.tor.TorConstants.CONTROL_PORT; +import static org.briarproject.mailbox.core.tor.TorConstants.SOCKS_PORT; public class JavaTorPlugin extends AbstractTorPlugin { JavaTorPlugin(Executor ioExecutor, + Executor eventExecutor, SettingsManager settingsManager, NetworkManager networkManager, LocationUtils locationUtils, - Clock clock, - ResourceProvider resourceProvider, CircumventionProvider circumventionProvider, - @Nullable String architecture, + String architecture, File torDirectory, IntSupplier portSupplier) { - super(ioExecutor, settingsManager, networkManager, locationUtils, clock, - resourceProvider, circumventionProvider, architecture, - torDirectory, portSupplier); - } - - @Override - protected long getLastUpdateTime() { - CodeSource codeSource = - getClass().getProtectionDomain().getCodeSource(); - if (codeSource == null) throw new AssertionError("CodeSource null"); - try { - URI path = codeSource.getLocation().toURI(); - File file = new File(path); - return file.lastModified(); - } catch (URISyntaxException e) { - throw new AssertionError(e); - } - } - - @Override - protected int getProcessId() { - return CLibrary.INSTANCE.getpid(); - } - - private interface CLibrary extends Library { - - CLibrary INSTANCE = Native.load("c", CLibrary.class); - - int getpid(); + super(ioExecutor, settingsManager, networkManager, locationUtils, + circumventionProvider, portSupplier, true, + new UnixTorWrapper(ioExecutor, eventExecutor, architecture, + torDirectory, SOCKS_PORT, CONTROL_PORT)); } } diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt b/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt index 1304b7083f0290e4c895a89d67a3f1a7e5762c8c..8b22df0c9d1686afae4edd917ff2da0955ade85a 100644 --- a/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt +++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt @@ -32,7 +32,7 @@ import org.briarproject.mailbox.core.setup.SetupManager import org.briarproject.mailbox.core.setup.WipeManager import org.briarproject.mailbox.core.system.System import org.briarproject.mailbox.core.tor.TorPlugin -import org.briarproject.mailbox.core.tor.TorState +import org.briarproject.mailbox.core.tor.TorPluginState import org.briarproject.mailbox.core.util.LogUtils.info import org.slf4j.Logger import org.slf4j.LoggerFactory.getLogger @@ -105,7 +105,7 @@ abstract class AbstractMailbox(protected val customDataDir: File? = null) { runBlocking { // wait until Tor becomes active and published the onion service torPlugin.state.takeWhile { state -> - state != TorState.Published + state != TorPluginState.Published }.collect { } } LOG.info { "Hidden service published" }