diff --git a/cmd/web/assets/flags/ad.svg b/cmd/web/assets/flags/ad.svg
new file mode 100644
index 0000000..199ff19
--- /dev/null
+++ b/cmd/web/assets/flags/ad.svg
@@ -0,0 +1,150 @@
+
diff --git a/cmd/web/assets/flags/ae.svg b/cmd/web/assets/flags/ae.svg
new file mode 100644
index 0000000..651ac85
--- /dev/null
+++ b/cmd/web/assets/flags/ae.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/af.svg b/cmd/web/assets/flags/af.svg
new file mode 100644
index 0000000..4dbe455
--- /dev/null
+++ b/cmd/web/assets/flags/af.svg
@@ -0,0 +1,81 @@
+
diff --git a/cmd/web/assets/flags/ag.svg b/cmd/web/assets/flags/ag.svg
new file mode 100644
index 0000000..243c3d8
--- /dev/null
+++ b/cmd/web/assets/flags/ag.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/ai.svg b/cmd/web/assets/flags/ai.svg
new file mode 100644
index 0000000..9c2ea33
--- /dev/null
+++ b/cmd/web/assets/flags/ai.svg
@@ -0,0 +1,29 @@
+
diff --git a/cmd/web/assets/flags/al.svg b/cmd/web/assets/flags/al.svg
new file mode 100644
index 0000000..e85d95f
--- /dev/null
+++ b/cmd/web/assets/flags/al.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/am.svg b/cmd/web/assets/flags/am.svg
new file mode 100644
index 0000000..99fa4dc
--- /dev/null
+++ b/cmd/web/assets/flags/am.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/ao.svg b/cmd/web/assets/flags/ao.svg
new file mode 100644
index 0000000..b73b1ec
--- /dev/null
+++ b/cmd/web/assets/flags/ao.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/aq.svg b/cmd/web/assets/flags/aq.svg
new file mode 100644
index 0000000..c7e3536
--- /dev/null
+++ b/cmd/web/assets/flags/aq.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/ar.svg b/cmd/web/assets/flags/ar.svg
new file mode 100644
index 0000000..c753da1
--- /dev/null
+++ b/cmd/web/assets/flags/ar.svg
@@ -0,0 +1,32 @@
+
diff --git a/cmd/web/assets/flags/arab.svg b/cmd/web/assets/flags/arab.svg
new file mode 100644
index 0000000..9ef079f
--- /dev/null
+++ b/cmd/web/assets/flags/arab.svg
@@ -0,0 +1,109 @@
+
diff --git a/cmd/web/assets/flags/as.svg b/cmd/web/assets/flags/as.svg
new file mode 100644
index 0000000..82459de
--- /dev/null
+++ b/cmd/web/assets/flags/as.svg
@@ -0,0 +1,72 @@
+
diff --git a/cmd/web/assets/flags/asean.svg b/cmd/web/assets/flags/asean.svg
new file mode 100644
index 0000000..189ae02
--- /dev/null
+++ b/cmd/web/assets/flags/asean.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/at.svg b/cmd/web/assets/flags/at.svg
new file mode 100644
index 0000000..9d2775c
--- /dev/null
+++ b/cmd/web/assets/flags/at.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/au.svg b/cmd/web/assets/flags/au.svg
new file mode 100644
index 0000000..96e8076
--- /dev/null
+++ b/cmd/web/assets/flags/au.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/aw.svg b/cmd/web/assets/flags/aw.svg
new file mode 100644
index 0000000..413b7c4
--- /dev/null
+++ b/cmd/web/assets/flags/aw.svg
@@ -0,0 +1,186 @@
+
diff --git a/cmd/web/assets/flags/ax.svg b/cmd/web/assets/flags/ax.svg
new file mode 100644
index 0000000..0584d71
--- /dev/null
+++ b/cmd/web/assets/flags/ax.svg
@@ -0,0 +1,18 @@
+
diff --git a/cmd/web/assets/flags/az.svg b/cmd/web/assets/flags/az.svg
new file mode 100644
index 0000000..3557522
--- /dev/null
+++ b/cmd/web/assets/flags/az.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/ba.svg b/cmd/web/assets/flags/ba.svg
new file mode 100644
index 0000000..93bd9cf
--- /dev/null
+++ b/cmd/web/assets/flags/ba.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/bb.svg b/cmd/web/assets/flags/bb.svg
new file mode 100644
index 0000000..cecd5cc
--- /dev/null
+++ b/cmd/web/assets/flags/bb.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/bd.svg b/cmd/web/assets/flags/bd.svg
new file mode 100644
index 0000000..16b794d
--- /dev/null
+++ b/cmd/web/assets/flags/bd.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/be.svg b/cmd/web/assets/flags/be.svg
new file mode 100644
index 0000000..ac706a0
--- /dev/null
+++ b/cmd/web/assets/flags/be.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/bf.svg b/cmd/web/assets/flags/bf.svg
new file mode 100644
index 0000000..4713822
--- /dev/null
+++ b/cmd/web/assets/flags/bf.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/bg.svg b/cmd/web/assets/flags/bg.svg
new file mode 100644
index 0000000..af2d0d0
--- /dev/null
+++ b/cmd/web/assets/flags/bg.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/bh.svg b/cmd/web/assets/flags/bh.svg
new file mode 100644
index 0000000..7a2ea54
--- /dev/null
+++ b/cmd/web/assets/flags/bh.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/bi.svg b/cmd/web/assets/flags/bi.svg
new file mode 100644
index 0000000..a4434a9
--- /dev/null
+++ b/cmd/web/assets/flags/bi.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/bj.svg b/cmd/web/assets/flags/bj.svg
new file mode 100644
index 0000000..0846724
--- /dev/null
+++ b/cmd/web/assets/flags/bj.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/bl.svg b/cmd/web/assets/flags/bl.svg
new file mode 100644
index 0000000..f84cbba
--- /dev/null
+++ b/cmd/web/assets/flags/bl.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/bm.svg b/cmd/web/assets/flags/bm.svg
new file mode 100644
index 0000000..f43a5eb
--- /dev/null
+++ b/cmd/web/assets/flags/bm.svg
@@ -0,0 +1,97 @@
+
diff --git a/cmd/web/assets/flags/bn.svg b/cmd/web/assets/flags/bn.svg
new file mode 100644
index 0000000..f544c25
--- /dev/null
+++ b/cmd/web/assets/flags/bn.svg
@@ -0,0 +1,36 @@
+
diff --git a/cmd/web/assets/flags/bo.svg b/cmd/web/assets/flags/bo.svg
new file mode 100644
index 0000000..7658e3f
--- /dev/null
+++ b/cmd/web/assets/flags/bo.svg
@@ -0,0 +1,673 @@
+
diff --git a/cmd/web/assets/flags/bq.svg b/cmd/web/assets/flags/bq.svg
new file mode 100644
index 0000000..0e6bc76
--- /dev/null
+++ b/cmd/web/assets/flags/bq.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/br.svg b/cmd/web/assets/flags/br.svg
new file mode 100644
index 0000000..719a763
--- /dev/null
+++ b/cmd/web/assets/flags/br.svg
@@ -0,0 +1,45 @@
+
diff --git a/cmd/web/assets/flags/bs.svg b/cmd/web/assets/flags/bs.svg
new file mode 100644
index 0000000..5cc918e
--- /dev/null
+++ b/cmd/web/assets/flags/bs.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/bt.svg b/cmd/web/assets/flags/bt.svg
new file mode 100644
index 0000000..20aef3a
--- /dev/null
+++ b/cmd/web/assets/flags/bt.svg
@@ -0,0 +1,89 @@
+
diff --git a/cmd/web/assets/flags/bv.svg b/cmd/web/assets/flags/bv.svg
new file mode 100644
index 0000000..40e16d9
--- /dev/null
+++ b/cmd/web/assets/flags/bv.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/bw.svg b/cmd/web/assets/flags/bw.svg
new file mode 100644
index 0000000..3435608
--- /dev/null
+++ b/cmd/web/assets/flags/bw.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/by.svg b/cmd/web/assets/flags/by.svg
new file mode 100644
index 0000000..948784f
--- /dev/null
+++ b/cmd/web/assets/flags/by.svg
@@ -0,0 +1,18 @@
+
diff --git a/cmd/web/assets/flags/bz.svg b/cmd/web/assets/flags/bz.svg
new file mode 100644
index 0000000..d81b16c
--- /dev/null
+++ b/cmd/web/assets/flags/bz.svg
@@ -0,0 +1,145 @@
+
diff --git a/cmd/web/assets/flags/ca.svg b/cmd/web/assets/flags/ca.svg
new file mode 100644
index 0000000..c9b23b4
--- /dev/null
+++ b/cmd/web/assets/flags/ca.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/cc.svg b/cmd/web/assets/flags/cc.svg
new file mode 100644
index 0000000..a42dec6
--- /dev/null
+++ b/cmd/web/assets/flags/cc.svg
@@ -0,0 +1,19 @@
+
diff --git a/cmd/web/assets/flags/cd.svg b/cmd/web/assets/flags/cd.svg
new file mode 100644
index 0000000..b9cf528
--- /dev/null
+++ b/cmd/web/assets/flags/cd.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/cefta.svg b/cmd/web/assets/flags/cefta.svg
new file mode 100644
index 0000000..f748d08
--- /dev/null
+++ b/cmd/web/assets/flags/cefta.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/cf.svg b/cmd/web/assets/flags/cf.svg
new file mode 100644
index 0000000..a6cd367
--- /dev/null
+++ b/cmd/web/assets/flags/cf.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/cg.svg b/cmd/web/assets/flags/cg.svg
new file mode 100644
index 0000000..f5a0e42
--- /dev/null
+++ b/cmd/web/assets/flags/cg.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/ch.svg b/cmd/web/assets/flags/ch.svg
new file mode 100644
index 0000000..b42d670
--- /dev/null
+++ b/cmd/web/assets/flags/ch.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/ci.svg b/cmd/web/assets/flags/ci.svg
new file mode 100644
index 0000000..e400f0c
--- /dev/null
+++ b/cmd/web/assets/flags/ci.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/ck.svg b/cmd/web/assets/flags/ck.svg
new file mode 100644
index 0000000..18e547b
--- /dev/null
+++ b/cmd/web/assets/flags/ck.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/cl.svg b/cmd/web/assets/flags/cl.svg
new file mode 100644
index 0000000..5b3c72f
--- /dev/null
+++ b/cmd/web/assets/flags/cl.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/cm.svg b/cmd/web/assets/flags/cm.svg
new file mode 100644
index 0000000..70adc8b
--- /dev/null
+++ b/cmd/web/assets/flags/cm.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/cn.svg b/cmd/web/assets/flags/cn.svg
new file mode 100644
index 0000000..10d3489
--- /dev/null
+++ b/cmd/web/assets/flags/cn.svg
@@ -0,0 +1,11 @@
+
diff --git a/cmd/web/assets/flags/co.svg b/cmd/web/assets/flags/co.svg
new file mode 100644
index 0000000..ebd0a0f
--- /dev/null
+++ b/cmd/web/assets/flags/co.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/cp.svg b/cmd/web/assets/flags/cp.svg
new file mode 100644
index 0000000..b8aa9cf
--- /dev/null
+++ b/cmd/web/assets/flags/cp.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/cr.svg b/cmd/web/assets/flags/cr.svg
new file mode 100644
index 0000000..5a409ee
--- /dev/null
+++ b/cmd/web/assets/flags/cr.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/cu.svg b/cmd/web/assets/flags/cu.svg
new file mode 100644
index 0000000..053c9ee
--- /dev/null
+++ b/cmd/web/assets/flags/cu.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/cv.svg b/cmd/web/assets/flags/cv.svg
new file mode 100644
index 0000000..aec8994
--- /dev/null
+++ b/cmd/web/assets/flags/cv.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/cw.svg b/cmd/web/assets/flags/cw.svg
new file mode 100644
index 0000000..bb0ece2
--- /dev/null
+++ b/cmd/web/assets/flags/cw.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/cx.svg b/cmd/web/assets/flags/cx.svg
new file mode 100644
index 0000000..3a83c23
--- /dev/null
+++ b/cmd/web/assets/flags/cx.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/cy.svg b/cmd/web/assets/flags/cy.svg
new file mode 100644
index 0000000..ee4b0c7
--- /dev/null
+++ b/cmd/web/assets/flags/cy.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/cz.svg b/cmd/web/assets/flags/cz.svg
new file mode 100644
index 0000000..7913de3
--- /dev/null
+++ b/cmd/web/assets/flags/cz.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/de.svg b/cmd/web/assets/flags/de.svg
new file mode 100644
index 0000000..71aa2d2
--- /dev/null
+++ b/cmd/web/assets/flags/de.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/dg.svg b/cmd/web/assets/flags/dg.svg
new file mode 100644
index 0000000..dfee2bb
--- /dev/null
+++ b/cmd/web/assets/flags/dg.svg
@@ -0,0 +1,130 @@
+
diff --git a/cmd/web/assets/flags/dj.svg b/cmd/web/assets/flags/dj.svg
new file mode 100644
index 0000000..9b00a82
--- /dev/null
+++ b/cmd/web/assets/flags/dj.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/dk.svg b/cmd/web/assets/flags/dk.svg
new file mode 100644
index 0000000..563277f
--- /dev/null
+++ b/cmd/web/assets/flags/dk.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/dm.svg b/cmd/web/assets/flags/dm.svg
new file mode 100644
index 0000000..5aa9cea
--- /dev/null
+++ b/cmd/web/assets/flags/dm.svg
@@ -0,0 +1,152 @@
+
diff --git a/cmd/web/assets/flags/do.svg b/cmd/web/assets/flags/do.svg
new file mode 100644
index 0000000..6de2b26
--- /dev/null
+++ b/cmd/web/assets/flags/do.svg
@@ -0,0 +1,121 @@
+
diff --git a/cmd/web/assets/flags/dz.svg b/cmd/web/assets/flags/dz.svg
new file mode 100644
index 0000000..5ff29a7
--- /dev/null
+++ b/cmd/web/assets/flags/dz.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/eac.svg b/cmd/web/assets/flags/eac.svg
new file mode 100644
index 0000000..59d02d2
--- /dev/null
+++ b/cmd/web/assets/flags/eac.svg
@@ -0,0 +1,48 @@
+
diff --git a/cmd/web/assets/flags/ec.svg b/cmd/web/assets/flags/ec.svg
new file mode 100644
index 0000000..88c50bf
--- /dev/null
+++ b/cmd/web/assets/flags/ec.svg
@@ -0,0 +1,138 @@
+
diff --git a/cmd/web/assets/flags/ee.svg b/cmd/web/assets/flags/ee.svg
new file mode 100644
index 0000000..8b98c2c
--- /dev/null
+++ b/cmd/web/assets/flags/ee.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/eg.svg b/cmd/web/assets/flags/eg.svg
new file mode 100644
index 0000000..88e32b3
--- /dev/null
+++ b/cmd/web/assets/flags/eg.svg
@@ -0,0 +1,38 @@
+
diff --git a/cmd/web/assets/flags/eh.svg b/cmd/web/assets/flags/eh.svg
new file mode 100644
index 0000000..6aec728
--- /dev/null
+++ b/cmd/web/assets/flags/eh.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/er.svg b/cmd/web/assets/flags/er.svg
new file mode 100644
index 0000000..48a13b4
--- /dev/null
+++ b/cmd/web/assets/flags/er.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/es-ct.svg b/cmd/web/assets/flags/es-ct.svg
new file mode 100644
index 0000000..4d85911
--- /dev/null
+++ b/cmd/web/assets/flags/es-ct.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/es-ga.svg b/cmd/web/assets/flags/es-ga.svg
new file mode 100644
index 0000000..573ca45
--- /dev/null
+++ b/cmd/web/assets/flags/es-ga.svg
@@ -0,0 +1,187 @@
+
diff --git a/cmd/web/assets/flags/es-pv.svg b/cmd/web/assets/flags/es-pv.svg
new file mode 100644
index 0000000..63c19f4
--- /dev/null
+++ b/cmd/web/assets/flags/es-pv.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/es.svg b/cmd/web/assets/flags/es.svg
new file mode 100644
index 0000000..a296ebf
--- /dev/null
+++ b/cmd/web/assets/flags/es.svg
@@ -0,0 +1,544 @@
+
diff --git a/cmd/web/assets/flags/et.svg b/cmd/web/assets/flags/et.svg
new file mode 100644
index 0000000..3f99be4
--- /dev/null
+++ b/cmd/web/assets/flags/et.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/eu.svg b/cmd/web/assets/flags/eu.svg
new file mode 100644
index 0000000..b0874c1
--- /dev/null
+++ b/cmd/web/assets/flags/eu.svg
@@ -0,0 +1,28 @@
+
diff --git a/cmd/web/assets/flags/fi.svg b/cmd/web/assets/flags/fi.svg
new file mode 100644
index 0000000..470be2d
--- /dev/null
+++ b/cmd/web/assets/flags/fi.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/fj.svg b/cmd/web/assets/flags/fj.svg
new file mode 100644
index 0000000..332ae61
--- /dev/null
+++ b/cmd/web/assets/flags/fj.svg
@@ -0,0 +1,120 @@
+
diff --git a/cmd/web/assets/flags/fk.svg b/cmd/web/assets/flags/fk.svg
new file mode 100644
index 0000000..a0dace8
--- /dev/null
+++ b/cmd/web/assets/flags/fk.svg
@@ -0,0 +1,90 @@
+
diff --git a/cmd/web/assets/flags/fm.svg b/cmd/web/assets/flags/fm.svg
new file mode 100644
index 0000000..c1b7c97
--- /dev/null
+++ b/cmd/web/assets/flags/fm.svg
@@ -0,0 +1,11 @@
+
diff --git a/cmd/web/assets/flags/fo.svg b/cmd/web/assets/flags/fo.svg
new file mode 100644
index 0000000..f802d28
--- /dev/null
+++ b/cmd/web/assets/flags/fo.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/fr.svg b/cmd/web/assets/flags/fr.svg
new file mode 100644
index 0000000..4110e59
--- /dev/null
+++ b/cmd/web/assets/flags/fr.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/ga.svg b/cmd/web/assets/flags/ga.svg
new file mode 100644
index 0000000..76edab4
--- /dev/null
+++ b/cmd/web/assets/flags/ga.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/gb-eng.svg b/cmd/web/assets/flags/gb-eng.svg
new file mode 100644
index 0000000..12e3b67
--- /dev/null
+++ b/cmd/web/assets/flags/gb-eng.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/gb-nir.svg b/cmd/web/assets/flags/gb-nir.svg
new file mode 100644
index 0000000..e22190a
--- /dev/null
+++ b/cmd/web/assets/flags/gb-nir.svg
@@ -0,0 +1,132 @@
+
diff --git a/cmd/web/assets/flags/gb-sct.svg b/cmd/web/assets/flags/gb-sct.svg
new file mode 100644
index 0000000..f50cd32
--- /dev/null
+++ b/cmd/web/assets/flags/gb-sct.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/gb-wls.svg b/cmd/web/assets/flags/gb-wls.svg
new file mode 100644
index 0000000..d7f5791
--- /dev/null
+++ b/cmd/web/assets/flags/gb-wls.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/gb.svg b/cmd/web/assets/flags/gb.svg
new file mode 100644
index 0000000..7991383
--- /dev/null
+++ b/cmd/web/assets/flags/gb.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/gd.svg b/cmd/web/assets/flags/gd.svg
new file mode 100644
index 0000000..b3d250d
--- /dev/null
+++ b/cmd/web/assets/flags/gd.svg
@@ -0,0 +1,27 @@
+
diff --git a/cmd/web/assets/flags/ge.svg b/cmd/web/assets/flags/ge.svg
new file mode 100644
index 0000000..ab08a9a
--- /dev/null
+++ b/cmd/web/assets/flags/ge.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/gf.svg b/cmd/web/assets/flags/gf.svg
new file mode 100644
index 0000000..f8fe94c
--- /dev/null
+++ b/cmd/web/assets/flags/gf.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/gg.svg b/cmd/web/assets/flags/gg.svg
new file mode 100644
index 0000000..f8216c8
--- /dev/null
+++ b/cmd/web/assets/flags/gg.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/gh.svg b/cmd/web/assets/flags/gh.svg
new file mode 100644
index 0000000..5c3e3e6
--- /dev/null
+++ b/cmd/web/assets/flags/gh.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/gi.svg b/cmd/web/assets/flags/gi.svg
new file mode 100644
index 0000000..a5d7570
--- /dev/null
+++ b/cmd/web/assets/flags/gi.svg
@@ -0,0 +1,32 @@
+
diff --git a/cmd/web/assets/flags/gl.svg b/cmd/web/assets/flags/gl.svg
new file mode 100644
index 0000000..eb5a52e
--- /dev/null
+++ b/cmd/web/assets/flags/gl.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/gm.svg b/cmd/web/assets/flags/gm.svg
new file mode 100644
index 0000000..8fe9d66
--- /dev/null
+++ b/cmd/web/assets/flags/gm.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/gn.svg b/cmd/web/assets/flags/gn.svg
new file mode 100644
index 0000000..40d6ad4
--- /dev/null
+++ b/cmd/web/assets/flags/gn.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/gp.svg b/cmd/web/assets/flags/gp.svg
new file mode 100644
index 0000000..ee55c4b
--- /dev/null
+++ b/cmd/web/assets/flags/gp.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/gq.svg b/cmd/web/assets/flags/gq.svg
new file mode 100644
index 0000000..64c8eb2
--- /dev/null
+++ b/cmd/web/assets/flags/gq.svg
@@ -0,0 +1,23 @@
+
diff --git a/cmd/web/assets/flags/gr.svg b/cmd/web/assets/flags/gr.svg
new file mode 100644
index 0000000..599741e
--- /dev/null
+++ b/cmd/web/assets/flags/gr.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/gs.svg b/cmd/web/assets/flags/gs.svg
new file mode 100644
index 0000000..29db9b9
--- /dev/null
+++ b/cmd/web/assets/flags/gs.svg
@@ -0,0 +1,133 @@
+
diff --git a/cmd/web/assets/flags/gt.svg b/cmd/web/assets/flags/gt.svg
new file mode 100644
index 0000000..7df9df5
--- /dev/null
+++ b/cmd/web/assets/flags/gt.svg
@@ -0,0 +1,204 @@
+
diff --git a/cmd/web/assets/flags/gu.svg b/cmd/web/assets/flags/gu.svg
new file mode 100644
index 0000000..3b95219
--- /dev/null
+++ b/cmd/web/assets/flags/gu.svg
@@ -0,0 +1,19 @@
+
diff --git a/cmd/web/assets/flags/gw.svg b/cmd/web/assets/flags/gw.svg
new file mode 100644
index 0000000..d470bac
--- /dev/null
+++ b/cmd/web/assets/flags/gw.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/gy.svg b/cmd/web/assets/flags/gy.svg
new file mode 100644
index 0000000..569fb56
--- /dev/null
+++ b/cmd/web/assets/flags/gy.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/hk.svg b/cmd/web/assets/flags/hk.svg
new file mode 100644
index 0000000..4fd55bc
--- /dev/null
+++ b/cmd/web/assets/flags/hk.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/hm.svg b/cmd/web/assets/flags/hm.svg
new file mode 100644
index 0000000..815c482
--- /dev/null
+++ b/cmd/web/assets/flags/hm.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/hn.svg b/cmd/web/assets/flags/hn.svg
new file mode 100644
index 0000000..11fde67
--- /dev/null
+++ b/cmd/web/assets/flags/hn.svg
@@ -0,0 +1,18 @@
+
diff --git a/cmd/web/assets/flags/hr.svg b/cmd/web/assets/flags/hr.svg
new file mode 100644
index 0000000..dde825c
--- /dev/null
+++ b/cmd/web/assets/flags/hr.svg
@@ -0,0 +1,58 @@
+
diff --git a/cmd/web/assets/flags/ht.svg b/cmd/web/assets/flags/ht.svg
new file mode 100644
index 0000000..8e8efc4
--- /dev/null
+++ b/cmd/web/assets/flags/ht.svg
@@ -0,0 +1,116 @@
+
diff --git a/cmd/web/assets/flags/hu.svg b/cmd/web/assets/flags/hu.svg
new file mode 100644
index 0000000..baddf7f
--- /dev/null
+++ b/cmd/web/assets/flags/hu.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/ic.svg b/cmd/web/assets/flags/ic.svg
new file mode 100644
index 0000000..81e6ee2
--- /dev/null
+++ b/cmd/web/assets/flags/ic.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/id.svg b/cmd/web/assets/flags/id.svg
new file mode 100644
index 0000000..3b7c8fc
--- /dev/null
+++ b/cmd/web/assets/flags/id.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/ie.svg b/cmd/web/assets/flags/ie.svg
new file mode 100644
index 0000000..049be14
--- /dev/null
+++ b/cmd/web/assets/flags/ie.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/il.svg b/cmd/web/assets/flags/il.svg
new file mode 100644
index 0000000..f43be7e
--- /dev/null
+++ b/cmd/web/assets/flags/il.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/im.svg b/cmd/web/assets/flags/im.svg
new file mode 100644
index 0000000..fe6a59a
--- /dev/null
+++ b/cmd/web/assets/flags/im.svg
@@ -0,0 +1,36 @@
+
diff --git a/cmd/web/assets/flags/in.svg b/cmd/web/assets/flags/in.svg
new file mode 100644
index 0000000..bc47d74
--- /dev/null
+++ b/cmd/web/assets/flags/in.svg
@@ -0,0 +1,25 @@
+
diff --git a/cmd/web/assets/flags/io.svg b/cmd/web/assets/flags/io.svg
new file mode 100644
index 0000000..3058f7d
--- /dev/null
+++ b/cmd/web/assets/flags/io.svg
@@ -0,0 +1,130 @@
+
diff --git a/cmd/web/assets/flags/iq.svg b/cmd/web/assets/flags/iq.svg
new file mode 100644
index 0000000..8044514
--- /dev/null
+++ b/cmd/web/assets/flags/iq.svg
@@ -0,0 +1,10 @@
+
diff --git a/cmd/web/assets/flags/ir.svg b/cmd/web/assets/flags/ir.svg
new file mode 100644
index 0000000..8c6d516
--- /dev/null
+++ b/cmd/web/assets/flags/ir.svg
@@ -0,0 +1,219 @@
+
diff --git a/cmd/web/assets/flags/is.svg b/cmd/web/assets/flags/is.svg
new file mode 100644
index 0000000..a6588af
--- /dev/null
+++ b/cmd/web/assets/flags/is.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/it.svg b/cmd/web/assets/flags/it.svg
new file mode 100644
index 0000000..20a8bfd
--- /dev/null
+++ b/cmd/web/assets/flags/it.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/je.svg b/cmd/web/assets/flags/je.svg
new file mode 100644
index 0000000..70a8754
--- /dev/null
+++ b/cmd/web/assets/flags/je.svg
@@ -0,0 +1,62 @@
+
diff --git a/cmd/web/assets/flags/jm.svg b/cmd/web/assets/flags/jm.svg
new file mode 100644
index 0000000..269df03
--- /dev/null
+++ b/cmd/web/assets/flags/jm.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/jo.svg b/cmd/web/assets/flags/jo.svg
new file mode 100644
index 0000000..d6f927d
--- /dev/null
+++ b/cmd/web/assets/flags/jo.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/jp.svg b/cmd/web/assets/flags/jp.svg
new file mode 100644
index 0000000..cc1c181
--- /dev/null
+++ b/cmd/web/assets/flags/jp.svg
@@ -0,0 +1,11 @@
+
diff --git a/cmd/web/assets/flags/ke.svg b/cmd/web/assets/flags/ke.svg
new file mode 100644
index 0000000..3a67ca3
--- /dev/null
+++ b/cmd/web/assets/flags/ke.svg
@@ -0,0 +1,23 @@
+
diff --git a/cmd/web/assets/flags/kg.svg b/cmd/web/assets/flags/kg.svg
new file mode 100644
index 0000000..e26db95
--- /dev/null
+++ b/cmd/web/assets/flags/kg.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/kh.svg b/cmd/web/assets/flags/kh.svg
new file mode 100644
index 0000000..a7d52f2
--- /dev/null
+++ b/cmd/web/assets/flags/kh.svg
@@ -0,0 +1,61 @@
+
diff --git a/cmd/web/assets/flags/ki.svg b/cmd/web/assets/flags/ki.svg
new file mode 100644
index 0000000..fda03f3
--- /dev/null
+++ b/cmd/web/assets/flags/ki.svg
@@ -0,0 +1,36 @@
+
diff --git a/cmd/web/assets/flags/km.svg b/cmd/web/assets/flags/km.svg
new file mode 100644
index 0000000..414d65e
--- /dev/null
+++ b/cmd/web/assets/flags/km.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/kn.svg b/cmd/web/assets/flags/kn.svg
new file mode 100644
index 0000000..47fe64d
--- /dev/null
+++ b/cmd/web/assets/flags/kn.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/kp.svg b/cmd/web/assets/flags/kp.svg
new file mode 100644
index 0000000..ad1b713
--- /dev/null
+++ b/cmd/web/assets/flags/kp.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/kr.svg b/cmd/web/assets/flags/kr.svg
new file mode 100644
index 0000000..6947eab
--- /dev/null
+++ b/cmd/web/assets/flags/kr.svg
@@ -0,0 +1,24 @@
+
diff --git a/cmd/web/assets/flags/kw.svg b/cmd/web/assets/flags/kw.svg
new file mode 100644
index 0000000..3dd89e9
--- /dev/null
+++ b/cmd/web/assets/flags/kw.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/ky.svg b/cmd/web/assets/flags/ky.svg
new file mode 100644
index 0000000..aeaa7e0
--- /dev/null
+++ b/cmd/web/assets/flags/ky.svg
@@ -0,0 +1,103 @@
+
diff --git a/cmd/web/assets/flags/kz.svg b/cmd/web/assets/flags/kz.svg
new file mode 100644
index 0000000..2fac45b
--- /dev/null
+++ b/cmd/web/assets/flags/kz.svg
@@ -0,0 +1,36 @@
+
diff --git a/cmd/web/assets/flags/la.svg b/cmd/web/assets/flags/la.svg
new file mode 100644
index 0000000..6aea6b7
--- /dev/null
+++ b/cmd/web/assets/flags/la.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/lb.svg b/cmd/web/assets/flags/lb.svg
new file mode 100644
index 0000000..bde2581
--- /dev/null
+++ b/cmd/web/assets/flags/lb.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/lc.svg b/cmd/web/assets/flags/lc.svg
new file mode 100644
index 0000000..bb25654
--- /dev/null
+++ b/cmd/web/assets/flags/lc.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/li.svg b/cmd/web/assets/flags/li.svg
new file mode 100644
index 0000000..7a4d183
--- /dev/null
+++ b/cmd/web/assets/flags/li.svg
@@ -0,0 +1,43 @@
+
diff --git a/cmd/web/assets/flags/lk.svg b/cmd/web/assets/flags/lk.svg
new file mode 100644
index 0000000..cbd660a
--- /dev/null
+++ b/cmd/web/assets/flags/lk.svg
@@ -0,0 +1,22 @@
+
diff --git a/cmd/web/assets/flags/lr.svg b/cmd/web/assets/flags/lr.svg
new file mode 100644
index 0000000..e482ab9
--- /dev/null
+++ b/cmd/web/assets/flags/lr.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/ls.svg b/cmd/web/assets/flags/ls.svg
new file mode 100644
index 0000000..a7c01a9
--- /dev/null
+++ b/cmd/web/assets/flags/ls.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/lt.svg b/cmd/web/assets/flags/lt.svg
new file mode 100644
index 0000000..90ec5d2
--- /dev/null
+++ b/cmd/web/assets/flags/lt.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/lu.svg b/cmd/web/assets/flags/lu.svg
new file mode 100644
index 0000000..cc12206
--- /dev/null
+++ b/cmd/web/assets/flags/lu.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/lv.svg b/cmd/web/assets/flags/lv.svg
new file mode 100644
index 0000000..6a9e75e
--- /dev/null
+++ b/cmd/web/assets/flags/lv.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/ly.svg b/cmd/web/assets/flags/ly.svg
new file mode 100644
index 0000000..1eaa51e
--- /dev/null
+++ b/cmd/web/assets/flags/ly.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/ma.svg b/cmd/web/assets/flags/ma.svg
new file mode 100644
index 0000000..7ce56ef
--- /dev/null
+++ b/cmd/web/assets/flags/ma.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/mc.svg b/cmd/web/assets/flags/mc.svg
new file mode 100644
index 0000000..9cb6c9e
--- /dev/null
+++ b/cmd/web/assets/flags/mc.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/md.svg b/cmd/web/assets/flags/md.svg
new file mode 100644
index 0000000..e9ba506
--- /dev/null
+++ b/cmd/web/assets/flags/md.svg
@@ -0,0 +1,70 @@
+
diff --git a/cmd/web/assets/flags/me.svg b/cmd/web/assets/flags/me.svg
new file mode 100644
index 0000000..297888c
--- /dev/null
+++ b/cmd/web/assets/flags/me.svg
@@ -0,0 +1,116 @@
+
diff --git a/cmd/web/assets/flags/mf.svg b/cmd/web/assets/flags/mf.svg
new file mode 100644
index 0000000..6305edc
--- /dev/null
+++ b/cmd/web/assets/flags/mf.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/mg.svg b/cmd/web/assets/flags/mg.svg
new file mode 100644
index 0000000..5fa2d24
--- /dev/null
+++ b/cmd/web/assets/flags/mg.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/mh.svg b/cmd/web/assets/flags/mh.svg
new file mode 100644
index 0000000..7b9f490
--- /dev/null
+++ b/cmd/web/assets/flags/mh.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/mk.svg b/cmd/web/assets/flags/mk.svg
new file mode 100644
index 0000000..4f5cae7
--- /dev/null
+++ b/cmd/web/assets/flags/mk.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/ml.svg b/cmd/web/assets/flags/ml.svg
new file mode 100644
index 0000000..6f6b716
--- /dev/null
+++ b/cmd/web/assets/flags/ml.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/mm.svg b/cmd/web/assets/flags/mm.svg
new file mode 100644
index 0000000..42b4dee
--- /dev/null
+++ b/cmd/web/assets/flags/mm.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/mn.svg b/cmd/web/assets/flags/mn.svg
new file mode 100644
index 0000000..6a38a71
--- /dev/null
+++ b/cmd/web/assets/flags/mn.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/mo.svg b/cmd/web/assets/flags/mo.svg
new file mode 100644
index 0000000..f638b6c
--- /dev/null
+++ b/cmd/web/assets/flags/mo.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/mp.svg b/cmd/web/assets/flags/mp.svg
new file mode 100644
index 0000000..26bfa22
--- /dev/null
+++ b/cmd/web/assets/flags/mp.svg
@@ -0,0 +1,86 @@
+
diff --git a/cmd/web/assets/flags/mq.svg b/cmd/web/assets/flags/mq.svg
new file mode 100644
index 0000000..b221951
--- /dev/null
+++ b/cmd/web/assets/flags/mq.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/mr.svg b/cmd/web/assets/flags/mr.svg
new file mode 100644
index 0000000..d859972
--- /dev/null
+++ b/cmd/web/assets/flags/mr.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/ms.svg b/cmd/web/assets/flags/ms.svg
new file mode 100644
index 0000000..4367505
--- /dev/null
+++ b/cmd/web/assets/flags/ms.svg
@@ -0,0 +1,29 @@
+
diff --git a/cmd/web/assets/flags/mt.svg b/cmd/web/assets/flags/mt.svg
new file mode 100644
index 0000000..5d5d7c8
--- /dev/null
+++ b/cmd/web/assets/flags/mt.svg
@@ -0,0 +1,58 @@
+
diff --git a/cmd/web/assets/flags/mu.svg b/cmd/web/assets/flags/mu.svg
new file mode 100644
index 0000000..82d7a3b
--- /dev/null
+++ b/cmd/web/assets/flags/mu.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/mv.svg b/cmd/web/assets/flags/mv.svg
new file mode 100644
index 0000000..10450f9
--- /dev/null
+++ b/cmd/web/assets/flags/mv.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/mw.svg b/cmd/web/assets/flags/mw.svg
new file mode 100644
index 0000000..137ff87
--- /dev/null
+++ b/cmd/web/assets/flags/mw.svg
@@ -0,0 +1,10 @@
+
diff --git a/cmd/web/assets/flags/mx.svg b/cmd/web/assets/flags/mx.svg
new file mode 100644
index 0000000..e3ec2bc
--- /dev/null
+++ b/cmd/web/assets/flags/mx.svg
@@ -0,0 +1,382 @@
+
diff --git a/cmd/web/assets/flags/my.svg b/cmd/web/assets/flags/my.svg
new file mode 100644
index 0000000..115f864
--- /dev/null
+++ b/cmd/web/assets/flags/my.svg
@@ -0,0 +1,26 @@
+
diff --git a/cmd/web/assets/flags/mz.svg b/cmd/web/assets/flags/mz.svg
new file mode 100644
index 0000000..0f94c3a
--- /dev/null
+++ b/cmd/web/assets/flags/mz.svg
@@ -0,0 +1,21 @@
+
diff --git a/cmd/web/assets/flags/na.svg b/cmd/web/assets/flags/na.svg
new file mode 100644
index 0000000..35b9f78
--- /dev/null
+++ b/cmd/web/assets/flags/na.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/nc.svg b/cmd/web/assets/flags/nc.svg
new file mode 100644
index 0000000..fa15551
--- /dev/null
+++ b/cmd/web/assets/flags/nc.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/ne.svg b/cmd/web/assets/flags/ne.svg
new file mode 100644
index 0000000..39a82b8
--- /dev/null
+++ b/cmd/web/assets/flags/ne.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/nf.svg b/cmd/web/assets/flags/nf.svg
new file mode 100644
index 0000000..fd61b25
--- /dev/null
+++ b/cmd/web/assets/flags/nf.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/ng.svg b/cmd/web/assets/flags/ng.svg
new file mode 100644
index 0000000..81eb35f
--- /dev/null
+++ b/cmd/web/assets/flags/ng.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/ni.svg b/cmd/web/assets/flags/ni.svg
new file mode 100644
index 0000000..e4861f5
--- /dev/null
+++ b/cmd/web/assets/flags/ni.svg
@@ -0,0 +1,129 @@
+
diff --git a/cmd/web/assets/flags/nl.svg b/cmd/web/assets/flags/nl.svg
new file mode 100644
index 0000000..e90f5b0
--- /dev/null
+++ b/cmd/web/assets/flags/nl.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/no.svg b/cmd/web/assets/flags/no.svg
new file mode 100644
index 0000000..a5f2a15
--- /dev/null
+++ b/cmd/web/assets/flags/no.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/np.svg b/cmd/web/assets/flags/np.svg
new file mode 100644
index 0000000..6242856
--- /dev/null
+++ b/cmd/web/assets/flags/np.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/nr.svg b/cmd/web/assets/flags/nr.svg
new file mode 100644
index 0000000..ff394c4
--- /dev/null
+++ b/cmd/web/assets/flags/nr.svg
@@ -0,0 +1,12 @@
+
diff --git a/cmd/web/assets/flags/nu.svg b/cmd/web/assets/flags/nu.svg
new file mode 100644
index 0000000..4067baf
--- /dev/null
+++ b/cmd/web/assets/flags/nu.svg
@@ -0,0 +1,10 @@
+
diff --git a/cmd/web/assets/flags/nz.svg b/cmd/web/assets/flags/nz.svg
new file mode 100644
index 0000000..935d8a7
--- /dev/null
+++ b/cmd/web/assets/flags/nz.svg
@@ -0,0 +1,36 @@
+
diff --git a/cmd/web/assets/flags/om.svg b/cmd/web/assets/flags/om.svg
new file mode 100644
index 0000000..4f1461a
--- /dev/null
+++ b/cmd/web/assets/flags/om.svg
@@ -0,0 +1,115 @@
+
diff --git a/cmd/web/assets/flags/pa.svg b/cmd/web/assets/flags/pa.svg
new file mode 100644
index 0000000..8dc03bc
--- /dev/null
+++ b/cmd/web/assets/flags/pa.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/pc.svg b/cmd/web/assets/flags/pc.svg
new file mode 100644
index 0000000..5202d6d
--- /dev/null
+++ b/cmd/web/assets/flags/pc.svg
@@ -0,0 +1,33 @@
+
diff --git a/cmd/web/assets/flags/pe.svg b/cmd/web/assets/flags/pe.svg
new file mode 100644
index 0000000..33e6cfd
--- /dev/null
+++ b/cmd/web/assets/flags/pe.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/pf.svg b/cmd/web/assets/flags/pf.svg
new file mode 100644
index 0000000..bea0354
--- /dev/null
+++ b/cmd/web/assets/flags/pf.svg
@@ -0,0 +1,19 @@
+
diff --git a/cmd/web/assets/flags/pg.svg b/cmd/web/assets/flags/pg.svg
new file mode 100644
index 0000000..7b7e77a
--- /dev/null
+++ b/cmd/web/assets/flags/pg.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/ph.svg b/cmd/web/assets/flags/ph.svg
new file mode 100644
index 0000000..b910e24
--- /dev/null
+++ b/cmd/web/assets/flags/ph.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/pk.svg b/cmd/web/assets/flags/pk.svg
new file mode 100644
index 0000000..4ddc19f
--- /dev/null
+++ b/cmd/web/assets/flags/pk.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/pl.svg b/cmd/web/assets/flags/pl.svg
new file mode 100644
index 0000000..0fa5145
--- /dev/null
+++ b/cmd/web/assets/flags/pl.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/pm.svg b/cmd/web/assets/flags/pm.svg
new file mode 100644
index 0000000..19a9330
--- /dev/null
+++ b/cmd/web/assets/flags/pm.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/pn.svg b/cmd/web/assets/flags/pn.svg
new file mode 100644
index 0000000..209ea71
--- /dev/null
+++ b/cmd/web/assets/flags/pn.svg
@@ -0,0 +1,53 @@
+
diff --git a/cmd/web/assets/flags/pr.svg b/cmd/web/assets/flags/pr.svg
new file mode 100644
index 0000000..ec51831
--- /dev/null
+++ b/cmd/web/assets/flags/pr.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/ps.svg b/cmd/web/assets/flags/ps.svg
new file mode 100644
index 0000000..362d435
--- /dev/null
+++ b/cmd/web/assets/flags/ps.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/pt.svg b/cmd/web/assets/flags/pt.svg
new file mode 100644
index 0000000..2767cd4
--- /dev/null
+++ b/cmd/web/assets/flags/pt.svg
@@ -0,0 +1,57 @@
+
diff --git a/cmd/web/assets/flags/pw.svg b/cmd/web/assets/flags/pw.svg
new file mode 100644
index 0000000..9f89c5f
--- /dev/null
+++ b/cmd/web/assets/flags/pw.svg
@@ -0,0 +1,11 @@
+
diff --git a/cmd/web/assets/flags/py.svg b/cmd/web/assets/flags/py.svg
new file mode 100644
index 0000000..abccd87
--- /dev/null
+++ b/cmd/web/assets/flags/py.svg
@@ -0,0 +1,157 @@
+
diff --git a/cmd/web/assets/flags/qa.svg b/cmd/web/assets/flags/qa.svg
new file mode 100644
index 0000000..901f3fa
--- /dev/null
+++ b/cmd/web/assets/flags/qa.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/re.svg b/cmd/web/assets/flags/re.svg
new file mode 100644
index 0000000..64e788e
--- /dev/null
+++ b/cmd/web/assets/flags/re.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/ro.svg b/cmd/web/assets/flags/ro.svg
new file mode 100644
index 0000000..fda0f7b
--- /dev/null
+++ b/cmd/web/assets/flags/ro.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/rs.svg b/cmd/web/assets/flags/rs.svg
new file mode 100644
index 0000000..6d4f74d
--- /dev/null
+++ b/cmd/web/assets/flags/rs.svg
@@ -0,0 +1,292 @@
+
diff --git a/cmd/web/assets/flags/ru.svg b/cmd/web/assets/flags/ru.svg
new file mode 100644
index 0000000..cf24301
--- /dev/null
+++ b/cmd/web/assets/flags/ru.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/rw.svg b/cmd/web/assets/flags/rw.svg
new file mode 100644
index 0000000..06e26ae
--- /dev/null
+++ b/cmd/web/assets/flags/rw.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/sa.svg b/cmd/web/assets/flags/sa.svg
new file mode 100644
index 0000000..596cf48
--- /dev/null
+++ b/cmd/web/assets/flags/sa.svg
@@ -0,0 +1,25 @@
+
diff --git a/cmd/web/assets/flags/sb.svg b/cmd/web/assets/flags/sb.svg
new file mode 100644
index 0000000..6066f94
--- /dev/null
+++ b/cmd/web/assets/flags/sb.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/sc.svg b/cmd/web/assets/flags/sc.svg
new file mode 100644
index 0000000..9a46b36
--- /dev/null
+++ b/cmd/web/assets/flags/sc.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/sd.svg b/cmd/web/assets/flags/sd.svg
new file mode 100644
index 0000000..12818b4
--- /dev/null
+++ b/cmd/web/assets/flags/sd.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/se.svg b/cmd/web/assets/flags/se.svg
new file mode 100644
index 0000000..8ba745a
--- /dev/null
+++ b/cmd/web/assets/flags/se.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/sg.svg b/cmd/web/assets/flags/sg.svg
new file mode 100644
index 0000000..c4dd4ac
--- /dev/null
+++ b/cmd/web/assets/flags/sg.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/sh-ac.svg b/cmd/web/assets/flags/sh-ac.svg
new file mode 100644
index 0000000..c43b301
--- /dev/null
+++ b/cmd/web/assets/flags/sh-ac.svg
@@ -0,0 +1,689 @@
+
diff --git a/cmd/web/assets/flags/sh-hl.svg b/cmd/web/assets/flags/sh-hl.svg
new file mode 100644
index 0000000..2150bf6
--- /dev/null
+++ b/cmd/web/assets/flags/sh-hl.svg
@@ -0,0 +1,164 @@
+
diff --git a/cmd/web/assets/flags/sh-ta.svg b/cmd/web/assets/flags/sh-ta.svg
new file mode 100644
index 0000000..ba39063
--- /dev/null
+++ b/cmd/web/assets/flags/sh-ta.svg
@@ -0,0 +1,76 @@
+
diff --git a/cmd/web/assets/flags/sh.svg b/cmd/web/assets/flags/sh.svg
new file mode 100644
index 0000000..7aba0ae
--- /dev/null
+++ b/cmd/web/assets/flags/sh.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/si.svg b/cmd/web/assets/flags/si.svg
new file mode 100644
index 0000000..1bbdd94
--- /dev/null
+++ b/cmd/web/assets/flags/si.svg
@@ -0,0 +1,18 @@
+
diff --git a/cmd/web/assets/flags/sj.svg b/cmd/web/assets/flags/sj.svg
new file mode 100644
index 0000000..bb2799c
--- /dev/null
+++ b/cmd/web/assets/flags/sj.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/sk.svg b/cmd/web/assets/flags/sk.svg
new file mode 100644
index 0000000..676018e
--- /dev/null
+++ b/cmd/web/assets/flags/sk.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/sl.svg b/cmd/web/assets/flags/sl.svg
new file mode 100644
index 0000000..a07baf7
--- /dev/null
+++ b/cmd/web/assets/flags/sl.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/sm.svg b/cmd/web/assets/flags/sm.svg
new file mode 100644
index 0000000..e41d2f7
--- /dev/null
+++ b/cmd/web/assets/flags/sm.svg
@@ -0,0 +1,75 @@
+
diff --git a/cmd/web/assets/flags/sn.svg b/cmd/web/assets/flags/sn.svg
new file mode 100644
index 0000000..7c0673d
--- /dev/null
+++ b/cmd/web/assets/flags/sn.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/so.svg b/cmd/web/assets/flags/so.svg
new file mode 100644
index 0000000..a581ac6
--- /dev/null
+++ b/cmd/web/assets/flags/so.svg
@@ -0,0 +1,11 @@
+
diff --git a/cmd/web/assets/flags/sr.svg b/cmd/web/assets/flags/sr.svg
new file mode 100644
index 0000000..5e71c40
--- /dev/null
+++ b/cmd/web/assets/flags/sr.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/ss.svg b/cmd/web/assets/flags/ss.svg
new file mode 100644
index 0000000..b257aa0
--- /dev/null
+++ b/cmd/web/assets/flags/ss.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/st.svg b/cmd/web/assets/flags/st.svg
new file mode 100644
index 0000000..1294bcb
--- /dev/null
+++ b/cmd/web/assets/flags/st.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/sv.svg b/cmd/web/assets/flags/sv.svg
new file mode 100644
index 0000000..cbc674a
--- /dev/null
+++ b/cmd/web/assets/flags/sv.svg
@@ -0,0 +1,593 @@
+
diff --git a/cmd/web/assets/flags/sx.svg b/cmd/web/assets/flags/sx.svg
new file mode 100644
index 0000000..ac78561
--- /dev/null
+++ b/cmd/web/assets/flags/sx.svg
@@ -0,0 +1,56 @@
+
diff --git a/cmd/web/assets/flags/sy.svg b/cmd/web/assets/flags/sy.svg
new file mode 100644
index 0000000..97c05cf
--- /dev/null
+++ b/cmd/web/assets/flags/sy.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/sz.svg b/cmd/web/assets/flags/sz.svg
new file mode 100644
index 0000000..eb538e4
--- /dev/null
+++ b/cmd/web/assets/flags/sz.svg
@@ -0,0 +1,34 @@
+
diff --git a/cmd/web/assets/flags/tc.svg b/cmd/web/assets/flags/tc.svg
new file mode 100644
index 0000000..1258971
--- /dev/null
+++ b/cmd/web/assets/flags/tc.svg
@@ -0,0 +1,50 @@
+
diff --git a/cmd/web/assets/flags/td.svg b/cmd/web/assets/flags/td.svg
new file mode 100644
index 0000000..fa3bd92
--- /dev/null
+++ b/cmd/web/assets/flags/td.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/tf.svg b/cmd/web/assets/flags/tf.svg
new file mode 100644
index 0000000..fba2335
--- /dev/null
+++ b/cmd/web/assets/flags/tf.svg
@@ -0,0 +1,15 @@
+
diff --git a/cmd/web/assets/flags/tg.svg b/cmd/web/assets/flags/tg.svg
new file mode 100644
index 0000000..9d6ea6c
--- /dev/null
+++ b/cmd/web/assets/flags/tg.svg
@@ -0,0 +1,14 @@
+
diff --git a/cmd/web/assets/flags/th.svg b/cmd/web/assets/flags/th.svg
new file mode 100644
index 0000000..1e93a61
--- /dev/null
+++ b/cmd/web/assets/flags/th.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/tj.svg b/cmd/web/assets/flags/tj.svg
new file mode 100644
index 0000000..f8c9a03
--- /dev/null
+++ b/cmd/web/assets/flags/tj.svg
@@ -0,0 +1,22 @@
+
diff --git a/cmd/web/assets/flags/tk.svg b/cmd/web/assets/flags/tk.svg
new file mode 100644
index 0000000..05d3e86
--- /dev/null
+++ b/cmd/web/assets/flags/tk.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/tl.svg b/cmd/web/assets/flags/tl.svg
new file mode 100644
index 0000000..3d0701a
--- /dev/null
+++ b/cmd/web/assets/flags/tl.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/tm.svg b/cmd/web/assets/flags/tm.svg
new file mode 100644
index 0000000..4154ed7
--- /dev/null
+++ b/cmd/web/assets/flags/tm.svg
@@ -0,0 +1,204 @@
+
diff --git a/cmd/web/assets/flags/tn.svg b/cmd/web/assets/flags/tn.svg
new file mode 100644
index 0000000..5735c19
--- /dev/null
+++ b/cmd/web/assets/flags/tn.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/to.svg b/cmd/web/assets/flags/to.svg
new file mode 100644
index 0000000..d072337
--- /dev/null
+++ b/cmd/web/assets/flags/to.svg
@@ -0,0 +1,10 @@
+
diff --git a/cmd/web/assets/flags/tr.svg b/cmd/web/assets/flags/tr.svg
new file mode 100644
index 0000000..b96da21
--- /dev/null
+++ b/cmd/web/assets/flags/tr.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/tt.svg b/cmd/web/assets/flags/tt.svg
new file mode 100644
index 0000000..bc24938
--- /dev/null
+++ b/cmd/web/assets/flags/tt.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/tv.svg b/cmd/web/assets/flags/tv.svg
new file mode 100644
index 0000000..675210e
--- /dev/null
+++ b/cmd/web/assets/flags/tv.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/tw.svg b/cmd/web/assets/flags/tw.svg
new file mode 100644
index 0000000..57fd98b
--- /dev/null
+++ b/cmd/web/assets/flags/tw.svg
@@ -0,0 +1,34 @@
+
diff --git a/cmd/web/assets/flags/tz.svg b/cmd/web/assets/flags/tz.svg
new file mode 100644
index 0000000..a2cfbca
--- /dev/null
+++ b/cmd/web/assets/flags/tz.svg
@@ -0,0 +1,13 @@
+
diff --git a/cmd/web/assets/flags/ua.svg b/cmd/web/assets/flags/ua.svg
new file mode 100644
index 0000000..a339eb1
--- /dev/null
+++ b/cmd/web/assets/flags/ua.svg
@@ -0,0 +1,6 @@
+
diff --git a/cmd/web/assets/flags/ug.svg b/cmd/web/assets/flags/ug.svg
new file mode 100644
index 0000000..520eee5
--- /dev/null
+++ b/cmd/web/assets/flags/ug.svg
@@ -0,0 +1,30 @@
+
diff --git a/cmd/web/assets/flags/um.svg b/cmd/web/assets/flags/um.svg
new file mode 100644
index 0000000..9e9edda
--- /dev/null
+++ b/cmd/web/assets/flags/um.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/un.svg b/cmd/web/assets/flags/un.svg
new file mode 100644
index 0000000..632bbb4
--- /dev/null
+++ b/cmd/web/assets/flags/un.svg
@@ -0,0 +1,16 @@
+
diff --git a/cmd/web/assets/flags/us.svg b/cmd/web/assets/flags/us.svg
new file mode 100644
index 0000000..9cfd0c9
--- /dev/null
+++ b/cmd/web/assets/flags/us.svg
@@ -0,0 +1,9 @@
+
diff --git a/cmd/web/assets/flags/uy.svg b/cmd/web/assets/flags/uy.svg
new file mode 100644
index 0000000..62c36f8
--- /dev/null
+++ b/cmd/web/assets/flags/uy.svg
@@ -0,0 +1,28 @@
+
diff --git a/cmd/web/assets/flags/uz.svg b/cmd/web/assets/flags/uz.svg
new file mode 100644
index 0000000..0ccca1b
--- /dev/null
+++ b/cmd/web/assets/flags/uz.svg
@@ -0,0 +1,30 @@
+
diff --git a/cmd/web/assets/flags/va.svg b/cmd/web/assets/flags/va.svg
new file mode 100644
index 0000000..3e297d6
--- /dev/null
+++ b/cmd/web/assets/flags/va.svg
@@ -0,0 +1,190 @@
+
diff --git a/cmd/web/assets/flags/vc.svg b/cmd/web/assets/flags/vc.svg
new file mode 100644
index 0000000..f26c2d8
--- /dev/null
+++ b/cmd/web/assets/flags/vc.svg
@@ -0,0 +1,8 @@
+
diff --git a/cmd/web/assets/flags/ve.svg b/cmd/web/assets/flags/ve.svg
new file mode 100644
index 0000000..314e7f5
--- /dev/null
+++ b/cmd/web/assets/flags/ve.svg
@@ -0,0 +1,26 @@
+
diff --git a/cmd/web/assets/flags/vg.svg b/cmd/web/assets/flags/vg.svg
new file mode 100644
index 0000000..ac90088
--- /dev/null
+++ b/cmd/web/assets/flags/vg.svg
@@ -0,0 +1,59 @@
+
diff --git a/cmd/web/assets/flags/vi.svg b/cmd/web/assets/flags/vi.svg
new file mode 100644
index 0000000..d88d68f
--- /dev/null
+++ b/cmd/web/assets/flags/vi.svg
@@ -0,0 +1,28 @@
+
diff --git a/cmd/web/assets/flags/vn.svg b/cmd/web/assets/flags/vn.svg
new file mode 100644
index 0000000..7e4bac8
--- /dev/null
+++ b/cmd/web/assets/flags/vn.svg
@@ -0,0 +1,11 @@
+
diff --git a/cmd/web/assets/flags/vu.svg b/cmd/web/assets/flags/vu.svg
new file mode 100644
index 0000000..326d29e
--- /dev/null
+++ b/cmd/web/assets/flags/vu.svg
@@ -0,0 +1,21 @@
+
diff --git a/cmd/web/assets/flags/wf.svg b/cmd/web/assets/flags/wf.svg
new file mode 100644
index 0000000..054c57d
--- /dev/null
+++ b/cmd/web/assets/flags/wf.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/ws.svg b/cmd/web/assets/flags/ws.svg
new file mode 100644
index 0000000..0e758a7
--- /dev/null
+++ b/cmd/web/assets/flags/ws.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/xk.svg b/cmd/web/assets/flags/xk.svg
new file mode 100644
index 0000000..0e8958d
--- /dev/null
+++ b/cmd/web/assets/flags/xk.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/xx.svg b/cmd/web/assets/flags/xx.svg
new file mode 100644
index 0000000..9333be3
--- /dev/null
+++ b/cmd/web/assets/flags/xx.svg
@@ -0,0 +1,4 @@
+
diff --git a/cmd/web/assets/flags/ye.svg b/cmd/web/assets/flags/ye.svg
new file mode 100644
index 0000000..1c9e6d6
--- /dev/null
+++ b/cmd/web/assets/flags/ye.svg
@@ -0,0 +1,7 @@
+
diff --git a/cmd/web/assets/flags/yt.svg b/cmd/web/assets/flags/yt.svg
new file mode 100644
index 0000000..e7776b3
--- /dev/null
+++ b/cmd/web/assets/flags/yt.svg
@@ -0,0 +1,5 @@
+
diff --git a/cmd/web/assets/flags/za.svg b/cmd/web/assets/flags/za.svg
new file mode 100644
index 0000000..d563adb
--- /dev/null
+++ b/cmd/web/assets/flags/za.svg
@@ -0,0 +1,17 @@
+
diff --git a/cmd/web/assets/flags/zm.svg b/cmd/web/assets/flags/zm.svg
new file mode 100644
index 0000000..360f37a
--- /dev/null
+++ b/cmd/web/assets/flags/zm.svg
@@ -0,0 +1,27 @@
+
diff --git a/cmd/web/assets/flags/zw.svg b/cmd/web/assets/flags/zw.svg
new file mode 100644
index 0000000..93aac4f
--- /dev/null
+++ b/cmd/web/assets/flags/zw.svg
@@ -0,0 +1,21 @@
+
diff --git a/cmd/web/bootstrap/config.go b/cmd/web/bootstrap/config.go
index 087b001..4988e77 100644
--- a/cmd/web/bootstrap/config.go
+++ b/cmd/web/bootstrap/config.go
@@ -13,6 +13,7 @@ type Config struct {
RateLimit config.RateLimitConfig `mapstructure:"rate_limiting"`
UserAuth AuthConfig `mapstructure:"user_authorization"`
CustomerAuth AuthConfig `mapstructure:"customer_authorization"`
+ Assets AssetsConfig `mapstructure:"assets"`
}
type AuthConfig struct {
@@ -25,3 +26,7 @@ type JWTConfig struct {
AccessExpiresIn int `mapstructure:"access_expires_in"`
RefreshExpiresIn int `mapstructure:"refresh_expires_in"`
}
+
+type AssetsConfig struct {
+ FlagsPath string `mapstructure:"flags_path"`
+}
diff --git a/cmd/web/config.yaml b/cmd/web/config.yaml
index cb094e2..15c2b2c 100644
--- a/cmd/web/config.yaml
+++ b/cmd/web/config.yaml
@@ -47,4 +47,7 @@ logging:
rate_limiting:
requests_per_minute: 100
- burst: 20
\ No newline at end of file
+ burst: 20
+
+assets:
+ flags_path: "./assets/flags"
diff --git a/cmd/web/docs/docs.go b/cmd/web/docs/docs.go
index e78a883..b61d4ae 100644
--- a/cmd/web/docs/docs.go
+++ b/cmd/web/docs/docs.go
@@ -1960,6 +1960,43 @@ const docTemplate = `{
}
}
},
+ "/admin/v1/flags/{country_code}": {
+ "get": {
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ],
+ "description": "Retrieve a country flag by its 3-letter country code for admin panel",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Admin Flags"
+ ],
+ "summary": "Get flag by country code (Admin)",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "3-letter country code (e.g., POL, GRC)",
+ "name": "country_code",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SVG content",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
"/admin/v1/health": {
"get": {
"description": "Get comprehensive server health status including system information, dependencies status, and performance metrics. This endpoint is used for monitoring and load balancer health checks.",
@@ -4003,6 +4040,38 @@ const docTemplate = `{
}
}
},
+ "/api/v1//{country_code}": {
+ "get": {
+ "description": "Retrieve only the SVG content of a country flag by its 3-letter country code",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "image/svg+xml"
+ ],
+ "tags": [
+ "Flags"
+ ],
+ "summary": "Get flag SVG",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "3-letter country code (e.g., POL, GRC)",
+ "name": "country_code",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SVG content",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
"/api/v1/companies": {
"get": {
"security": [
@@ -6307,25 +6376,25 @@ const docTemplate = `{
"$ref": "#/definitions/customer.CompanySummary"
}
},
- "companyIDs": {
+ "company_ids": {
"type": "array",
"items": {
"type": "string"
}
},
- "createdAt": {
+ "created_at": {
"type": "integer"
},
"email": {
"type": "string"
},
- "fullName": {
+ "full_name": {
"type": "string"
},
"id": {
"type": "string"
},
- "lastLoginAt": {
+ "last_login_at": {
"type": "integer"
},
"password": {
@@ -6340,7 +6409,7 @@ const docTemplate = `{
"type": {
"type": "string"
},
- "updatedAt": {
+ "updated_at": {
"type": "integer"
},
"username": {
@@ -7320,6 +7389,10 @@ const docTemplate = `{
"description": "Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination",
"name": "Admin-Inquiries"
},
+ {
+ "description": "Administrative flag management operations for web panel including flag listing and retrieval",
+ "name": "Admin-Flags"
+ },
{
"description": "Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access",
"name": "Authorization"
@@ -7343,6 +7416,10 @@ const docTemplate = `{
{
"description": "Public inquiry management operations for mobile application including inquiry submission and inquiry listing",
"name": "Inquiries"
+ },
+ {
+ "description": "Public flag management operations for mobile application including flag retrieval and listing",
+ "name": "Flags"
}
]
}`
diff --git a/cmd/web/docs/swagger.json b/cmd/web/docs/swagger.json
index 9fc6e9b..8df8ae6 100644
--- a/cmd/web/docs/swagger.json
+++ b/cmd/web/docs/swagger.json
@@ -1954,6 +1954,43 @@
}
}
},
+ "/admin/v1/flags/{country_code}": {
+ "get": {
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ],
+ "description": "Retrieve a country flag by its 3-letter country code for admin panel",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Admin Flags"
+ ],
+ "summary": "Get flag by country code (Admin)",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "3-letter country code (e.g., POL, GRC)",
+ "name": "country_code",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SVG content",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
"/admin/v1/health": {
"get": {
"description": "Get comprehensive server health status including system information, dependencies status, and performance metrics. This endpoint is used for monitoring and load balancer health checks.",
@@ -3997,6 +4034,38 @@
}
}
},
+ "/api/v1//{country_code}": {
+ "get": {
+ "description": "Retrieve only the SVG content of a country flag by its 3-letter country code",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "image/svg+xml"
+ ],
+ "tags": [
+ "Flags"
+ ],
+ "summary": "Get flag SVG",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "3-letter country code (e.g., POL, GRC)",
+ "name": "country_code",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SVG content",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
"/api/v1/companies": {
"get": {
"security": [
@@ -6301,25 +6370,25 @@
"$ref": "#/definitions/customer.CompanySummary"
}
},
- "companyIDs": {
+ "company_ids": {
"type": "array",
"items": {
"type": "string"
}
},
- "createdAt": {
+ "created_at": {
"type": "integer"
},
"email": {
"type": "string"
},
- "fullName": {
+ "full_name": {
"type": "string"
},
"id": {
"type": "string"
},
- "lastLoginAt": {
+ "last_login_at": {
"type": "integer"
},
"password": {
@@ -6334,7 +6403,7 @@
"type": {
"type": "string"
},
- "updatedAt": {
+ "updated_at": {
"type": "integer"
},
"username": {
@@ -7314,6 +7383,10 @@
"description": "Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination",
"name": "Admin-Inquiries"
},
+ {
+ "description": "Administrative flag management operations for web panel including flag listing and retrieval",
+ "name": "Admin-Flags"
+ },
{
"description": "Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access",
"name": "Authorization"
@@ -7337,6 +7410,10 @@
{
"description": "Public inquiry management operations for mobile application including inquiry submission and inquiry listing",
"name": "Inquiries"
+ },
+ {
+ "description": "Public flag management operations for mobile application including flag retrieval and listing",
+ "name": "Flags"
}
]
}
\ No newline at end of file
diff --git a/cmd/web/docs/swagger.yaml b/cmd/web/docs/swagger.yaml
index 02d15ca..b0692d3 100644
--- a/cmd/web/docs/swagger.yaml
+++ b/cmd/web/docs/swagger.yaml
@@ -359,19 +359,19 @@ definitions:
items:
$ref: '#/definitions/customer.CompanySummary'
type: array
- companyIDs:
+ company_ids:
items:
type: string
type: array
- createdAt:
+ created_at:
type: integer
email:
type: string
- fullName:
+ full_name:
type: string
id:
type: string
- lastLoginAt:
+ last_login_at:
type: integer
password:
type: string
@@ -381,7 +381,7 @@ definitions:
type: string
type:
type: string
- updatedAt:
+ updated_at:
type: integer
username:
type: string
@@ -2242,6 +2242,30 @@ paths:
summary: Get feedback by ID
tags:
- Admin-Feedback
+ /admin/v1/flags/{country_code}:
+ get:
+ consumes:
+ - application/json
+ description: Retrieve a country flag by its 3-letter country code for admin
+ panel
+ parameters:
+ - description: 3-letter country code (e.g., POL, GRC)
+ in: path
+ name: country_code
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: SVG content
+ schema:
+ type: string
+ security:
+ - BearerAuth: []
+ summary: Get flag by country code (Admin)
+ tags:
+ - Admin Flags
/admin/v1/health:
get:
consumes:
@@ -3557,6 +3581,28 @@ paths:
summary: Update user status
tags:
- Admin-Users
+ /api/v1//{country_code}:
+ get:
+ consumes:
+ - application/json
+ description: Retrieve only the SVG content of a country flag by its 3-letter
+ country code
+ parameters:
+ - description: 3-letter country code (e.g., POL, GRC)
+ in: path
+ name: country_code
+ required: true
+ type: string
+ produces:
+ - image/svg+xml
+ responses:
+ "200":
+ description: SVG content
+ schema:
+ type: string
+ summary: Get flag SVG
+ tags:
+ - Flags
/api/v1/companies:
get:
consumes:
@@ -4681,6 +4727,9 @@ tags:
- description: Administrative inquiry management operations for web panel including
CRUD operations, search, statistics, and comprehensive filtering with pagination
name: Admin-Inquiries
+- description: Administrative flag management operations for web panel including flag
+ listing and retrieval
+ name: Admin-Flags
- description: Customer authentication and authorization operations for mobile application
including login, logout, token refresh, and profile access
name: Authorization
@@ -4699,3 +4748,6 @@ tags:
- description: Public inquiry management operations for mobile application including
inquiry submission and inquiry listing
name: Inquiries
+- description: Public flag management operations for mobile application including
+ flag retrieval and listing
+ name: Flags
diff --git a/cmd/web/main.go b/cmd/web/main.go
index 82dac19..35d4376 100644
--- a/cmd/web/main.go
+++ b/cmd/web/main.go
@@ -50,6 +50,9 @@ package main
// @tag.name Admin-Inquiries
// @tag.description Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination
+// @tag.name Admin-Flags
+// @tag.description Administrative flag management operations for web panel including flag listing and retrieval
+
// @tag.name Authorization
// @tag.description Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access
@@ -68,11 +71,15 @@ package main
// @tag.name Inquiries
// @tag.description Public inquiry management operations for mobile application including inquiry submission and inquiry listing
+// @tag.name Flags
+// @tag.description Public flag management operations for mobile application including flag retrieval and listing
+
import (
"context"
"fmt"
"net/http"
"time"
+ "tm/internal/assets"
"tm/internal/company"
"tm/internal/company_category"
"tm/internal/customer"
@@ -129,7 +136,7 @@ func main() {
tenderApprovalRepository := tender_approval.NewTenderApprovalRepository(mongoManager, logger)
inquiryRepository := inquiry.NewInquiryRepository(mongoManager, logger)
logger.Info("Repositories initialized successfully", map[string]interface{}{
- "repositories": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval"},
+ "repositories": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval", "inquiry"},
})
// Initialize validation service
@@ -144,8 +151,9 @@ func main() {
feedbackService := feedback.NewFeedbackService(feedbackRepo, tenderService, logger)
tenderApprovalService := tender_approval.NewTenderApprovalService(tenderApprovalRepository, tenderService, logger)
inquiryService := inquiry.NewInquiryService(inquiryRepository, logger)
+ flagService := assets.NewFlagService(logger, conf.Assets.FlagsPath)
logger.Info("Services initialized successfully", map[string]interface{}{
- "services": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval"},
+ "services": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval", "inquiry", "flag"},
})
// Initialize handlers with services
@@ -157,16 +165,17 @@ func main() {
feedbackHandler := feedback.NewFeedbackHandler(feedbackService, userHandler, customerHandler, logger)
tenderApprovalHandler := tender_approval.NewHandler(tenderApprovalService, logger)
inquiryHandler := inquiry.NewHandler(inquiryService, logger)
+ flagHandler := assets.NewHandler(flagService, logger)
logger.Info("Handlers initialized successfully", map[string]interface{}{
- "handlers": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval"},
+ "handlers": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval", "inquiry", "flag"},
})
// Initialize HTTP server
e := bootstrap.InitHTTPServer(conf, logger)
// Register routes
- router.RegisterAdminRoutes(e, userHandler, companyHandler, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, inquiryHandler, categoryHandler)
- router.RegisterPublicRoutes(e, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, companyHandler, inquiryHandler, categoryHandler)
+ router.RegisterAdminRoutes(e, userHandler, companyHandler, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, inquiryHandler, categoryHandler, flagHandler)
+ router.RegisterPublicRoutes(e, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, companyHandler, inquiryHandler, categoryHandler, flagHandler)
// Start server
serverAddr := fmt.Sprintf("%s:%d", conf.Server.Host, conf.Server.Port)
diff --git a/cmd/web/router/routes.go b/cmd/web/router/routes.go
index 4bbd6e9..41741d0 100644
--- a/cmd/web/router/routes.go
+++ b/cmd/web/router/routes.go
@@ -1,6 +1,7 @@
package router
import (
+ "tm/internal/assets"
"tm/internal/company"
"tm/internal/company_category"
"tm/internal/customer"
@@ -13,7 +14,7 @@ import (
"github.com/labstack/echo/v4"
)
-func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler *company.Handler, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler) {
+func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler *company.Handler, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler, flagHandler *assets.Handler) {
adminV1 := e.Group("/admin/v1")
// Admin Users Routes
@@ -120,9 +121,16 @@ func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler
inquiryGP.PUT("/:id/status", inquiryHandler.UpdateInquiryStatus)
inquiryGP.DELETE("/:id", inquiryHandler.DeleteInquiry)
}
+
+ // Admin Flags Routes
+ flagsGP := adminV1.Group("/flags")
+ {
+ flagsGP.Use(userHandler.AuthMiddleware())
+ flagsGP.GET("/:country_code", flagHandler.AdminGetFlagSVG)
+ }
}
-func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler) {
+func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler, flagHandler *assets.Handler) {
v1 := e.Group("/api/v1")
customerGP := v1.Group("/profile")
@@ -179,4 +187,10 @@ func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tende
{
inquiryGP.POST("", inquiryHandler.CreateInquiry)
}
+
+ // Public Flags Routes
+ flagsGP := v1.Group("/flags")
+ {
+ flagsGP.GET("/:country_code", flagHandler.GetFlagSVG)
+ }
}
diff --git a/internal/assets/flag.go b/internal/assets/flag.go
new file mode 100644
index 0000000..6cb7a5a
--- /dev/null
+++ b/internal/assets/flag.go
@@ -0,0 +1,400 @@
+package assets
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+)
+
+// CountryCodeMapping maps 3-letter country codes to 2-letter ISO codes
+var CountryCodeMapping = map[string]string{
+ "POL": "pl", // Poland
+ "GRC": "gr", // Greece
+ "DEU": "de", // Germany
+ "FRA": "fr", // France
+ "ITA": "it", // Italy
+ "ESP": "es", // Spain
+ "GBR": "gb", // United Kingdom
+ "NLD": "nl", // Netherlands
+ "BEL": "be", // Belgium
+ "AUT": "at", // Austria
+ "SWE": "se", // Sweden
+ "DNK": "dk", // Denmark
+ "FIN": "fi", // Finland
+ "NOR": "no", // Norway
+ "IRL": "ie", // Ireland
+ "PRT": "pt", // Portugal
+ "CZE": "cz", // Czech Republic
+ "SVK": "sk", // Slovakia
+ "HUN": "hu", // Hungary
+ "ROU": "ro", // Romania
+ "BGR": "bg", // Bulgaria
+ "HRV": "hr", // Croatia
+ "SVN": "si", // Slovenia
+ "EST": "ee", // Estonia
+ "LVA": "lv", // Latvia
+ "LTU": "lt", // Lithuania
+ "LUX": "lu", // Luxembourg
+ "MLT": "mt", // Malta
+ "CYP": "cy", // Cyprus
+ "USA": "us", // United States
+ "CAN": "ca", // Canada
+ "AUS": "au", // Australia
+ "JPN": "jp", // Japan
+ "CHN": "cn", // China
+ "IND": "in", // India
+ "BRA": "br", // Brazil
+ "RUS": "ru", // Russia
+ "TUR": "tr", // Turkey
+ "UKR": "ua", // Ukraine
+ "EGY": "eg", // Egypt
+ "ZAF": "za", // South Africa
+ "NZL": "nz", // New Zealand
+ "KOR": "kr", // South Korea
+ "THA": "th", // Thailand
+ "SGP": "sg", // Singapore
+ "MYS": "my", // Malaysia
+ "IDN": "id", // Indonesia
+ "PHL": "ph", // Philippines
+ "VNM": "vn", // Vietnam
+ "CHL": "cl", // Chile
+ "ARG": "ar", // Argentina
+ "MEX": "mx", // Mexico
+ "PER": "pe", // Peru
+ "COL": "co", // Colombia
+ "VEN": "ve", // Venezuela
+ "ECU": "ec", // Ecuador
+ "BOL": "bo", // Bolivia
+ "URY": "uy", // Uruguay
+ "PRY": "py", // Paraguay
+ "GUY": "gy", // Guyana
+ "SUR": "sr", // Suriname
+ "ISR": "il", // Israel
+ "SAU": "sa", // Saudi Arabia
+ "ARE": "ae", // United Arab Emirates
+ "QAT": "qa", // Qatar
+ "KWT": "kw", // Kuwait
+ "BHR": "bh", // Bahrain
+ "OMN": "om", // Oman
+ "JOR": "jo", // Jordan
+ "LBN": "lb", // Lebanon
+ "SYR": "sy", // Syria
+ "IRQ": "iq", // Iraq
+ "IRN": "ir", // Iran
+ "AFG": "af", // Afghanistan
+ "PAK": "pk", // Pakistan
+ "BGD": "bd", // Bangladesh
+ "LKA": "lk", // Sri Lanka
+ "MDV": "mv", // Maldives
+ "BTN": "bt", // Bhutan
+ "NPL": "np", // Nepal
+ "MMR": "mm", // Myanmar
+ "LAO": "la", // Laos
+ "KHM": "kh", // Cambodia
+ "BRN": "bn", // Brunei
+ "TLS": "tl", // East Timor
+ "PNG": "pg", // Papua New Guinea
+ "FJI": "fj", // Fiji
+ "TON": "to", // Tonga
+ "WSM": "ws", // Samoa
+ "VUT": "vu", // Vanuatu
+ "SLB": "sb", // Solomon Islands
+ "KIR": "ki", // Kiribati
+ "TUV": "tv", // Tuvalu
+ "NRU": "nr", // Nauru
+ "PLW": "pw", // Palau
+ "FSM": "fm", // Federated States of Micronesia
+ "MHL": "mh", // Marshall Islands
+ "COK": "ck", // Cook Islands
+ "NIU": "nu", // Niue
+ "TKL": "tk", // Tokelau
+ "WLF": "wf", // Wallis and Futuna
+ "ASM": "as", // American Samoa
+ "GUM": "gu", // Guam
+ "MNP": "mp", // Northern Mariana Islands
+ "PRI": "pr", // Puerto Rico
+ "VIR": "vi", // U.S. Virgin Islands
+ "BHS": "bs", // Bahamas
+ "BLZ": "bz", // Belize
+ "CRI": "cr", // Costa Rica
+ "GTM": "gt", // Guatemala
+ "HND": "hn", // Honduras
+ "NIC": "ni", // Nicaragua
+ "PAN": "pa", // Panama
+ "SLV": "sv", // El Salvador
+ "JAM": "jm", // Jamaica
+ "HTI": "ht", // Haiti
+ "DOM": "do", // Dominican Republic
+ "CUB": "cu", // Cuba
+ "TTO": "tt", // Trinidad and Tobago
+ "BRB": "bb", // Barbados
+ "LCA": "lc", // Saint Lucia
+ "VCT": "vc", // Saint Vincent and the Grenadines
+ "GRD": "gd", // Grenada
+ "ATG": "ag", // Antigua and Barbuda
+ "DMA": "dm", // Dominica
+ "KNA": "kn", // Saint Kitts and Nevis
+ "BWA": "bw", // Botswana
+ "ZWE": "zw", // Zimbabwe
+ "ZMB": "zm", // Zambia
+ "MWI": "mw", // Malawi
+ "MOZ": "mz", // Mozambique
+ "MDG": "mg", // Madagascar
+ "MUS": "mu", // Mauritius
+ "SYC": "sc", // Seychelles
+ "COM": "km", // Comoros
+ "DJI": "dj", // Djibouti
+ "ERI": "er", // Eritrea
+ "ETH": "et", // Ethiopia
+ "KEN": "ke", // Kenya
+ "TZA": "tz", // Tanzania
+ "UGA": "ug", // Uganda
+ "RWA": "rw", // Rwanda
+ "BDI": "bi", // Burundi
+ "SSD": "ss", // South Sudan
+ "SDN": "sd", // Sudan
+ "LBY": "ly", // Libya
+ "TUN": "tn", // Tunisia
+ "DZA": "dz", // Algeria
+ "MAR": "ma", // Morocco
+ "ESH": "eh", // Western Sahara
+ "MRT": "mr", // Mauritania
+ "MLI": "ml", // Mali
+ "BFA": "bf", // Burkina Faso
+ "NER": "ne", // Niger
+ "TCD": "td", // Chad
+ "CAF": "cf", // Central African Republic
+ "CMR": "cm", // Cameroon
+ "GAB": "ga", // Gabon
+ "GNQ": "gq", // Equatorial Guinea
+ "STP": "st", // São Tomé and Príncipe
+ "GNB": "gw", // Guinea-Bissau
+ "GIN": "gn", // Guinea
+ "SLE": "sl", // Sierra Leone
+ "LBR": "lr", // Liberia
+ "CIV": "ci", // Ivory Coast
+ "GHA": "gh", // Ghana
+ "TGO": "tg", // Togo
+ "BEN": "bj", // Benin
+ "NGA": "ng", // Nigeria
+ "COG": "cg", // Republic of the Congo
+ "COD": "cd", // Democratic Republic of the Congo
+ "AGO": "ao", // Angola
+ "NAM": "na", // Namibia
+ "LSO": "ls", // Lesotho
+ "SWZ": "sz", // Eswatini
+}
+
+// GetISOCode returns the 2-letter ISO code for a 3-letter country code
+func GetISOCode(countryCode string) string {
+ if isoCode, exists := CountryCodeMapping[strings.ToUpper(countryCode)]; exists {
+ return isoCode
+ }
+ return "" // Return empty string if not found
+}
+
+// IsValidCountryCode checks if a 3-letter country code is valid
+func IsValidCountryCode(countryCode string) bool {
+ _, exists := CountryCodeMapping[strings.ToUpper(countryCode)]
+ return exists
+}
+
+// GetCountryName returns the full country name for a 3-letter country code
+func GetCountryName(countryCode string) string {
+ // This is a simplified mapping - in a real application, you might want to use a more comprehensive mapping
+ countryNames := map[string]string{
+ "POL": "Poland",
+ "GRC": "Greece",
+ "DEU": "Germany",
+ "FRA": "France",
+ "ITA": "Italy",
+ "ESP": "Spain",
+ "GBR": "United Kingdom",
+ "NLD": "Netherlands",
+ "BEL": "Belgium",
+ "AUT": "Austria",
+ "SWE": "Sweden",
+ "DNK": "Denmark",
+ "FIN": "Finland",
+ "NOR": "Norway",
+ "IRL": "Ireland",
+ "PRT": "Portugal",
+ "CZE": "Czech Republic",
+ "SVK": "Slovakia",
+ "HUN": "Hungary",
+ "ROU": "Romania",
+ "BGR": "Bulgaria",
+ "HRV": "Croatia",
+ "SVN": "Slovenia",
+ "EST": "Estonia",
+ "LVA": "Latvia",
+ "LTU": "Lithuania",
+ "LUX": "Luxembourg",
+ "MLT": "Malta",
+ "CYP": "Cyprus",
+ "USA": "United States",
+ "CAN": "Canada",
+ "AUS": "Australia",
+ "JPN": "Japan",
+ "CHN": "China",
+ "IND": "India",
+ "BRA": "Brazil",
+ "RUS": "Russia",
+ "TUR": "Turkey",
+ "UKR": "Ukraine",
+ "EGY": "Egypt",
+ "ZAF": "South Africa",
+ "NZL": "New Zealand",
+ "KOR": "South Korea",
+ "THA": "Thailand",
+ "SGP": "Singapore",
+ "MYS": "Malaysia",
+ "IDN": "Indonesia",
+ "PHL": "Philippines",
+ "VNM": "Vietnam",
+ "CHL": "Chile",
+ "ARG": "Argentina",
+ "MEX": "Mexico",
+ "PER": "Peru",
+ "COL": "Colombia",
+ "VEN": "Venezuela",
+ "ECU": "Ecuador",
+ "BOL": "Bolivia",
+ "URY": "Uruguay",
+ "PRY": "Paraguay",
+ "GUY": "Guyana",
+ "SUR": "Suriname",
+ "ISR": "Israel",
+ "SAU": "Saudi Arabia",
+ "ARE": "United Arab Emirates",
+ "QAT": "Qatar",
+ "KWT": "Kuwait",
+ "BHR": "Bahrain",
+ "OMN": "Oman",
+ "JOR": "Jordan",
+ "LBN": "Lebanon",
+ "SYR": "Syria",
+ "IRQ": "Iraq",
+ "IRN": "Iran",
+ "AFG": "Afghanistan",
+ "PAK": "Pakistan",
+ "BGD": "Bangladesh",
+ "LKA": "Sri Lanka",
+ "MDV": "Maldives",
+ "BTN": "Bhutan",
+ "NPL": "Nepal",
+ "MMR": "Myanmar",
+ "LAO": "Laos",
+ "KHM": "Cambodia",
+ "BRN": "Brunei",
+ "TLS": "East Timor",
+ "PNG": "Papua New Guinea",
+ "FJI": "Fiji",
+ "TON": "Tonga",
+ "WSM": "Samoa",
+ "VUT": "Vanuatu",
+ "SLB": "Solomon Islands",
+ "KIR": "Kiribati",
+ "TUV": "Tuvalu",
+ "NRU": "Nauru",
+ "PLW": "Palau",
+ "FSM": "Federated States of Micronesia",
+ "MHL": "Marshall Islands",
+ "COK": "Cook Islands",
+ "NIU": "Niue",
+ "TKL": "Tokelau",
+ "WLF": "Wallis and Futuna",
+ "ASM": "American Samoa",
+ "GUM": "Guam",
+ "MNP": "Northern Mariana Islands",
+ "PRI": "Puerto Rico",
+ "VIR": "U.S. Virgin Islands",
+ "BHS": "Bahamas",
+ "BLZ": "Belize",
+ "CRI": "Costa Rica",
+ "GTM": "Guatemala",
+ "HND": "Honduras",
+ "NIC": "Nicaragua",
+ "PAN": "Panama",
+ "SLV": "El Salvador",
+ "JAM": "Jamaica",
+ "HTI": "Haiti",
+ "DOM": "Dominican Republic",
+ "CUB": "Cuba",
+ "TTO": "Trinidad and Tobago",
+ "BRB": "Barbados",
+ "LCA": "Saint Lucia",
+ "VCT": "Saint Vincent and the Grenadines",
+ "GRD": "Grenada",
+ "ATG": "Antigua and Barbuda",
+ "DMA": "Dominica",
+ "KNA": "Saint Kitts and Nevis",
+ "BWA": "Botswana",
+ "ZWE": "Zimbabwe",
+ "ZMB": "Zambia",
+ "MWI": "Malawi",
+ "MOZ": "Mozambique",
+ "MDG": "Madagascar",
+ "MUS": "Mauritius",
+ "SYC": "Seychelles",
+ "COM": "Comoros",
+ "DJI": "Djibouti",
+ "ERI": "Eritrea",
+ "ETH": "Ethiopia",
+ "KEN": "Kenya",
+ "TZA": "Tanzania",
+ "UGA": "Uganda",
+ "RWA": "Rwanda",
+ "BDI": "Burundi",
+ "SSD": "South Sudan",
+ "SDN": "Sudan",
+ "LBY": "Libya",
+ "TUN": "Tunisia",
+ "DZA": "Algeria",
+ "MAR": "Morocco",
+ "ESH": "Western Sahara",
+ "MRT": "Mauritania",
+ "MLI": "Mali",
+ "BFA": "Burkina Faso",
+ "NER": "Niger",
+ "TCD": "Chad",
+ "CAF": "Central African Republic",
+ "CMR": "Cameroon",
+ "GAB": "Gabon",
+ "GNQ": "Equatorial Guinea",
+ "STP": "São Tomé and Príncipe",
+ "GNB": "Guinea-Bissau",
+ "GIN": "Guinea",
+ "SLE": "Sierra Leone",
+ "LBR": "Liberia",
+ "CIV": "Ivory Coast",
+ "GHA": "Ghana",
+ "TGO": "Togo",
+ "BEN": "Benin",
+ "NGA": "Nigeria",
+ "COG": "Republic of the Congo",
+ "COD": "Democratic Republic of the Congo",
+ "AGO": "Angola",
+ "NAM": "Namibia",
+ "LSO": "Lesotho",
+ "SWZ": "Eswatini",
+ }
+
+ if name, exists := countryNames[strings.ToUpper(countryCode)]; exists {
+ return name
+ }
+ return countryCode // Return the code itself if name not found
+}
+
+// GetFlagAsset returns the flag SVG asset from filesystem
+func GetFlagAsset(flagsPath, isoCode string) ([]byte, error) {
+ flagPath := filepath.Join(flagsPath, strings.ToLower(isoCode)+".svg")
+
+ f, err := os.ReadFile(flagPath)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read flag asset, %v", flagPath)
+ }
+
+ return f, nil
+}
diff --git a/internal/assets/handler.go b/internal/assets/handler.go
new file mode 100644
index 0000000..abd84ec
--- /dev/null
+++ b/internal/assets/handler.go
@@ -0,0 +1,65 @@
+package assets
+
+import (
+ "net/http"
+
+ "tm/pkg/logger"
+
+ "github.com/labstack/echo/v4"
+)
+
+// Handler handles HTTP requests for flag operations
+type Handler struct {
+ service Service
+ logger logger.Logger
+}
+
+// NewHandler creates a new flag handler
+func NewHandler(service Service, logger logger.Logger) *Handler {
+ return &Handler{
+ service: service,
+ logger: logger,
+ }
+}
+
+// **************************** PUBLIC ENDPOINTS ****************************
+// GetFlagSVG returns only the SVG content of a flag
+// @Summary Get flag SVG
+// @Description Retrieve only the SVG content of a country flag by its 3-letter country code
+// @Tags Flags
+// @Accept json
+// @Produce image/svg+xml
+// @Param country_code path string true "3-letter country code (e.g., POL, GRC)"
+// @Success 200 {string} string "SVG content"
+// @Router /api/v1//{country_code} [get]
+func (h *Handler) GetFlagSVG(c echo.Context) error {
+ countryCode := c.Param("country_code")
+
+ svgData := h.service.GetFlagSVG(c.Request().Context(), countryCode)
+
+ c.Response().Header().Set("Content-Type", "image/svg+xml")
+ c.Response().Header().Set("Cache-Control", "public, max-age=86400") // Cache for 24 hours
+ return c.String(http.StatusOK, svgData)
+}
+
+// **************************** ADMIN ENDPOINTS ****************************
+
+// AdminGetFlag returns a flag by country code (Admin)
+// @Summary Get flag by country code (Admin)
+// @Description Retrieve a country flag by its 3-letter country code for admin panel
+// @Tags Admin Flags
+// @Accept json
+// @Produce json
+// @Param country_code path string true "3-letter country code (e.g., POL, GRC)"
+// @Success 200 {string} string "SVG content"
+// @Security BearerAuth
+// @Router /admin/v1/flags/{country_code} [get]
+func (h *Handler) AdminGetFlagSVG(c echo.Context) error {
+ countryCode := c.Param("country_code")
+
+ svgData := h.service.GetFlagSVG(c.Request().Context(), countryCode)
+
+ c.Response().Header().Set("Content-Type", "image/svg+xml")
+ c.Response().Header().Set("Cache-Control", "public, max-age=86400") // Cache for 24 hours
+ return c.String(http.StatusOK, svgData)
+}
diff --git a/internal/assets/service.go b/internal/assets/service.go
new file mode 100644
index 0000000..497b712
--- /dev/null
+++ b/internal/assets/service.go
@@ -0,0 +1,95 @@
+package assets
+
+import (
+ "context"
+ "fmt"
+ "strings"
+
+ "tm/pkg/logger"
+)
+
+// Service defines business logic for flag operations
+type Service interface {
+ // Get flag as SVG content only
+ GetFlagSVG(ctx context.Context, countryCode string) string
+}
+
+// flagService implements the Service interface
+type flagService struct {
+ logger logger.Logger
+ flagsPath string
+}
+
+// NewFlagService creates a new flag service
+func NewFlagService(logger logger.Logger, flagsPath string) Service {
+ return &flagService{
+ logger: logger,
+ flagsPath: flagsPath,
+ }
+}
+
+// GetFlagSVG retrieves only the SVG content for a flag
+func (s *flagService) GetFlagSVG(ctx context.Context, countryCode string) string {
+ s.logger.Info("Getting flag SVG for country", map[string]interface{}{
+ "country_code": countryCode,
+ })
+
+ // Normalize country code
+ countryCode = strings.ToUpper(countryCode)
+
+ defaultFlag, err := GetFlagAsset(s.flagsPath, "eu")
+ if err != nil {
+ s.logger.Error("Failed to get default flag SVG", map[string]interface{}{
+ "country_code": countryCode,
+ "error": err.Error(),
+ })
+ return s.getDefaultFlag()
+ }
+
+ // Get ISO code
+ isoCode := GetISOCode(countryCode)
+
+ // Get SVG data
+ svgData, err := s.getFlagSVG(isoCode)
+ if err != nil {
+ s.logger.Error("Failed to get flag SVG", map[string]interface{}{
+ "country_code": countryCode,
+ "iso_code": isoCode,
+ "error": err.Error(),
+ })
+ return string(defaultFlag)
+ }
+
+ s.logger.Info("Successfully retrieved flag SVG", map[string]interface{}{
+ "country_code": countryCode,
+ "iso_code": isoCode,
+ })
+
+ return svgData
+}
+
+// getFlagSVG retrieves the SVG content for a given ISO code
+func (s *flagService) getFlagSVG(isoCode string) (string, error) {
+ // Try to get from filesystem
+ svgData, err := GetFlagAsset(s.flagsPath, isoCode)
+ if err == nil {
+ return string(svgData), nil
+ }
+
+ // If not found in filesystem, return error
+ s.logger.Warn("Flag not found in filesystem", map[string]interface{}{
+ "iso_code": isoCode,
+ "path": s.flagsPath,
+ })
+
+ return "", fmt.Errorf("failed to get flag SVG, %v from %v", isoCode, s.flagsPath)
+}
+
+// getDefaultFlag returns a default flag SVG when all fallbacks fail
+func (s *flagService) getDefaultFlag() string {
+ // Return a simple default flag SVG
+ return ``
+}