app_layout


SUBMITTED BY: Chusternet

DATE: Oct. 28, 2023, 5:26 p.m.

UPDATED: Dec. 19, 2023, 12:27 a.m.

FORMAT: Text only

SIZE: 96.0 kB

HITS: 1156

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3. <element>
  4. <id number="true">22166</id>
  5. <label>Nome do app</label>
  6. <name>APP_NAME</name>
  7. <value null="true"/>
  8. <type>STRING</type>
  9. <status>ACTIVE</status>
  10. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  11. </element>
  12. <element>
  13. <id number="true">22167</id>
  14. <label>Logo do app</label>
  15. <name>APP_LOGO</name>
  16. <value>https://i.ibb.co/j4Q48sG/DT040a9i8j.png</value>
  17. <type>IMAGE</type>
  18. <status>ACTIVE</status>
  19. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  20. </element>
  21. <element>
  22. <id number="true">22168</id>
  23. <label>Imagem de fundo</label>
  24. <name>APP_BACKGROUND_IMAGE</name>
  25. <value null="true"/>
  26. <type>IMAGE</type>
  27. <status>ACTIVE</status>
  28. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  29. </element>
  30. <element>
  31. <id number="true">22169</id>
  32. <label>Tipo do fundo do app</label>
  33. <name>APP_BACKGROUND_TYPE</name>
  34. <value>
  35. <options>
  36. <label>Imagem</label>
  37. <value>IMAGE</value>
  38. </options>
  39. <options>
  40. <label>Cor</label>
  41. <value>COLOR</value>
  42. </options>
  43. <selected>COLOR</selected>
  44. </value>
  45. <type>SELECT</type>
  46. <status>ACTIVE</status>
  47. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  48. </element>
  49. <element>
  50. <id number="true">22170</id>
  51. <label>Cor de fundo</label>
  52. <name>APP_BACKGROUND_COLOR</name>
  53. <value>#080e16c7</value>
  54. <type>COLOR</type>
  55. <status>ACTIVE</status>
  56. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  57. </element>
  58. <element>
  59. <id number="true">22171</id>
  60. <label>Cor do card inicial</label>
  61. <name>APP_CARD_COLOR</name>
  62. <value>#1d242e73</value>
  63. <type>COLOR</type>
  64. <status>ACTIVE</status>
  65. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  66. </element>
  67. <element>
  68. <id number="true">22172</id>
  69. <label>Raio do card inicial</label>
  70. <name>APP_CARD_RADIUS</name>
  71. <value number="true">20</value>
  72. <type>INTEGER</type>
  73. <status>ACTIVE</status>
  74. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  75. </element>
  76. <element>
  77. <id number="true">22173</id>
  78. <label>Cor do card de status</label>
  79. <name>APP_CARD_STATUS_COLOR</name>
  80. <value>#1d242e73</value>
  81. <type>COLOR</type>
  82. <status>ACTIVE</status>
  83. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  84. </element>
  85. <element>
  86. <id number="true">22174</id>
  87. <label>Raio do card de status</label>
  88. <name>APP_CARD_STATUS_RADIUS</name>
  89. <value number="true">25</value>
  90. <type>INTEGER</type>
  91. <status>ACTIVE</status>
  92. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  93. </element>
  94. <element>
  95. <id number="true">22175</id>
  96. <label>Cor do card de configurações</label>
  97. <name>APP_CARD_CONFIG_COLOR</name>
  98. <value>#4298e182</value>
  99. <type>COLOR</type>
  100. <status>ACTIVE</status>
  101. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  102. </element>
  103. <element>
  104. <id number="true">22176</id>
  105. <label>Cor do fundo dos dialogs</label>
  106. <name>APP_DIALOG_BACKGROUND_COLOR</name>
  107. <value>#4298e182</value>
  108. <type>COLOR</type>
  109. <status>ACTIVE</status>
  110. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  111. </element>
  112. <element>
  113. <id number="true">22177</id>
  114. <label>Cor do fundo do dialog de log</label>
  115. <name>APP_DIALOG_LOGGER_COLOR</name>
  116. <value>#4298e182</value>
  117. <type>COLOR</type>
  118. <status>ACTIVE</status>
  119. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  120. </element>
  121. <element>
  122. <id number="true">22178</id>
  123. <label>Cor das bordas</label>
  124. <name>APP_BORDER_COLOR</name>
  125. <value>#1d242e73</value>
  126. <type>COLOR</type>
  127. <status>ACTIVE</status>
  128. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  129. </element>
  130. <element>
  131. <id number="true">22179</id>
  132. <label>Cor dos inputs</label>
  133. <name>APP_INPUT_COLOR</name>
  134. <value>#1d242e73</value>
  135. <type>COLOR</type>
  136. <status>ACTIVE</status>
  137. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  138. </element>
  139. <element>
  140. <id number="true">22180</id>
  141. <label>Raio dos inputs</label>
  142. <name>APP_INPUT_RADIUS</name>
  143. <value number="true">25</value>
  144. <type>INTEGER</type>
  145. <status>ACTIVE</status>
  146. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  147. </element>
  148. <element>
  149. <id number="true">22181</id>
  150. <label>Cor dos textos</label>
  151. <name>APP_TEXT_COLOR</name>
  152. <value>#FFFFFFFF</value>
  153. <type>COLOR</type>
  154. <status>ACTIVE</status>
  155. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  156. </element>
  157. <element>
  158. <id number="true">22182</id>
  159. <label>Cor dos botões</label>
  160. <name>APP_BUTTON_COLOR</name>
  161. <value>#1d242e73</value>
  162. <type>COLOR</type>
  163. <status>ACTIVE</status>
  164. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  165. </element>
  166. <element>
  167. <id number="true">22183</id>
  168. <label>Raio dos botões</label>
  169. <name>APP_BUTTON_RADIUS</name>
  170. <value number="true">25</value>
  171. <type>INTEGER</type>
  172. <status>ACTIVE</status>
  173. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  174. </element>
  175. <element>
  176. <id number="true">22184</id>
  177. <label>Cor dos icones</label>
  178. <name>APP_ICON_COLOR</name>
  179. <value>#FFFFFFFF</value>
  180. <type>COLOR</type>
  181. <status>ACTIVE</status>
  182. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  183. </element>
  184. <element>
  185. <id number="true">22185</id>
  186. <label>Exibir modo de conexão</label>
  187. <name>APP_SHOW_CONNECTION_MODE</name>
  188. <value boolean="true">true</value>
  189. <type>BOOLEAN</type>
  190. <status>ACTIVE</status>
  191. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  192. </element>
  193. <element>
  194. <id number="true">22871</id>
  195. <label>Atualizar automaticamente as configurações ao lançar uma atualização.</label>
  196. <name>APP_CONFIG_AUTO_UPDATE</name>
  197. <value boolean="true">true</value>
  198. <type>BOOLEAN</type>
  199. <status>ACTIVE</status>
  200. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  201. </element>
  202. <element>
  203. <id number="true">22186</id>
  204. <label>Iniciar o app automaticamente ao reiniciar o dispositivo</label>
  205. <name>APP_AUTO_START</name>
  206. <value boolean="true">false</value>
  207. <type>BOOLEAN</type>
  208. <status>ACTIVE</status>
  209. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  210. </element>
  211. <element>
  212. <id number="true">22187</id>
  213. <label>Usar limiter de conexão</label>
  214. <name>APP_CONNECTION_LIMITER</name>
  215. <value boolean="true">false</value>
  216. <type>BOOLEAN</type>
  217. <status>ACTIVE</status>
  218. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  219. </element>
  220. <element>
  221. <id number="true">22188</id>
  222. <label>Usar botão de atualizações</label>
  223. <name>APP_BTN_UPDATE_ENABLED</name>
  224. <value boolean="true">false</value>
  225. <type>BOOLEAN</type>
  226. <status>ACTIVE</status>
  227. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  228. </element>
  229. <element>
  230. <id number="true">22189</id>
  231. <label>Usar botão de registros</label>
  232. <name>APP_BTN_LOGGER_ENABLED</name>
  233. <value boolean="true">false</value>
  234. <type>BOOLEAN</type>
  235. <status>ACTIVE</status>
  236. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  237. </element>
  238. <element>
  239. <id number="true">22190</id>
  240. <label>Usar botão de pagina webview</label>
  241. <name>APP_BTN_PAGE_ENABLED</name>
  242. <value boolean="true">false</value>
  243. <type>BOOLEAN</type>
  244. <status>ACTIVE</status>
  245. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  246. </element>
  247. <element>
  248. <id number="true">22191</id>
  249. <label>Ativar dialog de erros</label>
  250. <name>APP_DIALOG_ERROR_ENABLED</name>
  251. <value boolean="true">false</value>
  252. <type>BOOLEAN</type>
  253. <status>ACTIVE</status>
  254. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  255. </element>
  256. <element>
  257. <id number="true">22192</id>
  258. <label>Ativar dialog de checkuser</label>
  259. <name>APP_CHECKUSER_DIALOG_ENABLED</name>
  260. <value boolean="true">false</value>
  261. <type>BOOLEAN</type>
  262. <status>ACTIVE</status>
  263. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  264. </element>
  265. <element>
  266. <id number="true">22193</id>
  267. <label>Ativar toast de sucesso</label>
  268. <name>APP_SUCCESS_TOAST_ENABLED</name>
  269. <value boolean="true">true</value>
  270. <type>BOOLEAN</type>
  271. <status>ACTIVE</status>
  272. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  273. </element>
  274. <element>
  275. <id number="true">22194</id>
  276. <label>Ativar toast de erro</label>
  277. <name>APP_ERROR_TOAST_ENABLED</name>
  278. <value boolean="true">false</value>
  279. <type>BOOLEAN</type>
  280. <status>ACTIVE</status>
  281. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  282. </element>
  283. <element>
  284. <id number="true">22195</id>
  285. <label>Usar layout webview</label>
  286. <name>APP_LAYOUT_WEBVIEW_ENABLED</name>
  287. <value boolean="true">true</value>
  288. <type>BOOLEAN</type>
  289. <status>ACTIVE</status>
  290. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  291. </element>
  292. <element>
  293. <id number="true">22196</id>
  294. <label>Mensagem</label>
  295. <name>APP_MESSAGE</name>
  296. <value null="true"/>
  297. <type>TEXT</type>
  298. <status>ACTIVE</status>
  299. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  300. </element>
  301. <element>
  302. <id number="true">22197</id>
  303. <label>URL de atualização do aplicativo</label>
  304. <name>APP_UPDATE_URL</name>
  305. <value null="true"/>
  306. <type>URL</type>
  307. <status>ACTIVE</status>
  308. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  309. </element>
  310. <element>
  311. <id number="true">22198</id>
  312. <label>Tipo de mensagem</label>
  313. <name>APP_MESSAGE_TYPE</name>
  314. <value>
  315. <options>
  316. <label>Alerta</label>
  317. <value>ALERT</value>
  318. </options>
  319. <options>
  320. <label>Informação</label>
  321. <value>INFO</value>
  322. </options>
  323. <options>
  324. <label>Boas vindas</label>
  325. <value>WELCOME</value>
  326. </options>
  327. <options>
  328. <label>Sem mensagem</label>
  329. <value>NONE</value>
  330. </options>
  331. <selected>NONE</selected>
  332. </value>
  333. <type>SELECT</type>
  334. <status>ACTIVE</status>
  335. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  336. </element>
  337. <element>
  338. <id number="true">22199</id>
  339. <label>LAYOUT WEBVIEW (POR SUA CONTA E RISCO)</label>
  340. <name>APP_LAYOUT_WEBVIEW</name>
  341. <value>&lt;!DOCTYPE html&gt;
  342. &lt;html lang="en"&gt;
  343. &lt;head&gt;
  344. &lt;title&gt;Document&lt;/title&gt;
  345. &lt;meta charset="UTF-8" /&gt;
  346. &lt;meta
  347. name="viewport"
  348. content="width=device-width, initial-scale=1.0, user-scalable=no"
  349. /&gt;
  350. &lt;style&gt;
  351. :root {
  352. --background-color-main: #001432;
  353. --background-image-main: url("");
  354. --header-container-color: linear-gradient(
  355. to top right,
  356. #3762b4,
  357. #55afea
  358. );
  359. --background-container-color: #001432;
  360. --border-color: linear-gradient(to top right, #3762b4, #55afea);
  361. --border-loading-color: #ffffff;
  362. --text-color: #ffffff;
  363. --text-alert-color: #ff0000;
  364. --icons-color: #ffffff;
  365. --background-buttons-color: linear-gradient(
  366. to top right,
  367. #3762b4,
  368. #55afea
  369. );
  370. --margem-do-topo-do-modal: 10px;
  371. --margem-do-bottom-do-modal: 10px;
  372. }
  373. * {
  374. margin: 0;
  375. padding: 0;
  376. box-sizing: border-box;
  377. }
  378. html,
  379. body,
  380. main {
  381. width: 100%;
  382. height: 100%;
  383. }
  384. body {
  385. background: var(--background-color-main);
  386. background-image: var(--background-image-main);
  387. background-position: center;
  388. background-repeat: no-repeat;
  389. background-size: cover;
  390. }
  391. main {
  392. display: flex;
  393. flex-direction: column;
  394. align-items: center;
  395. gap: 20px;
  396. position: relative;
  397. transition: padding-bottom 0.3s ease 0.2s;
  398. overflow: hidden;
  399. }
  400. .container-logo {
  401. width: 95%;
  402. height: auto;
  403. display: flex;
  404. justify-content: center;
  405. align-items: center;
  406. margin-top: 40px;
  407. padding: 5px 3px;
  408. }
  409. .container-logo img {
  410. width: 50%;
  411. max-width: 300px;
  412. }
  413. .container {
  414. width: 95%;
  415. max-width: 450px;
  416. height: auto;
  417. position: relative;
  418. border-radius: 5px;
  419. background: transparent;
  420. }
  421. .container header {
  422. width: 95%;
  423. height: 45px;
  424. display: flex;
  425. align-items: center;
  426. gap: 10px;
  427. border-top-left-radius: 5px;
  428. border-top-right-radius: 5px;
  429. margin: auto;
  430. padding: 5px 10px;
  431. background: transparent;
  432. }
  433. .container header button:first-child {
  434. visibility: hidden;
  435. }
  436. .container header button {
  437. flex: 1;
  438. height: 100%;
  439. border: 0;
  440. border-radius: 20px;
  441. color: var(--text-color);
  442. font-family: "Roboto", sans-serif;
  443. background: var(--background-buttons-color);
  444. }
  445. .container form {
  446. width: 100%;
  447. height: calc(100% - 45px);
  448. display: flex;
  449. flex-direction: column;
  450. align-items: center;
  451. gap: 10px;
  452. margin: 10px 0px;
  453. padding: 0px 3px;
  454. }
  455. .container form div {
  456. width: 95%;
  457. height: 45px;
  458. display: flex;
  459. align-items: center;
  460. border-radius: 50px;
  461. padding: 0px 10px;
  462. background: #021b50;
  463. }
  464. .container form div#uuid-container {
  465. display: none;
  466. }
  467. .container form div svg {
  468. width: 38px;
  469. height: 100%;
  470. display: flex;
  471. justify-content: center;
  472. align-items: center;
  473. align-content: center;
  474. padding: 0px 10px;
  475. border-right: 1px solid var(--border-color);
  476. color: var(--icons-color);
  477. }
  478. .container form div svg path {
  479. transform: scale(1);
  480. }
  481. .container form div input {
  482. width: 100%;
  483. height: 100%;
  484. border: 0;
  485. outline: none;
  486. padding-left: 5px;
  487. color: var(--text-color);
  488. font-family: "Roboto", sans-serif;
  489. font-size: 1rem;
  490. background: transparent;
  491. }
  492. .container form div input::placeholder {
  493. color: #dddddd;
  494. }
  495. .form-buttons {
  496. width: 100%;
  497. display: flex;
  498. flex-wrap: wrap;
  499. gap: 10px;
  500. margin-top: 10px;
  501. padding: 0px 5px;
  502. }
  503. .form-buttons button {
  504. flex: 1;
  505. height: 45px;
  506. display: flex;
  507. align-items: center;
  508. justify-content: center;
  509. gap: 5px;
  510. border: 0;
  511. border-radius: 20px;
  512. color: var(--text-color);
  513. font-family: "Roboto", sans-serif;
  514. background: var(--background-buttons-color);
  515. &amp; &gt; svg {
  516. width: 16px;
  517. height: 16px;
  518. }
  519. }
  520. .form-buttons button:last-child {
  521. width: 50%;
  522. flex-basis: 100%;
  523. margin-top: 10px;
  524. }
  525. .menu {
  526. width: 100%;
  527. height: calc(100% - 45px);
  528. position: absolute;
  529. top: 45px;
  530. left: 0;
  531. right: 0;
  532. bottom: 0;
  533. display: flex;
  534. flex-direction: column;
  535. align-items: center;
  536. justify-content: center;
  537. gap: 13px;
  538. padding: 10px 5px;
  539. border-bottom-left-radius: 5px;
  540. border-bottom-right-radius: 5px;
  541. opacity: 0;
  542. transform: perspective(800px) rotateX(90deg) rotateY(0deg);
  543. transform-origin: 100% 100%;
  544. background: var(--background-color-main);
  545. }
  546. .menu button {
  547. width: 95%;
  548. height: 45px;
  549. display: flex;
  550. align-items: center;
  551. justify-content: center;
  552. border: 0;
  553. border-radius: 17.5px;
  554. background: var(--background-buttons-color);
  555. }
  556. .menu button svg {
  557. width: 20px;
  558. height: 20px;
  559. color: var(--icons-color);
  560. margin-right: 5px;
  561. }
  562. .menu button span {
  563. color: var(--text-color);
  564. font-family: "Roboto", sans-serif;
  565. }
  566. .status-vpn {
  567. width: 100%;
  568. max-width: 450px;
  569. height: auto;
  570. }
  571. .status-vpn section {
  572. width: 90%;
  573. height: 40px;
  574. display: flex;
  575. align-items: center;
  576. justify-content: center;
  577. gap: 10px;
  578. margin: 0 auto;
  579. border-radius: 20px;
  580. background: #021b50;
  581. }
  582. .status-vpn section svg {
  583. color: #ffffff;
  584. }
  585. .status-vpn section h1 {
  586. color: #ffffff;
  587. font-family: "Roboto", sans-serif;
  588. font-weight: 400;
  589. font-size: 1rem;
  590. }
  591. .home-menu {
  592. width: 95%;
  593. max-width: 450px;
  594. height: auto;
  595. display: flex;
  596. flex-direction: column;
  597. justify-content: center;
  598. gap: 10px;
  599. position: absolute;
  600. bottom: 20px;
  601. padding: 0px 10px;
  602. }
  603. .home-menu button {
  604. width: auto;
  605. height: 45px;
  606. display: flex;
  607. justify-content: center;
  608. align-items: center;
  609. gap: 5px;
  610. padding: 0px 10px;
  611. border: 0px;
  612. border-radius: 20px;
  613. background: var(--background-buttons-color);
  614. }
  615. .home-menu button svg {
  616. width: 20px;
  617. height: 20px;
  618. color: var(--icons-color);
  619. }
  620. .home-menu button span {
  621. color: var(--text-color);
  622. }
  623. .modal-speedtest,
  624. .modal-configs,
  625. .modal-logs,
  626. .modal-alert-clear-data,
  627. .modal-error-alert,
  628. .modal-status-vpn,
  629. .modal-checkuser,
  630. .modal-loading,
  631. .modal-gen-test,
  632. .modal-buy-access,
  633. .modal-call-support {
  634. width: 98%;
  635. max-width: 450px;
  636. height: calc(
  637. 100% - var(--margem-do-bottom-do-modal) -
  638. var(--margem-do-topo-do-modal)
  639. );
  640. position: absolute;
  641. top: var(--margem-do-topo-do-modal);
  642. left: auto;
  643. right: auto;
  644. bottom: var(--margem-do-bottom-do-modal);
  645. z-index: 2;
  646. display: flex;
  647. flex-direction: column;
  648. border-radius: 5px;
  649. overflow: hidden;
  650. opacity: 0;
  651. transform: scale(0);
  652. transform-origin: center;
  653. transition: all 0.3s ease 0.1s;
  654. }
  655. .show {
  656. opacity: 1;
  657. transform: scale(1);
  658. }
  659. .modal-speedtest header,
  660. .modal-configs header,
  661. .modal-logs header,
  662. .modal-alert-clear-data header,
  663. .modal-error-alert header,
  664. .modal-status-vpn header,
  665. .modal-checkuser header,
  666. .modal-loading header,
  667. .modal-gen-test header,
  668. .modal-buy-access header,
  669. .modal-call-support header {
  670. width: 100%;
  671. height: 40px;
  672. display: flex;
  673. align-items: center;
  674. padding: 0px 10px;
  675. background: var(--header-container-color);
  676. }
  677. .modal-speedtest header svg,
  678. .modal-configs header svg,
  679. .modal-logs header svg,
  680. .modal-alert-clear-data header svg,
  681. .modal-error-alert header svg,
  682. .modal-status-vpn header svg,
  683. .modal-checkuser header svg,
  684. .modal-loading header svg,
  685. .modal-gen-test header svg,
  686. .modal-buy-access header svg,
  687. .modal-call-support header svg {
  688. margin-left: auto;
  689. color: var(--icons-color);
  690. }
  691. .modal-speedtest section,
  692. .modal-configs section,
  693. .modal-logs section,
  694. .modal-alert-clear-data section,
  695. .modal-error-alert section,
  696. .modal-status-vpn section,
  697. .modal-checkuser section,
  698. .modal-loading section,
  699. .modal-gen-test section,
  700. .modal-buy-access section,
  701. .modal-call-support section {
  702. background: var(--background-container-color);
  703. }
  704. .modal-speedtest section,
  705. .modal-gen-test section,
  706. .modal-buy-access section,
  707. .modal-call-support section {
  708. width: 100%;
  709. height: calc(100% - 40px);
  710. position: relative;
  711. display: flex;
  712. justify-content: center;
  713. align-items: center;
  714. }
  715. .modal-logs section,
  716. .modal-checkuser section {
  717. width: 100%;
  718. height: calc(100% - 40px);
  719. position: relative;
  720. display: flex;
  721. flex-direction: column;
  722. align-items: center;
  723. }
  724. .modal-logs section p {
  725. width: 100%;
  726. height: auto;
  727. max-height: calc(100% - 65px);
  728. margin: 10px 0px;
  729. padding: 0px 10px;
  730. overflow-y: auto;
  731. color: var(--text-color);
  732. font-family: "Roboto", sans-serif;
  733. font-size: 0.7rem;
  734. }
  735. .modal-logs section button {
  736. width: 80%;
  737. height: 45px;
  738. margin-top: auto;
  739. margin-bottom: 5px;
  740. display: flex;
  741. align-items: center;
  742. justify-content: center;
  743. border: 0;
  744. border-radius: 17.5px;
  745. background: var(--background-buttons-color);
  746. }
  747. .modal-logs section button svg {
  748. color: var(--icons-color);
  749. margin-right: 5px;
  750. }
  751. .modal-logs section button span {
  752. color: var(--text-color);
  753. font-family: "Roboto", sans-serif;
  754. }
  755. .modal-speedtest section iframe,
  756. .modal-gen-test section iframe,
  757. .modal-buy-access section iframe,
  758. .modal-call-support section iframe {
  759. width: 100%;
  760. height: 100%;
  761. border: 0;
  762. overflow: hidden;
  763. }
  764. .modal-checkuser section {
  765. padding: 10px;
  766. justify-content: center;
  767. }
  768. .modal-checkuser section h1 {
  769. width: 100%;
  770. height: 40px;
  771. display: flex;
  772. align-items: center;
  773. justify-content: center;
  774. margin: 20px;
  775. border-bottom: 2px solid var(--background-buttons-color);
  776. color: var(--text-color);
  777. font-family: "Roboto", sans-serif;
  778. font-weight: 400;
  779. }
  780. .modal-checkuser section div {
  781. width: 100%;
  782. height: 40px;
  783. display: flex;
  784. align-items: center;
  785. margin: 10px 0px;
  786. border-radius: 20px;
  787. background: var(--background-buttons-color);
  788. overflow: hidden;
  789. }
  790. .modal-checkuser section div i {
  791. width: 40px;
  792. height: 40px;
  793. display: flex;
  794. justify-content: center;
  795. align-items: center;
  796. color: var(--icons-color);
  797. }
  798. .modal-checkuser section div span {
  799. width: calc(100% - 40px);
  800. height: 100%;
  801. display: flex;
  802. align-items: center;
  803. color: var(--text-color);
  804. font-family: "Roboto", sans-serif;
  805. }
  806. .modal-configs section {
  807. width: 100%;
  808. height: calc(100% - 40px);
  809. overflow-y: auto;
  810. }
  811. .modal-configs section div {
  812. width: 100%;
  813. height: auto;
  814. margin-top: 10px;
  815. display: flex;
  816. flex-direction: column;
  817. align-items: center;
  818. }
  819. .modal-configs section div h1.title {
  820. width: 90%;
  821. min-height: 30px;
  822. display: flex;
  823. justify-content: center;
  824. align-items: center;
  825. margin: 10px 0px;
  826. margin-top: 10px;
  827. border-radius: 15px;
  828. color: var(--text-color);
  829. font-family: "Roboto", sans-serif;
  830. font-size: 0.9rem;
  831. background: var(--background-buttons-color);
  832. }
  833. .modal-configs section div ul {
  834. width: 100%;
  835. height: auto;
  836. margin-top: 5px;
  837. padding: 0px 10px;
  838. border-radius: 15px;
  839. }
  840. .modal-configs section div ul li {
  841. width: 100%;
  842. height: 60px;
  843. min-height: 60px;
  844. display: flex;
  845. align-items: center;
  846. margin: 0px 0px 10px 0px;
  847. padding: 5px;
  848. padding-left: 15px;
  849. border-radius: 30px;
  850. overflow: hidden;
  851. background: #000;
  852. }
  853. .modal-configs section ul li img {
  854. width: 30px;
  855. height: 30px;
  856. }
  857. .modal-configs section ul li div {
  858. width: calc(100% - 40px);
  859. height: 40px;
  860. margin-left: 5px;
  861. display: flex;
  862. flex-direction: column;
  863. align-items: flex-start;
  864. overflow: hidden;
  865. }
  866. .modal-configs section ul li div h1 {
  867. color: var(--text-color);
  868. font-size: 0.7rem;
  869. font-weight: 600;
  870. font-family: "Roboto", sans-serif;
  871. }
  872. .modal-configs section ul li div p {
  873. color: var(--text-color);
  874. font-family: "Roboto", sans-serif;
  875. font-size: 0.6rem;
  876. font-weight: 400;
  877. }
  878. .modal-alert-clear-data section,
  879. .modal-error-alert section,
  880. .modal-status-vpn section,
  881. .modal-loading section {
  882. width: 100%;
  883. height: calc(100% - 40px);
  884. display: flex;
  885. flex-direction: column;
  886. align-items: center;
  887. justify-content: center;
  888. }
  889. .modal-alert-clear-data section svg,
  890. .modal-error-alert section svg {
  891. width: 128px;
  892. height: auto;
  893. color: var(--text-alert-color);
  894. }
  895. .modal-alert-clear-data section h1,
  896. .modal-error-alert section h1 {
  897. margin: 10px 0px;
  898. color: var(--text-alert-color);
  899. font-family: "Roboto", sans-serif;
  900. }
  901. .modal-alert-clear-data section p,
  902. .modal-error-alert section p {
  903. height: 145px;
  904. max-height: 145px;
  905. overflow-y: auto;
  906. margin-bottom: 10px;
  907. padding: 10px;
  908. color: var(--text-color);
  909. font-family: "Roboto", sans-serif;
  910. font-weight: 300;
  911. }
  912. .modal-error-alert section p {
  913. text-align: center;
  914. }
  915. .modal-alert-clear-data section div {
  916. width: 95%;
  917. height: auto;
  918. margin-top: 10px;
  919. display: flex;
  920. align-items: center;
  921. justify-content: center;
  922. gap: 10px;
  923. }
  924. .modal-alert-clear-data section div button {
  925. width: 150px;
  926. height: 45px;
  927. display: flex;
  928. align-items: center;
  929. justify-content: center;
  930. padding: 0px 5px;
  931. border: 0;
  932. border-radius: 20px;
  933. background: var(--background-buttons-color);
  934. }
  935. .modal-alert-clear-data section div button svg {
  936. width: 16px;
  937. height: auto;
  938. margin-left: 6px;
  939. color: var(--icons-color);
  940. }
  941. .modal-alert-clear-data section div button span {
  942. margin-left: 5px;
  943. color: var(--text-color);
  944. font-family: "Roboto", sans-serif;
  945. font-size: 0.7rem;
  946. }
  947. .modal-status-vpn section {
  948. position: relative;
  949. }
  950. .modal-status-vpn section div.loading-status,
  951. .modal-loading section div {
  952. width: 70px;
  953. height: 70px;
  954. position: relative;
  955. border: 4px solid var(--border-loading-color);
  956. border-radius: 50%;
  957. border-top: 4px solid transparent;
  958. animation: spin 1s infinite linear;
  959. }
  960. .modal-status-vpn section div.loading-status svg,
  961. .modal-loading section svg {
  962. width: 100%;
  963. height: 100%;
  964. display: flex;
  965. justify-content: center;
  966. align-items: center;
  967. color: var(--icons-color);
  968. padding: 15px;
  969. position: absolute;
  970. top: auto;
  971. left: auto;
  972. right: auto;
  973. bottom: auto;
  974. animation: spin 1s infinite linear reverse;
  975. }
  976. .modal-status-vpn section h1 {
  977. margin-top: 15%;
  978. color: var(--text-color);
  979. font-family: "Roboto", sans-serif;
  980. }
  981. @keyframes spin {
  982. 0% {
  983. transform: rotate(0deg);
  984. }
  985. 100% {
  986. transform: rotate(360deg);
  987. }
  988. }
  989. .boingInUp {
  990. -webkit-animation-name: boingInUp;
  991. animation-name: boingInUp;
  992. }
  993. @-webkit-keyframes boingInUp {
  994. 0% {
  995. opacity: 0;
  996. transform: perspective(800px) rotateX(-90deg);
  997. transform-origin: 50% 0;
  998. }
  999. 50% {
  1000. opacity: 1;
  1001. transform: perspective(800px) rotateX(50deg);
  1002. transform-origin: 50% 0;
  1003. }
  1004. to {
  1005. opacity: 1;
  1006. transform: perspective(800px) rotateX(0deg);
  1007. transform-origin: 50% 0;
  1008. }
  1009. }
  1010. @keyframes boingInUp {
  1011. 0% {
  1012. opacity: 0;
  1013. transform: perspective(800px) rotateX(-90deg);
  1014. transform-origin: 50% 0;
  1015. }
  1016. 50% {
  1017. opacity: 1;
  1018. transform: perspective(800px) rotateX(50deg);
  1019. transform-origin: 50% 0;
  1020. }
  1021. to {
  1022. opacity: 1;
  1023. transform: perspective(800px) rotateX(0deg);
  1024. transform-origin: 50% 0;
  1025. }
  1026. }
  1027. .boingOutDown {
  1028. -webkit-animation-name: boingOutDown;
  1029. animation-name: boingOutDown;
  1030. }
  1031. @-webkit-keyframes boingOutDown {
  1032. 0% {
  1033. opacity: 1;
  1034. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  1035. transform-origin: 100% 100%;
  1036. }
  1037. 20% {
  1038. opacity: 1;
  1039. transform: perspective(800px) rotateX(0deg) rotateY(10deg);
  1040. transform-origin: 100% 100%;
  1041. }
  1042. 30% {
  1043. opacity: 1;
  1044. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  1045. transform-origin: 0 100%;
  1046. }
  1047. 40% {
  1048. opacity: 1;
  1049. transform: perspective(800px) rotateX(10deg) rotateY(10deg);
  1050. transform-origin: 0 100%;
  1051. }
  1052. to {
  1053. opacity: 0;
  1054. transform: perspective(800px) rotateX(90deg) rotateY(0deg);
  1055. transform-origin: 100% 100%;
  1056. }
  1057. }
  1058. @keyframes boingOutDown {
  1059. 0% {
  1060. opacity: 1;
  1061. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  1062. transform-origin: 100% 100%;
  1063. }
  1064. 20% {
  1065. opacity: 1;
  1066. transform: perspective(800px) rotateX(0deg) rotateY(10deg);
  1067. transform-origin: 100% 100%;
  1068. }
  1069. 30% {
  1070. opacity: 1;
  1071. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  1072. transform-origin: 0 100%;
  1073. }
  1074. 40% {
  1075. opacity: 1;
  1076. transform: perspective(800px) rotateX(10deg) rotateY(10deg);
  1077. transform-origin: 0 100%;
  1078. }
  1079. to {
  1080. opacity: 0;
  1081. transform: perspective(800px) rotateX(90deg) rotateY(0deg);
  1082. transform-origin: 100% 100%;
  1083. }
  1084. }
  1085. .magictime {
  1086. -webkit-animation-duration: 1s;
  1087. animation-duration: 1s;
  1088. -webkit-animation-fill-mode: both;
  1089. animation-fill-mode: both;
  1090. }
  1091. @media (prefers-reduced-motion), (print) {
  1092. .magictime {
  1093. -webkit-animation: unset !important;
  1094. animation: unset !important;
  1095. transition: none !important;
  1096. }
  1097. }
  1098. @media (max-width: 375px) {
  1099. .container form div {
  1100. height: 35px;
  1101. }
  1102. .form-buttons button {
  1103. height: 35px;
  1104. }
  1105. .home-menu button {
  1106. height: 35px;
  1107. }
  1108. }
  1109. &lt;/style&gt;
  1110. &lt;/head&gt;
  1111. &lt;body&gt;
  1112. &lt;main&gt;
  1113. &lt;section class="container-logo"&gt;
  1114. &lt;!-- PARA TROCAR A LOGO É SÓ COLOCAR UM LINK COM A IMAGEM DIRETO NO SRC --&gt;
  1115. &lt;img id="app-logo" src="" alt="Logo do app" /&gt;
  1116. &lt;/section&gt;
  1117. &lt;section class="container"&gt;
  1118. &lt;header&gt;
  1119. &lt;button&gt;Log-in&lt;/button&gt;
  1120. &lt;button id="configuracao"&gt;Configurações&lt;/button&gt;
  1121. &lt;/header&gt;
  1122. &lt;form&gt;
  1123. &lt;div id="operadora"&gt;
  1124. &lt;svg
  1125. xmlns="http://www.w3.org/2000/svg"
  1126. fill="currentColor"
  1127. class="bi bi-ethernet"
  1128. viewBox="0 0 16 16"
  1129. &gt;
  1130. &lt;path
  1131. d="M14 13.5v-7a.5.5 0 0 0-.5-.5H12V4.5a.5.5 0 0 0-.5-.5h-1v-.5A.5.5 0 0 0 10 3H6a.5.5 0 0 0-.5.5V4h-1a.5.5 0 0 0-.5.5V6H2.5a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5ZM3.75 11h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25Zm2 0h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25Zm1.75.25a.25.25 0 0 1 .25-.25h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5ZM9.75 11h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25Zm1.75.25a.25.25 0 0 1 .25-.25h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5Z"
  1132. /&gt;
  1133. &lt;path
  1134. d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2ZM1 2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2Z"
  1135. /&gt;
  1136. &lt;/svg&gt;
  1137. &lt;input
  1138. id="operator-selected"
  1139. type="text"
  1140. placeholder="Escolha sua operadora"
  1141. readonly
  1142. /&gt;
  1143. &lt;/div&gt;
  1144. &lt;div id="user-container"&gt;
  1145. &lt;svg
  1146. xmlns="http://www.w3.org/2000/svg"
  1147. fill="none"
  1148. viewBox="0 0 24 24"
  1149. stroke-width="1.5"
  1150. stroke="currentColor"
  1151. class="w-6 h-6"
  1152. &gt;
  1153. &lt;path
  1154. stroke-linecap="round"
  1155. stroke-linejoin="round"
  1156. d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"
  1157. /&gt;
  1158. &lt;/svg&gt;
  1159. &lt;input id="user" type="text" placeholder="Usuário" /&gt;
  1160. &lt;/div&gt;
  1161. &lt;div id="password-container"&gt;
  1162. &lt;svg
  1163. xmlns="http://www.w3.org/2000/svg"
  1164. fill="none"
  1165. viewBox="0 0 24 24"
  1166. stroke-width="1.5"
  1167. stroke="currentColor"
  1168. class="w-6 h-6"
  1169. &gt;
  1170. &lt;path
  1171. stroke-linecap="round"
  1172. stroke-linejoin="round"
  1173. d="M15.75 5.25a3 3 0 013 3m3 0a6 6 0 01-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1121.75 8.25z"
  1174. /&gt;
  1175. &lt;/svg&gt;
  1176. &lt;input id="password" type="password" placeholder="Senha" /&gt;
  1177. &lt;/div&gt;
  1178. &lt;div id="uuid-container"&gt;
  1179. &lt;svg
  1180. xmlns="http://www.w3.org/2000/svg"
  1181. width="16"
  1182. height="16"
  1183. fill="currentColor"
  1184. class="bi bi-fingerprint"
  1185. viewBox="0 0 16 16"
  1186. &gt;
  1187. &lt;path
  1188. d="M8.06 6.5a.5.5 0 0 1 .5.5v.776a11.5 11.5 0 0 1-.552 3.519l-1.331 4.14a.5.5 0 0 1-.952-.305l1.33-4.141a10.5 10.5 0 0 0 .504-3.213V7a.5.5 0 0 1 .5-.5Z"
  1189. /&gt;
  1190. &lt;path
  1191. d="M6.06 7a2 2 0 1 1 4 0 .5.5 0 1 1-1 0 1 1 0 1 0-2 0v.332c0 .409-.022.816-.066 1.221A.5.5 0 0 1 6 8.447c.04-.37.06-.742.06-1.115V7Zm3.509 1a.5.5 0 0 1 .487.513 11.5 11.5 0 0 1-.587 3.339l-1.266 3.8a.5.5 0 0 1-.949-.317l1.267-3.8a10.5 10.5 0 0 0 .535-3.048A.5.5 0 0 1 9.569 8Zm-3.356 2.115a.5.5 0 0 1 .33.626L5.24 14.939a.5.5 0 1 1-.955-.296l1.303-4.199a.5.5 0 0 1 .625-.329Z"
  1192. /&gt;
  1193. &lt;path
  1194. d="M4.759 5.833A3.501 3.501 0 0 1 11.559 7a.5.5 0 0 1-1 0 2.5 2.5 0 0 0-4.857-.833.5.5 0 1 1-.943-.334Zm.3 1.67a.5.5 0 0 1 .449.546 10.72 10.72 0 0 1-.4 2.031l-1.222 4.072a.5.5 0 1 1-.958-.287L4.15 9.793a9.72 9.72 0 0 0 .363-1.842.5.5 0 0 1 .546-.449Zm6 .647a.5.5 0 0 1 .5.5c0 1.28-.213 2.552-.632 3.762l-1.09 3.145a.5.5 0 0 1-.944-.327l1.089-3.145c.382-1.105.578-2.266.578-3.435a.5.5 0 0 1 .5-.5Z"
  1195. /&gt;
  1196. &lt;path
  1197. d="M3.902 4.222a4.996 4.996 0 0 1 5.202-2.113.5.5 0 0 1-.208.979 3.996 3.996 0 0 0-4.163 1.69.5.5 0 0 1-.831-.556Zm6.72-.955a.5.5 0 0 1 .705-.052A4.99 4.99 0 0 1 13.059 7v1.5a.5.5 0 1 1-1 0V7a3.99 3.99 0 0 0-1.386-3.028.5.5 0 0 1-.051-.705ZM3.68 5.842a.5.5 0 0 1 .422.568c-.029.192-.044.39-.044.59 0 .71-.1 1.417-.298 2.1l-1.14 3.923a.5.5 0 1 1-.96-.279L2.8 8.821A6.531 6.531 0 0 0 3.058 7c0-.25.019-.496.054-.736a.5.5 0 0 1 .568-.422Zm8.882 3.66a.5.5 0 0 1 .456.54c-.084 1-.298 1.986-.64 2.934l-.744 2.068a.5.5 0 0 1-.941-.338l.745-2.07a10.51 10.51 0 0 0 .584-2.678.5.5 0 0 1 .54-.456Z"
  1198. /&gt;
  1199. &lt;path
  1200. d="M4.81 1.37A6.5 6.5 0 0 1 14.56 7a.5.5 0 1 1-1 0 5.5 5.5 0 0 0-8.25-4.765.5.5 0 0 1-.5-.865Zm-.89 1.257a.5.5 0 0 1 .04.706A5.478 5.478 0 0 0 2.56 7a.5.5 0 0 1-1 0c0-1.664.626-3.184 1.655-4.333a.5.5 0 0 1 .706-.04ZM1.915 8.02a.5.5 0 0 1 .346.616l-.779 2.767a.5.5 0 1 1-.962-.27l.778-2.767a.5.5 0 0 1 .617-.346Zm12.15.481a.5.5 0 0 1 .49.51c-.03 1.499-.161 3.025-.727 4.533l-.07.187a.5.5 0 0 1-.936-.351l.07-.187c.506-1.35.634-2.74.663-4.202a.5.5 0 0 1 .51-.49Z"
  1201. /&gt;
  1202. &lt;/svg&gt;
  1203. &lt;input id="uuid" type="password" placeholder="UUID" /&gt;
  1204. &lt;/div&gt;
  1205. &lt;section class="form-buttons"&gt;
  1206. &lt;button id="update-config" type="button" title="Atualizar"&gt;
  1207. &lt;svg
  1208. xmlns="http://www.w3.org/2000/svg"
  1209. width="16"
  1210. height="16"
  1211. fill="currentColor"
  1212. class="bi bi-arrow-clockwise"
  1213. viewBox="0 0 16 16"
  1214. &gt;
  1215. &lt;path
  1216. fill-rule="evenodd"
  1217. d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"
  1218. /&gt;
  1219. &lt;path
  1220. d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"
  1221. /&gt;
  1222. &lt;/svg&gt;
  1223. &lt;span&gt;ATUALIZAR&lt;/span&gt;
  1224. &lt;/button&gt;
  1225. &lt;button id="logs-button" type="button" title="Registro"&gt;
  1226. &lt;svg
  1227. xmlns="http://www.w3.org/2000/svg"
  1228. fill="none"
  1229. viewBox="0 0 24 24"
  1230. stroke-width="1.5"
  1231. stroke="currentColor"
  1232. class="w-6 h-6"
  1233. &gt;
  1234. &lt;path
  1235. stroke-linecap="round"
  1236. stroke-linejoin="round"
  1237. d="M12 12.75c1.148 0 2.278.08 3.383.237 1.037.146 1.866.966 1.866 2.013 0 3.728-2.35 6.75-5.25 6.75S6.75 18.728 6.75 15c0-1.046.83-1.867 1.866-2.013A24.204 24.204 0 0112 12.75zm0 0c2.883 0 5.647.508 8.207 1.44a23.91 23.91 0 01-1.152 6.06M12 12.75c-2.883 0-5.647.508-8.208 1.44.125 2.104.52 4.136 1.153 6.06M12 12.75a2.25 2.25 0 002.248-2.354M12 12.75a2.25 2.25 0 01-2.248-2.354M12 8.25c.995 0 1.971-.08 2.922-.236.403-.066.74-.358.795-.762a3.778 3.778 0 00-.399-2.25M12 8.25c-.995 0-1.97-.08-2.922-.236-.402-.066-.74-.358-.795-.762a3.734 3.734 0 01.4-2.253M12 8.25a2.25 2.25 0 00-2.248 2.146M12 8.25a2.25 2.25 0 012.248 2.146M8.683 5a6.032 6.032 0 01-1.155-1.002c.07-.63.27-1.222.574-1.747m.581 2.749A3.75 3.75 0 0115.318 5m0 0c.427-.283.815-.62 1.155-.999a4.471 4.471 0 00-.575-1.752M4.921 6a24.048 24.048 0 00-.392 3.314c1.668.546 3.416.914 5.223 1.082M19.08 6c.205 1.08.337 2.187.392 3.314a23.882 23.882 0 01-5.223 1.082"
  1238. /&gt;
  1239. &lt;/svg&gt;
  1240. &lt;span&gt;REGISTRO&lt;/span&gt;
  1241. &lt;/button&gt;
  1242. &lt;button id="vpn-start" type="button" title="Conectar"&gt;
  1243. &lt;svg
  1244. xmlns="http://www.w3.org/2000/svg"
  1245. width="16"
  1246. height="16"
  1247. fill="currentColor"
  1248. class="bi bi-plug"
  1249. viewBox="0 0 16 16"
  1250. &gt;
  1251. &lt;path
  1252. d="M6 0a.5.5 0 0 1 .5.5V3h3V.5a.5.5 0 0 1 1 0V3h1a.5.5 0 0 1 .5.5v3A3.5 3.5 0 0 1 8.5 10c-.002.434-.01.845-.04 1.22-.041.514-.126 1.003-.317 1.424a2.083 2.083 0 0 1-.97 1.028C6.725 13.9 6.169 14 5.5 14c-.998 0-1.61.33-1.974.718A1.922 1.922 0 0 0 3 16H2c0-.616.232-1.367.797-1.968C3.374 13.42 4.261 13 5.5 13c.581 0 .962-.088 1.218-.219.241-.123.4-.3.514-.55.121-.266.193-.621.23-1.09.027-.34.035-.718.037-1.141A3.5 3.5 0 0 1 4 6.5v-3a.5.5 0 0 1 .5-.5h1V.5A.5.5 0 0 1 6 0zM5 4v2.5A2.5 2.5 0 0 0 7.5 9h1A2.5 2.5 0 0 0 11 6.5V4H5z"
  1253. /&gt;
  1254. &lt;/svg&gt;
  1255. &lt;span&gt;CONECTAR&lt;/span&gt;
  1256. &lt;/button&gt;
  1257. &lt;/section&gt;
  1258. &lt;/form&gt;
  1259. &lt;section class="menu"&gt;
  1260. &lt;button id="battery-optimization"&gt;
  1261. &lt;svg
  1262. xmlns="http://www.w3.org/2000/svg"
  1263. fill="none"
  1264. viewBox="0 0 24 24"
  1265. stroke-width="1.5"
  1266. stroke="currentColor"
  1267. class="w-6 h-6"
  1268. &gt;
  1269. &lt;path
  1270. stroke-linecap="round"
  1271. stroke-linejoin="round"
  1272. d="M21 10.5h.375c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125H21M4.5 10.5h6.75V15H4.5v-4.5zM3.75 18h15A2.25 2.25 0 0021 15.75v-6a2.25 2.25 0 00-2.25-2.25h-15A2.25 2.25 0 001.5 9.75v6A2.25 2.25 0 003.75 18z"
  1273. /&gt;
  1274. &lt;/svg&gt;
  1275. &lt;span&gt;OTIMIZAÇÃO DE BATERIA&lt;/span&gt;
  1276. &lt;/button&gt;
  1277. &lt;button id="apn-configuration"&gt;
  1278. &lt;svg
  1279. xmlns="http://www.w3.org/2000/svg"
  1280. fill="none"
  1281. viewBox="0 0 24 24"
  1282. stroke-width="1.5"
  1283. stroke="currentColor"
  1284. class="w-6 h-6"
  1285. &gt;
  1286. &lt;path
  1287. stroke-linecap="round"
  1288. stroke-linejoin="round"
  1289. d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z"
  1290. /&gt;
  1291. &lt;path
  1292. stroke-linecap="round"
  1293. stroke-linejoin="round"
  1294. d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
  1295. /&gt;
  1296. &lt;/svg&gt;
  1297. &lt;span&gt;CONFIGURAR APN&lt;/span&gt;
  1298. &lt;/button&gt;
  1299. &lt;button id="checkuser"&gt;
  1300. &lt;svg
  1301. xmlns="http://www.w3.org/2000/svg"
  1302. width="16"
  1303. height="16"
  1304. fill="currentColor"
  1305. class="bi bi-person-lines-fill"
  1306. viewBox="0 0 16 16"
  1307. &gt;
  1308. &lt;path
  1309. d="M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-5 6s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H1zM11 3.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5zm.5 2.5a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4zm2 3a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2zm0 3a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2z"
  1310. /&gt;
  1311. &lt;/svg&gt;
  1312. &lt;span&gt;DETALHES DO USUÁRIO&lt;/span&gt;
  1313. &lt;/button&gt;
  1314. &lt;button id="speedtest-button"&gt;
  1315. &lt;svg
  1316. xmlns="http://www.w3.org/2000/svg"
  1317. width="16"
  1318. height="16"
  1319. fill="currentColor"
  1320. class="bi bi-router"
  1321. viewBox="0 0 16 16"
  1322. &gt;
  1323. &lt;path
  1324. d="M5.525 3.025a3.5 3.5 0 0 1 4.95 0 .5.5 0 1 0 .707-.707 4.5 4.5 0 0 0-6.364 0 .5.5 0 0 0 .707.707Z"
  1325. /&gt;
  1326. &lt;path
  1327. d="M6.94 4.44a1.5 1.5 0 0 1 2.12 0 .5.5 0 0 0 .708-.708 2.5 2.5 0 0 0-3.536 0 .5.5 0 0 0 .707.707ZM2.5 11a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm4.5-.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0Zm2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm1.5-.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0Zm2 0a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0Z"
  1328. /&gt;
  1329. &lt;path
  1330. d="M2.974 2.342a.5.5 0 1 0-.948.316L3.806 8H1.5A1.5 1.5 0 0 0 0 9.5v2A1.5 1.5 0 0 0 1.5 13H2a.5.5 0 0 0 .5.5h2A.5.5 0 0 0 5 13h6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5h.5a1.5 1.5 0 0 0 1.5-1.5v-2A1.5 1.5 0 0 0 14.5 8h-2.306l1.78-5.342a.5.5 0 1 0-.948-.316L11.14 8H4.86L2.974 2.342ZM14.5 9a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-13a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h13Z"
  1331. /&gt;
  1332. &lt;path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" /&gt;
  1333. &lt;/svg&gt;
  1334. &lt;span&gt;TESTAR REDE&lt;/span&gt;
  1335. &lt;/button&gt;
  1336. &lt;button id="clean-data-app"&gt;
  1337. &lt;svg
  1338. xmlns="http://www.w3.org/2000/svg"
  1339. fill="none"
  1340. viewBox="0 0 24 24"
  1341. stroke-width="1.5"
  1342. stroke="currentColor"
  1343. class="w-6 h-6"
  1344. &gt;
  1345. &lt;path
  1346. stroke-linecap="round"
  1347. stroke-linejoin="round"
  1348. d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"
  1349. /&gt;
  1350. &lt;/svg&gt;
  1351. &lt;span&gt;LIMPAR DADOS&lt;/span&gt;
  1352. &lt;/button&gt;
  1353. &lt;/section&gt;
  1354. &lt;/section&gt;
  1355. &lt;section class="status-vpn"&gt;
  1356. &lt;section&gt;
  1357. &lt;svg
  1358. xmlns="http://www.w3.org/2000/svg"
  1359. width="16"
  1360. height="16"
  1361. fill="currentColor"
  1362. class="bi bi-outlet"
  1363. viewBox="0 0 16 16"
  1364. &gt;
  1365. &lt;path
  1366. d="M3.34 2.994c.275-.338.68-.494 1.074-.494h7.172c.393 0 .798.156 1.074.494.578.708 1.84 2.534 1.84 5.006 0 2.472-1.262 4.297-1.84 5.006-.276.338-.68.494-1.074.494H4.414c-.394 0-.799-.156-1.074-.494C2.762 12.297 1.5 10.472 1.5 8c0-2.472 1.262-4.297 1.84-5.006zm1.074.506a.376.376 0 0 0-.299.126C3.599 4.259 2.5 5.863 2.5 8c0 2.137 1.099 3.74 1.615 4.374.06.073.163.126.3.126h7.17c.137 0 .24-.053.3-.126.516-.633 1.615-2.237 1.615-4.374 0-2.137-1.099-3.74-1.615-4.374a.376.376 0 0 0-.3-.126h-7.17z"
  1367. /&gt;
  1368. &lt;path
  1369. d="M6 5.5a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm4 0a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zM7 10v1h2v-1a1 1 0 0 0-2 0z"
  1370. /&gt;
  1371. &lt;/svg&gt;
  1372. &lt;h1&gt;DESCONECTADO&lt;/h1&gt;
  1373. &lt;/section&gt;
  1374. &lt;/section&gt;
  1375. &lt;section class="home-menu"&gt;
  1376. &lt;button type="button" id="buy-access"&gt;
  1377. &lt;svg
  1378. xmlns="http://www.w3.org/2000/svg"
  1379. fill="none"
  1380. viewBox="0 0 24 24"
  1381. stroke-width="1.5"
  1382. stroke="currentColor"
  1383. class="w-6 h-6"
  1384. &gt;
  1385. &lt;path
  1386. stroke-linecap="round"
  1387. stroke-linejoin="round"
  1388. d="M15.75 10.5V6a3.75 3.75 0 10-7.5 0v4.5m11.356-1.993l1.263 12c.07.665-.45 1.243-1.119 1.243H4.25a1.125 1.125 0 01-1.12-1.243l1.264-12A1.125 1.125 0 015.513 7.5h12.974c.576 0 1.059.435 1.119 1.007zM8.625 10.5a.375.375 0 11-.75 0 .375.375 0 01.75 0zm7.5 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z"
  1389. /&gt;
  1390. &lt;/svg&gt;
  1391. &lt;span&gt;Comprar Acesso&lt;/span&gt;
  1392. &lt;/button&gt;
  1393. &lt;/section&gt;
  1394. &lt;section class="modal-speedtest"&gt;
  1395. &lt;header&gt;
  1396. &lt;svg
  1397. xmlns="http://www.w3.org/2000/svg"
  1398. width="16"
  1399. height="16"
  1400. fill="currentColor"
  1401. class="bi bi-x-lg"
  1402. id="close"
  1403. viewBox="0 0 16 16"
  1404. &gt;
  1405. &lt;path
  1406. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1407. /&gt;
  1408. &lt;/svg&gt;
  1409. &lt;/header&gt;
  1410. &lt;section&gt;
  1411. &lt;div class="loading"&gt;&lt;/div&gt;
  1412. &lt;iframe title="fast" id="iframe-speedtest"&gt;&lt;/iframe&gt;
  1413. &lt;/section&gt;
  1414. &lt;/section&gt;
  1415. &lt;section class="modal-configs"&gt;
  1416. &lt;header&gt;
  1417. &lt;svg
  1418. xmlns="http://www.w3.org/2000/svg"
  1419. width="16"
  1420. height="16"
  1421. fill="currentColor"
  1422. class="bi bi-x-lg"
  1423. viewBox="0 0 16 16"
  1424. &gt;
  1425. &lt;path
  1426. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1427. /&gt;
  1428. &lt;/svg&gt;
  1429. &lt;/header&gt;
  1430. &lt;section&gt;
  1431. &lt;div&gt;
  1432. &lt;h1 class="title"&gt;VIVO&lt;/h1&gt;
  1433. &lt;ul&gt;
  1434. &lt;li&gt;
  1435. &lt;img
  1436. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1437. alt="icon"
  1438. /&gt;
  1439. &lt;div&gt;
  1440. &lt;h1&gt;VIVO 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1441. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1442. &lt;/div&gt;
  1443. &lt;/li&gt;
  1444. &lt;li&gt;
  1445. &lt;img
  1446. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1447. alt="icon"
  1448. /&gt;
  1449. &lt;div&gt;
  1450. &lt;h1&gt;VIVO 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1451. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1452. &lt;/div&gt;
  1453. &lt;/li&gt;
  1454. &lt;li&gt;
  1455. &lt;img
  1456. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1457. alt="icon"
  1458. /&gt;
  1459. &lt;div&gt;
  1460. &lt;h1&gt;VIVO 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1461. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1462. &lt;/div&gt;
  1463. &lt;/li&gt;
  1464. &lt;/ul&gt;
  1465. &lt;/div&gt;
  1466. &lt;div&gt;
  1467. &lt;h1 class="title"&gt;TIM&lt;/h1&gt;
  1468. &lt;ul&gt;
  1469. &lt;li&gt;
  1470. &lt;img
  1471. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1472. alt="icon"
  1473. /&gt;
  1474. &lt;div&gt;
  1475. &lt;h1&gt;TIM 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1476. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1477. &lt;/div&gt;
  1478. &lt;/li&gt;
  1479. &lt;li&gt;
  1480. &lt;img
  1481. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1482. alt="icon"
  1483. /&gt;
  1484. &lt;div&gt;
  1485. &lt;h1&gt;TIM 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1486. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1487. &lt;/div&gt;
  1488. &lt;/li&gt;
  1489. &lt;li&gt;
  1490. &lt;img
  1491. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1492. alt="icon"
  1493. /&gt;
  1494. &lt;div&gt;
  1495. &lt;h1&gt;TIM 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1496. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1497. &lt;/div&gt;
  1498. &lt;/li&gt;
  1499. &lt;/ul&gt;
  1500. &lt;/div&gt;
  1501. &lt;div&gt;
  1502. &lt;h1 class="title"&gt;CLARO&lt;/h1&gt;
  1503. &lt;ul&gt;
  1504. &lt;li&gt;
  1505. &lt;img
  1506. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1507. alt="icon"
  1508. /&gt;
  1509. &lt;div&gt;
  1510. &lt;h1&gt;CLARO 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1511. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1512. &lt;/div&gt;
  1513. &lt;/li&gt;
  1514. &lt;li&gt;
  1515. &lt;img
  1516. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1517. alt="icon"
  1518. /&gt;
  1519. &lt;div&gt;
  1520. &lt;h1&gt;CLARO 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1521. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1522. &lt;/div&gt;
  1523. &lt;/li&gt;
  1524. &lt;li&gt;
  1525. &lt;img
  1526. src="https://basteon.me/assets/images/app/operadoras/VIVO.png"
  1527. alt="icon"
  1528. /&gt;
  1529. &lt;div&gt;
  1530. &lt;h1&gt;CLARO 1 ➜ CONFIG 1 ➜ SV01.QFN&lt;/h1&gt;
  1531. &lt;p&gt;SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA&lt;/p&gt;
  1532. &lt;/div&gt;
  1533. &lt;/li&gt;
  1534. &lt;/ul&gt;
  1535. &lt;/div&gt;
  1536. &lt;/section&gt;
  1537. &lt;/section&gt;
  1538. &lt;section class="modal-logs"&gt;
  1539. &lt;header&gt;
  1540. &lt;svg
  1541. xmlns="http://www.w3.org/2000/svg"
  1542. width="16"
  1543. height="16"
  1544. fill="currentColor"
  1545. class="bi bi-x-lg"
  1546. viewBox="0 0 16 16"
  1547. &gt;
  1548. &lt;path
  1549. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1550. /&gt;
  1551. &lt;/svg&gt;
  1552. &lt;/header&gt;
  1553. &lt;section&gt;
  1554. &lt;p&gt;&lt;/p&gt;
  1555. &lt;button class="clear-logs" type="button"&gt;
  1556. &lt;svg
  1557. xmlns="http://www.w3.org/2000/svg"
  1558. width="16"
  1559. height="16"
  1560. fill="currentColor"
  1561. class="bi bi-stars"
  1562. viewBox="0 0 16 16"
  1563. &gt;
  1564. &lt;path
  1565. d="M7.657 6.247c.11-.33.576-.33.686 0l.645 1.937a2.89 2.89 0 0 0 1.829 1.828l1.936.645c.33.11.33.576 0 .686l-1.937.645a2.89 2.89 0 0 0-1.828 1.829l-.645 1.936a.361.361 0 0 1-.686 0l-.645-1.937a2.89 2.89 0 0 0-1.828-1.828l-1.937-.645a.361.361 0 0 1 0-.686l1.937-.645a2.89 2.89 0 0 0 1.828-1.828l.645-1.937zM3.794 1.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387A1.734 1.734 0 0 0 4.593 5.69l-.387 1.162a.217.217 0 0 1-.412 0L3.407 5.69A1.734 1.734 0 0 0 2.31 4.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387A1.734 1.734 0 0 0 3.407 2.31l.387-1.162zM10.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732L9.1 2.137a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L10.863.1z"
  1566. /&gt;
  1567. &lt;/svg&gt;
  1568. &lt;span&gt;Limpar Registro&lt;/span&gt;
  1569. &lt;/button&gt;
  1570. &lt;/section&gt;
  1571. &lt;/section&gt;
  1572. &lt;section class="modal-alert-clear-data"&gt;
  1573. &lt;header&gt;
  1574. &lt;svg
  1575. xmlns="http://www.w3.org/2000/svg"
  1576. width="16"
  1577. height="16"
  1578. fill="currentColor"
  1579. class="bi bi-x-lg"
  1580. viewBox="0 0 16 16"
  1581. &gt;
  1582. &lt;path
  1583. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1584. /&gt;
  1585. &lt;/svg&gt;
  1586. &lt;/header&gt;
  1587. &lt;section&gt;
  1588. &lt;svg
  1589. xmlns="http://www.w3.org/2000/svg"
  1590. width="16"
  1591. height="16"
  1592. fill="currentColor"
  1593. class="bi bi-exclamation-triangle"
  1594. viewBox="0 0 16 16"
  1595. &gt;
  1596. &lt;path
  1597. d="M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.146.146 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.163.163 0 0 1-.054.06.116.116 0 0 1-.066.017H1.146a.115.115 0 0 1-.066-.017.163.163 0 0 1-.054-.06.176.176 0 0 1 .002-.183L7.884 2.073a.147.147 0 0 1 .054-.057zm1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566z"
  1598. /&gt;
  1599. &lt;path
  1600. d="M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995z"
  1601. /&gt;
  1602. &lt;/svg&gt;
  1603. &lt;h1&gt;ATENÇÃO&lt;/h1&gt;
  1604. &lt;p&gt;
  1605. Ao limpar os dados do aplicativo, o aplicativo será redefinido como
  1606. se estivesse sendo instalado pela primeira vez! Essa ação é
  1607. irreversível. Será necessário inserir o usuário e senha novamente e
  1608. atualizar o aplicativo para carregar as configurações atuais de
  1609. conexão VPN.
  1610. &lt;/p&gt;
  1611. &lt;div&gt;
  1612. &lt;button type="button" id="back-clear-data-button"&gt;
  1613. &lt;svg
  1614. xmlns="http://www.w3.org/2000/svg"
  1615. width="16"
  1616. height="16"
  1617. fill="currentColor"
  1618. class="bi bi-caret-left"
  1619. viewBox="0 0 16 16"
  1620. &gt;
  1621. &lt;path
  1622. d="M10 12.796V3.204L4.519 8 10 12.796zm-.659.753-5.48-4.796a1 1 0 0 1 0-1.506l5.48-4.796A1 1 0 0 1 11 3.204v9.592a1 1 0 0 1-1.659.753z"
  1623. /&gt;
  1624. &lt;/svg&gt;
  1625. &lt;span&gt;VOLTAR&lt;/span&gt;
  1626. &lt;/button&gt;
  1627. &lt;button type="button" id="clear-data-button-confirm"&gt;
  1628. &lt;svg
  1629. xmlns="http://www.w3.org/2000/svg"
  1630. width="16"
  1631. height="16"
  1632. fill="currentColor"
  1633. class="bi bi-trash"
  1634. viewBox="0 0 16 16"
  1635. &gt;
  1636. &lt;path
  1637. d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6Z"
  1638. /&gt;
  1639. &lt;path
  1640. d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1ZM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118ZM2.5 3h11V2h-11v1Z"
  1641. /&gt;
  1642. &lt;/svg&gt;
  1643. &lt;span&gt;LIMPAR DADOS&lt;/span&gt;
  1644. &lt;/button&gt;
  1645. &lt;/div&gt;
  1646. &lt;/section&gt;
  1647. &lt;/section&gt;
  1648. &lt;section class="modal-error-alert"&gt;
  1649. &lt;header&gt;
  1650. &lt;svg
  1651. xmlns="http://www.w3.org/2000/svg"
  1652. width="16"
  1653. height="16"
  1654. fill="currentColor"
  1655. class="bi bi-x-lg"
  1656. viewBox="0 0 16 16"
  1657. &gt;
  1658. &lt;path
  1659. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1660. /&gt;
  1661. &lt;/svg&gt;
  1662. &lt;/header&gt;
  1663. &lt;section&gt;&lt;/section&gt;
  1664. &lt;/section&gt;
  1665. &lt;section class="modal-status-vpn"&gt;
  1666. &lt;header&gt;
  1667. &lt;svg
  1668. xmlns="http://www.w3.org/2000/svg"
  1669. width="16"
  1670. height="16"
  1671. fill="currentColor"
  1672. class="bi bi-x-lg"
  1673. id="close-modal-status-vpn"
  1674. viewBox="0 0 16 16"
  1675. &gt;
  1676. &lt;path
  1677. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1678. /&gt;
  1679. &lt;/svg&gt;
  1680. &lt;/header&gt;
  1681. &lt;section class="modal-status-content"&gt;
  1682. &lt;div class="loading-status"&gt;
  1683. &lt;svg
  1684. xmlns="http://www.w3.org/2000/svg"
  1685. width="16"
  1686. height="16"
  1687. fill="currentColor"
  1688. class="bi bi-shield-x"
  1689. viewBox="0 0 16 16"
  1690. &gt;
  1691. &lt;path
  1692. d="M5.338 1.59a61.44 61.44 0 0 0-2.837.856.481.481 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.725 10.725 0 0 0 2.287 2.233c.346.244.652.42.893.533.12.057.218.095.293.118a.55.55 0 0 0 .101.025.615.615 0 0 0 .1-.025c.076-.023.174-.061.294-.118.24-.113.547-.29.893-.533a10.726 10.726 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524zM5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.775 11.775 0 0 1-2.517 2.453 7.159 7.159 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7.158 7.158 0 0 1-1.048-.625 11.777 11.777 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 62.456 62.456 0 0 1 5.072.56z"
  1693. /&gt;
  1694. &lt;path
  1695. d="M6.146 5.146a.5.5 0 0 1 .708 0L8 6.293l1.146-1.147a.5.5 0 1 1 .708.708L8.707 7l1.147 1.146a.5.5 0 0 1-.708.708L8 7.707 6.854 8.854a.5.5 0 1 1-.708-.708L7.293 7 6.146 5.854a.5.5 0 0 1 0-.708z"
  1696. /&gt;
  1697. &lt;/svg&gt;
  1698. &lt;/div&gt;
  1699. &lt;h1 id="modal-status-text"&gt;CONECTADO!&lt;/h1&gt;
  1700. &lt;/section&gt;
  1701. &lt;/section&gt;
  1702. &lt;section class="modal-checkuser"&gt;
  1703. &lt;header&gt;
  1704. &lt;svg
  1705. xmlns="http://www.w3.org/2000/svg"
  1706. width="16"
  1707. height="16"
  1708. fill="currentColor"
  1709. class="bi bi-x-lg"
  1710. id="close-modal-checkuser"
  1711. viewBox="0 0 16 16"
  1712. &gt;
  1713. &lt;path
  1714. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1715. /&gt;
  1716. &lt;/svg&gt;
  1717. &lt;/header&gt;
  1718. &lt;section&gt;&lt;/section&gt;
  1719. &lt;/section&gt;
  1720. &lt;section class="modal-loading"&gt;
  1721. &lt;header&gt;
  1722. &lt;svg
  1723. xmlns="http://www.w3.org/2000/svg"
  1724. width="16"
  1725. height="16"
  1726. fill="currentColor"
  1727. class="bi bi-x-lg"
  1728. id="close-modal-loading"
  1729. id="close-modal-checkuser"
  1730. viewBox="0 0 16 16"
  1731. &gt;
  1732. &lt;path
  1733. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1734. /&gt;
  1735. &lt;/svg&gt;
  1736. &lt;/header&gt;
  1737. &lt;section&gt;
  1738. &lt;div&gt;
  1739. &lt;svg
  1740. xmlns="http://www.w3.org/2000/svg"
  1741. width="16"
  1742. height="16"
  1743. fill="currentColor"
  1744. class="bi bi-calendar3"
  1745. viewBox="0 0 16 16"
  1746. &gt;
  1747. &lt;path
  1748. d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z"
  1749. /&gt;
  1750. &lt;path
  1751. d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"
  1752. /&gt;
  1753. &lt;/svg&gt;
  1754. &lt;/div&gt;
  1755. &lt;/section&gt;
  1756. &lt;/section&gt;
  1757. &lt;/main&gt;
  1758. &lt;!-- FUNÇÕES DO APP --&gt;
  1759. &lt;script&gt;
  1760. const dtStatusBarHeight = () =&gt; DtGetStatusBarHeight.execute()
  1761. const dtNavbarHeight = () =&gt; DtGetNavigationBarHeight.execute()
  1762. const dtAppLogo = () =&gt; DtGetAppConfig.execute("APP_LOGO")
  1763. const dtVpnState = () =&gt; DtGetVpnState.execute()
  1764. const dtTranslateText = (label) =&gt; DtTranslateText.execute(label)
  1765. const dtAllConfigs = () =&gt; DtGetConfigs.execute()
  1766. const dtSetConfig = (id) =&gt; DtSetConfig.execute(id)
  1767. const dtGetDefaultConfig = () =&gt; DtGetDefaultConfig.execute()
  1768. const dtGetLogs = () =&gt; DtGetLogs.execute()
  1769. const dtClearLogs = () =&gt; DtClearLogs.execute()
  1770. const dtGetUsername = () =&gt; DtUsername.get()
  1771. const dtSetUsername = (username) =&gt; DtUsername.set(username)
  1772. const dtGetPassword = () =&gt; DtPassword.get()
  1773. const dtSetPassword = (password) =&gt; DtPassword.set(password)
  1774. const dtGetUUID = () =&gt; DtUuid.get()
  1775. const dtSetUUID = (uuid) =&gt; DtUuid.set(uuid)
  1776. const dtUpdate = () =&gt; DtStartAppUpdate.execute()
  1777. const dtStartVpn = () =&gt; DtExecuteVpnStart.execute()
  1778. const dtStopVpn = () =&gt; DtExecuteVpnStop.execute()
  1779. const dtBatteryOptimization = () =&gt; DtIgnoreBatteryOptimizations.execute()
  1780. const dtApnConfiguration = () =&gt; DtStartApnActivity.execute()
  1781. const dtStartCheckUser = () =&gt; DtStartCheckUser.execute()
  1782. const dtCleanDataApp = () =&gt; DtCleanApp.execute()
  1783. const dtStartWebView = (url) =&gt; DtStartWebViewActivity.execute(url)
  1784. const dtOpenBrowser = (url) =&gt; DtOpenExternalUrl.execute(url)
  1785. &lt;/script&gt;
  1786. &lt;!-- FUNÇÕES PARA O APP --&gt;
  1787. &lt;script&gt;
  1788. const dtOnNewLogListener = () =&gt; writeModalContent()
  1789. const dtConfigClickListener = () =&gt; writeInputCarrierList()
  1790. const dtCheckUserStartedListener = () =&gt; showModalLoading()
  1791. const dtVpnStateListener = (state) =&gt; vpnState(state)
  1792. const dtCheckUserModelListener = (model) =&gt; writeModalCheckUser(model)
  1793. const dtMessageErrorListener = (model) =&gt; writeModalError(model)
  1794. &lt;/script&gt;
  1795. &lt;!-- FUNÇÕES DE AJUDA --&gt;
  1796. &lt;script&gt;
  1797. const createSvgIcon = (iconPath, Class = "") =&gt; {
  1798. const svg = document.createElementNS(
  1799. "http://www.w3.org/2000/svg",
  1800. "svg"
  1801. )
  1802. svg.setAttribute("xmlns", "http://www.w3.org/2000/svg")
  1803. svg.setAttribute("width", "16")
  1804. svg.setAttribute("height", "16")
  1805. svg.setAttribute("fill", "currentColor")
  1806. svg.setAttribute("viewBox", "0 0 16 16")
  1807. svg.setAttribute("class", Class)
  1808. const path = document.createElementNS(
  1809. "http://www.w3.org/2000/svg",
  1810. "path"
  1811. )
  1812. path.setAttribute("d", iconPath)
  1813. svg.appendChild(path)
  1814. return svg
  1815. }
  1816. const createListItem = (iconPath, Class = "", text) =&gt; {
  1817. const li = document.createElement("li")
  1818. const svg = createSvgIcon(iconPath, Class)
  1819. const span = document.createElement("span")
  1820. span.setAttribute("class", Class)
  1821. span.innerHTML = text
  1822. li.appendChild(svg)
  1823. li.appendChild(span)
  1824. return li
  1825. }
  1826. &lt;/script&gt;
  1827. &lt;!-- FUNÇÕES DO LAYOUT --&gt;
  1828. &lt;script&gt;
  1829. const vpnState = (state) =&gt; {
  1830. const stateLabel = state || dtVpnState()
  1831. switch (stateLabel) {
  1832. case "DISCONNECTED":
  1833. StartStopVPNButton.html(dtTranslateText("LBL_BTN_START"))
  1834. writeModalVpnState(disconnected())
  1835. hiddenModalVpnState()
  1836. writeStatusVpn(disconnected())
  1837. return disconnected()
  1838. case "CONNECTING":
  1839. StartStopVPNButton.html(dtTranslateText("LBL_BTN_STOP"))
  1840. writeModalVpnState(connecting())
  1841. writeStatusVpn(connecting())
  1842. return connecting()
  1843. case "CONNECTED":
  1844. StartStopVPNButton.html(dtTranslateText("LBL_BTN_STOP"))
  1845. writeModalVpnState(connected())
  1846. writeStatusVpn(connected())
  1847. return connected()
  1848. case "STOPPING":
  1849. StartStopVPNButton.html(dtTranslateText("LBL_BTN_STOPPING"))
  1850. writeModalVpnState(stopping())
  1851. writeStatusVpn(stopping())
  1852. return stopping()
  1853. case "NO_NETWORK":
  1854. StartStopVPNButton.html(dtTranslateText("LBL_BTN_STOP"))
  1855. writeModalVpnState(noNetwork())
  1856. writeStatusVpn(noNetwork())
  1857. return noNetwork()
  1858. case "AUTH":
  1859. StartStopVPNButton.html(dtTranslateText("LBL_BTN_STOP"))
  1860. writeModalVpnState(auth())
  1861. writeStatusVpn(auth())
  1862. return auth()
  1863. case "AUTH_FAILED":
  1864. StartStopVPNButton.html(dtTranslateText("LBL_BTN_STOP"))
  1865. writeModalVpnState(authFailed())
  1866. writeStatusVpn(authFailed())
  1867. return authFailed()
  1868. default:
  1869. return "Não foi possível obter o status da conexão"
  1870. }
  1871. }
  1872. const showConfigMenu = () =&gt; {
  1873. const menu = document.querySelector("section.menu")
  1874. if (
  1875. !menu.className.includes("boingInUp") &amp;&amp;
  1876. !menu.className.includes("boingOutDown")
  1877. ) {
  1878. menu.classList.add("magictime", "boingInUp")
  1879. HomeMenu.style({ visibility: `hidden` })
  1880. } else if (menu.className.includes("boingInUp")) {
  1881. menu.classList.remove("magictime", "boingInUp")
  1882. menu.classList.add("magictime", "boingOutDown")
  1883. HomeMenu.style({ visibility: `visible` })
  1884. } else if (menu.className.includes("boingOutDown")) {
  1885. menu.classList.remove("magictime", "boingOutDown")
  1886. menu.classList.add("magictime", "boingInUp")
  1887. HomeMenu.style({ visibility: `hidden` })
  1888. } else {
  1889. console.log("ocorreu um erro")
  1890. }
  1891. }
  1892. const showModalSpeedtest = () =&gt; {
  1893. ModalSpeedtest.addClass("show")
  1894. IframeSpeedtest.attr({ src: "https://fast.com/pt/" })
  1895. }
  1896. const hiddenModalSpeedtest = () =&gt; {
  1897. IframeSpeedtest.attr({ src: "" })
  1898. ModalSpeedtest.removeClass("show")
  1899. }
  1900. const writeCarrierList = () =&gt; {
  1901. const writeCarrierList = document.querySelector(
  1902. "section.modal-configs section"
  1903. )
  1904. writeCarrierList.innerHTML = ""
  1905. const data = JSON.parse(dtAllConfigs())
  1906. data.sort((a, b) =&gt; a.sorter - b.sorter)
  1907. data.forEach((item, index) =&gt;
  1908. item.items.sort((a, b) =&gt; a.sorter - b.sorter)
  1909. )
  1910. data.forEach((category) =&gt; {
  1911. const div = document.createElement("div")
  1912. const h1 = document.createElement("h1")
  1913. h1.classList.add("title")
  1914. h1.innerHTML = category.name
  1915. const ul = document.createElement("ul")
  1916. category.items.forEach((item) =&gt; {
  1917. const li = document.createElement("li")
  1918. li.innerHTML = `&lt;img src="${item.icon}" alt="icon" /&gt;&lt;div&gt;&lt;h1&gt;${
  1919. item.name
  1920. }&lt;/h1&gt;&lt;p&gt;${item.description ?? ""}&lt;/p&gt;&lt;/div&gt;`
  1921. li.addEventListener("click", () =&gt; {
  1922. dtSetConfig(item.id)
  1923. ModalCarrierList.removeClass("show")
  1924. })
  1925. ul.appendChild(li)
  1926. })
  1927. div.appendChild(h1)
  1928. div.appendChild(ul)
  1929. writeCarrierList.appendChild(div)
  1930. })
  1931. }
  1932. const writeInputCarrierList = () =&gt; {
  1933. const data = JSON.parse(dtGetDefaultConfig())
  1934. const isV2ray = data?.mode?.toLowerCase()?.startsWith("v2ray")
  1935. InputCarrierValue.attr({
  1936. placeholder: data.name ?? "Escolha sua operadora",
  1937. })
  1938. if (!data?.auth?.v2ray_uuid &amp;&amp; isV2ray) {
  1939. ContainerInputUser.style({ display: "none" })
  1940. ContainerInputPassword.style({ display: "none" })
  1941. ContainerInputUUID.style({ display: "flex" })
  1942. InputUUIDValue.attr({ value: dtGetUUID() ?? "" })
  1943. } else {
  1944. ContainerInputPassword.style({ display: "flex" })
  1945. ContainerInputUUID.style({ display: "none" })
  1946. InputUserValue.attr({ value: dtGetUsername() ?? "" })
  1947. InputPasswordValue.attr({ value: dtGetPassword() ?? "" })
  1948. }
  1949. }
  1950. const showModalCarrierList = () =&gt; {
  1951. writeCarrierList()
  1952. ModalCarrierList.addClass("show")
  1953. }
  1954. const hiddenModalCarrierList = () =&gt; {
  1955. ModalCarrierList.removeClass("show")
  1956. }
  1957. const writeModalContent = () =&gt; {
  1958. const data = JSON.parse(dtGetLogs())
  1959. let content = ""
  1960. data.forEach((item) =&gt; {
  1961. content += `${Object.keys(item)} ${item[Object.keys(item)]} &lt;br&gt;`
  1962. })
  1963. ModalLoggerContent.html(content)
  1964. }
  1965. const showModalLogger = () =&gt; {
  1966. dtOnNewLogListener()
  1967. const modal = document.querySelector("section.modal-logs")
  1968. if (!modal.className.includes("show")) {
  1969. ModalLogger.addClass("show")
  1970. }
  1971. }
  1972. const hiddenModalLogger = () =&gt; {
  1973. ModalLogger.removeClass("show")
  1974. }
  1975. const startStopVpn = () =&gt; {
  1976. const state = dtVpnState()
  1977. if (state !== "CONNECTED") {
  1978. dtStartVpn()
  1979. showModalVpnState()
  1980. } else {
  1981. dtStopVpn()
  1982. }
  1983. }
  1984. const writeStatusVpn = (state) =&gt; {
  1985. const icon = state.icon
  1986. const text = `&lt;h1 style="color: ${state.color}"&gt;${state.text}&lt;/h1&gt;`
  1987. ContentContainerSVpnState.html(icon + text)
  1988. return icon + text
  1989. }
  1990. const writeModalVpnState = (state) =&gt; {
  1991. const divIcon = `&lt;div class="loading-status"&gt;${state.icon}&lt;/div&gt;`
  1992. const titleStatus = `&lt;h1&gt;${state.text}&lt;/h1&gt;`
  1993. ContentModalVpnState.html(divIcon + titleStatus)
  1994. return divIcon + titleStatus
  1995. }
  1996. const showModalVpnState = () =&gt; {
  1997. const data = JSON.parse(dtGetDefaultConfig())
  1998. if (!data || !dtGetUsername() || !dtGetPassword()) {
  1999. return
  2000. } else {
  2001. ModalVpnState.addClass("show")
  2002. }
  2003. }
  2004. const hiddenModalVpnState = () =&gt; {
  2005. ModalVpnState.removeClass("show")
  2006. }
  2007. const showModalLoading = () =&gt; {
  2008. if (!JSON.parse(dtGetDefaultConfig())?.urlCheckUser) {
  2009. hiddenModalVpnState()
  2010. } else {
  2011. hiddenModalVpnState()
  2012. ModalLoading.addClass("show")
  2013. }
  2014. }
  2015. const hiddenModalLoading = () =&gt; {
  2016. ModalLoading.removeClass("show")
  2017. }
  2018. const writeModalCheckUser = (model) =&gt; {
  2019. const data = JSON.parse(model)
  2020. ContentModalCheckUser.html(`
  2021. &lt;h1&gt;DETALHES DO USUÁRIO&lt;/h1&gt;
  2022. &lt;div&gt;
  2023. &lt;i class="bi bi-person"&gt;&lt;/i&gt;
  2024. &lt;span&gt;Nome do usuário: ${data.username}&lt;/span&gt;
  2025. &lt;/div&gt;
  2026. &lt;div&gt;
  2027. &lt;i class="bi bi-calendar-week"&gt;&lt;/i&gt;
  2028. &lt;span&gt;Expiração: ${data.expiration_date}&lt;/span&gt;
  2029. &lt;/div&gt;
  2030. &lt;div&gt;
  2031. &lt;i class="bi bi-hourglass-split"&gt;&lt;/i&gt;
  2032. &lt;span&gt;Dias restantes: ${data.expiration_days}&lt;/span&gt;
  2033. &lt;/div&gt;
  2034. &lt;div&gt;
  2035. &lt;i class="bi bi-people"&gt;&lt;/i&gt;
  2036. &lt;span&gt;Dispositivos: ${data.count_connections}|${data.limit_connections}&lt;/span&gt;
  2037. &lt;/div&gt;
  2038. `)
  2039. showModalCheckUser()
  2040. }
  2041. const showModalCheckUser = () =&gt; {
  2042. hiddenModalLoading()
  2043. ModalCheckUser.addClass("show")
  2044. }
  2045. const hiddenModalCheckUser = () =&gt; {
  2046. ModalCheckUser.removeClass("show")
  2047. }
  2048. const showModalAlertClearData = () =&gt; {
  2049. ModalAlertClearData.addClass("show")
  2050. }
  2051. const hiddenModalAlertClearData = () =&gt; {
  2052. ModalAlertClearData.removeClass("show")
  2053. }
  2054. const writeModalError = (model) =&gt; {
  2055. const data = JSON.parse(model)
  2056. const svg = `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-exclamation-triangle" viewBox="0 0 16 16"&gt;&lt;path d="M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.146.146 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.163.163 0 0 1-.054.06.116.116 0 0 1-.066.017H1.146a.115.115 0 0 1-.066-.017.163.163 0 0 1-.054-.06.176.176 0 0 1 .002-.183L7.884 2.073a.147.147 0 0 1 .054-.057zm1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566z"/&gt;&lt;path d="M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995z"/&gt;&lt;/svg&gt;`
  2057. const h1 = `&lt;h1 id="title-error-alert-title"&gt;${data.title}&lt;/h1&gt;`
  2058. const p = `&lt;p id="title-error-alert-description"&gt;${data.content}&lt;/p&gt;`
  2059. ContentModalError.html(svg + h1 + p)
  2060. hiddenModalSpeedtest()
  2061. hiddenModalCarrierList()
  2062. hiddenModalLogger()
  2063. hiddenModalVpnState()
  2064. hiddenModalLoading()
  2065. hiddenModalCheckUser()
  2066. showModalError()
  2067. }
  2068. const showModalError = () =&gt; {
  2069. ModalError.addClass("show")
  2070. }
  2071. const hiddenModalError = () =&gt; {
  2072. ModalError.removeClass("show")
  2073. }
  2074. const openBrowserIntoRenew = () =&gt; {
  2075. dtStartWebView("https://luxenet.com.br/")
  2076. }
  2077. const getAppLogo = () =&gt; {
  2078. const logo = dtAppLogo()
  2079. if (!logo) {
  2080. return false
  2081. } else {
  2082. return JSON.parse(logo).value
  2083. }
  2084. }
  2085. &lt;/script&gt;
  2086. &lt;!-- ESTADOS DE CONEXÃO --&gt;
  2087. &lt;script&gt;
  2088. const disconnected = () =&gt; {
  2089. const state = {
  2090. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-outlet" viewBox="0 0 16 16"&gt;&lt;path d="M3.34 2.994c.275-.338.68-.494 1.074-.494h7.172c.393 0 .798.156 1.074.494.578.708 1.84 2.534 1.84 5.006 0 2.472-1.262 4.297-1.84 5.006-.276.338-.68.494-1.074.494H4.414c-.394 0-.799-.156-1.074-.494C2.762 12.297 1.5 10.472 1.5 8c0-2.472 1.262-4.297 1.84-5.006zm1.074.506a.376.376 0 0 0-.299.126C3.599 4.259 2.5 5.863 2.5 8c0 2.137 1.099 3.74 1.615 4.374.06.073.163.126.3.126h7.17c.137 0 .24-.053.3-.126.516-.633 1.615-2.237 1.615-4.374 0-2.137-1.099-3.74-1.615-4.374a.376.376 0 0 0-.3-.126h-7.17z"/&gt;&lt;path d="M6 5.5a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm4 0a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zM7 10v1h2v-1a1 1 0 0 0-2 0z"/&gt;&lt;/svg&gt;`,
  2091. color: "#FFFFFF",
  2092. text: dtTranslateText("LBL_STATE_DISCONNECTED"),
  2093. }
  2094. return state
  2095. }
  2096. const connecting = () =&gt; {
  2097. const state = {
  2098. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plug" viewBox="0 0 16 16"&gt;&lt;path d="M6 0a.5.5 0 0 1 .5.5V3h3V.5a.5.5 0 0 1 1 0V3h1a.5.5 0 0 1 .5.5v3A3.5 3.5 0 0 1 8.5 10c-.002.434-.01.845-.04 1.22-.041.514-.126 1.003-.317 1.424a2.083 2.083 0 0 1-.97 1.028C6.725 13.9 6.169 14 5.5 14c-.998 0-1.61.33-1.974.718A1.922 1.922 0 0 0 3 16H2c0-.616.232-1.367.797-1.968C3.374 13.42 4.261 13 5.5 13c.581 0 .962-.088 1.218-.219.241-.123.4-.3.514-.55.121-.266.193-.621.23-1.09.027-.34.035-.718.037-1.141A3.5 3.5 0 0 1 4 6.5v-3a.5.5 0 0 1 .5-.5h1V.5A.5.5 0 0 1 6 0zM5 4v2.5A2.5 2.5 0 0 0 7.5 9h1A2.5 2.5 0 0 0 11 6.5V4H5z"/&gt;&lt;/svg&gt;`,
  2099. color: "#FFFF00",
  2100. text: dtTranslateText("LBL_STATE_CONNECTING"),
  2101. }
  2102. return state
  2103. }
  2104. const connected = () =&gt; {
  2105. const state = {
  2106. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plugin" viewBox="0 0 16 16"&gt;&lt;path fill-rule="evenodd" d="M1 8a7 7 0 1 1 2.898 5.673c-.167-.121-.216-.406-.002-.62l1.8-1.8a3.5 3.5 0 0 0 4.572-.328l1.414-1.415a.5.5 0 0 0 0-.707l-.707-.707 1.559-1.563a.5.5 0 1 0-.708-.706l-1.559 1.562-1.414-1.414 1.56-1.562a.5.5 0 1 0-.707-.706l-1.56 1.56-.707-.706a.5.5 0 0 0-.707 0L5.318 5.975a3.5 3.5 0 0 0-.328 4.571l-1.8 1.8c-.58.58-.62 1.6.121 2.137A8 8 0 1 0 0 8a.5.5 0 0 0 1 0Z"/&gt;&lt;/svg&gt;`,
  2107. color: "#00FF00",
  2108. text: dtTranslateText("LBL_STATE_CONNECTED"),
  2109. }
  2110. return state
  2111. }
  2112. const stopping = () =&gt; {
  2113. const state = {
  2114. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-stop" viewBox="0 0 16 16"&gt;&lt;path d="M3.5 5A1.5 1.5 0 0 1 5 3.5h6A1.5 1.5 0 0 1 12.5 5v6a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 11V5zM5 4.5a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5V5a.5.5 0 0 0-.5-.5H5z"/&gt;&lt;/svg&gt;`,
  2115. color: "#FFFF00",
  2116. text: dtTranslateText("LBL_STATE_STOPPING"),
  2117. }
  2118. return state
  2119. }
  2120. const noNetwork = () =&gt; {
  2121. const state = {
  2122. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-wifi-off" viewBox="0 0 16 16"&gt;&lt;path d="M10.706 3.294A12.545 12.545 0 0 0 8 3C5.259 3 2.723 3.882.663 5.379a.485.485 0 0 0-.048.736.518.518 0 0 0 .668.05A11.448 11.448 0 0 1 8 4c.63 0 1.249.05 1.852.148l.854-.854zM8 6c-1.905 0-3.68.56-5.166 1.526a.48.48 0 0 0-.063.745.525.525 0 0 0 .652.065 8.448 8.448 0 0 1 3.51-1.27L8 6zm2.596 1.404.785-.785c.63.24 1.227.545 1.785.907a.482.482 0 0 1 .063.745.525.525 0 0 1-.652.065 8.462 8.462 0 0 0-1.98-.932zM8 10l.933-.933a6.455 6.455 0 0 1 2.013.637c.285.145.326.524.1.75l-.015.015a.532.532 0 0 1-.611.09A5.478 5.478 0 0 0 8 10zm4.905-4.905.747-.747c.59.3 1.153.645 1.685 1.03a.485.485 0 0 1 .047.737.518.518 0 0 1-.668.05 11.493 11.493 0 0 0-1.811-1.07zM9.02 11.78c.238.14.236.464.04.66l-.707.706a.5.5 0 0 1-.707 0l-.707-.707c-.195-.195-.197-.518.04-.66A1.99 1.99 0 0 1 8 11.5c.374 0 .723.102 1.021.28zm4.355-9.905a.53.53 0 0 1 .75.75l-10.75 10.75a.53.53 0 0 1-.75-.75l10.75-10.75z"/&gt;&lt;/svg&gt;`,
  2123. color: "#FF0000",
  2124. text: dtTranslateText("LBL_STATE_NO_NETWORK"),
  2125. }
  2126. return state
  2127. }
  2128. const auth = () =&gt; {
  2129. const state = {
  2130. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-lock" viewBox="0 0 16 16"&gt;&lt;path d="M11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 5.996V14H3s-1 0-1-1 1-4 6-4c.564 0 1.077.038 1.544.107a4.524 4.524 0 0 0-.803.918A10.46 10.46 0 0 0 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h5ZM9 13a1 1 0 0 1 1-1v-1a2 2 0 1 1 4 0v1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-2Zm3-3a1 1 0 0 0-1 1v1h2v-1a1 1 0 0 0-1-1Z"/&gt;&lt;/svg&gt;`,
  2131. color: "#FFFF00",
  2132. text: dtTranslateText("LBL_STATE_AUTH"),
  2133. }
  2134. return state
  2135. }
  2136. const authFailed = () =&gt; {
  2137. const state = {
  2138. icon: `&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-slash" viewBox="0 0 16 16"&gt;&lt;path d="M13.879 10.414a2.501 2.501 0 0 0-3.465 3.465l3.465-3.465Zm.707.707-3.465 3.465a2.501 2.501 0 0 0 3.465-3.465Zm-4.56-1.096a3.5 3.5 0 1 1 4.949 4.95 3.5 3.5 0 0 1-4.95-4.95ZM11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.256 7a4.474 4.474 0 0 1-.229-1.004H3c.001-.246.154-.986.832-1.664C4.484 10.68 5.711 10 8 10c.26 0 .507.009.74.025.226-.341.496-.65.804-.918C9.077 9.038 8.564 9 8 9c-5 0-6 3-6 4s1 1 1 1h5.256Z"/&gt;&lt;/svg&gt;`,
  2139. color: "#FF0000",
  2140. text: dtTranslateText("LBL_STATE_AUTH_FAILED"),
  2141. }
  2142. return state
  2143. }
  2144. &lt;/script&gt;
  2145. &lt;!-- DOM WRAPPER --&gt;
  2146. &lt;script&gt;
  2147. const Dom = (selector) =&gt; {
  2148. const _elements = document.querySelectorAll(selector)
  2149. const wrapper = {
  2150. on(listeners) {
  2151. for (const [event, listener] of Object.entries(listeners)) {
  2152. _elements.forEach((element) =&gt; {
  2153. element.addEventListener(event, listener)
  2154. })
  2155. }
  2156. return wrapper
  2157. },
  2158. addClass: (...tokens) =&gt; {
  2159. _elements.forEach((element) =&gt; {
  2160. element.classList.add(...tokens)
  2161. })
  2162. return wrapper
  2163. },
  2164. removeClass: (...tokens) =&gt; {
  2165. _elements.forEach((element) =&gt; {
  2166. element.classList.remove(...tokens)
  2167. })
  2168. return wrapper
  2169. },
  2170. toggleClass: (token, force) =&gt; {
  2171. _elements.forEach((element) =&gt; {
  2172. element.classList.toggle(token, force)
  2173. })
  2174. return wrapper
  2175. },
  2176. style(styles) {
  2177. for (const [property, value] of Object.entries(styles)) {
  2178. console.log(value)
  2179. _elements.forEach((element) =&gt; {
  2180. element.style[property] = value
  2181. })
  2182. }
  2183. return wrapper
  2184. },
  2185. attr(attrs) {
  2186. for (const [name, value] of Object.entries(attrs)) {
  2187. _elements.forEach((element) =&gt; element.setAttribute(name, value))
  2188. }
  2189. return wrapper
  2190. },
  2191. html(value) {
  2192. _elements.forEach((element) =&gt; (element.innerHTML = value))
  2193. return wrapper
  2194. },
  2195. }
  2196. return wrapper
  2197. }
  2198. &lt;/script&gt;
  2199. &lt;!-- VÁRIAVEIS --&gt;
  2200. &lt;script&gt;
  2201. const Main = Dom("main")
  2202. const AppLogo = Dom("#app-logo")
  2203. const ConfigMenu = Dom("#configuracao")
  2204. const ContainerConfigMenu = Dom("section.menu")
  2205. const BatteryOptimizationButton = Dom("#battery-optimization")
  2206. const ApnConfigurationButton = Dom("#apn-configuration")
  2207. const CheckuserButton = Dom("#checkuser")
  2208. const SpeedtestButton = Dom("#speedtest-button")
  2209. const ClearDataAppButton = Dom("#clean-data-app")
  2210. const BuyAccessButton = Dom("#buy-access")
  2211. const ModalSpeedtest = Dom("section.modal-speedtest")
  2212. const CloseModalSpeedtest = Dom("section.modal-speedtest header svg")
  2213. const LoadingSpeedtest = Dom(
  2214. "section.modal-speedtest section div.loading"
  2215. )
  2216. const IframeSpeedtest = Dom("#iframe-speedtest")
  2217. const SelectCarrierButton = Dom("#operadora")
  2218. const ModalCarrierList = Dom("section.modal-configs")
  2219. const CloseModalCarrierList = Dom("section.modal-configs header svg")
  2220. const ModalContentCarrierList = Dom("section.modal-configs section")
  2221. const ContainerInputUser = Dom("#user-container")
  2222. const ContainerInputPassword = Dom("#password-container")
  2223. const ContainerInputUUID = Dom("#uuid-container")
  2224. const InputCarrierValue = Dom("#operadora input")
  2225. const InputUserValue = Dom("#user-container input")
  2226. const InputPasswordValue = Dom("#password-container input")
  2227. const InputUUIDValue = Dom("#uuid-container input")
  2228. const RefreshButton = Dom("#update-config")
  2229. const LoggerButton = Dom("#logs-button")
  2230. const StartStopVPNButton = Dom("#vpn-start")
  2231. const ContainerSVpnState = Dom("section.status-vpn")
  2232. const ContentContainerSVpnState = Dom("section.status-vpn section")
  2233. const ModalVpnState = Dom("section.modal-status-vpn")
  2234. const CloseModalVpnState = Dom("section.modal-status-vpn header svg")
  2235. const ContentModalVpnState = Dom(
  2236. "section.modal-status-vpn section.modal-status-content"
  2237. )
  2238. const ModalLogger = Dom("section.modal-logs")
  2239. const CloseModalLogger = Dom("section.modal-logs header svg")
  2240. const ModalLoggerContent = Dom("section.modal-logs section p")
  2241. const CleanLoggerContent = Dom("section.modal-logs section button")
  2242. const ModalLoading = Dom("section.modal-loading")
  2243. const CloseModalLoading = Dom("section.modal-loading header svg")
  2244. const ModalCheckUser = Dom("section.modal-checkuser")
  2245. const CloseModalCheckUser = Dom("section.modal-checkuser header svg")
  2246. const ContentModalCheckUser = Dom("section.modal-checkuser section")
  2247. const ModalAlertClearData = Dom("section.modal-alert-clear-data")
  2248. const CloseModalAlertClearData = Dom(
  2249. "section.modal-alert-clear-data header svg"
  2250. )
  2251. const BackModalAlertClearData = Dom("#back-clear-data-button")
  2252. const ConfirmModalAlertClearData = Dom("#clear-data-button-confirm")
  2253. const ModalError = Dom("section.modal-error-alert")
  2254. const CloseModalError = Dom("section.modal-error-alert header svg")
  2255. const ContentModalError = Dom("section.modal-error-alert section")
  2256. const HomeMenu = Dom("section.home-menu")
  2257. &lt;/script&gt;
  2258. &lt;!-- VARIAVEIS ROOT --&gt;
  2259. &lt;script&gt;
  2260. document.documentElement.style.setProperty(
  2261. "--margem-do-topo-do-modal",
  2262. `${dtStatusBarHeight() + 10}px`
  2263. )
  2264. document.documentElement.style.setProperty(
  2265. "--margem-do-bottom-do-modal",
  2266. `${dtNavbarHeight() + 10}px`
  2267. )
  2268. &lt;/script&gt;
  2269. &lt;!-- AÇÕES --&gt;
  2270. &lt;script&gt;
  2271. Main.style({ padding: `${dtStatusBarHeight() + 10}px 0px 0px 0px` })
  2272. HomeMenu.style({ bottom: `${dtNavbarHeight() + 10}px` })
  2273. AppLogo.attr({ src: getAppLogo() })
  2274. ConfigMenu.on({ click: () =&gt; showConfigMenu() })
  2275. BatteryOptimizationButton.on({ click: () =&gt; dtBatteryOptimization() })
  2276. ApnConfigurationButton.on({ click: () =&gt; dtApnConfiguration() })
  2277. SpeedtestButton.on({ click: () =&gt; showModalSpeedtest() })
  2278. CloseModalSpeedtest.on({ click: () =&gt; hiddenModalSpeedtest() })
  2279. SelectCarrierButton.on({ click: () =&gt; showModalCarrierList() })
  2280. CloseModalCarrierList.on({ click: () =&gt; hiddenModalCarrierList() })
  2281. InputUserValue.on({ input: (e) =&gt; dtSetUsername(e.target.value) })
  2282. InputPasswordValue.on({ input: (e) =&gt; dtSetPassword(e.target.value) })
  2283. InputUUIDValue.on({ input: (e) =&gt; dtSetUUID(e.target.value) })
  2284. RefreshButton.on({ click: () =&gt; dtUpdate() })
  2285. LoggerButton.on({ click: () =&gt; showModalLogger() })
  2286. CloseModalLogger.on({ click: () =&gt; hiddenModalLogger() })
  2287. CleanLoggerContent.on({ click: () =&gt; dtClearLogs() })
  2288. StartStopVPNButton.on({ click: () =&gt; startStopVpn() })
  2289. ContentContainerSVpnState.html(vpnState())
  2290. ContentModalVpnState.html(vpnState())
  2291. CloseModalVpnState.on({ click: () =&gt; hiddenModalVpnState() })
  2292. CloseModalLoading.on({ click: () =&gt; hiddenModalLoading() })
  2293. CloseModalCheckUser.on({ click: () =&gt; hiddenModalCheckUser() })
  2294. CheckuserButton.on({ click: () =&gt; dtStartCheckUser() })
  2295. ClearDataAppButton.on({ click: () =&gt; showModalAlertClearData() })
  2296. CloseModalAlertClearData.on({ click: () =&gt; hiddenModalAlertClearData() })
  2297. BackModalAlertClearData.on({ click: () =&gt; hiddenModalAlertClearData() })
  2298. ConfirmModalAlertClearData.on({ click: () =&gt; dtCleanDataApp() })
  2299. CloseModalError.on({ click: () =&gt; hiddenModalError() })
  2300. BuyAccessButton.on({ click: () =&gt; openBrowserIntoRenew() })
  2301. writeInputCarrierList()
  2302. &lt;/script&gt;
  2303. &lt;/body&gt;
  2304. &lt;/html&gt;
  2305. </value>
  2306. <type>HTML</type>
  2307. <status>ACTIVE</status>
  2308. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  2309. </element>
  2310. <element>
  2311. <id number="true">22200</id>
  2312. <label>ANDROID WEBVIEW (POR SUA CONTA E RISCO)</label>
  2313. <name>APP_SUPPORT_BUTTON</name>
  2314. <value null="true"/>
  2315. <type>HTML</type>
  2316. <status>ACTIVE</status>
  2317. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  2318. </element>
  2319. <element>
  2320. <id number="true">22201</id>
  2321. <label>PAGINA WEBVIEW (POR SUA CONTA E RISCO)</label>
  2322. <name>APP_WEB_VIEW</name>
  2323. <value null="true"/>
  2324. <type>HTML</type>
  2325. <status>ACTIVE</status>
  2326. <user_id>d37036c7-833d-4246-8b45-c0ce6e8daaa2</user_id>
  2327. </element>
  2328. </root>

comments powered by Disqus