values.schema.json 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040
  1. {
  2. "$schema": "https://json-schema.org/draft/2020-12/schema",
  3. "type": "object",
  4. "properties": {
  5. "affinity": {
  6. "type": "object"
  7. },
  8. "bitwarden-sdk-server": {
  9. "type": "object",
  10. "properties": {
  11. "enabled": {
  12. "type": "boolean"
  13. },
  14. "namespaceOverride": {
  15. "type": "string"
  16. }
  17. }
  18. },
  19. "certController": {
  20. "type": "object",
  21. "properties": {
  22. "affinity": {
  23. "type": "object"
  24. },
  25. "create": {
  26. "type": "boolean"
  27. },
  28. "deploymentAnnotations": {
  29. "type": "object"
  30. },
  31. "extraArgs": {
  32. "type": "object"
  33. },
  34. "extraEnv": {
  35. "type": "array"
  36. },
  37. "extraInitContainers": {
  38. "type": "array"
  39. },
  40. "extraVolumeMounts": {
  41. "type": "array"
  42. },
  43. "extraVolumes": {
  44. "type": "array"
  45. },
  46. "fullnameOverride": {
  47. "type": "string"
  48. },
  49. "hostNetwork": {
  50. "type": "boolean"
  51. },
  52. "image": {
  53. "type": "object",
  54. "properties": {
  55. "flavour": {
  56. "type": "string"
  57. },
  58. "pullPolicy": {
  59. "type": "string"
  60. },
  61. "repository": {
  62. "type": "string"
  63. },
  64. "tag": {
  65. "type": "string"
  66. }
  67. }
  68. },
  69. "imagePullSecrets": {
  70. "type": "array"
  71. },
  72. "log": {
  73. "type": "object",
  74. "properties": {
  75. "level": {
  76. "type": "string"
  77. },
  78. "timeEncoding": {
  79. "type": "string"
  80. }
  81. }
  82. },
  83. "metrics": {
  84. "type": "object",
  85. "properties": {
  86. "listen": {
  87. "type": "object",
  88. "properties": {
  89. "port": {
  90. "type": "integer"
  91. }
  92. }
  93. },
  94. "service": {
  95. "type": "object",
  96. "properties": {
  97. "annotations": {
  98. "type": "object"
  99. },
  100. "enabled": {
  101. "type": "boolean"
  102. },
  103. "port": {
  104. "type": "integer"
  105. }
  106. }
  107. }
  108. }
  109. },
  110. "nameOverride": {
  111. "type": "string"
  112. },
  113. "nodeSelector": {
  114. "type": "object"
  115. },
  116. "podAnnotations": {
  117. "type": "object"
  118. },
  119. "podDisruptionBudget": {
  120. "type": "object",
  121. "properties": {
  122. "enabled": {
  123. "type": "boolean"
  124. },
  125. "minAvailable": {
  126. "type": [
  127. "integer",
  128. "string"
  129. ]
  130. },
  131. "nameOverride": {
  132. "type": "string"
  133. }
  134. }
  135. },
  136. "podLabels": {
  137. "type": "object"
  138. },
  139. "podSecurityContext": {
  140. "type": "object",
  141. "properties": {
  142. "enabled": {
  143. "type": "boolean"
  144. }
  145. }
  146. },
  147. "priorityClassName": {
  148. "type": "string"
  149. },
  150. "rbac": {
  151. "type": "object",
  152. "properties": {
  153. "create": {
  154. "type": "boolean"
  155. }
  156. }
  157. },
  158. "readinessProbe": {
  159. "type": "object",
  160. "properties": {
  161. "address": {
  162. "type": "string"
  163. },
  164. "port": {
  165. "type": "integer"
  166. }
  167. }
  168. },
  169. "replicaCount": {
  170. "type": "integer"
  171. },
  172. "requeueInterval": {
  173. "type": "string"
  174. },
  175. "resources": {
  176. "type": "object"
  177. },
  178. "revisionHistoryLimit": {
  179. "type": "integer"
  180. },
  181. "securityContext": {
  182. "type": "object",
  183. "properties": {
  184. "allowPrivilegeEscalation": {
  185. "type": "boolean"
  186. },
  187. "capabilities": {
  188. "type": "object",
  189. "properties": {
  190. "drop": {
  191. "type": "array",
  192. "items": {
  193. "type": "string"
  194. }
  195. }
  196. }
  197. },
  198. "enabled": {
  199. "type": "boolean"
  200. },
  201. "readOnlyRootFilesystem": {
  202. "type": "boolean"
  203. },
  204. "runAsNonRoot": {
  205. "type": "boolean"
  206. },
  207. "runAsUser": {
  208. "type": "integer"
  209. },
  210. "seccompProfile": {
  211. "type": "object",
  212. "properties": {
  213. "type": {
  214. "type": "string"
  215. }
  216. }
  217. }
  218. }
  219. },
  220. "serviceAccount": {
  221. "type": "object",
  222. "properties": {
  223. "annotations": {
  224. "type": "object"
  225. },
  226. "automount": {
  227. "type": "boolean"
  228. },
  229. "create": {
  230. "type": "boolean"
  231. },
  232. "extraLabels": {
  233. "type": "object"
  234. },
  235. "name": {
  236. "type": "string"
  237. }
  238. }
  239. },
  240. "strategy": {
  241. "type": "object"
  242. },
  243. "tolerations": {
  244. "type": "array"
  245. },
  246. "topologySpreadConstraints": {
  247. "type": "array"
  248. }
  249. }
  250. },
  251. "commonLabels": {
  252. "type": "object"
  253. },
  254. "concurrent": {
  255. "type": "integer"
  256. },
  257. "controllerClass": {
  258. "type": "string"
  259. },
  260. "crds": {
  261. "type": "object",
  262. "properties": {
  263. "annotations": {
  264. "type": "object"
  265. },
  266. "conversion": {
  267. "type": "object",
  268. "properties": {
  269. "enabled": {
  270. "type": "boolean"
  271. }
  272. }
  273. },
  274. "createClusterExternalSecret": {
  275. "type": "boolean"
  276. },
  277. "createClusterGenerator": {
  278. "type": "boolean"
  279. },
  280. "createClusterPushSecret": {
  281. "type": "boolean"
  282. },
  283. "createClusterSecretStore": {
  284. "type": "boolean"
  285. },
  286. "createPushSecret": {
  287. "type": "boolean"
  288. }
  289. }
  290. },
  291. "createOperator": {
  292. "type": "boolean"
  293. },
  294. "deploymentAnnotations": {
  295. "type": "object"
  296. },
  297. "dnsConfig": {
  298. "type": "object"
  299. },
  300. "dnsPolicy": {
  301. "type": "string"
  302. },
  303. "enableHTTP2": {
  304. "type": "boolean"
  305. },
  306. "extendedMetricLabels": {
  307. "type": "boolean"
  308. },
  309. "extraArgs": {
  310. "type": "object"
  311. },
  312. "extraContainers": {
  313. "type": "array"
  314. },
  315. "extraEnv": {
  316. "type": "array"
  317. },
  318. "extraInitContainers": {
  319. "type": "array"
  320. },
  321. "extraObjects": {
  322. "type": "array"
  323. },
  324. "extraVolumeMounts": {
  325. "type": "array"
  326. },
  327. "extraVolumes": {
  328. "type": "array"
  329. },
  330. "fullnameOverride": {
  331. "type": "string"
  332. },
  333. "global": {
  334. "type": "object",
  335. "properties": {
  336. "affinity": {
  337. "type": "object"
  338. },
  339. "compatibility": {
  340. "type": "object",
  341. "properties": {
  342. "openshift": {
  343. "type": "object",
  344. "properties": {
  345. "adaptSecurityContext": {
  346. "type": "string"
  347. }
  348. }
  349. }
  350. }
  351. },
  352. "nodeSelector": {
  353. "type": "object"
  354. },
  355. "tolerations": {
  356. "type": "array"
  357. },
  358. "topologySpreadConstraints": {
  359. "type": "array"
  360. }
  361. }
  362. },
  363. "grafanaDashboard": {
  364. "type": "object",
  365. "properties": {
  366. "annotations": {
  367. "type": "object"
  368. },
  369. "enabled": {
  370. "type": "boolean"
  371. },
  372. "extraLabels": {
  373. "type": "object"
  374. },
  375. "sidecarLabel": {
  376. "type": "string"
  377. },
  378. "sidecarLabelValue": {
  379. "type": "string"
  380. }
  381. }
  382. },
  383. "hostNetwork": {
  384. "type": "boolean"
  385. },
  386. "image": {
  387. "type": "object",
  388. "properties": {
  389. "flavour": {
  390. "type": "string"
  391. },
  392. "pullPolicy": {
  393. "type": "string"
  394. },
  395. "repository": {
  396. "type": "string"
  397. },
  398. "tag": {
  399. "type": "string"
  400. }
  401. }
  402. },
  403. "imagePullSecrets": {
  404. "type": "array"
  405. },
  406. "installCRDs": {
  407. "type": "boolean"
  408. },
  409. "leaderElect": {
  410. "type": "boolean"
  411. },
  412. "livenessProbe": {
  413. "type": "object",
  414. "properties": {
  415. "address": {
  416. "type": "string"
  417. },
  418. "enabled": {
  419. "type": "boolean"
  420. },
  421. "failureThreshold": {
  422. "type": "integer"
  423. },
  424. "httpGet": {
  425. "type": "object",
  426. "properties": {
  427. "path": {
  428. "type": "string"
  429. },
  430. "port": {
  431. "type": "string"
  432. }
  433. }
  434. },
  435. "initialDelaySeconds": {
  436. "type": "integer"
  437. },
  438. "periodSeconds": {
  439. "type": "integer"
  440. },
  441. "successThreshold": {
  442. "type": "integer"
  443. },
  444. "timeoutSeconds": {
  445. "type": "integer"
  446. }
  447. }
  448. },
  449. "log": {
  450. "type": "object",
  451. "properties": {
  452. "level": {
  453. "type": "string"
  454. },
  455. "timeEncoding": {
  456. "type": "string"
  457. }
  458. }
  459. },
  460. "metrics": {
  461. "type": "object",
  462. "properties": {
  463. "listen": {
  464. "type": "object",
  465. "properties": {
  466. "port": {
  467. "type": "integer"
  468. },
  469. "secure": {
  470. "type": "object",
  471. "properties": {
  472. "certDir": {
  473. "type": "string"
  474. },
  475. "certFile": {
  476. "type": "string"
  477. },
  478. "enabled": {
  479. "type": "boolean"
  480. },
  481. "keyFile": {
  482. "type": "string"
  483. }
  484. }
  485. }
  486. }
  487. },
  488. "service": {
  489. "type": "object",
  490. "properties": {
  491. "annotations": {
  492. "type": "object"
  493. },
  494. "enabled": {
  495. "type": "boolean"
  496. },
  497. "port": {
  498. "type": "integer"
  499. }
  500. }
  501. }
  502. }
  503. },
  504. "nameOverride": {
  505. "type": "string"
  506. },
  507. "namespaceOverride": {
  508. "type": "string"
  509. },
  510. "nodeSelector": {
  511. "type": "object"
  512. },
  513. "openshiftFinalizers": {
  514. "type": "boolean"
  515. },
  516. "podAnnotations": {
  517. "type": "object"
  518. },
  519. "podDisruptionBudget": {
  520. "type": "object",
  521. "properties": {
  522. "enabled": {
  523. "type": "boolean"
  524. },
  525. "minAvailable": {
  526. "type": [
  527. "integer",
  528. "string"
  529. ]
  530. },
  531. "nameOverride": {
  532. "type": "string"
  533. }
  534. }
  535. },
  536. "podLabels": {
  537. "type": "object"
  538. },
  539. "podSecurityContext": {
  540. "type": "object",
  541. "properties": {
  542. "enabled": {
  543. "type": "boolean"
  544. }
  545. }
  546. },
  547. "podSpecExtra": {
  548. "type": "object"
  549. },
  550. "priorityClassName": {
  551. "type": "string"
  552. },
  553. "processClusterExternalSecret": {
  554. "type": "boolean"
  555. },
  556. "processClusterGenerator": {
  557. "type": "boolean"
  558. },
  559. "processClusterPushSecret": {
  560. "type": "boolean"
  561. },
  562. "processClusterStore": {
  563. "type": "boolean"
  564. },
  565. "processPushSecret": {
  566. "type": "boolean"
  567. },
  568. "rbac": {
  569. "type": "object",
  570. "properties": {
  571. "aggregateToEdit": {
  572. "type": "boolean"
  573. },
  574. "aggregateToView": {
  575. "type": "boolean"
  576. },
  577. "create": {
  578. "type": "boolean"
  579. },
  580. "servicebindings": {
  581. "type": "object",
  582. "properties": {
  583. "create": {
  584. "type": "boolean"
  585. }
  586. }
  587. }
  588. }
  589. },
  590. "replicaCount": {
  591. "type": "integer"
  592. },
  593. "resources": {
  594. "type": "object"
  595. },
  596. "revisionHistoryLimit": {
  597. "type": "integer"
  598. },
  599. "scopedNamespace": {
  600. "type": "string"
  601. },
  602. "scopedRBAC": {
  603. "type": "boolean"
  604. },
  605. "securityContext": {
  606. "type": "object",
  607. "properties": {
  608. "allowPrivilegeEscalation": {
  609. "type": "boolean"
  610. },
  611. "capabilities": {
  612. "type": "object",
  613. "properties": {
  614. "drop": {
  615. "type": "array",
  616. "items": {
  617. "type": "string"
  618. }
  619. }
  620. }
  621. },
  622. "enabled": {
  623. "type": "boolean"
  624. },
  625. "readOnlyRootFilesystem": {
  626. "type": "boolean"
  627. },
  628. "runAsNonRoot": {
  629. "type": "boolean"
  630. },
  631. "runAsUser": {
  632. "type": "integer"
  633. },
  634. "seccompProfile": {
  635. "type": "object",
  636. "properties": {
  637. "type": {
  638. "type": "string"
  639. }
  640. }
  641. }
  642. }
  643. },
  644. "service": {
  645. "type": "object",
  646. "properties": {
  647. "ipFamilies": {
  648. "type": "array"
  649. },
  650. "ipFamilyPolicy": {
  651. "type": "string"
  652. }
  653. }
  654. },
  655. "serviceAccount": {
  656. "type": "object",
  657. "properties": {
  658. "annotations": {
  659. "type": "object"
  660. },
  661. "automount": {
  662. "type": "boolean"
  663. },
  664. "create": {
  665. "type": "boolean"
  666. },
  667. "extraLabels": {
  668. "type": "object"
  669. },
  670. "name": {
  671. "type": "string"
  672. }
  673. }
  674. },
  675. "serviceMonitor": {
  676. "type": "object",
  677. "properties": {
  678. "additionalLabels": {
  679. "type": "object"
  680. },
  681. "enabled": {
  682. "type": "boolean"
  683. },
  684. "honorLabels": {
  685. "type": "boolean"
  686. },
  687. "interval": {
  688. "type": "string"
  689. },
  690. "metricRelabelings": {
  691. "type": "array"
  692. },
  693. "namespace": {
  694. "type": "string"
  695. },
  696. "relabelings": {
  697. "type": "array"
  698. },
  699. "renderMode": {
  700. "type": "string",
  701. "enum": [
  702. "skipIfMissing",
  703. "failIfMissing",
  704. "alwaysRender"
  705. ]
  706. },
  707. "scrapeTimeout": {
  708. "type": "string"
  709. }
  710. }
  711. },
  712. "strategy": {
  713. "type": "object"
  714. },
  715. "systemAuthDelegator": {
  716. "type": "boolean"
  717. },
  718. "tolerations": {
  719. "type": "array"
  720. },
  721. "topologySpreadConstraints": {
  722. "type": "array"
  723. },
  724. "webhook": {
  725. "type": "object",
  726. "properties": {
  727. "affinity": {
  728. "type": "object"
  729. },
  730. "annotations": {
  731. "type": "object"
  732. },
  733. "certCheckInterval": {
  734. "type": "string"
  735. },
  736. "certDir": {
  737. "type": "string"
  738. },
  739. "certManager": {
  740. "type": "object",
  741. "properties": {
  742. "addInjectorAnnotations": {
  743. "type": "boolean"
  744. },
  745. "cert": {
  746. "type": "object",
  747. "properties": {
  748. "annotations": {
  749. "type": "object"
  750. },
  751. "create": {
  752. "type": "boolean"
  753. },
  754. "duration": {
  755. "type": "string"
  756. },
  757. "issuerRef": {
  758. "type": "object",
  759. "properties": {
  760. "group": {
  761. "type": "string"
  762. },
  763. "kind": {
  764. "type": "string"
  765. },
  766. "name": {
  767. "type": "string"
  768. }
  769. }
  770. },
  771. "renewBefore": {
  772. "type": "string"
  773. },
  774. "revisionHistoryLimit": {
  775. "type": "integer"
  776. }
  777. }
  778. },
  779. "enabled": {
  780. "type": "boolean"
  781. }
  782. }
  783. },
  784. "create": {
  785. "type": "boolean"
  786. },
  787. "deploymentAnnotations": {
  788. "type": "object"
  789. },
  790. "extraArgs": {
  791. "type": "object"
  792. },
  793. "extraEnv": {
  794. "type": "array"
  795. },
  796. "extraInitContainers": {
  797. "type": "array"
  798. },
  799. "extraVolumeMounts": {
  800. "type": "array"
  801. },
  802. "extraVolumes": {
  803. "type": "array"
  804. },
  805. "failurePolicy": {
  806. "type": "string"
  807. },
  808. "fullnameOverride": {
  809. "type": "string"
  810. },
  811. "hostNetwork": {
  812. "type": "boolean"
  813. },
  814. "image": {
  815. "type": "object",
  816. "properties": {
  817. "flavour": {
  818. "type": "string"
  819. },
  820. "pullPolicy": {
  821. "type": "string"
  822. },
  823. "repository": {
  824. "type": "string"
  825. },
  826. "tag": {
  827. "type": "string"
  828. }
  829. }
  830. },
  831. "imagePullSecrets": {
  832. "type": "array"
  833. },
  834. "log": {
  835. "type": "object",
  836. "properties": {
  837. "level": {
  838. "type": "string"
  839. },
  840. "timeEncoding": {
  841. "type": "string"
  842. }
  843. }
  844. },
  845. "lookaheadInterval": {
  846. "type": "string"
  847. },
  848. "metrics": {
  849. "type": "object",
  850. "properties": {
  851. "listen": {
  852. "type": "object",
  853. "properties": {
  854. "port": {
  855. "type": "integer"
  856. }
  857. }
  858. },
  859. "service": {
  860. "type": "object",
  861. "properties": {
  862. "annotations": {
  863. "type": "object"
  864. },
  865. "enabled": {
  866. "type": "boolean"
  867. },
  868. "port": {
  869. "type": "integer"
  870. }
  871. }
  872. }
  873. }
  874. },
  875. "nameOverride": {
  876. "type": "string"
  877. },
  878. "nodeSelector": {
  879. "type": "object"
  880. },
  881. "podAnnotations": {
  882. "type": "object"
  883. },
  884. "podDisruptionBudget": {
  885. "type": "object",
  886. "properties": {
  887. "enabled": {
  888. "type": "boolean"
  889. },
  890. "minAvailable": {
  891. "type": [
  892. "integer",
  893. "string"
  894. ]
  895. },
  896. "nameOverride": {
  897. "type": "string"
  898. }
  899. }
  900. },
  901. "podLabels": {
  902. "type": "object"
  903. },
  904. "podSecurityContext": {
  905. "type": "object",
  906. "properties": {
  907. "enabled": {
  908. "type": "boolean"
  909. }
  910. }
  911. },
  912. "port": {
  913. "type": "integer"
  914. },
  915. "priorityClassName": {
  916. "type": "string"
  917. },
  918. "rbac": {
  919. "type": "object",
  920. "properties": {
  921. "create": {
  922. "type": "boolean"
  923. }
  924. }
  925. },
  926. "readinessProbe": {
  927. "type": "object",
  928. "properties": {
  929. "address": {
  930. "type": "string"
  931. },
  932. "port": {
  933. "type": "integer"
  934. }
  935. }
  936. },
  937. "replicaCount": {
  938. "type": "integer"
  939. },
  940. "resources": {
  941. "type": "object"
  942. },
  943. "revisionHistoryLimit": {
  944. "type": "integer"
  945. },
  946. "secretAnnotations": {
  947. "type": "object"
  948. },
  949. "securityContext": {
  950. "type": "object",
  951. "properties": {
  952. "allowPrivilegeEscalation": {
  953. "type": "boolean"
  954. },
  955. "capabilities": {
  956. "type": "object",
  957. "properties": {
  958. "drop": {
  959. "type": "array",
  960. "items": {
  961. "type": "string"
  962. }
  963. }
  964. }
  965. },
  966. "enabled": {
  967. "type": "boolean"
  968. },
  969. "readOnlyRootFilesystem": {
  970. "type": "boolean"
  971. },
  972. "runAsNonRoot": {
  973. "type": "boolean"
  974. },
  975. "runAsUser": {
  976. "type": "integer"
  977. },
  978. "seccompProfile": {
  979. "type": "object",
  980. "properties": {
  981. "type": {
  982. "type": "string"
  983. }
  984. }
  985. }
  986. }
  987. },
  988. "service": {
  989. "type": "object",
  990. "properties": {
  991. "annotations": {
  992. "type": "object"
  993. },
  994. "enabled": {
  995. "type": "boolean"
  996. },
  997. "labels": {
  998. "type": "object"
  999. },
  1000. "loadBalancerIP": {
  1001. "type": "string"
  1002. },
  1003. "type": {
  1004. "type": "string"
  1005. }
  1006. }
  1007. },
  1008. "serviceAccount": {
  1009. "type": "object",
  1010. "properties": {
  1011. "annotations": {
  1012. "type": "object"
  1013. },
  1014. "automount": {
  1015. "type": "boolean"
  1016. },
  1017. "create": {
  1018. "type": "boolean"
  1019. },
  1020. "extraLabels": {
  1021. "type": "object"
  1022. },
  1023. "name": {
  1024. "type": "string"
  1025. }
  1026. }
  1027. },
  1028. "strategy": {
  1029. "type": "object"
  1030. },
  1031. "tolerations": {
  1032. "type": "array"
  1033. },
  1034. "topologySpreadConstraints": {
  1035. "type": "array"
  1036. }
  1037. }
  1038. }
  1039. }
  1040. }