From 8a672c2d0706dd56daab42b2a585418ea9562ea3 Mon Sep 17 00:00:00 2001 From: Flavio Date: Mon, 7 Jan 2013 17:39:51 +0100 Subject: [PATCH] Categories, region selection, refactoring --- CHANGES | 12 +- flags/aa.png | Bin 0 -> 196 bytes flags/ad.png | Bin 0 -> 421 bytes flags/ae.png | Bin 0 -> 305 bytes flags/af.png | Bin 0 -> 461 bytes flags/ag.png | Bin 0 -> 569 bytes flags/ai.png | Bin 0 -> 524 bytes flags/al.png | Bin 0 -> 423 bytes flags/am.png | Bin 0 -> 272 bytes flags/ao.png | Bin 0 -> 332 bytes flags/aq.png | Bin 0 -> 498 bytes flags/ar.png | Bin 0 -> 361 bytes flags/as.png | Bin 0 -> 621 bytes flags/at.png | Bin 0 -> 293 bytes flags/au.png | Bin 0 -> 644 bytes flags/aw.png | Bin 0 -> 368 bytes flags/ax.png | Bin 0 -> 406 bytes flags/az.png | Bin 0 -> 377 bytes flags/ba.png | Bin 0 -> 460 bytes flags/bb.png | Bin 0 -> 381 bytes flags/bd.png | Bin 0 -> 341 bytes flags/be.png | Bin 0 -> 251 bytes flags/bf.png | Bin 0 -> 340 bytes flags/bg.png | Bin 0 -> 281 bytes flags/bh.png | Bin 0 -> 383 bytes flags/bi.png | Bin 0 -> 554 bytes flags/bj.png | Bin 0 -> 276 bytes flags/bl.png | Bin 0 -> 279 bytes flags/bm.png | Bin 0 -> 663 bytes flags/bn.png | Bin 0 -> 641 bytes flags/bo.png | Bin 0 -> 247 bytes flags/bq.png | Bin 0 -> 291 bytes flags/br.png | Bin 0 -> 510 bytes flags/bs.png | Bin 0 -> 437 bytes flags/bt.png | Bin 0 -> 536 bytes flags/bv.png | Bin 0 -> 451 bytes flags/bw.png | Bin 0 -> 288 bytes flags/by.png | Bin 0 -> 383 bytes flags/bz.png | Bin 0 -> 509 bytes flags/ca.png | Bin 0 -> 433 bytes flags/cc.png | Bin 0 -> 644 bytes flags/cd.png | Bin 0 -> 592 bytes flags/cf.png | Bin 0 -> 414 bytes flags/cg.png | Bin 0 -> 332 bytes flags/ch.png | Bin 0 -> 348 bytes flags/ci.png | Bin 0 -> 260 bytes flags/ck.png | Bin 0 -> 592 bytes flags/cl.png | Bin 0 -> 337 bytes flags/cm.png | Bin 0 -> 329 bytes flags/cn.png | Bin 0 -> 349 bytes flags/co.png | Bin 0 -> 272 bytes flags/cr.png | Bin 0 -> 284 bytes flags/cu.png | Bin 0 -> 560 bytes flags/cv.png | Bin 0 -> 487 bytes flags/cw.png | Bin 0 -> 366 bytes flags/cx.png | Bin 0 -> 513 bytes flags/cy.png | Bin 0 -> 399 bytes flags/cz.png | Bin 0 -> 371 bytes flags/de.png | Bin 0 -> 252 bytes flags/dj.png | Bin 0 -> 387 bytes flags/dk.png | Bin 0 -> 349 bytes flags/dm.png | Bin 0 -> 596 bytes flags/do.png | Bin 0 -> 497 bytes flags/dz.png | Bin 0 -> 444 bytes flags/ec.png | Bin 0 -> 478 bytes flags/ee.png | Bin 0 -> 251 bytes flags/eg.png | Bin 0 -> 343 bytes flags/eh.png | Bin 0 -> 388 bytes flags/eo.png | Bin 0 -> 334 bytes flags/er.png | Bin 0 -> 572 bytes flags/es.png | Bin 0 -> 412 bytes flags/et.png | Bin 0 -> 449 bytes flags/fi.png | Bin 0 -> 416 bytes flags/fj.png | Bin 0 -> 589 bytes flags/fk.png | Bin 0 -> 683 bytes flags/fm.png | Bin 0 -> 417 bytes flags/fo.png | Bin 0 -> 413 bytes flags/fr.png | Bin 0 -> 279 bytes flags/ga.png | Bin 0 -> 289 bytes flags/gb.png | Bin 0 -> 574 bytes flags/gd.png | Bin 0 -> 470 bytes flags/ge.png | Bin 0 -> 398 bytes flags/gf.png | Bin 0 -> 279 bytes flags/gg.png | Bin 0 -> 410 bytes flags/gh.png | Bin 0 -> 388 bytes flags/gi.png | Bin 0 -> 538 bytes flags/gl.png | Bin 0 -> 422 bytes flags/gm.png | Bin 0 -> 316 bytes flags/gn.png | Bin 0 -> 251 bytes flags/gp.png | Bin 0 -> 279 bytes flags/gq.png | Bin 0 -> 464 bytes flags/gr.png | Bin 0 -> 503 bytes flags/gs.png | Bin 0 -> 695 bytes flags/gt.png | Bin 0 -> 339 bytes flags/gu.png | Bin 0 -> 402 bytes flags/gw.png | Bin 0 -> 357 bytes flags/gy.png | Bin 0 -> 525 bytes flags/hk.png | Bin 0 -> 412 bytes flags/hm.png | Bin 0 -> 503 bytes flags/hn.png | Bin 0 -> 392 bytes flags/hr.png | Bin 0 -> 486 bytes flags/ht.png | Bin 0 -> 242 bytes flags/hu.png | Bin 0 -> 299 bytes flags/id.png | Bin 0 -> 252 bytes flags/ie.png | Bin 0 -> 279 bytes flags/il.png | Bin 0 -> 428 bytes flags/im.png | Bin 0 -> 479 bytes flags/in.png | Bin 0 -> 390 bytes flags/io.png | Bin 0 -> 836 bytes flags/iq.png | Bin 0 -> 401 bytes flags/ir.png | Bin 0 -> 436 bytes flags/is.png | Bin 0 -> 419 bytes flags/it.png | Bin 0 -> 270 bytes flags/je.png | Bin 0 -> 625 bytes flags/jm.png | Bin 0 -> 431 bytes flags/jo.png | Bin 0 -> 400 bytes flags/jp.png | Bin 0 -> 394 bytes flags/ke.png | Bin 0 -> 575 bytes flags/kg.png | Bin 0 -> 435 bytes flags/kh.png | Bin 0 -> 456 bytes flags/ki.png | Bin 0 -> 669 bytes flags/km.png | Bin 0 -> 555 bytes flags/kn.png | Bin 0 -> 519 bytes flags/kp.png | Bin 0 -> 461 bytes flags/kr.png | Bin 0 -> 658 bytes flags/kw.png | Bin 0 -> 371 bytes flags/ky.png | Bin 0 -> 672 bytes flags/kz.png | Bin 0 -> 545 bytes flags/la.png | Bin 0 -> 394 bytes flags/lb.png | Bin 0 -> 418 bytes flags/lc.png | Bin 0 -> 448 bytes flags/li.png | Bin 0 -> 335 bytes flags/lk.png | Bin 0 -> 447 bytes flags/lr.png | Bin 0 -> 468 bytes flags/ls.png | Bin 0 -> 461 bytes flags/lt.png | Bin 0 -> 279 bytes flags/lu.png | Bin 0 -> 275 bytes flags/lv.png | Bin 0 -> 292 bytes flags/ly.png | Bin 0 -> 359 bytes flags/ma.png | Bin 0 -> 401 bytes flags/mc.png | Bin 0 -> 247 bytes flags/md.png | Bin 0 -> 451 bytes flags/me.png | Bin 0 -> 460 bytes flags/mf.png | Bin 0 -> 525 bytes flags/mg.png | Bin 0 -> 268 bytes flags/mh.png | Bin 0 -> 609 bytes flags/mk.png | Bin 0 -> 578 bytes flags/ml.png | Bin 0 -> 252 bytes flags/mm.png | Bin 0 -> 372 bytes flags/mn.png | Bin 0 -> 337 bytes flags/mo.png | Bin 0 -> 397 bytes flags/mp.png | Bin 0 -> 674 bytes flags/mq.png | Bin 0 -> 279 bytes flags/mr.png | Bin 0 -> 446 bytes flags/ms.png | Bin 0 -> 554 bytes flags/mt.png | Bin 0 -> 332 bytes flags/mu.png | Bin 0 -> 270 bytes flags/mv.png | Bin 0 -> 389 bytes flags/mw.png | Bin 0 -> 383 bytes flags/mx.png | Bin 0 -> 447 bytes flags/my.png | Bin 0 -> 451 bytes flags/mz.png | Bin 0 -> 482 bytes flags/na.png | Bin 0 -> 588 bytes flags/nc.png | Bin 0 -> 279 bytes flags/ne.png | Bin 0 -> 362 bytes flags/nf.png | Bin 0 -> 396 bytes flags/ng.png | Bin 0 -> 283 bytes flags/ni.png | Bin 0 -> 389 bytes flags/nl.png | Bin 0 -> 298 bytes flags/no.png | Bin 0 -> 464 bytes flags/np.png | Bin 0 -> 573 bytes flags/nr.png | Bin 0 -> 363 bytes flags/nu.png | Bin 0 -> 546 bytes flags/nz.png | Bin 0 -> 544 bytes flags/om.png | Bin 0 -> 378 bytes flags/pa.png | Bin 0 -> 402 bytes flags/pe.png | Bin 0 -> 241 bytes flags/pf.png | Bin 0 -> 451 bytes flags/pg.png | Bin 0 -> 451 bytes flags/ph.png | Bin 0 -> 450 bytes flags/pk.png | Bin 0 -> 404 bytes flags/pl.png | Bin 0 -> 243 bytes flags/pm.png | Bin 0 -> 279 bytes flags/pn.png | Bin 0 -> 685 bytes flags/pr.png | Bin 0 -> 549 bytes flags/ps.png | Bin 0 -> 353 bytes flags/pt.png | Bin 0 -> 471 bytes flags/pw.png | Bin 0 -> 427 bytes flags/py.png | Bin 0 -> 365 bytes flags/qa.png | Bin 0 -> 410 bytes flags/re.png | Bin 0 -> 279 bytes flags/ro.png | Bin 0 -> 266 bytes flags/rs.png | Bin 0 -> 523 bytes flags/ru.png | Bin 0 -> 277 bytes flags/rw.png | Bin 0 -> 362 bytes flags/sa.png | Bin 0 -> 447 bytes flags/sb.png | Bin 0 -> 543 bytes flags/sc.png | Bin 0 -> 518 bytes flags/sd.png | Bin 0 -> 386 bytes flags/se.png | Bin 0 -> 415 bytes flags/sg.png | Bin 0 -> 363 bytes flags/sh.png | Bin 0 -> 666 bytes flags/si.png | Bin 0 -> 426 bytes flags/sj.png | Bin 0 -> 455 bytes flags/sk.png | Bin 0 -> 493 bytes flags/sl.png | Bin 0 -> 271 bytes flags/sm.png | Bin 0 -> 481 bytes flags/sn.png | Bin 0 -> 374 bytes flags/so.png | Bin 0 -> 366 bytes flags/sr.png | Bin 0 -> 406 bytes flags/ss.png | Bin 0 -> 521 bytes flags/st.png | Bin 0 -> 439 bytes flags/sv.png | Bin 0 -> 411 bytes flags/sx.png | Bin 0 -> 525 bytes flags/sy.png | Bin 0 -> 369 bytes flags/sz.png | Bin 0 -> 567 bytes flags/tc.png | Bin 0 -> 671 bytes flags/td.png | Bin 0 -> 252 bytes flags/tf.png | Bin 0 -> 279 bytes flags/tg.png | Bin 0 -> 435 bytes flags/th.png | Bin 0 -> 306 bytes flags/tj.png | Bin 0 -> 392 bytes flags/tk.png | Bin 0 -> 601 bytes flags/tl.png | Bin 0 -> 511 bytes flags/tm.png | Bin 0 -> 472 bytes flags/tn.png | Bin 0 -> 424 bytes flags/to.png | Bin 0 -> 308 bytes flags/tr.png | Bin 0 -> 436 bytes flags/tt.png | Bin 0 -> 526 bytes flags/tv.png | Bin 0 -> 526 bytes flags/tw.png | Bin 0 -> 382 bytes flags/tz.png | Bin 0 -> 484 bytes flags/ua.png | Bin 0 -> 256 bytes flags/ug.png | Bin 0 -> 407 bytes flags/um.png | Bin 0 -> 578 bytes flags/us.png | Bin 0 -> 578 bytes flags/uy.png | Bin 0 -> 493 bytes flags/uz.png | Bin 0 -> 410 bytes flags/va.png | Bin 0 -> 379 bytes flags/vc.png | Bin 0 -> 398 bytes flags/ve.png | Bin 0 -> 399 bytes flags/vg.png | Bin 0 -> 665 bytes flags/vi.png | Bin 0 -> 665 bytes flags/vn.png | Bin 0 -> 373 bytes flags/vu.png | Bin 0 -> 509 bytes flags/wf.png | Bin 0 -> 279 bytes flags/ws.png | Bin 0 -> 285 bytes flags/ye.png | Bin 0 -> 290 bytes flags/yt.png | Bin 0 -> 279 bytes flags/za.png | Bin 0 -> 633 bytes flags/zm.png | Bin 0 -> 350 bytes flags/zw.png | Bin 0 -> 609 bytes minitube.pro | 49 ++-- resources.qrc | 49 +++- src/downloadmodel.cpp | 2 +- src/downloadview.cpp | 2 +- src/homeview.cpp | 107 +++++++++ src/homeview.h | 40 ++++ src/main.cpp | 15 +- src/mainwindow.cpp | 130 ++++++++--- src/mainwindow.h | 14 +- src/mediaview.cpp | 422 ++++++++++++++++------------------- src/mediaview.h | 57 ++--- src/playlistitemdelegate.cpp | 30 +-- src/playlistitemdelegate.h | 10 +- src/playlistmodel.cpp | 191 ++++++++-------- src/playlistmodel.h | 32 ++- src/playlistsuggest.cpp | 121 ++++++++++ src/playlistsuggest.h | 23 ++ src/playlistview.cpp | 87 ++++++-- src/playlistview.h | 9 +- src/regionsview.cpp | 69 ++++++ src/regionsview.h | 30 +++ src/searchparams.cpp | 2 +- src/searchparams.h | 7 +- src/searchview.cpp | 14 +- src/searchview.h | 7 +- src/segmentedcontrol.cpp | 4 +- src/sidebarheader.cpp | 100 +++++++++ src/sidebarheader.h | 30 +++ src/sidebarwidget.cpp | 9 +- src/sidebarwidget.h | 4 +- src/standardfeedsview.cpp | 124 ++++++++++ src/standardfeedsview.h | 39 ++++ src/userview.cpp | 5 + src/userview.h | 24 ++ src/video.cpp | 25 ++- src/video.h | 28 +-- src/videoareawidget.cpp | 4 +- src/videoareawidget.h | 8 +- src/videosource.cpp | 6 + src/videosource.h | 30 +++ src/videosourcewidget.cpp | 171 ++++++++++++++ src/videosourcewidget.h | 43 ++++ src/ytcategories.cpp | 53 +++++ src/ytcategories.h | 29 +++ src/ytfeedreader.cpp | 60 ++--- src/ytfeedreader.h | 22 +- src/ytregions.cpp | 161 +++++++++++++ src/ytregions.h | 32 +++ src/ytsearch.cpp | 127 +++++++++++ src/ytsearch.h | 38 ++++ src/ytsinglevideosource.cpp | 66 ++++++ src/ytsinglevideosource.h | 31 +++ src/ytstandardfeed.cpp | 60 +++++ src/ytstandardfeed.h | 43 ++++ src/ytsuggester.cpp | 15 +- src/ytsuggester.h | 11 +- style.css | 60 +++++ 309 files changed, 2398 insertions(+), 595 deletions(-) create mode 100644 flags/aa.png create mode 100644 flags/ad.png create mode 100644 flags/ae.png create mode 100644 flags/af.png create mode 100644 flags/ag.png create mode 100644 flags/ai.png create mode 100644 flags/al.png create mode 100644 flags/am.png create mode 100644 flags/ao.png create mode 100644 flags/aq.png create mode 100644 flags/ar.png create mode 100644 flags/as.png create mode 100644 flags/at.png create mode 100644 flags/au.png create mode 100644 flags/aw.png create mode 100644 flags/ax.png create mode 100644 flags/az.png create mode 100644 flags/ba.png create mode 100644 flags/bb.png create mode 100644 flags/bd.png create mode 100644 flags/be.png create mode 100644 flags/bf.png create mode 100644 flags/bg.png create mode 100644 flags/bh.png create mode 100644 flags/bi.png create mode 100644 flags/bj.png create mode 100644 flags/bl.png create mode 100644 flags/bm.png create mode 100644 flags/bn.png create mode 100644 flags/bo.png create mode 100644 flags/bq.png create mode 100644 flags/br.png create mode 100644 flags/bs.png create mode 100644 flags/bt.png create mode 100644 flags/bv.png create mode 100644 flags/bw.png create mode 100644 flags/by.png create mode 100644 flags/bz.png create mode 100644 flags/ca.png create mode 100644 flags/cc.png create mode 100644 flags/cd.png create mode 100644 flags/cf.png create mode 100644 flags/cg.png create mode 100644 flags/ch.png create mode 100644 flags/ci.png create mode 100644 flags/ck.png create mode 100644 flags/cl.png create mode 100644 flags/cm.png create mode 100644 flags/cn.png create mode 100644 flags/co.png create mode 100644 flags/cr.png create mode 100644 flags/cu.png create mode 100644 flags/cv.png create mode 100644 flags/cw.png create mode 100644 flags/cx.png create mode 100644 flags/cy.png create mode 100644 flags/cz.png create mode 100644 flags/de.png create mode 100644 flags/dj.png create mode 100644 flags/dk.png create mode 100644 flags/dm.png create mode 100644 flags/do.png create mode 100644 flags/dz.png create mode 100644 flags/ec.png create mode 100644 flags/ee.png create mode 100644 flags/eg.png create mode 100644 flags/eh.png create mode 100644 flags/eo.png create mode 100644 flags/er.png create mode 100644 flags/es.png create mode 100644 flags/et.png create mode 100644 flags/fi.png create mode 100644 flags/fj.png create mode 100644 flags/fk.png create mode 100644 flags/fm.png create mode 100644 flags/fo.png create mode 100644 flags/fr.png create mode 100644 flags/ga.png create mode 100644 flags/gb.png create mode 100644 flags/gd.png create mode 100644 flags/ge.png create mode 100644 flags/gf.png create mode 100644 flags/gg.png create mode 100644 flags/gh.png create mode 100644 flags/gi.png create mode 100644 flags/gl.png create mode 100644 flags/gm.png create mode 100644 flags/gn.png create mode 100644 flags/gp.png create mode 100644 flags/gq.png create mode 100644 flags/gr.png create mode 100644 flags/gs.png create mode 100644 flags/gt.png create mode 100644 flags/gu.png create mode 100644 flags/gw.png create mode 100644 flags/gy.png create mode 100644 flags/hk.png create mode 100644 flags/hm.png create mode 100644 flags/hn.png create mode 100644 flags/hr.png create mode 100644 flags/ht.png create mode 100644 flags/hu.png create mode 100644 flags/id.png create mode 100644 flags/ie.png create mode 100644 flags/il.png create mode 100644 flags/im.png create mode 100644 flags/in.png create mode 100644 flags/io.png create mode 100644 flags/iq.png create mode 100644 flags/ir.png create mode 100644 flags/is.png create mode 100644 flags/it.png create mode 100644 flags/je.png create mode 100644 flags/jm.png create mode 100644 flags/jo.png create mode 100644 flags/jp.png create mode 100644 flags/ke.png create mode 100644 flags/kg.png create mode 100644 flags/kh.png create mode 100644 flags/ki.png create mode 100644 flags/km.png create mode 100644 flags/kn.png create mode 100644 flags/kp.png create mode 100644 flags/kr.png create mode 100644 flags/kw.png create mode 100644 flags/ky.png create mode 100644 flags/kz.png create mode 100644 flags/la.png create mode 100644 flags/lb.png create mode 100644 flags/lc.png create mode 100644 flags/li.png create mode 100644 flags/lk.png create mode 100644 flags/lr.png create mode 100644 flags/ls.png create mode 100644 flags/lt.png create mode 100644 flags/lu.png create mode 100644 flags/lv.png create mode 100644 flags/ly.png create mode 100644 flags/ma.png create mode 100644 flags/mc.png create mode 100644 flags/md.png create mode 100644 flags/me.png create mode 100644 flags/mf.png create mode 100644 flags/mg.png create mode 100644 flags/mh.png create mode 100644 flags/mk.png create mode 100644 flags/ml.png create mode 100644 flags/mm.png create mode 100644 flags/mn.png create mode 100644 flags/mo.png create mode 100644 flags/mp.png create mode 100644 flags/mq.png create mode 100644 flags/mr.png create mode 100644 flags/ms.png create mode 100644 flags/mt.png create mode 100644 flags/mu.png create mode 100644 flags/mv.png create mode 100644 flags/mw.png create mode 100644 flags/mx.png create mode 100644 flags/my.png create mode 100644 flags/mz.png create mode 100644 flags/na.png create mode 100644 flags/nc.png create mode 100644 flags/ne.png create mode 100644 flags/nf.png create mode 100644 flags/ng.png create mode 100644 flags/ni.png create mode 100644 flags/nl.png create mode 100644 flags/no.png create mode 100644 flags/np.png create mode 100644 flags/nr.png create mode 100644 flags/nu.png create mode 100644 flags/nz.png create mode 100644 flags/om.png create mode 100644 flags/pa.png create mode 100644 flags/pe.png create mode 100644 flags/pf.png create mode 100644 flags/pg.png create mode 100644 flags/ph.png create mode 100644 flags/pk.png create mode 100644 flags/pl.png create mode 100644 flags/pm.png create mode 100644 flags/pn.png create mode 100644 flags/pr.png create mode 100644 flags/ps.png create mode 100644 flags/pt.png create mode 100644 flags/pw.png create mode 100644 flags/py.png create mode 100644 flags/qa.png create mode 100644 flags/re.png create mode 100644 flags/ro.png create mode 100644 flags/rs.png create mode 100644 flags/ru.png create mode 100644 flags/rw.png create mode 100644 flags/sa.png create mode 100644 flags/sb.png create mode 100644 flags/sc.png create mode 100644 flags/sd.png create mode 100644 flags/se.png create mode 100644 flags/sg.png create mode 100644 flags/sh.png create mode 100644 flags/si.png create mode 100644 flags/sj.png create mode 100644 flags/sk.png create mode 100644 flags/sl.png create mode 100644 flags/sm.png create mode 100644 flags/sn.png create mode 100644 flags/so.png create mode 100644 flags/sr.png create mode 100644 flags/ss.png create mode 100644 flags/st.png create mode 100644 flags/sv.png create mode 100644 flags/sx.png create mode 100644 flags/sy.png create mode 100644 flags/sz.png create mode 100644 flags/tc.png create mode 100644 flags/td.png create mode 100644 flags/tf.png create mode 100644 flags/tg.png create mode 100644 flags/th.png create mode 100644 flags/tj.png create mode 100644 flags/tk.png create mode 100644 flags/tl.png create mode 100644 flags/tm.png create mode 100644 flags/tn.png create mode 100644 flags/to.png create mode 100644 flags/tr.png create mode 100644 flags/tt.png create mode 100644 flags/tv.png create mode 100644 flags/tw.png create mode 100644 flags/tz.png create mode 100644 flags/ua.png create mode 100644 flags/ug.png create mode 100644 flags/um.png create mode 100644 flags/us.png create mode 100644 flags/uy.png create mode 100644 flags/uz.png create mode 100644 flags/va.png create mode 100644 flags/vc.png create mode 100644 flags/ve.png create mode 100644 flags/vg.png create mode 100644 flags/vi.png create mode 100644 flags/vn.png create mode 100644 flags/vu.png create mode 100644 flags/wf.png create mode 100644 flags/ws.png create mode 100644 flags/ye.png create mode 100644 flags/yt.png create mode 100644 flags/za.png create mode 100644 flags/zm.png create mode 100644 flags/zw.png create mode 100644 src/homeview.cpp create mode 100644 src/homeview.h create mode 100644 src/playlistsuggest.cpp create mode 100644 src/playlistsuggest.h create mode 100644 src/regionsview.cpp create mode 100644 src/regionsview.h create mode 100644 src/sidebarheader.cpp create mode 100644 src/sidebarheader.h create mode 100644 src/standardfeedsview.cpp create mode 100644 src/standardfeedsview.h create mode 100644 src/userview.cpp create mode 100644 src/userview.h create mode 100644 src/videosource.cpp create mode 100644 src/videosource.h create mode 100644 src/videosourcewidget.cpp create mode 100644 src/videosourcewidget.h create mode 100644 src/ytcategories.cpp create mode 100644 src/ytcategories.h create mode 100644 src/ytregions.cpp create mode 100644 src/ytregions.h create mode 100644 src/ytsearch.cpp create mode 100644 src/ytsearch.h create mode 100644 src/ytsinglevideosource.cpp create mode 100644 src/ytsinglevideosource.h create mode 100644 src/ytstandardfeed.cpp create mode 100644 src/ytstandardfeed.h create mode 100644 style.css diff --git a/CHANGES b/CHANGES index 6be6d80..a3127f8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,16 @@ -2.0 +2.0 - January ?? 2013 +- YouTube categories and "standard feeds": "Most Popular", "Featured", etc +- Country selection for YouTube categories and feeds - Autoupdate on Mac and Windows +- Related videos are now appended to the video when pasting a YouTube link +- "Show 10 More" with a single click +- Play video in the playlist with a single click on its thumbnail +- OS X Mountain Lion notifications on video start +- Fixed some YouTube links not working when pasted in the searchbox +- Fixed playlist drag'n'drop +- Fixed system language settings detection - Fixed clicking on channel names not working in some cases +- Fixed incorrect number of downloads in status bar 1.9 - September 27, 2012 - Adapted to YouTube changes diff --git a/flags/aa.png b/flags/aa.png new file mode 100644 index 0000000000000000000000000000000000000000..00de7497d98e562300c917ee70b11711d6f0492f GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_Yo-U3d z7QJsTTXP*^5NLUL-e$v=jUqa>9m_wol*t{=o^i-X`~$1lO@}p`4(g>OBu19~%WAXV zD)lD&isyaqe#L}t;WEzyvgunwWxiP?O=giPaE(5)u;=6|7uKUE9bP0l+XkK1}sbk literal 0 HcmV?d00001 diff --git a/flags/ad.png b/flags/ad.png new file mode 100644 index 0000000000000000000000000000000000000000..1797beba2ebe9f30d25cf0fdb811018ae198a204 GIT binary patch literal 421 zcmV;W0b2fvP)GKg=mVXE4b4kRywJmR6udzRbEaCcsh%e-?5S{72NA7^wZh`Ub0dNxo<0OpERu;Og(o}J4hYk_1%Wu-hX3jPr!mG%lR>r19}oCwdR+S zD@0u|@mP1F$Pz~o!r(K_gE|CT>bIsxc+nuVP&aS}w1y|E7<%txWRk@XHB)ZqOqJ7O P00000NkvXXu0mjfbzHgK literal 0 HcmV?d00001 diff --git a/flags/ae.png b/flags/ae.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4384fa2d5e36837d5c4906c744fcda570dc957 GIT binary patch literal 305 zcmV-10nYx3P)hll`$+H!Q-DNCJK^Fo&7%WfWto!y z!IvXJc})qEU2Y>zY8?@Z0N@o*)PAG#oYy_+>^pn`l(Sv)yVAg*00000NkvXXu0mjf DO-hQ_ literal 0 HcmV?d00001 diff --git a/flags/af.png b/flags/af.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d6ad0663e663e983006829b7a5f7727d2831a4 GIT binary patch literal 461 zcmV;;0W$uHP)3_fOZtnY$Y_ZT5t2i;D2YCSNh?1~ZEV$| z&*83Zv2s|;(^u9b!b{Xq@Ka>f>^jXGq|g$M6m?m73I$Gh;)kZkvHKzM8i(706fqEd4aQmNxR4JKHEuJz&?KJJjtC>n1PAEh8r+h>RxdITRtC#rlCAP zqg1Ov#fb)aunG_i29dY6@JJGprqN8N+4k-@iWwsC`~B=?GK|$~gioz++jgrFIX(w1c`T_?7<#>)LIl>sY53L=pRLI_-@iK40)J^{o_MC00000NkvXXu0mjf D_RP_6 literal 0 HcmV?d00001 diff --git a/flags/ag.png b/flags/ag.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd5ef6b610ad648335bde4e63472e127a2b395f GIT binary patch literal 569 zcmV-90>=G`P)*BDHMc4kAi3B%GP1+y@A3SE> zukZUc1OG{4>yk>PY^9X7mmtS+yh5SiMT$%&(=VmeK*TcMIFB4aTatF0lscVG_W_tq z#DO3PBEW)!^}bBii#J2m-<|OaeblfX&TKqqW2LrTdl!{8~nJ_(<(cTCl>6swg7>+p_#ewKYBuyG0##|`6}Aw+M-G&@LXT?mzW36w;O-e~fkFq+I?=!ds~>=*|<00000NkvXX Hu0mjf9jXDr literal 0 HcmV?d00001 diff --git a/flags/ai.png b/flags/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..8773497bb1c3c96e9bbda6ea7953ddf1e7c16895 GIT binary patch literal 524 zcmV+n0`vWeP)1z?c1yvCh8_|Z(nIm!p&AH98j2qv2%4*h z)=SR?1^oaXJgA4BDt>`d6e)TTqya@C7ljs)6haScO>F|*>Nf0lcg90k?P}DBe|XFc zGw=7_{NcfWN_^W?ip60ShJ%}GL;y%>Xa|ocYp#N0BApfm;C8my{dPe|k&psb@0M|_fQ5}QYRe6@M)qjj z05Jv}0!G8Vp`h91pw%Ml)ae3OlQ<(Mlv0NAD@2f9 znkWH0h8W1@u*=gd6)rM3agLo#p33tKy{rEO*jJ_jpn>Z*9#g*K(mi{g7xQ^65h(!6 zQV0R2snc#8E+?nqQmt17A)wQlVPyL)(ecwfeYsAxx&}PF0PR{2httv;?1O*->jZYI zP86m+`6~dx|Iz_(12W?@8lO{lWjR}|iFd0X@pjWD zCV;RDT7mfOm+H5hM@~wCzYjl#DFakM=KJXglnbl?yGN(YNTMIbN$?d7fSFcO0?SMQ O0000BS4 literal 0 HcmV?d00001 diff --git a/flags/al.png b/flags/al.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7456706676751f162732e7ce153ef0720daf06 GIT binary patch literal 423 zcmV;Y0a*TtP)R^-fwN9T-BXGpT=x@piar1h zUm1A35nxg`QNnpA;_@?Q%~xUv&(?7tTXswS2ryI%Ft5UGWVwqiuhs$ZW*tpm)6H3c zo`YExsz!N8EC7o}c(ab4%gEzr!2+QX_R9gjfG==3H^sCHHe-SmpcyC|f#LKcqO8J# zQ7$?W+fyFvL8?6ss2XM72*;HYHBVVk;b^HyXq2i+1F~|VRr+4YgK~jDgu18Hy|npP zz)*WLe{Z$|#1JJeGowt!4*Lmx7#~w;pe3-J2jJi?ffL|GCh7)q-$OEZd;z%{UbN@Q RTSfo?002ovPDHLkV1h^JtWf{} literal 0 HcmV?d00001 diff --git a/flags/am.png b/flags/am.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb0468c93b04eb5b8dfd981883c4e3a134939b0 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^fJzX3_ zEP9V#a`a+$6li^ze<_fsWd(QX!Xw2M9Qlt5_jHO2U0E8KHhIQN&z&Ad=g!F~{a7$- z*+bh^|Md7mw(h@U7+D;XRQ3Gz%+T)zM^n|<1A}JTJY{m*kTlO@X|8(Eqix(BjL-Hq z8SZ9|n`2((Q}@081yh!Barfdx+c}Hw^%ZpdvrpjJ?D_U>;T4xDj%&0E{|dZHeJ{RD z-B93BSp8vzbl<#OFJIqnk!jg=V$XF{zlZM7UOg81!jOZDHRrG}9um6QE+A_AIKxJ~Bo0_X6{o1j0lB`@ z7$p}7Cxj-m?|hU9qecA*nkbLx_L!p@m4vGzrN-}kbJ7ZXRW5HR&vSRp{X=|(v4H0n zwl=9Oa(+RvK>Z*Nfo+6I%IE*YcA^uEvvzy(3ZMAS3hUK&7(U}84zZdM@Y?GcUZd`J e&Uz1DJ^29=`%%Z^D^M)}0000?OhOBP;Zu2PlAV5`~w7` zP(1b0W5GYblNbMhUP=!NBGMds@SuVOEIpJq1~lRiOf(UaY<9K>HJgo513q{#Z{B=A zZ{9oxo@rWj)iW9hU7wiEh_YE#f`g(92zErr7S=KdDVr**Y}O&qgf2k}jh8Q4Jiy_2kS{ZFqOIO%((e}O^CEMvJDDAe5-=rwVPC`cyFw-> zmu0t`+T_yu5rZ9p2gLv%C%X~u?7V<@#E-1aHn4%HAJcGU9>DIuJU@Tu9tEUMiSjtpET3 literal 0 HcmV?d00001 diff --git a/flags/ar.png b/flags/ar.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8f6c1bf9ab5955edaba1fe55aa66bbbf84f052 GIT binary patch literal 361 zcmV-v0ha!WP)hBspaK z_=MKlOTanDWw%F`y#xS!E8XMh!~ITh)dD zdlAge+fjYS7AYnjqskdO$rUO(TGQx6FkjRhY{E>hDf2rZz@{-#Z$$lQO9V{!LV^x2rxGg+-?i;tSW$P^{teM*>E7c>mmB0F@wJe zC~I)G^kz9zViyIh?$Sl;AxibV1VkQi?gn_Tho-CY@=z7u4mDdSNPD;=00000NkvXX Hu0mjfg&Ue+ literal 0 HcmV?d00001 diff --git a/flags/as.png b/flags/as.png new file mode 100644 index 0000000000000000000000000000000000000000..7dcbf4572f549ca9a1b82fec8ae9a895a3883ba7 GIT binary patch literal 621 zcmV-z0+RiSP)%C!^L$F@?E(H4U&IWOYgE#}@8`G}_>-G-MZ?$!kDIIOwHom|=Sh8d zk8Xgb3ns2Uz&$c*Y7~Ip{yx=x`&!HGUzcA}u{dy9p+Nt&ZT!r=H34ur z@tbNDHGFcOM&QwK0B0!3kuyFJ!UWVa(28K_AS8gYA+u6-u~Kyr`v%rjk&(qEM&&qj zUI*u*rzn(mOARN`3Cx4!IXKjoUrGb7ft|)k<$52cYW3z9Z;!58_l#>DyMWQ<2+QTzsEHg3yG+02n4KxuTO>YbN>+HKU5Ebi%VN7kk3IR% zD(IlJX#exijt>@h*j=h_-KNpj>nHSJ{ksL<{w-R=+ZG~IykeD9o&Dv@M`oBWzEa$A ppgTqUy?sOTtFOM{j(zKXFfKprY4-JCK^xGQ44$rjF6*2UngBp+ey{)l literal 0 HcmV?d00001 diff --git a/flags/au.png b/flags/au.png new file mode 100644 index 0000000000000000000000000000000000000000..133777604cb308bc2a17ed1cb585f5d7a9ab7609 GIT binary patch literal 644 zcmV-~0(-4Jeq;3J#cD|;rY&CDSWHN#kR2yUj zKnD;291icka98Kj^pUgNyf?&)wmkq`eV%6Ex|{0L4K#O+5sM|at~2uRRY20+*9Lx9_yf@!a;>wCGx;e;@BzLAI*|XZWMtF5-5jF0&khSX|%>Sw!N&!;{eDW zk9p+IT9A?1Vw1iAuWK5&=>h znf$YLKOXH6uVykVR32ra+|SdrhI_9{-;B(ObM*uQzTFK})h4z%7r6WQ6CDFfB(frj ztjPU`Z@B$d;YM>MXxOSY$$>IYObi(iFDka@lEVIgZO^2OyQo(AztLVHf~tnuqdo zyE)%s(A|BB;o(kNTTkvvG(G);<>mE~m}#IW5>r#(iA3g!Mi&tTp=6_`d2u>zJJa0i zbGe*e7#w^r_V>R-QKS+~fZE#qSgkVA=ps-kKrRdBE8qeygIKjI`wkVp0YkuQF{eb) e@BD}ITa90Ln7C7tk+rA*00009L4fA^j@(Qqh&3KEAFXK8Y3$t7y2PfxPh79|aBwM9!~x*4btBx--v_r3SFm`a$vFFtVK@WAsshjY0wp;W(1^Tz|Ui1^)Q z01be15?7Y3(k;2`Q+BV8$#m*t8O|CH!22=UPII1FWqPBBR4UYXGSm{MBwvaAe!(*!74 zzHWQI0B}>fx^J3tBK4s>cpk=p<@G$9yDwqlpYmdUo_SOaR#|F?tV)Agjg%Ja$kO8n(kaJf%M^Uq!Ytg0%z{*0G+c9sX?FX55 zIw2r$8tLq5Dl%P444iq88jS;+>_3yORFH9Ic0%*p_ulv7W;xfQeOyHK1cj3)?%d*^ z;Oo8|L;$BDh8vf)$gEeYSSSGA`iqQvks5~{vp8W!0B<-TkScL1@D<+Y7sQ`w3B(q9 zU;!8gnh|b{_xtf6yz+6DYp1gpF2GEOIMISLD zYBM7Tr9`q+1Nce8eYaW4@7b@{QJ%+aG~%V#`=N1~B!tT=tii9ND-&a*hyK2`DC{+ySro$#b)?@{k2z X2;f_?&NiH$00000NkvXXu0mjf%<-aW literal 0 HcmV?d00001 diff --git a/flags/ba.png b/flags/ba.png new file mode 100644 index 0000000000000000000000000000000000000000..81137237050b1fc830a29319b9215bb5e53aa66d GIT binary patch literal 460 zcmV;-0WKo9w3cX- znu5lfYbwaeAl#xXCAVs*DbTI7sHnsY@4cP|m5k~t^ul*Iyl@^KJ~;5tXkXX%CYMWh z_OuzY)+4J~<0TOc0K zV48~g`94;+XV};qs^6fJL?XlW^)vhX9(+D00E^Q{^%+2EC$FysyxtfiBi$U`Ed4OC zHK-(+eB=BHpffoN@m>YSdY0q}ZzS>GKeZ=k9SOarVUNLyemmgef}nMh<9 zw_7W~*JpBp90k>0kByY_*0PKP;6rN7v5rmJLuYz6XP=PTmAm_PW8_a8}opgw7%ieM=V_akI{CCS=wu z8`Ls@21E%BzbSG6oTM$Kp2f>6^nIw!gOs3@FQ78vO$30&(J8ccpizVK3lO3ZB|DRf zRyA68p*jbJJRIzT5T%r(Qq;c3RSWl-tfhW)_ zNOdt?iW@5xTvj}PDTSh2qYx$%S-+Q{wZ1Z+N|@&T9oUB3Ge}s0Ig*+9GPIOEe!vKI!f!h}NFTG9+c7da&Pytyi1yg^E3^+y6 njs!daSAg*|YKZ<1v+u?ihuTV;(*w~F00000NkvXXu0mjf5K4(e literal 0 HcmV?d00001 diff --git a/flags/be.png b/flags/be.png new file mode 100644 index 0000000000000000000000000000000000000000..8db34d36180a349b73406b59a4fc915e0d0e0625 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@|JY5_^ zEPCHgcH}x_AmAE5J4;ZoRGGu|p!OH0xC57~cv<@&II&Dj5^p*-t8ezPmZpdj^*V_k zlV^Spm;4db_}tpzwpnJ>?HK;~W{;O_FZjyrc0ewG;cwi6&!Ohue&*O+-q>Q;Am~$c zqvw19&+4B?4o$7$chG$2%c|j;%_Xpp>7J*;CuX~A_79dbaV^N<5>=5$JXXPgg&ebxsLQ00Wp|GXMYp literal 0 HcmV?d00001 diff --git a/flags/bf.png b/flags/bf.png new file mode 100644 index 0000000000000000000000000000000000000000..27a9bc016897612200ef94ae6f6336fa103cf3c8 GIT binary patch literal 340 zcmV-a0jvIrP)l?=$0d&Dao7{w7JBQ`0c1#GE*>dF zEuVXYj;@~Bzif3=nfU|Y^rpw(4h9T;g*<9)V(KGK^M?v4FR40TpJ^ZmL&urS*get9%P* zZS##O6kNhJHcxb^JV zm&66D4kq=lQe)_pf5RWW{MVT$!htQn>=-w^J5po&a?8yFyKYNw7u@^!KO3jR`9oPZ z%e@jh78q9_`uK@^aq%53m-G2X0tLNAoT8mY8v_o1e%9FN%JNu%xiywq`oRyWSv$iy d&hFj8v~_RxqN(pUKLPrT!PC{xWt~$(6973ScozTw literal 0 HcmV?d00001 diff --git a/flags/bh.png b/flags/bh.png new file mode 100644 index 0000000000000000000000000000000000000000..76b0abd45d8ceef07e6f5d090b758bbb6fbb8593 GIT binary patch literal 383 zcmV-_0f7FAP)1|UwGlTzCL#|Q- z&&8q&YpR0x0&bAl%jYMx=ZT0&`>7=5jcs`){jE!+{RJ2YFagSrJ8jrD`n|%(@d>T# z+aEVD!P3O00)P^2b&K)b9I@G%(AyQn0zg0>8^vCn$4m}~0{XV;Nmpw)r)RhqSJ41Q zD#_r^7K!!MXaI3Nr1=R-M+A5t&GQ28WyBM#Y=+dqK8dxJXaHTU;oaP!8%{I;BDC*| z_z#bN1C$$eM_Mh+Y=+d)A@=gpk4--43VsuM&omOZtWC=>CVbzQu&DxX3JO5o=*wFj d|3<1~z5uQse89z{jSK()002ovPDHLkV1j@-p>Y5J literal 0 HcmV?d00001 diff --git a/flags/bi.png b/flags/bi.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee27622940c4c995ce7853deea6490c05934909 GIT binary patch literal 554 zcmV+_0@eMAP)ZO~PZr&oKsKXET9qVSzBh8WRWuXM?>T#t zBzc}xsYsG4FQ4es&MV1rr0s1TW8>R~f>(pLd7<@U{;eF{L2j6!I27-U>)GrXRBCMWYrO;g<5Il|97b8Fb)3PyQ{g~z{mZQro zMi;S-KkRbS5?fjvX>-$0D~*bJGCg^Jg26LUD`G`peI3$i7#f0n9!e#cn}g9&7#oAh zNvPFG*ayU^8j9a^91tO-Q} sVkdjJ1wqY&r@+3^#+ygc3B04=H{LBZMeCTFn*aa+07*qoM6N<$f^U!m$^ZZW literal 0 HcmV?d00001 diff --git a/flags/bj.png b/flags/bj.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb7145470dfba2573dda1cc95528c80a0050971 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^9JzX3_ zEPBsQHsm_wAmAE*M?pfzCs8?RqS{h-fj4`b)IXTX9dNE-%a*Qob>ZfX=;++EIXkgO zP>3VqMSEjv`u*hP5fMCg112v&n5!QKbLur3pnl z7=H1){Sa~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6$rgczR{saw@!nR0L(3}qEPr1I$pU=6sgWRZfpwJBu zJlqe@#d|+5{HLT)Q=Vlte|3-Pe5xu!-oEs-Xn+r+<0~Q0WHw7h$tLZ=(2yDi>@;po zdRkNCPRz-m?Rz4P&9CtLm-%>N27tZK5-`W;Xe={QvfIE9OEIODN48J<{T>Bidcm7o z@py&ui8;>i7@@l3EZuGyTAKiP*kr@qn&XSR3iEp- z^DR1^02p#}|H)oz??2@7&G#xHBPu8F_faGXB?_daMKre?0AqeW+PoK`HxfROy&nJt zU{+NFM>`E%yLy~5WenH*&)juwqt;?!v&}}k$f6`WhPb&2CYLr*-!jas&ld}g>O~nl%%NIm!>_stHRV6e{6G8~lZncVcb#+1rA>1!siUhs6IQ$C+DC`4! zWKK&w>415j|6HNLi369oCchw6KyIQq$6EZq77!#(U1aEp!GYgMl7+4~G|? zAMbge1OF+laOvzM6m$rdV#|07{{{2fptfpJGV|Sj$+^ zOjeVnjx7X2dPWpL2UypeMNQXAFxN68Kl!(RPklLM&(7DS?KJMpBmG}f7{JC+P`IMO z*xS}`(AE#Y%H(T*;oXp%Ki-mAPfhriJ}07$X{*B0ias46l}Zth$FoW)A3#aT?BEEW zZw+aYpX;W1KULFuaJaVpaze~DXM40g zYw1AanbU~n6~0YQ6S>q&q~i#&SgbpdNQ`ZJ0-(LjrH#(Hg$j3di5pL!a4}G&#z%&o zD~%DcpGrga^|%oT7Yqi#zFmgjen|iE>a8@ht6nhct6*zwh^tODWv(V}RtC!NE+(1J zmvN_~!!%9Pu`J6k0?IA42ZNP$04fjfpXuu3L!ZOK@V%_2EqksOatwXcO#|S%ZpgN6 z?XMI7L=X;~@I+Zo;U^8uUj~_oPjAdr@ubYfpX0ummj2SJhm<=23XteI32ggYVxTQ# z4fKToICjk@@kVaMXlFD>D!iRwJIR&4_w~EXZjG^82rg(E&7}Z*pGBp34A|P1zSyi% bq&AB`bV%Tdw^C6G00000NkvXXu0mjf!M!Ff literal 0 HcmV?d00001 diff --git a/flags/bo.png b/flags/bo.png new file mode 100644 index 0000000000000000000000000000000000000000..0b925cc3304f3880d1e7934a594996a26e3d0643 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^@JY5_^ zEP9V#^37s$6gl$o{t|Xafs<}`J?>O+@;~IXZF|nSqd>budVf`pxYgq~m(rLtH8P}L z`R_fxcyZUSjSK1*P8Ysac&{MKPOV4TaAJ{6C$rlJM)iG6irdQ+SkibE_6n|>sv+$l zZp(0({gW>L?S^x_|AYe$Jv>qKbVX@|y@u>M-G)i|zxHQ-aJTMQr?ve}$WyglA7=dw t-Y~^yGehgzQ&PXbU26I>dELA+_B?*4UniUcPXXP{;OXk;vd$@?2>|9!W4QnT literal 0 HcmV?d00001 diff --git a/flags/bq.png b/flags/bq.png new file mode 100644 index 0000000000000000000000000000000000000000..0537acb5c38f3c59b11ee4de171e9c0be6a49303 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^PJY5_^ zEP9VlcJw;zAkwyfrpk@psDg!4mOT)RdCpb(RJLm2H??_(T+8JSiV10i99yD#dCzmT z&RD-S5BT}p*zcRa=jDl!xGcL#XZNBux1E`?kWrigNu6 z>k2&o#S1W7Jb&^s)s&;;oTom+k3UxbvYPf+HBSx~4>TV(h7wy%ZM0Rabcm%&whqz@f*Bl2 zp?jfI#i^7^-Q1*qK!a0DHwOoM+uD*r8XS7DHx*inO%tMtQFA%xbTCaM7x|zMyl{AV zo*yqS?}7i6sJsG!7Ob4*D5cVQHrTHMY}?=SF#Jmx!gP|?O3U@hS0~xwk8wcEcRLLO z2t$}C_i2CwfTm%1*tbojGtp!WTvb4gj=4+Bg;u%i&oGWfG_*>OXSX58Rol37BE|H; zHy$tDVCLB+iX}zo@f6W}vpm`KF~8A;)S@2Xvx?jw{LZzGB-uR=zY7yw9u>6M@bz;m zFJob*uD)QjBgORlKGtdhE}=2e04N2^%iH8~5|?Svb;`o_^;Udtp(_(qc96(h+*vut zt#{|yF(hLn&ruo>P{{pYr0*#YKAz=zEX1d*r}+-vB)vr54srY9YaR{9*vi^u+Ed(I z=_iq|zq2|3z@9Xj`x4|rdxl`^E(;&dpc@&R0sbkTZX=#;;BrUa~ zR4hRCGkGx?M;if01fhN+Sp>Gkp|)8rCz9pjFWViBkM}T_u>b%707*qoM6N<$f|LE` AO8@`> literal 0 HcmV?d00001 diff --git a/flags/bs.png b/flags/bs.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7740df5563439eed8d2b3c2fd012c44e67858 GIT binary patch literal 437 zcmV;m0ZRUfP)8$wX*-mBizP~EK5F7(0!hx5G8@0@pd;h!ZM&c2>l z%;zQalFeFx1Ws};QZ5vpC4eT3ky2`&S|$y)^(Vkq3Mq_X z012R!(y&ZwnKahQGS1EQpAh9Zx(o38s?s&`Iqa=<)XoN>!ad#6ZYsYYH$yZUngP^L z1v*iOdnhxHQibn|MniG;2d%2|3P&d}orK%F<~?lz08&CC4r8OueZ5_HY64D=VRF26 zj}B1P{1Qs;r3eNHZEo_gwn|FV;PH2`t}jX`y#q|ka6S!fVF`VE7rQ@<4dDC^0~qGJ zxHsA{{+{HQ1 zJ@>$c{~T@SFgb}SJ>(!JWuht-ycm$lP_Un~E(Br_z?a8-I(d(aZLo9z5mFk|Tzi0B z`k6Q;3`zhAfGFy3?uar=tts*&Y1W?A+DFG!PHip`VJBihzwv@J4fj0cF4NS8kf)Moka9U)k*s(kr^^g2G}`aH>%3P#ZG(dvJiRUoj!DZG`>e$kY2 z^vMl|-Y?QRaGcHS^F*4~qmL7Wp~kYhi5*UmTK%Agd?63E>Lf##^6T5Uqi1kV&kz}D zG=DcmoWRe{GB(^K_3Ey3;^iGVa%vjKYQ)0yT9rc!Gw6Qr6XFCZ_bIgn?1_*ZK&JYL z>_%;`ivI4v>)_WPV(pj#vTx`5nu3tf3-Dq0Gvx$a(R7OYUI|1Yt6f+G?B6RD+dIf~ ax0he5*Q8}*DlZxU0000 zAQpC7h>fkasVqdnA7I2@h_whI2q7k#n2_x5twqckG(|*T7+B_Io}Jlc;E%GJhr`*~ z0neCl$#r$o9;;Wp(a`wYeRZT)Ti=URCR4r2W-9;=z~T6UoMv|*X_8-@;shiUS8pAnIf(bOTx0o094SJ tZ=9BeYf2lFky>8@#a2^%Mkmsr!3RvLgb}5sZTzozJr8sp(1N zKiA5AmG!%bc}7L>E6cA{hO>(;HJ+CJ*AdHP%P@KMXU(+^4}k+wrx*M>`EpAygT=D9 z4-6VQ9xP!lV6Kptt2^;Kh^@j|wZUSY%i<>!v@LqICtj=H?jDq1$86U>Icjr!3~O?a z^!e{UwQ5T53NI*qrFOi(W_jtW1r1!Rj8k?d^m6;n>^}U$IA#9It`h=FqZ}FDPmi!> juDg0V>K)(2y|cB&C;LsYkS<{cdXT}>)z4*}Q$iB}kj;1a literal 0 HcmV?d00001 diff --git a/flags/by.png b/flags/by.png new file mode 100644 index 0000000000000000000000000000000000000000..4af566a76a89523338d3fc9b63415fd84cb10d26 GIT binary patch literal 383 zcmV-_0f7FAP)2ND*A%?dn-o~i@|_VzhBtZfxU_TGnhWdS4w9-`hpTru$_* zb4!nS|G~`j%C|3`G?enXN2l^+mBh~@BA*u6n+en3lc2dl$^+ze(9vR2rm6&+dvO}; z=+s9k+V4VoP)>KN#IIQDZh)*5<1O)GD<#Yv7+CTELw-M~9)y&-ZO-EVmQE=rQ?5CK}%HtBct>AOEqgT>;G>6FcH#-{3xgE zxj_bprEh+s8;L^JEI>As*4v%Q+{_M~&t}8+%X3q6X)S#PFsy_=7@u}TfsqQy1}6kM zTrZPPz<>mg-2gHWx8Wn8-TWB>m&=rG0vq50I2?|kYgtqA00000NkvXXu0mjfsh!~s literal 0 HcmV?d00001 diff --git a/flags/ca.png b/flags/ca.png new file mode 100644 index 0000000000000000000000000000000000000000..41e3b9b487707b1ab4e3a1513aa2030107051d5a GIT binary patch literal 433 zcmV;i0Z#sjP)%;8l7fMB=H)aA~V^^j-tBJDt2rMTScQMB)GzKn`^+u!}0;pvd`; zLev7=an!8<1huP~y_-97>9eXJA9X5#swZVGNY5>kNv!a8a9lHy^SdElk;m;lRD53d z4?&ge@hQ3V868s-!2lKEWMK{Q3K(NhRZbVz5wFPD`X=rl;@A?)$m#1a0zm}~w0Kkd1U^Rv6 zSpop<(YnJ>e#9*PyN^nsyQ~r_4<$bj-=C@7hACrN-B^~^ofa`Fa^u4e@M3;!+2v|P be!2JrNjRe!L}-IJ00000NkvXXu0mjf0p7p@ literal 0 HcmV?d00001 diff --git a/flags/cc.png b/flags/cc.png new file mode 100644 index 0000000000000000000000000000000000000000..133777604cb308bc2a17ed1cb585f5d7a9ab7609 GIT binary patch literal 644 zcmV-~0(-4Jeq;3J#cD|;rY&CDSWHN#kR2yUj zKnD;291icka98Kj^pUgNyf?&)wmkq`eV%6Ex|{0L4K#O+5sM|at~2uRRY20+*9Lx9_yf@!a;>wCGx;e;@BzLAI*|XZWMtF5-5jF0&khSX|%>Sw!N&!;{eDW zk9p+IT9A?1Vw1iAuWK5&=>h znf$YLKOXH6uVykVR32ra+|SdrhI_9{-;B(ObM*uQzTFK})h4z%7r6WQ6CDFfB(frj ztjPU`Z@B$d;YM>MXxOSY$$>IYObi(iFDka@lEVIgZO^2OyQo(AztLVHf~tnuqdo zyE)%s(A|BB;o(kNTTkvvG(G);<>mE~m}#IW5>r#(iA3g!Mi&tTp=6_`d2u>zJJa0i zbGe*e7#w^r_V>R-QKS+~fZE#qSgkVA=ps-kKrRdBE8qeygIKjI`wkVp0YkuQF{eb) e@BD}ITa90Ln7C7tk+rA*0000$S zh#>|Y3NPkJCDtK?LEbtHDe4j!v_p9D5*;EW@Q@WViu_mVbgsSgP2czFurVhy6Z*mr zemoD~&-3N^@q_=AD0PS0oaBDncja1MGT`glCZJ|t1Gi>o(WLY`mPs3)odK3BS8!Z3@07@Qk&hxmfi>~GbBd4y?eRv2>SQX}w zKgqb~I6-^HQwD&!{Cdg|Li7uG>2VD0bnbq`&~1H zUO(aF-nY19o~%_vwN0ltILPI93059x=!OOYbWJlW057J`p_Jg&Y&$|ILjEMNg&x+U zI_ZT%8fUA;Y9zq>{@iK>K&iq|j@EtPVZ&_>CML;^O8}%-;p(hnpnia-Qx{OVV^#&g z>sTfhyvNzm5i&7BZbKrZV$XTS%QF}0o9ZR=&AsJQOMokl&$;`f52Gi~N-?gh)#B&% zAmMbJiH}DrCQ<@;YnALzc9R{GfIxFYZA3EI80FEIFs3E9HJ1Q3g~*PT#cjVtU+NB- zl>4v7Er4H!X;ht1EM99SycB0*a{IU?S?d=1ybhboR41kEFqQEA^GN_pO@o;PRz%sc eEY@yh7K=Y{MYHFCO>Bz*0000kn0#Ovje>3wmBPFdMkaD5xpn=&$3tiMgq?J2YZS$M- z1#HpAP0LpK34+#sg%}zVQyW^SIe%V@8J$54Bs*~6-pAp-bKd2_hESsNY#V0DWkG?N zn!#59EE2wrCSmvuuhW?9GM`S{Zlm!av)NAxa={L@MRP+dEL|7Q^8jivU{ov=EUn$X zre1$s!?>n_TLcgQsgxpw*qKzT&#L1jDV6$iE=|8rlZ=Cl4iCPZ(r(`aMOv1dn9f7! zx?YyQp%z7ut=8h$FpNqp!r!s+00Geb=%U;!D+L`BYGK`cX>uo;K{NO#2OAFn;6$fv z4w;z)oMnzL@aJ0?-Qt-89COI*)Sv?48wlWdkHpI9TTz+Ipyu`i*CHOlwwbst{<@AG z2fx>24AE!GY8qFH!qKu=#6FxKP)f<0=kWyC@!e@5*MS$3A3YSQ{9BO&l>h($07*qo IM6N<$f|kLysQ>@~ literal 0 HcmV?d00001 diff --git a/flags/cg.png b/flags/cg.png new file mode 100644 index 0000000000000000000000000000000000000000..73b99f932c4c268730ab1bddce7d6cf4d3bcf4f0 GIT binary patch literal 332 zcmV-S0ki&zP)a${K-#d{`~i5CNuEQ@HT_%9!JR+jjHCxCz+a|!;qiR zh=p0W>2u+~qj_`ZaE#V^l_E&H%^5%qAf9rSX!p*;Q@C&CbEQxsTpGbrP%ijx3*JPK z;u}E~{9u83hLZ(BrN9Zl09~l*)dN@syI|&d>5t%c7yMl=mjr{R1Aeu`CBdKxkLQJ- zRfIcs*a-XtIRrL>dPsT*Yy?rnT!iJ`Z~z}MG32K{R*H`2(E_MjZc~g*Gf6X^fT-B0 e*11n)>*N5nD= literal 0 HcmV?d00001 diff --git a/flags/ch.png b/flags/ch.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcf775f37b840c9ffeda640b97e19d3edca5c0b GIT binary patch literal 348 zcmV-i0i*tjP)zDrG*+yZu3W3{pt~;I`E2go`zS?G zw6%@mMg$jD>om!Ak-tJ3GSCAvTt4nSa0dp~MCHX9Y#8uthCbnM0`o$!1KSh)cMaM` z5JSAhZ1)>J9Dq4=Y=;3fXbt-S4uGr}R{b9CXox!+qWZmxM8JjYT8ZbOx(7vFM@67I zd*HgLpj~D`8)iQcMM(HswY1>G;ETbRWEx5x$uyL_uLY;Y8>~ZRh4_4s?tj!p-(08J z9?OWEo^oyQdrMAnep-EX`4R?GF*~Abx-ZBDeFbM zNi*l$mP?)O(lpnzbI6+!n#hnF6Tev6y77Pk`v=A~e+7QDsjgs+{lQ)5zCfgWso~mS zuI5Dy-)AZ*MpRF`v9fu4Pf_#Jjx_cqagW`mTxE+D;}@(qHrw!8qyp#(22WQ%mvv4F FO#rGKV)p<5 literal 0 HcmV?d00001 diff --git a/flags/ck.png b/flags/ck.png new file mode 100644 index 0000000000000000000000000000000000000000..970a2b6394c79cad0ac462d1e07176c40b41819c GIT binary patch literal 592 zcmV-W0YUD3$c~0=ZlPRXspalp}ec?-a4v*Y*Mc*=(Na=`n<;eG|XGmywZv^7&$uQ{M&S zX&8F|N9~eH6{pj}%*-|1ZX0H^k$C(EnT%S6_yUk_6gYs}VDOyO(O*=Pz#Bk4>}cfB ecD6yKe)t1*+pZ;Zj3+$+00001qkxZPeah@$O^ zDa*1VP17lW4-f>w-s#EZn-IcZFTS}yuKr^;%IhR5_*f00000NkvXXu0mjfj(3p6 literal 0 HcmV?d00001 diff --git a/flags/cm.png b/flags/cm.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b103ded0a3d5999988ef1828a7fb49cc86fdb0 GIT binary patch literal 329 zcmV-P0k-~$P){YN50s-aUBn9mJ>bRXln1?7^#7 z@hyA?=^>~f0g*s$Tl`^QW_RY>pIsI5qtY!ML^<^IF>#_my>CkeC3 zg!dBAqR&P5kpKbMi#5GDe`{3%hxcyYK3E)}igv~}NK;+{06e2&7yz}#vQ_U1id+N{ zVGQJpRvE4-Gr|(EfmQ;VBWNG5282It^iE)K=7@IT`P%;OAh`qChDHybuGVni1ma6$ z7DKqR2EcUT;y3;8E7S*kkfHdxLs^EOPMJgbnK}rk7{j6|T*g&y%Zyl+Tj14IS|pD; b(mePC;FCjx+tb`@00000NkvXXu0mjfKP-_f literal 0 HcmV?d00001 diff --git a/flags/cn.png b/flags/cn.png new file mode 100644 index 0000000000000000000000000000000000000000..643342ad9c55f07d8655648056f1c988364271cd GIT binary patch literal 349 zcmV-j0iyniP)K~y-6rPIAi15pqK;4iz0qM*b^5!5s`iilvPFCZ3zkKr5GXz6?S z3L>`FHiCs%i+@f0Ng*UA*id293gJUVUIXKDLpp50W9MHlUTu3S1raxx;<-f znPEEEKpl6(42Iz$OO0kwLox+@Dy>5O0J6!4f{-KMD6emI;uIf6;rM|00000NkvXXu0mjfWZ{+E literal 0 HcmV?d00001 diff --git a/flags/co.png b/flags/co.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ce22f471067dbd8251f8d5c49ff1b9caf963f9 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^fJzX3_ zEPBsQ_T^)A6mW|V=RN7666W$KJ^d+@-$NF^q_-@3hdg5rGD!;x2_>gR-IUOg=HBFbtA?d#FzYi2B*6~xzAX03Nx^`!HKjDUFk8!HwlGSwfwUS;C1zKv;uN{Le< zgJ{T9y#|IEt%qIDbjUU3f2ww5Nf7IP?SGGHwV9a3|I-|XCvxm-xn)8pBrA3_Y`b6o zg^6*;lgep3Kg4>)9#K3wzn*c$)R6X9YebbkJPVuoz4*a{xOZRgDIDK>hrwdLIp3c9 SyB`8Q#Ng@b=d#Wzp$P!mqiJaX literal 0 HcmV?d00001 diff --git a/flags/cr.png b/flags/cr.png new file mode 100644 index 0000000000000000000000000000000000000000..203d97d7c0474ca1c387dc8447696cdc9efcb61e GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@^JzX3_ zEPB^YHsm^FAmKLOQ@et@4hGxWHpxRvbg8I=b<#tDCMx-rMm!`qSZwc#B-Ifvc4%TA|eNU}M+`<^r{ zHHINTYtDX|K&=>tiuhEq<9w`IHVmwf1YG?bm$o@EKU$uhZ6Y?MUZM8B?#$~fQa)2u z{3`FtOa8bnyyco2M_C^47PF-cpLBfRvn@$oe8=HmOV&&_h42rvZg57aYiv8PbzAR= e^EU!&+RPi9Q>V2jiX;I&$KdJe=d#Wzp$Py1b!)o- literal 0 HcmV?d00001 diff --git a/flags/cu.png b/flags/cu.png new file mode 100644 index 0000000000000000000000000000000000000000..df19b365bf5c087883f4fff020e3595104eba800 GIT binary patch literal 560 zcmV-00?+-4P)I(A1`}f6zTX&ffAeVs{rc9%uX2 z5}AijDBZpf(n03iHB~n^XHT5IQF6P*&iuU4b2*_dE{c-hFN$F5jXx^RUH>AuTlp*B zg(!g8x~SFAl1U`57j1PFQ7D)X7?Mod)la$0*EWg`pf}iSXX^(dpQjQGq6`h07wYFn z_&xKS;lWER9SSjIPglMk4pB>`0MHT%_ z)7#9}5N!b2T($x5I((0(gOABctG-zz@ yz`gxz#h;`6cfQmI8rKL_vZ;3zZ4YrUhg8yXz000005d?A zH|Mg>8NjGq$Ckp30P2^2av|vQ{Lv?7f)kdm?EV`NhBX&J1bV4KM0xUdk!IUx@_Y}G zQDaz}8E!0!qFbt}y1%O0{i+4oM0NL>s!a>+dcA%dzyS!Y^>$Y7gD9{DT6|L63{4*v zC$QGb0ed3J#ntynXB{1zgK9LqsVQ>s0u7#mIC*>T&fO#j9H)MD;od7;Cu4g28^_5e zoo+W6qzP12(;r)f@?cr!4>>G0_Zwh;L-1HJ7(f zbb13SNE z)W%VW^b(5+atf!udY`HBaEww?)SH&1;?EV0q9 zWC92i~s-t literal 0 HcmV?d00001 diff --git a/flags/cx.png b/flags/cx.png new file mode 100644 index 0000000000000000000000000000000000000000..9d5e1404fa466768dd3d370c61023b24dc245b89 GIT binary patch literal 513 zcmV+c0{;DpP) z^dS8Sy@dNyE{7`T$4(6L!mExFnoOPGrZq0 za6*apsdzbs>GmDVrBh9+bu`HD$RJ^^dCWb0YFh~xYU4Z(=> zWzwiG-;6c)OO2J*+$;JBBLHQL0)zl90qlxJ9HglP-&=xPXMAP{0zjKbB6MU|EC8}I zA1NfjM`I%BmztcZng5pL{qIiF$jo-dVm_6pJk{jGRhQWTpFL0T>A>L4j>OgU23)&X zV{o|2%WaeUYe^+17+ literal 0 HcmV?d00001 diff --git a/flags/cy.png b/flags/cy.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b75cc66ff0e9102071cb11e132fe9fcab4be32 GIT binary patch literal 399 zcmV;A0dW3_P)7l>4SF)GZ&_JAD~@_z=f@2sGUIO@Rxve0lf27FSrMl2Im57XSMx1FIJW3 z@+IZz6-w_y_JDczh^N#(6}z@RZ_P+q+>GZa)uFZ5;>CYqFdUGx$5ir-wSbLB>@|86 zvqgrJA*0y{XWOA$?`~?{a04KtGqkJijXL`k7A3?mT<;PW%>SeDgM tN>!5t7-Js7FuVpv>Wi-zl|=JJ@eXaKmzvmk@%{h+002ovPDHLkV1oHluBZS2 literal 0 HcmV?d00001 diff --git a/flags/cz.png b/flags/cz.png new file mode 100644 index 0000000000000000000000000000000000000000..70453312dce3528a43cb309e33ce5d1dbb59e11e GIT binary patch literal 371 zcmV-(0gV2MP)rnx?i z|dc8xt-6afX`2cs| zgsU#s#3!3K7mUg!J~Zt|4f_2FK;bX)A#dFBzz#v~3K>9|8J9eA!ZSKDw>bk)ow^cm zjjcR21Bmd44Sb>JyvnlXAl_jD-=As2fMX4|Q~(mZ818|Qw&WX&Qc=7pz5pstn7*{= RpyB`k002ovPDHLkV1l1lo4Wu2 literal 0 HcmV?d00001 diff --git a/flags/de.png b/flags/de.png new file mode 100644 index 0000000000000000000000000000000000000000..6e4227c4da22b3dde6c712dcadae12b238622323 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@|JzX3_ zEP9V#3iM(&6lr~^-z(Y`@V2>0;cZlmL-=jh9g_2NB`2)(TlTVfZLj{Ml}`M31el)R zd2;?~KiAQ^rq^Eg*|$AC$ShQps(R<}3jqUnnS#$9u95~vYOY-U&SY$5Kl9JBJ$k{* zDw1uM{MD6Ou0Ch&Y4#e&IiLP5I=z!GiDOf`$x;0~Hhj$$SN=$15Z7ugCZHP3*Gr`blh_OtL`7GkCiCxvX=+tdN`Tg6zy#n5+q|W`aK)m@_lyJO9jqf65pxa(kO|VPDMZ z6!qwa+}A?@8({bBborog^VE2q(dsIV54?q)rOw^MiwU55!Rpnq&B?aHGA9E}mBM_J zD*z^djD%&Gu)hVDCBG*GePS-@hG+loHn$OMd+T*(PrLQr0AVSjl`o!UI=CL@$Ag={b)DheQ hozdx9gV2!}1fQWzabI|o)TICb002ovPDHLkV1nD0u6h6f literal 0 HcmV?d00001 diff --git a/flags/dk.png b/flags/dk.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4d4dd8ed3d5a96e69d3c305800cdbec6bbb1b2 GIT binary patch literal 349 zcmV-j0iyniP)K~y-6&6BZ8!%!54zk6?y8n9$>NmOW-K7+crxQM=o&_x6VK@dS4 zd>XOfQ#c6@-9)V@q67quN$x!kHfhlgfpqYP9}XYe@yrlcy4u1rDhkE@Y8LSx`r{3mO1RoletS_C~bT`e{Etg#F!#!NrZu=GD#hls35Q z_Y=FaRzls~MjhO`5a>nzovbL8~OtW>;_{qC%-Ibm2-x z1QiAU5XF@nb)m$aqToXC2kE8@SBm0BiYO>lv1sTvq%jSt#-NgE;>;TtlRr%g1utB9 z56(U3-23i>{|wPMnfNg<>epxlt@Ity*Jq+h&CTR8s)1EhNV5!}0}v+?Iz|S8tYe;U zg|j&Y#VOq)$^tnJK(`oaEnbChsS8E`w3?;1Vo?<&TuFas0clm* zNtEYa?<6q#P4fAU&V{gq7Y|wdFva+=&if&|4XXph*Wr7*y{7EIT(XN;+MpUV`Dw-2 zTzE-5-%bA&2d&2iVE1EuscelPS3uix*dvG`xjZNdRWx4rj`L_kfx9VjhX=5yM5n{9m{zdlEs}1sEqIQZ`e4SE zB-cLq(8}JXIYxl1i6XO+<`93~WQUz)M(gwnsR4( iD2WzcSsst*Sl%)Jnv%f2zrb2!53ajk$P*ncLW{B>SwJM ziAee{iuQo3CMNV15tMVxR)4I;38$2jFpO1d(EPe2^{KPDtn>E$dEcA9HVW|k#m8`J z_T5mH=i8R_j?gFmk3rL@(1_T+RbnjWR{(p%v~NV~nE@qZsq^qK&S3jlTDz!CKaz|= n1+%>fZ0=1X=uY(m(QWc;Qn00000NkvXXu0mjf0Z;CN literal 0 HcmV?d00001 diff --git a/flags/dz.png b/flags/dz.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ee5a5aea3c5d99d246c9fa78f63e29a85d3036 GIT binary patch literal 444 zcmV;t0Ymgy3Wb8H0oX;m z*U#Jt`ZxLjGyvr)J+QmlOsP;Uzz>U8Vba?%td%v&rH?siOyt!KPC5gw>(Pel2_@is z)MDngjmf>eU%5*-T(8F|?H;1cS5&#|dxEC{fZ6Ucz41cV zyUyeI0-`(aYi`(}if2RqX|4rGTRP2J^Pj@sa2&_AEUN@RpUKdh^jRT9k4NpI>M5nv my_E67 z+zPf7-1Hap4|LH@k%C{25)}rZTj4PT)9Jka&9fnCCCk42{imTs;k{?@lMS{^G-rNc!V$O zQ#f{=xq{1yHNk5B30|W+{2gd5aO)A4_s8+Dsfpm`4!{AqQvP^nQBb^zAkW(X3mDSn z{{pl_0$etmjfM#IiUIJ2Ma66W`wKwqfl@O{n87drZNx!C>u*3s+|bo^hGJYNS6c>! UOc&mw%K!iX07*qoM6N<$f?<)^_W%F@ literal 0 HcmV?d00001 diff --git a/flags/ee.png b/flags/ee.png new file mode 100644 index 0000000000000000000000000000000000000000..b396554b90520e4491219e911f208aec63abe945 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@|JY5_^ zEP9VlcH}x_AmAE5DM&nOL(?OtHR>NUt(Q@Qj!E9j9)=Cf zIYFD5Yvvim|7TBOa1DI1Yu)6g(9q26+#61j(>AO9I4fWAetzwJ_x3r(C9%&HWG>&5 wC=T?JO=3{GRPlcOf!d*8J2MTGn zvq~X0i#A@eZsuZ<-OWa`I?*4_FwFe_$8hGrKc&je1;jaYLPAgQF^8-=xPgHI41NGB^e6*@S$NX5wpv~(9-eE?Tq zKKQmk}giJ(xr>Eq~KDKlBRH*~q_uT`V%!RJ*Qg_jIFhVK}@3oy&g21;r+1M0_EYs&oZq5$C#8g4TiuS i@R1yuh5kOwqu>kGKz=taV7N*E0000kq!cY*0zt?F9vOybS6JqoLaDgs4fJ^Sd#&d85J%cRW zdjT$B(rR!a4KcL5{&_B-z@k{7{E|s#l9_KNnHi`lRXCpKU1_ZwMLcWF#Q*a1(yEjd zKG7E7y6$Zd1fN)lC}E)&w4d9D+va3E(dCzK3m}f;dl8Yz$Al=2s^_*4avs($V2qLJ z&y>;oh~e9iWxA|}80;+opzrkQ-SilA2ej-~HDDuqKNx#slv0Os{|C%hb2`lq0HF>~ z1DK|k}@P)7!?YYf~ak= zs5|$98yBL2Ac6?41UKSFSGsU3C|cYU1$9#qQk90O3Q60v&Cg_Jo}0EBL)(A{E<7%r z@4k1q5B^hP`H)B?f)TCaZ^u-Yp{iwB6#xyO$27Mb%BH5qj)cTwP+1qy;YiZAWNPB; z^mhfIT4npGXS3q=wQ>UwsRH=wlHS(~9DcLNMB2~G;~_rn zHIbqf;(1bA0W3@LX@s)fD1L?9wg`J3e839Bt6V2zy&c#_E2-(hiHrLHFycXK`4U^N z_mONEj65!J=Td>;CncgKXBB`D=rNPZ$Ded&yQ$@8sD3HpONIb2s~*Q*%yaXK#f67O zJWqH{07X~u?~J0y1K7VRD29p_HBq~KO%rub;Xq(N5nr693_RPV{C0|PE=7HEhCojO z|Bfiuy>S5KrUcID5YEX#WGsqt;-JzJ;*b09@uk9S9LlipF3;rC&p5j?G|rFW9_<5N zZwXQRw^9E#N8#=`&OkrT)e*c*y2Z3AKt>}tXV2gapGIzot!Zom)O1m^Z(NhkK)=8+ z)_2)9h55NM{P|2>x~dLJA(HJ(6;c)&uKOIA{d=|4rD{j+Qt=zMOQ8J&aZaNE0000< KMNUMnLSTZpEe3@E literal 0 HcmV?d00001 diff --git a/flags/es.png b/flags/es.png new file mode 100644 index 0000000000000000000000000000000000000000..e0221d0d3534bf562f4bb62ba27cd4933a3630cc GIT binary patch literal 412 zcmV;N0b~A&P){?JzyRZw3SW!zhLV8P@iwk3EHR6B=hBN$g{*QkK2L4&n*Jc;A79>SX0XUD)9|DR{ zIDr=h6cK!IA-NSP(S>D4+ze2%rLlprp){s2_l^;iyA^VW@KDp)xk$x(fBn zE`+eQqmxMbW9LTtM()|(C*XV4FKo27PovsG2Btej)Ur-#<>wpAaR7CGo#4Jt{;ErQ z>j>98q#c^ESBXu~JM(axA$JodlhtzyvW9OBVD;y0Yyy2Fhm*^)%o9t^W4zmIw9Ogu z1g{wjV?R%4s)U-*Np5#|(=5ur0c_g~YUSEc%tXBu^+BZ7MvS)Y1!D=Eh7%j{uaW^I z82Au~nmhk@G*O(y~v~}wI)XN$GudW`7DhBYCrt0Zo00TfN zWMp+6K~Q_W*@~c%lq+eJwuxIAq%1b&nE>KNRF6h`!{mpSESxQqEj#qtMM~~G8|igY ziN}yLyIp7u(FjnS5=4hRyU=$Pod$rG@8e2fmVY#5^?M z`W8wXO)WIdPC8d)%RM}Lo!phX$yK_UNoHElz(HDXOJ11l;-0nK8qW*;us=~$G~x%uVIDNYV`x? zex{j7B$A?(#sNS;Cqf9>Asc$H*!O+rd0rmCyB6xxcKru_yYK_zvYuv@h;VJm7i2)Y=7H$h$m z73fVDcI!ppjX@A01l|=v;6(-AlttcEQn5xKG^t5WQgZ{_YXr(P^3{o%mF z^FRE~dCuX1|CDL%;Pv)wpPY-D0X%Y@c}mHt%jt}l(hfg!Hu2Ds?{hR;{et*8gF%~`5y=$dx-lEX&k6 zlyN0O1nybT6orxAD4oaZc=g3ZP44&Rwgpi%>tYLl1Yi{f$@gXufcOi@M#o-syb8b^jv4V2UHV9`Lejn6uJ*9tZ7A2#07cGeiNvRwW6& z`$7zk==49AS*~s2;jMXlKkOOY|1>=WQszQi`VVl z+`h8sL^1m(AeBXLkmutK#HJ8w5!5ia+}@H`5ui}rO6Et7>V-7Mjz)|s%hmut&s|`f z5<~bDW~#lJm0Edg0Bv#_c{YMNGebuaCU&lS6#+i`2WWMC<=5DKQfJPSU92g20syL7 zG&EH&2l&1u@Gc=E*^crw?n76LdQr_5VEr>W5XCORFzv3SBi&>yplM@3%CzBLT#ZVk btpomXU@#DaAr)QA?Se@J|3R$ z$Mb&h!GB7K9SRGp%`-EjNq)Z=iFxID7A-*EkLh5{Gn-Aq;jNLt%aIX(9AGfyZt1;L zHv2h7>JL(5Hvj|dhX zusc@o0l564a_p6!-jW*3drSEhN~V4?7lX}))2DEDmyzMCR=!@z<8qmv)?qC!QB(jl z0D8Sn)pMg5SO06Sf8Rv&3pXZ{#I;(1!G#DP#$1?n8p0t3r#HgIQY~Me>eT*ac@-eb zqLOv~ZFHG=0K8tAl6DgZZW+02Z^2?rV&tcj9lKA_qagnWcCO R&!GSS002ovPDHLkV1mmiHv#|v literal 0 HcmV?d00001 diff --git a/flags/fm.png b/flags/fm.png new file mode 100644 index 0000000000000000000000000000000000000000..05d0669df32e74d1804c64ea2378d256aece987a GIT binary patch literal 417 zcmV;S0bc%zP)l#o=iO@>aP=kR;NLdULF%X}?-~;$D zCZEE<&StO}7}y#SOH12Oty||D%k9nmQ%w_3a*~^z_xZigb1wW-qW6){mq%N!?+#*0Wq~%8%wz~!RAtyuCe`6H~`L|s28_Y08Af1PceWL5S{IGP0Em*iIrPh9OrOj znv5foJ_NA6Jjw2A4jH))0aAeHDwG79UW^5#5V(#&MF?R9W8vnpfgaHJ>i!)iMQkQk zA!+t95-$_~g~^%tZ9)g@QylNiA!YhaQWcUC!1Y6&nXJp-_5k3wKigJoBa{jgS)khV zsW$zT$><-``lx;N76D{YYF}EBA52>XK8mp~($P6cNe>EQ4S7Cmsza3c_!00000 LNkvXXu0mjf;<&IH literal 0 HcmV?d00001 diff --git a/flags/fo.png b/flags/fo.png new file mode 100644 index 0000000000000000000000000000000000000000..c32504ca3a1e95613967335cab0b6747236a5845 GIT binary patch literal 413 zcmV;O0b>4%P)PS{78Fe3hM+Ntn>RZaCaWY70?B~~!<~6|-h~9$e3*a{d6o)609bS$KS-rFTrA zhTX_u9A~V$vkgEJm^D6=;U_EC$5gMo-y9!uzV1U zjg|deB{I;|Wpix~fZO{bXZfE)i?b87^mb17>N1cBgE1(V%QX?{c=P|!Xf(oNu~>!Q z&y>(wuPUXcz)=n;2N19j+I9nL?Tazy5-6)bx^7l4m}c<}ZI794h8^Zb00000NkvXX Hu0mjf7OS`a literal 0 HcmV?d00001 diff --git a/flags/fr.png b/flags/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0efbd6506c545119472f513f240964f6e8817a GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6<)Xa#URT;bPAQ8PXm!{v9Jx!8`2xdy&gP1PcHa|Y-I@BLe@&OK zQ*AKjaZYTw|5=T)&CRbk-@o|JYtnFC ze$)0CQ>MN1yidG~wwSSFqGRk|bK?!$PDF3wXj7V+eD0{|yZI|uPnpH}biWhN9?_Ls k%XnpuI>&_yDn+xJ-(6|ty4J;M1& literal 0 HcmV?d00001 diff --git a/flags/gb.png b/flags/gb.png new file mode 100644 index 0000000000000000000000000000000000000000..7792b6fc25b2525c6c6fa91f2b3fe192bafff6d4 GIT binary patch literal 574 zcmV-E0>S->P)jK~y-6rIS5qQ&AMhe|aA#uLsi zE>e+P27m<6l-=z!i3EnKVyG%pUeNOeyI9ZXxe|*(XchoV*YV1dXcPFf-*Rbs`dI1e z!b0DkFA{g!Et~`rfadeJBALvQK%-EwPYxxMxMHy*aqa$!VJoOx2W`RQVQ+PnO8P0; zl8z@Hx05~bIGeRmd{?g_`u+S!rI72IXcLSWHM#t7g`9GWsceutOYi!mCK8VsAAi8J z4^6`BFR6)6({7=xw;DIUDik;Jz`vjPKkV#On4e!Gm3oV&{pmg97j?S|WeXewU23uT z-Ga|m=nd0pU>1a6H_0hULYK_~4AZoF6xJ^A8mJzcM#PQ{f_BIF3zg@giI;_%-T(jq M07*qoM6N<$g3T-o00000 literal 0 HcmV?d00001 diff --git a/flags/gd.png b/flags/gd.png new file mode 100644 index 0000000000000000000000000000000000000000..2907cdd68d7febe33acd8f34b2242573422cd49d GIT binary patch literal 470 zcmV;{0V)28P)tk{G_BG9#KyKT&e4=K%nG3)1O+FBaK3bI2;ruXk{;v;RAGaYF>!B+!Gyvh z8suwe7dO?Yzh{g%<`lkFArQlz%goJk?!exozwPn(1&`hlipwkIf=-u<%Pg#qHZQDm z=|f&qM&-}K&XB7gdEUV==d(_(b%vwCI{{NXxWcg-{fxO~diVHsm)k43wik8+)(A_q zYK4&z_lYy2zcf=k1X$tzDsPUHRCsch`or9MnsMth-93VKy+H_!S9#UudIN`Y-e@r2 z&b@yIw3@s=!(=jAIF;mHtGQc`;4l|{u-Khoke1vU0!muFLh^+M(?40P$opdKK5&!8J`q8m?= ztuS6ga3K;@P$4^w-Q&-qb+n@flN1#HclA_F|7HgM32)z&N~PP)W^;3mX}Mf}jz*(( zBxEv~dt;1|V{Er_3C0+cNF>q#F@W`Y{iu{u?%6yLvHS*Q@e~D!$iX}wgVwgM*Db+n z<8kzuh{U6S2-7Jvo6zsu^<-iRR%CM$@5Q{-7bs?Z$hvCpQ z4F{u}N3A=;U*Y@yvxtajEz;}RDk4%YTb|kTegEb31oJs`IuHb>ZwUfuw_&kx zWcLztIp}t61xO|jd(|ow3XskIFv2h3j9`q>#+a>>dgcq~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6X7Ci->|-$pI4Fiwp1IIXsS6aOJ{F zDDJax5s*k86X(^_Ud))q-3U>*%rFs)V zCe&|JRFv7n0IEv%+{8_nmi%VL+c|al+)j2LkQK zH>9ym2)kXk)4^I&)5Dioru3z;|MnU%pU+DlTch3W!!UHP`bgH=%vxLiV@i}|nTw(* zh2II=#+W-1Is0Qz04(U1Gu4kg&!2!v(W6<#A<9?553R16nN1!op#T5?07*qoM6N<$ Ef@@{Cga7~l literal 0 HcmV?d00001 diff --git a/flags/gh.png b/flags/gh.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7e7a12c7093c356dce4afbdafa976bd66ad704 GIT binary patch literal 388 zcmV-~0ek+5P)QqKu=ieucJVVL3qUyJq- zyJi<}V#K5|Xhd>?M~`?eoG%<|wgv=&#cD$pYT?FnloO02Nra2bF1L3vt_xe60VhXQ zJg=yys2fnqVsEEH>tR6aK4E{i{Acq-1pvK%%Gv1*T0^ftc|tBgQZ4%{=k?!}5eKiX zDYz+>ZUAwv!0N=)O>!33f(af>0~;Xvke=t5|3u{qZ!d8NeqL5{9JVdTUN9jLorYR- i1H6w~<78n1odus&LUliM2P<*_00003vJkhniiE7Q=|Wui6yiJd zH3WB7;-Z_N3-KBJ0ukJ#CBZl($Ye5YLMAi!!-Y*~IxPhJ!-0FwJ?FFJIwT@3Q^z z0{~iU7r;3?U(z3N+&x72K1uHvD(EwdBaVlE(8lEUu>^>}d?jhOaf<~8dv92~auvT^ zCTzW@xN!*)^oT!wUIMtMosI1+IEwMI6kG>6j4(nVZ(M`mH%UC^^45ckJHT2Jm7x&m zX~GQ145&CpSx^pSaeOf#Xf_en;t7F{Mi>hg1JMZI0j#0le2dlk{1H?%;@>!*@$HMn=NzudGh)MqKh40f1|7~;rnaZA&Poxlca@prdTieUDeg}-iskl6` cl^7?+UtKZuB#(wnmjD0&07*qoM6N<$f;bZPNB{r; literal 0 HcmV?d00001 diff --git a/flags/gl.png b/flags/gl.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfd3f1d8e9273d5c47486c212572732ed4f71ba GIT binary patch literal 422 zcmV;X0a^ZuP)ALUQ54+&i2z=giCn{utW#qF5{@JkN`T z0ok^_o6Tlh*(jIGX~q~6A%ii-N~Ka70L}nlxm@Z*L}6tU5i!PeNe~2q1n*1}uayd3 z3Kt5l5ox=vM3Y^*Fp&K(Q1h)k(dH9XUU}4+}|JBFbv~HDgXdJpTll60M37% zBwQD7wHgovN+nXpuGa&lQfkvez#oqh&1TgEm#&*wcRI*emYM*-b3PA$Fp%|CE|+{b zw6N`VA=Yapm{}J5(MY-Xe|G=?t9BdyaESAI9T8oJ*YCq=Hcvj~5drY^4;H3*5}>qT zZ#F9}7HSLt09rhbN5^r1pJBR)65W!fWx^0}A)b8B?*P1O2YuRSD2{#N6NFXO5F1UA QkN^Mx07*qoM6N<$g3}wP&Hw-a literal 0 HcmV?d00001 diff --git a/flags/gm.png b/flags/gm.png new file mode 100644 index 0000000000000000000000000000000000000000..e6036b50bbf5b110da9047c69cacae028ae7ad89 GIT binary patch literal 316 zcmV-C0mJ@@P)cNhlF$C<;017&uX8>lzXFEM?<_ZzI+hYL855Ctlk2yp;s z02W{kR}NfhYzNN4s0FBlc_%>y%>nQ=90u)m@|O&V`J5II>SObC|Gbj2Edm&u!^@+= zueJd1gQnBZ({7)Lf~JE*Q~}g=&rBxQvz&8Lnbz7g9#_Wu2H;uhVRn0j%1Xo_A+-qr z)K{-_e*U3@Eg%v|=MTzSZPDQ|Fi;V&mgPF=;i0f` zq20+#pFe;97nhS4QfRQ=CP(s%`sT|Ae`?)U>D4dguSolHSV>?(A2!1YcA0344$rjF6*2UngG+xX@~#- literal 0 HcmV?d00001 diff --git a/flags/gp.png b/flags/gp.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0efbd6506c545119472f513f240964f6e8817a GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P60WbcEP)C{A8Ws(=7wUi}wRSprnc*b-cz)fZZD|+bc zN2sUlYOSt3VZ+mBYLSoQ(_n6pf z41U%b!<+m(D&W9}KvA|CX_@HiNLYC#AG&g>a!zrUlR{Nmgjf} zah+e*oW8iO`>owM&>WQ7fFN|D|3Vz^3)Sf6<3cmhl*-gfy$Xn!%hvzk5ap^b_rHvY zxv{zdnDhg?G^LUTq~h&fPa~Vn-gW;Nxm@mEM?ozB`RG@O8*C*hK{!>6=m63h@oeKq z&04GeIvB4&O0)Y>Q|#^_bh*XZYi>vdLI^jWaiRkVA`z}U_kDzxLs_t)<=aUEx}RwR t)B~iL9S-1%U|s`fy^>WshY8b8t^jul#M>4Wo;?5n002ovPDHLkV1f@>>23f3 literal 0 HcmV?d00001 diff --git a/flags/gs.png b/flags/gs.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecf002929f16bdaf9418a39c0ffa59c00f00224 GIT binary patch literal 695 zcmV;o0!aOdP)VF#tte6|$4bbk@IenSOnR6wsWW5gjPIFy?>z2pkxuq77ajQE<8Z#i zIg1be6XvC*tgOzaX-S)^3Jb_qkgc`uQhP!6#QdXx8zFiCnsY70>Ea= zarQPhk2_0?#GNT8m#;n{64B^ym;}Jn;UL2p6mR`S`ojT_z~ zdV)R@ni70!ONlAYxzZ+9H4rIVug5uW#G6rLLZG(DBzZxBM@ zF40-D#)_QqV2;)B`mLX=tQ;UMrIS`NFbspQqa&=-M)>wg!CbVD8jp(s)kVJqiNq=f z0KS(7o{|JZulgyNAK-Dw&4%bahOs@RS+N4ZjAmnpdyLRroO|8^)Y(23EIyJ+{f`Q9 zFmw>V7*43`x$oUeNOO=#O1vBP6N@`NQ1DZ~H(002ovPDHLkV1kbMJyQSx literal 0 HcmV?d00001 diff --git a/flags/gt.png b/flags/gt.png new file mode 100644 index 0000000000000000000000000000000000000000..85783391f4ebfdb6c14cfd55217ec197c4b27bc3 GIT binary patch literal 339 zcmV-Z0j&OsP)A6^K`99&rXj;y>R^SXv*Yc zvV^Ba1=tvbT)e#E2m#RdA--De6kNhI$rEb~*TFu_A{T(=;-E0Mn_CDxaR}h%$oA$^ zR@MN&S0g}aMHIa=zQ02o-3X9P8}V$4db>r;6_d{p2)j*SbV}kK@s;hMmFhmhrspFE zC)lk$)@#qDHK5nurU&dcT7UF^x6l!w6;@}hU75;INeb0x3P6l-oncWUrCd2Vt+lNH l_8H6#5Z8-D9&Kdu;2XumQK%{_a*6-|002ovPDHLkV1h+1k?Q~e literal 0 HcmV?d00001 diff --git a/flags/gu.png b/flags/gu.png new file mode 100644 index 0000000000000000000000000000000000000000..03a2240ce8ca22b8c7debc4a044520a2e94cd48e GIT binary patch literal 402 zcmV;D0d4+?P)_y z1vaX?C#}YMQ7ny|i}jxL>D8GzhOV3uORaQX+~u|dr7c}0T-XGkhK&N8T$sH80aa=Z?OcG)WDF|P+0J0{VD zjd*v_;$C$sE&0Z?G)`c17uGSDdJUYc6L6c(Rp w&47vq?@s+N0SyN(0PDM=fzL>Lm@`{^0R!h}0It}~TmS$707*qoM6N<$g6LeUeE#6S>-zx|Wo6@sW}qk>piSjr)y#bIS*;RD$F7cT z()vtMV&A*nm$wOE6;|#E2NG0Kq<1t+x69sBjd5o0C|d9LKZX)u1RGWJG$|$2c${tm zNC4NsTy}w;0IG@_g1!M_phx~Yz%`abGA^*3lJS_inE<*-j*(nqxdYBoxS<lMe346~<5<`l-~dSow9EaPs@f|w)&Br;$P9S*-X~|B zCCgGMKhuJO69H@0!d(8)ptTRc74TZUEye6BZN7p}Hpp3wx;3(%00000NkvXXu0mjf Dhnbol literal 0 HcmV?d00001 diff --git a/flags/gy.png b/flags/gy.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2a8569bea02ef78a4f49cf0ffccc4f1cee6ba1 GIT binary patch literal 525 zcmV+o0`mQdP)PAP82MFm3k5JC(T9MMfJ z!iBa`Lsu@O7Kya5AZVnb#H1jlS@>E>xR^>%kfM+fK~RwB;Vkra=W)($W8;jCU~4{DhVm^Px6_n*R3(?i$71PklwjY)vt zM%ds^9doWI_XCF;l|)5jL}2eT9Y?1g3wK7>YHT2x1VV}LRNtLUBzK3ubKjA`CbY1D P00000NkvXXu0mjf=~V9D literal 0 HcmV?d00001 diff --git a/flags/hk.png b/flags/hk.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5fd7a03e66321c0472bc9e0e124e5a0b772183 GIT binary patch literal 412 zcmV;N0b~A&P){cZ-WIdWbL&D69C&%pd4A_P9A5aRq|d^D4GlCu zCI@EM@Uj4yuyY1O85ExY`xJJs;9drJgt%WbfDDQY@p%o7hk3hPCYVlprBD|Dk;0h_ z$wq^4Hv3naWkvIO4lIjJ(_}UrqQzny_Im6$n@IBNed^D~>uAJQE{7J0FsRoFCKAZ1 z%9^gD>N;=Z@$U&H-7Xh}0@HqQ489_69AF~uDjGafy@Bfp5M3}$@Scl0jBV5 zgE*r=@8CSZ6MPMmuE4Pih97_gw>F#u6X{!D!T&ti^Th}Do>tESV?MM10000}W=L~6`U#*_B(d0@QFOvKI_rr~+Q1l#&MJOKm%sukXs{5YRKDp`+&y}wJt zaxiR**vK>TOB;Z9BX6?-AD#fm3Ls(2(ZQplcq+f5ot6FAo?4IiU{QbRK`Kmp6K@g6Q4f1~Fkk^Smf|}xU{Q>WC z3fcVD^AbgC(WhW>v)93FHjV3=tgY=`c?xg9-&8&6J5VhCKuU3U9la2XS=4G5R4R1< za=GWk;})x{t$leP!Q9+S`ulAFG)=O-U1oiK|KAl93L9;EczA$HrQTK(QDECT`TP`0 zbr)4C{fY!f2wc}>X66NsW84{>&8C^2&fM}}m*AhARKtaZPhHbTyAX!pUqbsGFaXSg tOm)>CL0ATsfwRuWYIOY0d(gNV`~h~{c#0bgL+Ahi002ovPDHLkV1nz+>j?k= literal 0 HcmV?d00001 diff --git a/flags/hn.png b/flags/hn.png new file mode 100644 index 0000000000000000000000000000000000000000..837a4c57cbfe5c0f9a7ccdb2c1510c505f623106 GIT binary patch literal 392 zcmV;30eAk1P)PUbLiT zmb_ajd$%t)v8mN+2O=WRy-+UidNNH{_n*@K2t`DsUauc!M@aNzgve&z4-DtmT_PI~ zXGI7{8zupf75pGdeaTaJuEJIEV|4?AnKgrW15J?`Ebn(CPY73YbSRVDJ@Sjs2%LlZ`Bcw*h3IX$5ox<&^UQ mqz&c*@STxuom3u~r1%A8bdAG)l}tnc0000@P)ugK~y-6rIXESQ$ZBRf9KA0ZhEiALW^I7f?1?e5ER;lA5S3o2)b~g zFW^GoL=c2-bkT(ipFrH(jT=h|rKzD3(^S)@&D_i#7uVk2)HYo3z`!v7^Z#+qnHl)c zkmJo=n6_Zbn7T0BgrgjAKZ>rujxTH}M3n(JynE8wpI>9p4gmJ7t^Z?IinLMzr635# zB}Ap#)&X=zWX!zw;u+0##cyNjM+sNvu5zcpP2hEMER$QMVQ) z?Do8vM5@yfmGyn^<0uDQyL8cf-Pp(g-8fDbzkSIE+W6jP=jAKRLPON-EQ3#4(OM*CNGpPE9&p(WcdhbA=46(V@8Zmb;RZO_q)I7d1&)~?h+71QAby_>4 zb6WsNy|B{MlTxyFC#oeP1GvLOyh}^FQkOF958&i8&479YzE+MP+u%L|dr~-6oO;p| c!u?(R0m~zS;cH6l@Bjb+07*qoM6N<$f^Qb&zW@LL literal 0 HcmV?d00001 diff --git a/flags/ht.png b/flags/ht.png new file mode 100644 index 0000000000000000000000000000000000000000..e8993298e9fb764c9f84b27577a7ce1845fc6d8d GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt`3JzX3_ zEPC%=_RTsJAky|wy;G2hPseGYz$>;p9n9j7qV70;zc4Ynkn_zUN$L{IY52D#>4<7zmeUM?(s!uzA?%tQ789)O ocyMT2Vz2XibFY^9C6}ja$1*9dQ$8bY33M`pr>mdKI;Vst04~5|!Tne?FQV)#7%vTyTRP>+vqT9gMp`>Z!`kG-U)Xp>Rn;4R2Y&pQdyk|1 zZ(YkTuIW$yv$p$|x%kgtKdVvpV$S)v#OM2@&b?!--^v`$n(u2Zxk)WKdgTe~DWM4fga3W; literal 0 HcmV?d00001 diff --git a/flags/id.png b/flags/id.png new file mode 100644 index 0000000000000000000000000000000000000000..8121a6c5e5e03d703ca60ff83a5442a838b0b39e GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@|JzX3_ zEPBsQ_T@TcAmDc2#I+!}e4Z-RxXfdX**CY zd5EW^=gLv8U#wr876{vvO)zgV?AgY{FE~TMku&dPYE^qO%Y?%=B5WN8BqBmge~1;x z@)s(E3A* xgJWx4Q^b@$+i~0QGrb*X<~-K?9cOBZ?a5u zu=?2CDEVW0R>QOnNrhs4nMOuk)_Y4<=*@X)s9*M7!iD{M?WX^n%&%4v+b zKiL2HIm`)IR=9U#=SsFe(Q_EC8h_n+Y33JT+mpe5Al;Pr{Bq7I a{PVo}oP~|I*KG&-i^0>?&t;ucLK6U$L2*_9 literal 0 HcmV?d00001 diff --git a/flags/il.png b/flags/il.png new file mode 100644 index 0000000000000000000000000000000000000000..2559b9aeacf16c04b5e725d3553359a8eb465b5f GIT binary patch literal 428 zcmV;d0aN~oP)7;=$_|A zf)p*6OLsP#ZTvu`Qb{8vtG@08qM? z&F0M?>Ve^KEq%u{%{!@3r(?_U_(QcNbGh8TKf0 zxgixGlR1U1hhSN^u&g9Tqcu$POgV}Yz?cBpKd|RX2mx>|RjKL`7!v>pYPDxDwnMdg zh3V9VVd%jCjYbRr(CxmVUXLP`I#G7_0i4Ie?e>c@VK7)IFme#r_7+59Z}_ zJ3FPxiiH(rV@HvVrEDZL3zMCnvm(Zf$GqmBN-%sCjZWsO;BA*1n zqk~?KNJ9Dw-ai3d(69(M3aDiQ>^W$>gt!9m3a!Or2S|H7t^fs82U>GE$ej3nd=Sep z@QsY%U0Wuw7eRWx0AzaMZDN$nWDrLPBxs+2d}zlpsv}ESZEYlX4lwHasTvx}I(lru z-`RuMK14W9LG#Vp%`LAh(`Zppgdi~+#t1c$+&Az|PNBtOsHRyw&XEt;LbW?_M< z<_;=4`shAA#oOP28IAtfhxVfah_Mj9U^nsk2hu2UEulaVpYogOn{v`d;syu VcurqJV>SQ)002ovPDHLkV1mjS)bRiS literal 0 HcmV?d00001 diff --git a/flags/in.png b/flags/in.png new file mode 100644 index 0000000000000000000000000000000000000000..f1bbf5b27969021dab9cbde0bcb01b69fd31e36f GIT binary patch literal 390 zcmV;10eSw3P)`ljoz7Lvo`TGkP9n*FtE(b|IbXZ@K40|V`p=5IC|5b zjmWPAVcGY?*kE^iCAU9&b!T+bZmLSLcRQauI=Q}=0FO_>jI9{J=q5U9%>hUN-RUT6 zb(eNqI{*%VMi`kM|C52%!o&vEC>>=Fo_iX~H#N>Kt7rr3`AG^3*`B(e&xi2|{V1MS zXhdz^KU$n#JS1-7Bvu3{DR893a}(zzZ?LgEjps;QC0JdW7`#DeBpg~h%p^7yOF*eN zr$@8t*uW?wUO(%J2K`VbBVfP@wn%_RJ#4rtWi3i6k6JYd;O8@qDOYU?A*O5$j4{4$ k>0{tU{K~6t*r2eYYQDorG1>lUQBh6Y_6bKo}H zh9wExiwIveDWrxiiKGX(>_zMW>_zk-Y`utLD;g?JS1Zb7Q&6_HWLNK1)4RJY?LPe< zetTiF+q*#rzHrXrobUOb7hibE5dS59|BhvmNZ3{2%~s>FxQrx{_QrhOIc+^j&d<-w z^rdJtnhXYm2>=H`US8qK{S|La#j{$2^{Yu zH&>Io-cxw*-i?q0z~fSjOa8cpq6n_+~V)yQ?ba#)U>-#7v z`3#?L6+3rUaOSIP+*!W?`_w5u(u4T@r6iN8GhKo0c00Io`y2zZpGu#sH`kz@7`~y z{9uZf<{(B^6-7mPBod1I1qG$0`SkYwPHSr|7cZ{HFl-ZZs{GTp}<{(;OK1OO}@xih~C)F+LteQ3Q>RTPP^-QdjpSLK@__<9zt>JH%os zIXyj>N;gxss;ch^AyzMziU1oR%|y?8Qp&JpSyzEM@q7UF8U9aL&%nQW>oaR-HX11a O0000+Ub#+IWw^S(p;c+paBB!c&d&1m{>nJ;sk=4unJleJGdhmr zI46=&j^mt$2}HznT{qDVMZ}DZ(C_yX0Sbizuy_aS$OO<@PnA-!n{3<0_x%a1KGTL} vS?7jfG~xh6#M4^e0t4e;-C8(~^uqiC@M5Znfx`R-00000NkvXXu0mjfa7VnK literal 0 HcmV?d00001 diff --git a/flags/ir.png b/flags/ir.png new file mode 100644 index 0000000000000000000000000000000000000000..e9242fb2d1e4e620adca3ac6159ef5c59f56deb9 GIT binary patch literal 436 zcmV;l0ZaagP)`h1@Rxa5a}?C%n03yv66IGm75qvY-#YqgW^5zdG9U?ekk$wSZ}o=EqXx}Q`SvX z=enaNfbGMbrN6tyeQt_MTRrJAeP))fPA?uLK>F|hN>wvJZVHB~zX~7$j5bbX_gK2n zE`ST**F3qgxQQ_qM@V{kM&N{u3dLM~p2z+pp%?O!KQk5lMhe5FIX4qpqtV#1pQO{& z4sLJl;O55aEc-mR&1Q3Z65%WLj*iHaggi;;9UqrQamxl?95cMT!)lGcyj%(>y&!D0 zkWqxJ*NOJ_zQ16hD55_H2MDdPQex5+5r!D0@Z*?HyNwe?m~Iz$W(H#|vr5$_fP6GE z{gaa~Hw?-muC2*$BUF_Hcv9+F_YjLSYbwpYxrA5MA(6A#xBhD^P;AEh0#8Wl+?rZR^?v zty=UGA_!WxE(%&3^#>x8f&xLTBog(Mx2$t%p=gkTp)U*!%)HNh1K&WGlA5X7hr?#` zsvZ$kB&8x`>n5w|+WUv~$CWp$ko*Kt02rR~;NMJvkhizy2=8w&6p0YJR?!l<7IRI5 z+dVJkhqM5oTJeF9JAb&4k-vQaHGpOQ!(5kTDosEaQUF{|r?RpX03a~tXcSi$#+jXV zw=|xl9ZI&CtO0_f_WqsM(^};SO8Gp6Xq5HIr?!(HN1Owfsa~yc_okJ0-OB*1h5e|p z7=xh@2ljbhGNqQrc;>3u0AzDH{qXD_fSCywYQ5?BB0;?6KLB!h9eS`rj{rucf@PQ; zyG+BRS|~&FnCu`gf~5)}B%2VD34G~#8>sXQ#yOzE2ljgRzfj!MBCgr7PADp4mQ^qJY$?Yj7v}y* zNU;0!Ki%|zht2Mk-#Koqtzqs~O4oOUcHOj{zRBu&NQ?(b|$3E!)n9HP; zRdJww`5^(Pl~NV9!G|QQE6zlJUnX|!EX%pa6Ade!OPCaFjvwA7$yD0R{`|F*$m!et R?||N6@O1TaS?83{1OOoMa1Q_g literal 0 HcmV?d00001 diff --git a/flags/je.png b/flags/je.png new file mode 100644 index 0000000000000000000000000000000000000000..afca28ec45296cebe6c918d0f9b300be3573f460 GIT binary patch literal 625 zcmV-%0*?KOP)5ekLc48w3VQ=}-0F3WPoG9*drk5KnYjbowhUl?kBj@t#!(Bvbkm+ZIfV6S z48+Ypo0jZQXBJR={SAWV1OQZv8_113Lb^W!UNuDvkaDn!>*g@>51t|w8iF=EhnDWc z5F8AK=mK-LV?7$fvhO@fZ{EZGY!q2L)2%D{{r+AeA|ozS=Hhiq>^)A|$Suk~enRPq zmz3&{P{Qpc<^C9%IhBZr0)apu0N85ZX74_Tj<+vRj7=i{a2)tF4=QW09q^#zT@-D- zr|Krc>Kz8=a)PzCfGRqOn-HAsV9s3)N4gE5&o3f<_6k<7-9zh{Ai5T&;rTcTakmR; z=_*z(-v&=+>L~%AuW$9n2qoNJN}j$%+T3T_snYZZ`q?9q>o2g#z}ws|~x< zsBt}qs$Z3rJn;83?GZ)sf*=T8%>amK*)+{50IE>qi<{Am%+0`W5|UavKTC?W00000 LNkvXXu0mjflkOJk literal 0 HcmV?d00001 diff --git a/flags/jm.png b/flags/jm.png new file mode 100644 index 0000000000000000000000000000000000000000..42923df480fcaef058b22503db93070c16e58057 GIT binary patch literal 431 zcmV;g0Z{&lP)DHQML8yzsHg1Ao@DX}} zp>1!_N)e=uQ6NH~PvFXBt6T&TC@!W&P19|09skV@gbp0I^Sk%^?wNssf0h<5a;Iz# zo-x;fatHW>Cq8C^M1rkxkGIwY?cxQ#g&K@$(Ab6Z6e4}hw&(G#19%?UW(Td3hKGHy z^eAlUa<7txW(Upl$O42%4abFg8%jxN?JY|zU1p`EJma`>pv4RFfG~7K%|(blqTNMU zx3b$^nbll*1`xnuM6fF9^kggGzXhSBaV zBp^ca02ZmVv<&z%Y0||ig2G{9j=f!r3&~yX0tf!^FT2D1|I91{|AdI#_kdhR-4ghX z295v?*o@RG4GzEwoc2KOXYX7B$7=%zR2P^4Js_izS|3s=(3(S_3p@zHbD>~{`Mg;O zktVjD=b^O@U-eq;+Ja56RI;|;w{||a+i+d?aygpbHP`;B+l)qd?{@Jp9KtLVQuXGsVCi|O=9ukxjAf^z<(gpC z?`uUd>l1sL;4hR?mj&0Y)>*-gZC@4?T^D)IwL+^>LD6xvT)PF+vQQoju=G5vdcE(d zY#Vp&HjI4!^k|&($E>d~rdq8&B}WLu@RNw-*~1^P-|yvoKK}rIex_T-*t206_gMr= osW&0S3xLr0m9xXjf;cRE0mDpF07*qoM6N<$g1}d+{{R30 literal 0 HcmV?d00001 diff --git a/flags/ke.png b/flags/ke.png new file mode 100644 index 0000000000000000000000000000000000000000..580e255d638e2998d28f073fced9889a63b3cd74 GIT binary patch literal 575 zcmV-F0>J%=P)#e}aI&@P}Pjjg?HZ|l9cbH_#N6i62&p5#p??>Tek%$phb zPZ<9e*=%++2!fHTY-%(bopQO{){T5VpAteS;7TQgP`O-g2EYVxU3WeR0&O@qHwQq> zG6$>Fvv$jnA*Tp%B+9EFrAtqW)98^ON~eyRGe;Dda{1O zdG*;F##ff{E0f&28Rzuj+6BIH|LI_ezVOAy>kUoDtvGA5%RH~GP_I{baqAn~uU?`I zr8P?%!nOUAJP^x?vd8!xCMFQtCv8ato*%=lWK^t^(OF{sIDj#PlUeMZo|7 N002ovPDHLkV1k!(31k2O literal 0 HcmV?d00001 diff --git a/flags/kg.png b/flags/kg.png new file mode 100644 index 0000000000000000000000000000000000000000..64fd7a38677f2eec5e7b78b37d44cee4e52a60de GIT binary patch literal 435 zcmV;k0ZjghP)D2<4?0o{Y>B;d?NxD-c@-GU

Yzn-7M7(lWCdQ3zA|j{>6=`Oq-E@k-KEB+Z`|`5RDN zNU7CdNm`2A-3m85Q`inv*JJXt=I;rdh5n01PgurR-jIPqjXN*`p_~WsCg|PdXrBZK z?U2O}gY8Kk_sjGe{*ifrep}Ky8Y69LrdB)D>M`k^>vWBtG}AZDfQ9(=|BzXZJvToPEG_;OjG06x1DrSpWhW1`dF>__nVG dl|^PyyaT!YfY{cEoc#a*002ovPDHLkV1oMFzA*p* literal 0 HcmV?d00001 diff --git a/flags/kh.png b/flags/kh.png new file mode 100644 index 0000000000000000000000000000000000000000..5367f595d4e1e5c5be41538d095b48c3e837e342 GIT binary patch literal 456 zcmV;(0XP1MP)w)r=%i+f<8jf zAqe^^L3HX6bnlS#2^6{%(f@8*?CL5y(_w3^ELiA;AIvbk&+pI7z&|D0%Y+0c9L!d( z1FjE(L?{Q$h8LiQ(M z1Qj{qz@tZ_=xP;!@XR!5P2>Ec<7}QjSpI=VoaZON6so5Q6TVZLG{BqNkhM;St(({{S?bgwko0Z4;Wx_;)O~HqrGu zW-Rv2%+D5L`+I1|LEAR!`2}U$UOYab9S7w&#P)W7Zy}P)VveS0UR|Th6;KK+%dZT> zK=sEl(_=((Styj+fLo0ELLmi(vyLJCt`s+1)_i~q>XF`nW=}3?e+Gg^O`}v$vqmX_ y_aHt89S0V{NCZQu2jCQ_eEE%-9}z^YkKi4HaDzlbp;q1i0000@=5rzg@RMZkNO^RNmx~Qn2 zE+V=x3JU5kD5wyktAZ|qZp2<7h$MyR1hXttV08B{kY9H{u4Tpmo zz_cL?=bMFF!?H|AI5dP)pg0A_vuWbPvDrGPLY0L;Pym=x{_(Oop1_PtGFDsBJUWr~ zNXk5?q?8(fwouGicZB3<0x2YNEU{oa{{$#@fnMn#vm_Ilki@#97_Czfmgxa3rI}>; z?Fg%aVuG+Km|qjbJHvn76##i2k44QZ07XGxUxuybG$MB+nh>ZK3!3);*6k+{&TIfO z%Bv{wdi7L-uBavhmu{NwMKYMn7#uWG3A`SUUf{Cxymy4X{$gsktU&?lU-lrS60#D~bpz%b``pF&veNMuk$wiN-O%ZhOC*iABDUSo+#T{(=R5|CFp0H`a6Gno+% zC-?Kd_>oxEzO*D#uE`eo@m1o@d_`l3#A2r zjJ^@08KHOj0MVsB1A{Q#ojWTlqyq=awHwjpq~0)-7SoCT(=vdkUC*hOYw+hYZ36QI thEA@@2Jqw?xQ~F+-%rf+v7T~$@C!s|#I@4$YI*K~y-6rPIqxlwlag;cE_xVL>H?$uKC9(Z(UvWn?WvIw5UZl)`Kz zuuX?eLQ#th+PDgYhzx>i5rNUhKcG#K1VKbp_K_Q7a>nE2Fn%pG56x&oH$3oiKm48( zy!@vke;!RoRaaH3+6**4VrFzy9^%l}p??0fuZ3`9uz4p3v)p*cf&J=7KKK@e?3BG5 z!PRjtB*@(3Y$u<-Pzdc?o?xLUwjO+F7p*_I*|W`PP*hX1MJAI`Tv%kI>w!Be>1|;A z0cW}hBMCteNTpIB8nLiE!Qbjgu=Ne;^JH@?{@~!CiHV=OJNY=GxSVKe)86_}c=D<6 z*|4zvh>+4~NLGYH{lfRH!V`^-t(l;+p2=al`Xgp$OE21ej!U}>a#xwkqjAxXLwwTw zlPkP>O<&(FK@b=i7yyYn?p|ikVt3JMT>TA!c{^M*&wC(gE{3m*`m@)g@Il;@Nr(wa}MY5!9OK^Km38f z&|ppUn<>g>OPZ=))mngsg;kF}GIysp-c5B?WD8pE#B+I?xVHf0i_bG=ivje;JI1T# z1&{#-UkV(~mQ4cyHg2AqEr3{52-` z_Lz>x0kC?#_|ML81Oh!Lk^d$}!(r|=Hz_8Q2)mt;l@;9U>r~Fqy8=2UknMKHx331NPMTr7q&7{s4S@pgMlqfj7sa9|#gjYg@fDz2p^WQT)HDAaX{zW{H2 z0}c0n^p{b(P6J?@4`Q1Sb`)xfBfSNvSe^1(dbDSkZmRXW+Gnhmi&aJL*k?~Eir^`) zmZANbhJ{d;B_U0j0W^)~gJI~$KuP+M7hhpU##itGp8kJWGI8t{00000NkvXXu0mjf DAz8*b literal 0 HcmV?d00001 diff --git a/flags/kr.png b/flags/kr.png new file mode 100644 index 0000000000000000000000000000000000000000..590b9811083a7246fa8c873b1131b6c9629833c0 GIT binary patch literal 658 zcmV;D0&V??P)=wcQuvEeY9#*l_&q0YMyB#`vN z5{mu+?*bu01ieoO(S-y;-Gto<5_I8if&(HOM52?OaR?77>ez z`#kUSyzrmUPMTCIRadLk0%sxFwq4!a+^l$mbUGdB>FIF}4i4mBSX)~Y%d!r;y1F6& zK7e2_*lifbh_34-5($FA;2$sNaye#aXW7`;P`O<0ooSj|3ZPP{g!}vZSy@@ZvMc~< zrpflg0=vu0xRoQf^Yin>Vlhn9q*|@k0Vn`n*SB?DXJTT4SS&_qdK#m-nJ>e`g@~YO8cHe0v)0kkaoaEq5fRy0T9T}$Nfsmv^5I-aGM8`2$LmRPYc(mC z%aYIMC7Dd#0q~!Qw70hd@b%4G5COo|6fb(mu^O5xtSo8Rx3$;nBrzP|nx@dN_{12i@^5(QPKA-QdrfHY{ s%Kp_!(Q%yjz>fCQ+;?1Ofpc7Z2ZullYl&Z|EdT%j07*qoM6N<$f{h0_H~;_u literal 0 HcmV?d00001 diff --git a/flags/kw.png b/flags/kw.png new file mode 100644 index 0000000000000000000000000000000000000000..973cbe1b05ef23e921649f4f014e1a151ea01928 GIT binary patch literal 371 zcmV-(0gV2MP)gGJ2MtpG-k;rq6ZEPT<$mLT==8p>s9vW2tQ_~+IoEpc%TQ6 z0bprR1TCRhg;0IYQY2n?Lm z;NS*oopgw{nQy?T?%rYl3OTPE>6j?tuIXpu_5c(Lg)(4AEh2WDN~O~F_yoUDDnLZi z#{UBtT%z4g4DzBl%6sO;+cF6-*r-(-0*q)U=TdcjJe5^rQ$|q|u&5lW3oBG+ixZ>& zsGy0$-JEMrU0*zvow(Gu)-*(S;yM5n9oQ4_r}@>wqlOEhIeca(_B7J5`2>9vegv*a R5P<*y002ovPDHLkV1oR5n`Qt2 literal 0 HcmV?d00001 diff --git a/flags/ky.png b/flags/ky.png new file mode 100644 index 0000000000000000000000000000000000000000..339eb9a6145c17567e6ccc0f072e132a17a8d7f3 GIT binary patch literal 672 zcmV;R0$=@!P)K>j-_}$MfU+ z{Jvj!zR&Z(e?o{gMMcd9MfsHM_b*3doV74F31EEA6^d~NgI=i3iLO3#IQ($~t+rt6 z=vAANUA%+Go-Eq$3=jx>W3p)hfbw1w23<1k4O(h;$#~31u(q7bS5=o&0}u?(=eIlw z(d=B}V(v7y?(+;O5%qOz(e2(nD(?L&l7h|XH@jm@kJ zHdYZ}!N0tAyhmoVyamI)3KqjD*uNB@wODYSY2@_1ei}N)ne?fAB#VX~8BZV>2G9V= za;iAeR>s2nK3Zqfxc}6HULW8_6O`#PxK?=?)&$&NBOE-jm%+?o_S{Ml11s@sOtOOQ zZDIzJB=V-JlW1uWH5f&9OZ27LY3rN;x@uu@NRuc^G|*PtNR9Xi%ONC_4)45i)65?Y z1OZ;`+=kcv3SD*`%dY3lyRDmM#NUZa3v|4`D`PZTNZC@2&ozK{cPlq*COBJ{_jdzZ zy-fc8HOz89`t)Mb3a@Z1eS}bspX(>%uRR`O1zdUu!cT^_3wbowc#%_+_~6LE-u{_T zC=`K*m7q?R%AvD82(dImoyJm}{&60000c7B#g)WZwIa3F{#g0S_kHJ#3!oL+#3sJUBy&z?o_WtC2mVuXloVH1 z(!awnIZjiv(b%U_>Gc7pW@awDc>VO-t}dC+di$RM@11*oGnc2^ts8*-UT@x$GLe}c z%eFDrCahfmm;gZ4)^w3j(}N<3nWD*ptm7ofCx3@Pvjd9i!~g&k%qDfN(r_gJu9;U9 z%oYVU2$|-*Y*UUO(IJ1#O&{=6FVWE%0MgRt3>8+*Gg8t4Ami(F?ODoh4UZi-JxVgv zND=^$WDi06%>d_Qn0C60JKA|FBP8Kw@L_XbtwTqH9O^SxHU=ImNVX18DX(p=loiz;ta|w zx``PeV;guSR~bbK_=}W)O4X;^i<5n)7gIU#l>p@o&gz2s%{pGmC5|QV;$|>^0&w1+ zI!Cqj{!R_pm1RL;EQ^PB0x%KLglH&V_)P{PmR{hMpdCV_YYrfKCTK~J)UX9b1IBa! oF+7G)1>THr=N9_^A^co?0Q%HjgT~itu>b%707*qoM6N<$g0Y;SGXMYp literal 0 HcmV?d00001 diff --git a/flags/lb.png b/flags/lb.png new file mode 100644 index 0000000000000000000000000000000000000000..86df7b55b260f82c80466aefb511297eb416ccf0 GIT binary patch literal 418 zcmV;T0bTxyP)UxtDz8U6210ZYABe}fFC?K-o5wT`@Xw_e?s|PoPhoX#Vk$l z5I;hcB+kJQASB2vAwZmh0gwamp{#0cC(ZfTC&nnQ4Y{L(&f2Qg~j0XsyDs ztTUN{MyDa`w{t;?k)XNwumgF`H0w4z4a zZQ~4`>;$br3qSOUMa(3aP&us7cH0DTu$y4|F{S_1$JjSm#0#{XhGklm_DcAnpRPB} z#NN0k8=Z!%-c+Ug>TWer0kAc#)-}!U<~6Pq$jS5r6_6L6cX=O0y*$7&isaFFtf!Z6 zCrLb*LnvUCwfP%XFYuX201i~RQs6iXfrRHJ+yV2=r>m0vKP=b55A(*>BRV?YcmMzZ M07*qoM6N<$g2qj|;s5{u literal 0 HcmV?d00001 diff --git a/flags/lc.png b/flags/lc.png new file mode 100644 index 0000000000000000000000000000000000000000..d522ed7aca4af0921e5a9c481ab61dbb64cf26d8 GIT binary patch literal 448 zcmV;x0YCnUP)ji1Pg#j8f$F!JB?>UUIKL8#I`(S5jn*HS&g7#0YUjXfaEVGFOiTDidA@^?p zOTf+U8jj+$W=4Eo@<}gyzxNocFvzKNyX6wSIClIruoHFjDqfLezLB q^Q4VAL8%Sk=JR&tYZW5(T08@&zjBC0000sN}#*+)Ga!&ghTB^(KY*hk>7sexBWN9}Il)872z6#z@?g2LMUxCcwkR$loIX1g6U9 z6Bf~x9JT~A@5Xrh{m!}q@~=Kpw+cOGa(NVCaWji${J!mufY~L3!u1I0yJ6lQhOlcI zSBDX*ri<8W9;Mmdt=fU3I_lH002ovPDHLkV1ka`#DM?+ literal 0 HcmV?d00001 diff --git a/flags/lr.png b/flags/lr.png new file mode 100644 index 0000000000000000000000000000000000000000..6c564bcf3f342edc90be16bf95a88b14e85cf730 GIT binary patch literal 468 zcmV;_0W1EAP)yxvt`wPmdkY)2#05%lXGgZi2yg0Db_iwJ|XfVt03q_4N-V z64PWdd(0esr}*`==Nge{ble31DwP_?#~0k)Rd{)6QYx7|Y^GSsZg~P`I^F020CKrJ z`}?Qv3a>9uc{u;!351jixPXY#*=(w>>HYXGLe)u6Kwn=wF5m|?DE4<%J!gBO4QMU3 zeE#3vT_KL+a{(oyr?$6;0&3~>@17rAC6hw|Z==x>7ifq$3#K^~aKE@%cY&Z%_L*Uz zwH|0#L>P-i+I8pb&4^)q^ozs?0hHF|hHW1LPttX6baIfeJINn&xQ{zPT+n3z0000< KMNUMnLSTZxBhujj literal 0 HcmV?d00001 diff --git a/flags/ls.png b/flags/ls.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5336bbedd6d3540e32cc677fe9d3501e3258cb GIT binary patch literal 461 zcmV;;0W$uHP)%heFp~kr${*ohr@1N z*IkW3`F#E}m&-A0Lsiu_&N&wiDxSPDJs!0U03-llj0GsA^yMjw+nWOvvk5p)lXRKe5nAJ{IboN)aEo&6C=l8k}SIEru2bz$P)fuKUF>Ogk6p}3k68l40y zY8V`vr~@ZKf{T!qRyalo^bUg?MaZs}+ORJP5?laCWsWKXkGI{*W80UQSv{>B`cn?r zVNh0dD}&j!GiyzJyCA`N2MpLA@mIJfRugs@{1vuF;G7%L%?mNReoiXzUVT_7(6o03 zR6diJQe})#(qZe3ILQ)kiaXOVHUMb$B3g<@WR?QooIujik#U%200000NkvXXu0mjf DNUy=u literal 0 HcmV?d00001 diff --git a/flags/lt.png b/flags/lt.png new file mode 100644 index 0000000000000000000000000000000000000000..8a359a5fe2640b46e0b0b6dea16c10e06601cbcd GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^Q^nRVByi_Sl47T?k=~@bH7QA~ z|3C0;uAEo-{O<#YO=nZ>$}er}3vxNVbd$!E=;oVeLO(vqo%L7e&Ii$*6$Lw^D)|Gh z=LH=#ILmQRm!%_cp5FV;i!6T`yVG2__O`A)n7-7y-gnjgzE!Uz_7!ma&o^j%tYKq+ zZE?%@K#jMh54UvfulTh->q5%4vmJp^&rNz~-8Gu~^v=--R!0?Hi|FeAxFNs4rbFbG bVhwXttyya$%byOQzZg7S{an^LB{Ts57Cw7a literal 0 HcmV?d00001 diff --git a/flags/lu.png b/flags/lu.png new file mode 100644 index 0000000000000000000000000000000000000000..8cef647d0d914c56d5a1f648e4d797b42740c512 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^9JY5_^ zEP9V#^7UeNlxTUFe#uiot25HYe9`j{0`txuu22+zcf^G)C23dst=6A2r%WJyR=b>fGRboZx0peL>Gs9|DQf|y@@faWLwkbL zPJC$WIMhGoIePd|OJf@8B}>EFMt!C(G2C|>b3sjJC-vW_Q$cb7yp z!{Lb)+h+VxJ1GBFVd)Cr*o~`u=U&ON5P2TN!CzDw%(CKB_qN(Y)%zgTe~DWM4fUCen( literal 0 HcmV?d00001 diff --git a/flags/lv.png b/flags/lv.png new file mode 100644 index 0000000000000000000000000000000000000000..639869308ce4cc4bd76a2001f553bffd158c28c3 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^PJzX3_ zEPB^Yw(Vka6mX0G{zt;XL~R}0rV6HD)?QxQ18QyD)s~JnjXU1BvWfMEu+7={cBSu? zn;Y1lH#eaH= z+S#=NT`%5#S}dorNSm?X$GxlbeVDaPlr`pTw(9z`&_eC>XQoxjuUs5A1bFe*uqaK6 odVcLd;NRc;@16>m>;Gdo^{Ke;`|&r|fSzRVboFyt=akR{06gz`GXMYp literal 0 HcmV?d00001 diff --git a/flags/ly.png b/flags/ly.png new file mode 100644 index 0000000000000000000000000000000000000000..266a909e771c6841b50319109e13f38404317791 GIT binary patch literal 359 zcmV-t0hs=YP)#_A{K`@h(WUW2OL~o+|`n)&yX<>;tTj9 zeUX4T2rhxz!AYz(3GL14($*qI6a3(V3+J5QcevaO|CCxCPJ>|A*>bDR&{ThXj>k;b zfQ!T6WcVUaUdz-Oa1+jsA4l)c8el%J&e{$Gcz~|;Ie-P22|CAhKtL&&H6S;2dC8;` zz&E`TKsPm5Yl-8SD2h-@HMKPZk|ZI^GV(kpO;h^)emB4>)mn@1`xs*yx4=Kxxdvp@ z)>;`11`HsbjVo+DAjgMKb%AD9cpSu>00000NkvXXu0mjf{_3QT literal 0 HcmV?d00001 diff --git a/flags/mc.png b/flags/mc.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5bccbc131c8a450708895f5789593aa5dddcbf GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^@JY5_^ zEPBsQHsm_wAmDmGO-NC}O}bg&3)eQeLzk-ra^LE>2nxEk9C?#>?U>8ysUpt~A29eJ z$8*Nv^om`P4lzcremaP+J1;BJtI+zEAbnKzB2Ey85}Sb4q9e0K9-+y8r+H literal 0 HcmV?d00001 diff --git a/flags/md.png b/flags/md.png new file mode 100644 index 0000000000000000000000000000000000000000..5045a30d43d11f5e104dba2012777b1657afca7d GIT binary patch literal 451 zcmV;!0X+VRP)pcIM$5P`x7 zeE7MOB@_h~0pz|SCIAqLUH{}%=x?Ja>yOg;g-KrR;RqcqAI#YL@ zAc>ne#1FSXX#+~U5CkC0FtzJ5^l^WyV2Ch=@tt-(7vU$Cm;_G{*zifDCIggB5DOtm tRY&~1K`7wCha

Hl+~x?_=Qi7hn6AbOVJ2H;e!P002ovPDHLkV1m9fz<~e& literal 0 HcmV?d00001 diff --git a/flags/me.png b/flags/me.png new file mode 100644 index 0000000000000000000000000000000000000000..426fbf598e35cbd704b36bf05ae68fb10a27d8f8 GIT binary patch literal 460 zcmV;-0Wp&%u2n48!eEompW&~v zN-rn~HiCtPNSc&kZA?IvWupn?u6Nx#9~OxpVXk<=1811xJpL{<&WcmwmJ?GlX$NkUlpioT!dL#4OyTj$8U~B-+d~(wb3pIN+Ze%+tuPX18 zTTqP^KnUnMq1)-Z zC8fQT(e7o)N{V^VMf!8mzWC8HgEpFEaD~0rI!|Z!F!$%tMj>fzI0E?6VJ9;}FU8ux zoqP;S9c)qI_fO-*QH1vs?6VPSu)zG9&^Ce{p7E`K)C)rRM}(;(Y~}b5C3njy8%0St zn4m;MM z-+r3G@6WWLHIF2)+5`}UkIwM|IQ?^@zUU_9E}9>c#C-{zDCO?}00000Gf90c8Ua1b0sq=G{c2a!@c=pb|{qQs#%SQQ-F*mTf(_AZyZ>wWoL+Vl!B3HXNx z?+yRo`}274pE6dOgOEx{nP|ln*mm#^Dm6eRlj)p(|Dj-9y0Iy_V0SbFD2+NfGu1um zd2=R!5Ta*WzPCH^@~Kta-|IF52m|43u?xTi&{_+Cja^;seIt+4-!5OUwQ1_cDYR7s ztVmZC!SCnBzQL`s^zg1*&Zd`|rLp2e;lUl|{h!FFjXj(5Sur*e7O&kb=RSQ+{|gXH z5V8=Zu=|fPd*}qEvd4x_+1~f;NynFqXKZa4bpf>mu6Lg{GfRHUcKje`95^=|6+SB&dztzPWO4v@_h9XO zgD?yxCUWlS>)(@$Wg7m4wRYT#8SSWEx&6W!9xbhJWULFAnf>9P8XB*DoK`KFYk*3n z5{`~f{yKkaN;)2*sY|OW%JE?JG7`iw(7D$38bwgA06TtKv0SZ4Ef;?QK?|PsJ~@cQ P00000NkvXXu0mjfz{c%e literal 0 HcmV?d00001 diff --git a/flags/mg.png b/flags/mg.png new file mode 100644 index 0000000000000000000000000000000000000000..83510ff7f82b97f26959617f648f187809c153a9 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@!JzX3_ zEPBsQHsm_wAmDo6DsbbaQwkkT+c{nc+AMhfL1t%DgoLQemJK(KL|#|x6mw(J{Brn! z(dPFDMVNV$yWB-w_v)OsdYU2}?)04drC5$8$Kiq*DktMySQNIJy*-zHSF7>xZpRv# zyAQ4~ZMf#gC2_z~J=CBf!R3|@V-&-^-|G)7ui)@QDwfUrLnA!mJ O41=eupUXO@geCx;l4~*m literal 0 HcmV?d00001 diff --git a/flags/mh.png b/flags/mh.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bbf2dfb8c66f157d54262f94963eb470c32497 GIT binary patch literal 609 zcmV-n0-pVeP)C~l3m-0s_HE>~u1YPP>5OgpK z4@Foe1Rc5rQKxR@pHN*Qkh}!0ONY|ZP!h2ympZ4D@5*nj?fc{Dkj)K84SK@|9v*nV z-XC~B5B#U3?5V!qUG?4ND#oPiP8vS{+yZ#L{_u(W%aSZBsv=Wezw!=3f`eICZAV@%Af;N(zb;C#mny-iW6M3x&3_zeJ| zsEW+dP>}vp?P!|9?m#8Ws|Jhljcjt?ff;(6qUg035Nbq)Z>WFhJAEGN{N-qx0zhSX z3Ds3@5_$^L%5dr66rrHb*XEnFweHJql?BAs3|@>!2?i=CFLUwg-7@nFI;LrI`Op-t z4JKyWZCdsOSc-3uN~J^|KnR$8A7^o8gMi=5+^2OiW}2a{H#9WVva5RlZ&@kBk0yCM zI*Vml`2YaRc8IMRtS3_l+hnk7g23JoEj?%W5KVIT&KMuRB=cIy17zi7xE6j(pyMq2 z+dFyiaFQp_=dkVVy>0`Psun}tvowaU@Wb}dcjFmLn@to_9>A?y4D>9~d}NTPkp)H~ z^93JML4aGcxOmLL6+F%LdoM}oslPjO0VbB&f4o9W#eLG)=<9!)9AP`AX=PyRGwo0m v?W8U2x}stoX%XxZASvZsE1Oe{?9Jg9e+0`NIoy3i00000NkvXXu0mjf#g!WH literal 0 HcmV?d00001 diff --git a/flags/mk.png b/flags/mk.png new file mode 100644 index 0000000000000000000000000000000000000000..223af3eb576dad04fa8ce2cb7a56ad54ddd61be0 GIT binary patch literal 578 zcmV-I0=@l-P)ltB~)@Zb0CBacm7kr+(GSF9~Wuu`zFRVyJ@f+8p= z*jZ>PSX!v~_y_DoZ2SXML{LP~75N_l?DDb|Yy72M)~KIdksZb7%O^ zk*rTnj2oP5Dy^@FtCHQL3NSq{t1SuZd*zC?7c-h&m8-|>&0h=47ldC&BNk5!;a$Yy zWG}vSR>)ro=MUNgDSZBJA}KR;j>1?J&3+OZgx_RyF_vy;=mJSU^9}pE0yDF+<=fUFYt@&&RV^d0Jyg7RV7a}1s$9i=eB z-fITlzVDQfWI||kOluIDn=^$5`36p&$F>&X>y*{y+dXpM5q`hvm9X}Pw94x99%p*W z>Lw4;DwQ)NgVgSzjS{QRVt2|1s6QrO+;C=N*6NMe>)Jy?i{b>Oi8!x4Bpso8J#zmN z7#mZrOd@CH5uqM;ihC&RiuVk4Rvtu7WspLPMS2XWCjSI2kfKyH`skX{W$E@3{_1!E7t@1dH9@h(ZVdGO`Z*0SaTujbt(u QqyPW_07*qoM6N<$g5$Ud7ytkO literal 0 HcmV?d00001 diff --git a/flags/ml.png b/flags/ml.png new file mode 100644 index 0000000000000000000000000000000000000000..ccdd58973e4478d7653413b08a050f74451e9829 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@|JzX3_ zEPCHwcFa2DAaV3#{G0_MT*rC?CVUf^cR2cs#a`d@7p-?_aPi9Qsf`SeeRkHGTD_m%TJ)v# zj%(7v%jT~cSJ;+6E#s@|x}+z-q+h^dGQD;Gl?mzxcy}@X6MV2h=<4-pTCZg7mz)pb y5R=-hH|6{LGLLN!jX(9}mWgr3{9Te<{fDVUSj{cEip3Y`cm_{bKbLh*2~7ac^l7mG literal 0 HcmV?d00001 diff --git a/flags/mm.png b/flags/mm.png new file mode 100644 index 0000000000000000000000000000000000000000..122c42bc2a61e83251b117f59b7ad2d9c9cd1ed1 GIT binary patch literal 372 zcmV-)0gL{LP)lxQgeb+SC ztC-1sv(4}sK1PC!=dCUlPu@g1Y;7!~1A}ebJU+DnIBOlVVmc#1h?u>*YOV_n2VfY6 z>w%@nXVdJL@@#KrsMcGYoYYI_QS_ZQPpyjY%9#{Ln z9z4QM-uf??DF`&$h=fUp0+Dc_@nQU#mJ}RVu$Dw1P%&@;bSB@biXsUn3O)hqD`Nm~ SyNlQW0000;8}3->eZL=L3|mni)UY8 z&w5xqSd>K<+O$o^gQnXGg%p1X{0TE(CYgbMN_n$@{Sp$tFXk7z9hk0H*86ubFHkgq z8BCXx>8nO*fUnUZS9icCv*m0x00rCx=L*w1zW)2tXh>*-Id9 z0A4DQ)~|%A130)WiI3eNKeV7^1g-H~#&cq_2B j@BnPuL7MQ9w!e#SnGZ{GLx;3&00000NkvXXu0mjf{z;3- literal 0 HcmV?d00001 diff --git a/flags/mo.png b/flags/mo.png new file mode 100644 index 0000000000000000000000000000000000000000..2b7762c0f7460f252acc14471ab44e9bcd65a335 GIT binary patch literal 397 zcmV;80doF{P)7+OSq8MVvbXhT2p0At z*s6_SWuXYh%0>|a7C|%@BoI-!GdXw9!b=o$ngu_YWnt$%wwQr`M)YoZ(l|I)l%Y+H zx1L~hf!x>z_d=p<_{gANHktFQ)FnVCpkNCF2#M;16aZxWr9^mKLPjLL0EQvp^Y|GF zOe>JXSqu@Guti-bd-?E3Q+@EfKu?0Bn_ZIj^5^Y%4gp+vDo#l2*Hk5{iuDQf=KNwI&NH-YIS> z%jC!u08PI^rEz92@cc)1Zntq%3V@DoC&Ir9y7>$2MgoX{AkvtD-Eks~5wH00wM;IG rG7)(zgWv(p5%BzdP*q$u(Q)ws;-G1>64bm_00000NkvXXu0mjfNfD$U literal 0 HcmV?d00001 diff --git a/flags/mp.png b/flags/mp.png new file mode 100644 index 0000000000000000000000000000000000000000..70f164af3ea57abac55450d89b202afb37ddaea1 GIT binary patch literal 674 zcmV;T0$u%yP)M9DMx)SQHtD>T-f~bFBQDi~vq7k8`HAxGDf)q8%IbWJOH}%<^d!DC@$yV$}=nDsa z9M1XhJ%{sy|CEq_Ih`if42CUr#npBAnJxfaJ_o1oOd*OAfYYqd=}h2B$t2QA)*ZDx z`=K$OH0A)Rs_^29o5 zfe}IxjfM&%nbO5#2VY{Z(bf1d2pT<;3OAk)=8G-|J`##(=md>e-9bi1=ZgUmN{G%6 z(OR85g?%;U^!4@;{t%|sYtQY;Rf3X^vTUg=9^rkwiHrIKHxKD(e=754_&bf_EC7Sb zF1*{V+&&D6l_t7BZxlO-r8KU7vcgJ~!SfY}@Q%U}w;?i4)XT)Lvz}F=> z*I&+fB!XR7&gVT$Gdd^JHSAz4!9U84kXcQkDk`ERP9{}OhAiwAJoq%3^=y{@l$)7% zRzS^lsaX{{CPU#f*+4pus5#k+RACyFAh0a_m6kSRD^fOtKi3%9cwy{ZegFUf07*qo IM6N<$f>(DsssI20 literal 0 HcmV?d00001 diff --git a/flags/mq.png b/flags/mq.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0efbd6506c545119472f513f240964f6e8817a GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6(3b7cCO34e;6??!EhPj=7uB#2d16*w}y)ndi;)1cn6}D95 z3Mp0!9h{XLzmL}f0JIV0i*4kKZ9hHNzrkN50hHr9Mj0J6WR%hB!L7i@XNqGnfsx5T o1fkDStO0l8lWo0K5UID~1)my%TYz~Px&QzG07*qoM6N<$g4N>4Z2$lO literal 0 HcmV?d00001 diff --git a/flags/ms.png b/flags/ms.png new file mode 100644 index 0000000000000000000000000000000000000000..a493f41a1a675943f400ef11de49d8d3a9ad9f8c GIT binary patch literal 554 zcmV+_0@eMAP))P*33x)2wlD~YbLEgmDQ~cS zd43(?LIr&oKx_Jt+EyxPQee-$!L3%2UyE#(Dm7o=Z}v3+1>jrFbaIgdU;2i*YQ~YH zyO^r)$KDa=?pvkf5;Xu_*Tl^9ET^(dj0^_x#-iLvzvS^ihyx?Ojs&84=m|KPTkk^R z=otOS_R+9R8kU785Tx?-9n-f?9|SwsSsxILZX)fNyqI}N@!2)fwPkuo`&Rp137R?u z=FYv;RRugfzqPs&NF)Gb-)Aw(21p658nl+!3GT-{lM54kD3)@)BPD2ukLO55-3f<`O&0r8%qobg{y>i_@%07*qoM6N<$f(GUS00000 literal 0 HcmV?d00001 diff --git a/flags/mt.png b/flags/mt.png new file mode 100644 index 0000000000000000000000000000000000000000..f276dcc2541f8d67a1958b14792eefd410b2a476 GIT binary patch literal 332 zcmV-S0ki&zP)n+S>#*<5G$TDV5t6|-vVfq|LfoR4V+{wVX-gkd;ht*zt@ckOl| zltRA)@c|QGb1(n^ literal 0 HcmV?d00001 diff --git a/flags/mv.png b/flags/mv.png new file mode 100644 index 0000000000000000000000000000000000000000..8922669e408ac6feb19e8903b1d6a41bd204e04f GIT binary patch literal 389 zcmV;00eb$4P)}d3Z2Lm(T$9n@0{uwbiL?V%3IABdp0-1bR zwHnq?5Z3kiW8JC?H8+d|_AD8F`{Y#vaHX9Tz)NzDM|k?BKcBr zdri`}7!~s$tJ) z=9Q;CbRmUZ6t>^4*R2P($aGQD-L}BoN_mhCQ-ze0-u?`1u1fZsJ{hpq3$V6V} dQA9Qmz5rmkU^GwAHQ4|F002ovPDHLkV1g_Ss9692 literal 0 HcmV?d00001 diff --git a/flags/mx.png b/flags/mx.png new file mode 100644 index 0000000000000000000000000000000000000000..64bc9622b0f4391c43635c171669ce50e7a376a6 GIT binary patch literal 447 zcmV;w0YLtVP);K;!P%*IhpsJGcy_ZCq&svE+?DxvyPPGs2A1M zi5-rk%6=iAe>=!z-T*=XokN}7=^1_R=^_9v(Pr*8j=xk&#bT85c>rWM%(`WDJ=pf6 z1aP0-fik%s_@0N5atJ^I7-Q6rj35zXLX{SRP$=X$-`l~yIALmK?OUNh0qOgs4!5}7 z-Q?x+n)Cf_X2XJ@Z_1h%0a4H8=;{n7)JVvR(>Fa&)&jSo4gmoerBRk5K08V4crWc^ zNv_)rZiDz;z!)ehL1JKmwB62WyoZ~KE=)ww@@ndvK}j|-Iy^|ud%|Q(%#Fa`NwXbVbYh^xso<^3-sAsp7JGuIgS3wwd02V8Q z(<}r28HM~`mR4ri-Wj_0?g=R9E=EVm>f0v#e$9fbVYfg|^dd7I)obR}2?C@WYwm{QsQ) z%nbZzNH-gyK#p7{Rzi~+4FC&JEHeD@8mG%E$XPLyK+HSF*yF?lFbU%eKalUQ;lV)$ z0S`l)$utEN48Z6aY`=x)Uo&-KyB2(`fCFH_!TV3JSQ~GDSiRS1=6&twiYIZ!Rx~6` zHv)L5pbA<8O&*~KpjAljh&T~x_n~F2o#|Tm6X#Q~@pzC|6F12}4Y(a3JF4c1s?}cj z&N==PXzW8_@-Fx1pK<7>AxaCbx?6jBF#xxxCZi_KCbY5|f z1*U*Ez>Og4HO40f>ng*APy}~ z;@6Na)hZMPQKXZtC=wh5Euz*zG2);OL1$|Ri=q+4k`SqllBmSQd^E{>f0s0-zK8`6 zT)5oJIp?0?!hb@VZ#-VFrCzhtFNPEkzsf|T(L8_|pw+WkwY43bDVB63Ng#w&lelT! zN`~5Uq|SsGXlPJhuTP*2p>3B=Ws*ik6FXic*ZVDv@084|yiCyiu?_4Bt zDgZ#qYHbH*WdI?BEXz6@)i49z`*f-i?2Tyvdb(WP+F`+UY#-kOfyy;n`FivGK-Xmw z>18~b+D0m8LC7l@+3#lc?aRc*#|?2b5DNqVg0HvoGSW%6r;Dp=-V^WJP9m9H$dn{n zd_H22@0R%ahk)JI#L&(SEcXu+3kD6YOI$8&SB4p_yMg>%D15FGIJDc%p6O?N={-O) zn>COf{XQm-v@#Yx%3LZ3SgAyif5eMD{^P_ZCXBACiq(IP(Z-vEK8zXmW`LGrR!P?& zH}&;0HMpK@GlLW|dBeUUU>G(xW4&;iOU?&`q7Q2l|0>|<_c3|c$@R!t3W?gT27#oe z~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6@CgJ9 zZG8fJYYSh&PD{%eJuNh9j;MFsWp6EVo`Flk27fRxF!TF{nSp;w{3iRmTMOYp7i~=5 zqaR#*UXTF}_qH2n>o*;AWH(m19NcX-&aZB}65#38->^0V=!h_kn*b7Em?X;HJyJZ> z4uAuYAPkk-T!2IilK~#Wa>&VhzU!+8ssN?MTsW;@5A4TtE!;dLWmU`fHB6?vAzWQ<3Cbq*hr_r53H6{C1tkV#Q*>R07*qo IM6N<$g8I#vYXATM literal 0 HcmV?d00001 diff --git a/flags/nf.png b/flags/nf.png new file mode 100644 index 0000000000000000000000000000000000000000..37ab3a8c14230651dd73236e7314756b4c72060d GIT binary patch literal 396 zcmV;70dxL|P)MWmyP zi@52ggE*>#ARUS>4h69k2}KY|w4!ZH?i^BW6jED#;e)&H-uK})ruVlEN;v>)xfm@v?jbSF~JKD zvO}Eu3IoXN6&ur?R~U}1Wx*D>(RGxnnh5b&-Qs^5?fQ3UwV{Y)bm6w%lKQc59_Iv!Fe qp_Gbx0*8&3xcrYJ9C!T!&?^nqVXd|G$pc5R<0?>}8IobF_MV(R_v^N$yA@;k@Cc%Z+ z@3o?tE?nkcGw<^1Wk0ih!sHldc=+ym*}JJfN1rh#&Ze?hS}R(J(~@-p!#S(3s~@w^ zDRmSs;Q!B9udbl)BkFbc){@X8ny0yc)Gdo>&C+a literal 0 HcmV?d00001 diff --git a/flags/ni.png b/flags/ni.png new file mode 100644 index 0000000000000000000000000000000000000000..50cc637eb95bfd78e01c8132b794948353dd5efc GIT binary patch literal 389 zcmV;00eb$4P)8^OZL z&Pwcj122_gX&sXwq9+(HG3U0sHYXP$C#?9xumiLI$IP$`|CHz_)#`e=Ta1f7rZ?M; zsMkXP4NzIxSX|pXZwR5355PHNE|0gCgXYbX1Tdd3HD5D;5K0*l)&L}cv)0=@=)xL3 z7(r`IN%a!voS1CucOab3at*Mw0H^zv!sw+q>Jmq7gpf>?=Fx?jUy#)^P0-3l7^gID zb9i;f(e*7!^q$*IEa> za3Ng%IUNGhG$l0U0)J4Now+;kl>~^Aub#81^))$@*ytnphT&(LL#b`)MAZjig==BV j1<)B?n##gQCJTN5OHgm>>Xnhm00000NkvXXu0mjfBXp%* literal 0 HcmV?d00001 diff --git a/flags/nl.png b/flags/nl.png new file mode 100644 index 0000000000000000000000000000000000000000..df2794ef2e1bd0a18d3bca9e563c6f71bc8c43cf GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt`lJzX3_ zEP9Vl_Vr?R6mX0GpXpFoB3L4*qRvs#xu!{)U$H{Y|B-4_b-#g9+Eh=rOU}Wud1}W} z`vw0jSfKeMF1$4S;6$U}hilBNjg^+GF7v(oW?Jc9<_`>)KmK@@xmw=R^Ws{wn2#0v z_WjGbJ(aa1wtRN5mY((UmW^dx35=UoX_viMTqXBQjKQhYu;;>_&%7PSo*cdXTA_Z; zDxO;I<1hX*$~pW!anII<-)NP50WbcEP)f1}v=DF)E-s2gK{6>Jn;;@| z>X6aNLC|*YAl)1soH}%IG-HEgtqzJI7&I;BUt^Pa@4K%<(`QLDM9c>VF6ZO?&i%Mt zc&4nshrM(<<|-A@LEs5+Anaplfk^(_iyj zIdT9VY+FaOSpeKbA~fxIoT+|)P~DRg6#}l!q*$xZ{c-A0x;Y16{nHtqJ2w>2FkeLo z0Eha|UTAiD8h~c|fsP!W(!zd>Fm1Q}qh%ieIWxn@s|Z{B1-|Sq5&w2N6p(rUONW3L zTFcw*Z2%$*3o!o{0Ml$z$>oLuVzJl+jNui=1NhNuwJj+}9}((_h5 z$4O{oObcN^SiIi2L(ABzJ>vlf_4eOu2-LFyP_lw``@rj>$NX;1l0000b@?P)G4ywSrKP;L^b*HSq^qBH|)SEK1wRMcc;YCb>7SOL|SEHUSSD z_#3B8h%Ck9G7mBj@?iHdxj%kSEX&^1 zf~INxP){M$78-cGZob%eq#JeUDB0%=ScQU9pn#V*2hVbS@&-M<`vK5(J+`*C_R`bn zq?FAGI+8#kR}V??K>7&71S?8;5bMU(b+ze7#){d)$P z-k8|MqKJqT(rH=nc;rsssC-}EI?|09I1bD&i&*(Q0KYOB#IiX3YMMvquVLg@o2M{~ zU*1Qf@^Nrb7L;;Qcngv^d0CA7>Xr^X0H$r0mv;my=M2ahfPYhg1Fw@zoN*IRO%l*| zQms~NrBbN^e?C)CDK+GBslD5KtpSLLe6?*m3H)r#Mb+5~>^k`k68Jr$x@U2J00000 LNkvXXu0mjf<`M;^ literal 0 HcmV?d00001 diff --git a/flags/nr.png b/flags/nr.png new file mode 100644 index 0000000000000000000000000000000000000000..d6408e27723d767e497d1cf9d3913d9dc30d6140 GIT binary patch literal 363 zcmV-x0hIoUP) z{1GtB1olFW`Q0vtFtzwZN#3s)iQZiCbunyc!vKabNn`^c6(ss_*22mJ1yWdG0o1BV z>9Ez#1)f~0lI#9zAWVy?$_&D^@-=WhV|;YG!omJ3I~z+pb{vk+?(oCtZ_;}i!$gB= zyUgZVldbh8d)v!YXKk$pKZ5>X#KUu!SI6V2;}G^^{VxDWsW?5q=i;hO(2EIrc?9w! zCQ-@{Bk}LQzmq71j3UUEX%1+CsB1loa)28knAk?lbaW!q;S(V&U|s7xecb>6002ov JPDHLkV1k(_qKp6l literal 0 HcmV?d00001 diff --git a/flags/nu.png b/flags/nu.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd60001584ba0e93c31c661982cd7631c28ea45 GIT binary patch literal 546 zcmV+-0^R+IP)D0I+81i>|t;^O8g&Vr)VV$ee5v{+lHg9w628l!beVl}xWcRvSP+rgp5%`bf6 z@rCbac#jAFC|MpX%L>$L1YEaE0CfGQifM}qAnyfbbsnnD*I$)NbpQh(8jWrm8yG70 zBzv@bUm~P46ATV+B~!f(0#`$4nSPV!){zi<6C20{`aQXGsn4GMR4@P<4Y&95q-ZAt zot)NZIdT6KQ(uKjx&wgG(G>CBKd8iaaQ)F|=H_NJ<*9z4AOKO*v?db?8v%c>gOm5u zR>IBA-57?)m0}e`6#kflQ}Ba=k>%HRBzcTXs7Tr@GLbq%`OrCh8)M}B35K3` zoCdvyU1OPVBo4hXEaU2 zs!g};_1yo!NO(AFR~~5VDg90V3&3^T&1P%uET^fn@U2mSm1hd;I!8scEo%WN<&|8Q khd@PE<@%D>B6rFB0+RZszMR)5RR91007*qoM6N<$f`y{@JOBUy literal 0 HcmV?d00001 diff --git a/flags/nz.png b/flags/nz.png new file mode 100644 index 0000000000000000000000000000000000000000..ba5dfd1e8be5c0fbabf79e17c47e87925d89e433 GIT binary patch literal 544 zcmV+*0^j|KP)UCdVCP6+KlpI&tH}Rs!mnAN?hFBSbERFacIf+>A1;F<1-a%wu zVX_bU8?Y zZ|CAP;a~CB0t45Z>Fe~{`sEdLFb$BZ3dYkVj+ZwK&`SX2P6KcYM8J`4gRucD0NE4o iiHj4z^A9*Y3Vs1Hb|Z4c0! zwD1Mo^%m|b2!g2GnEOztaBRGHPKz-!&@m|JgTuZ2aDM)CxEFqj^?5mW-F&3f48WZ0 zrq+u^XHruq2>i2ZwKWvBa=E3K-EHlkmZiP7Bd_HXNg@hEDSO@ufDO=*a5Z~ys8p$h zG#W%VSIM!{XHa?#o;zfDIM1y+0-UCQY%{qnuH?YTv*NejOew5faf8k_l>hT8Jg0>@x26+{~ z;=kEJpsk)3NzOb%#=v_gdV{aeRG3xjNQo>1V3Q(ij~x#{YkBT=`(@y4~4Xh_hbD0pj~+rIIC|PXSOaXU_t*IskZ{PrLmP^g<}1p+5mp z0-*pYuM>*$9D2d`{ZRj-R9eAiiBaWQ)`=Gh;7%s241<}jV-JV0H&rA+ES+ZFY+|-r zzhPy!t7w2^lFLSeT)$5&lQ}qx11uJwma4{(()$x~QLP5O<2c@QI$go;Go>}{_EA+6 wx#OUsEakB$rF=I{^93;XA6{%Kiq@Or2PMvpr&J{KIsgCw07*qoM6N<$f_3k=dH?_b literal 0 HcmV?d00001 diff --git a/flags/pe.png b/flags/pe.png new file mode 100644 index 0000000000000000000000000000000000000000..513b986607f9a02edd4f0ddf4192ddc99db9a89e GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt`3JY5_^ zEPCHw-stD#DAMvUKh|)@4JF=#?F$~|)+EL?MqIdcimBRCtRUP#Wx@qX^_wY0=g!5S zedxFJ-kHjKpRSl~zWMX~(M31?&E%(;Nqml4>Btfor1jBTb?K$|+Fx4*Z5$G3owVIx z{c(EQ%sG|W4LbyOEPJq#@!duH2k#lQcAxrp?Lyz*S-Qu~YB$P!nm6OYg&zkW*ob~i ojx5!&-09YCbwBFmyB{^oTb4RxFwO9;0lJvM)78&qol`;+0PT2cr2qf` literal 0 HcmV?d00001 diff --git a/flags/pf.png b/flags/pf.png new file mode 100644 index 0000000000000000000000000000000000000000..3bffe95b6ec2e8c764811f6484b248f1cc043b28 GIT binary patch literal 451 zcmV;!0X+VRP)Pp^?w!Mafa@^*F5s~A8!Hj3&W0?*D tMTvL;2q|-p5SzfW@~y7b(i5YWyaOUyf;WYR16Tk6002ovPDHLkV1ff&%iI6} literal 0 HcmV?d00001 diff --git a/flags/pg.png b/flags/pg.png new file mode 100644 index 0000000000000000000000000000000000000000..f6744833ab3d6b45ccffb35c2fb6e2860fb5a012 GIT binary patch literal 451 zcmV;!0X+VRP)lW`Qr@lW5BXHkTFx9(dqz;Q9W}g&+SJ8?)pNTO~^C zm`*r($1pGKv7M0xajq(-c}BL!HYD(#s~;Jh`(z1+^8N}GGInynF-ep1OO9gMT*d=j z!D~F6lt*ml0La*QLG2O0ev{>Z`*=Lv)()Ov>y)3Ei&m@UTeDedF#5nig3EY=?~_-& z#qHH8_p8-v)a&)AR4P#{7Nf-I6+iPOUJ$V>;$Wg(?&j_^P49KP-9RAP?RFH4#Xua; z>+?4U-4t*@FV3-f&;y+wM+(emsI zfKI2Q(P)TRIi_Qh=hU9j8!}p1A|gqWNRnis{j+p~!S(3~n^V9L%?d({{Z~4oSb7Lj2!>~002ovPDHLkV1hL2)#?BM literal 0 HcmV?d00001 diff --git a/flags/ph.png b/flags/ph.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5c24277602deb977ea10638515d5648580bc89 GIT binary patch literal 450 zcmV;z0X_bSP)N<{p=rw1|334;;A5_nmvr5B{^% z&7+^k%@tw|E>HnVS+b>?;AQ+-a_`a1L8yGEseu^!3iHXY<%1&)Kx^!|1cCFnL*-L4 zqyRKPYeypfV`qXlRh@i3WX%-lSZ zyLfQ_njo}F?Dj6vyZ6{{-<`m}1o@NG=qfz|BL4(KHHE|T+@%q*u26*7GfWZcCvWrM swSp%u0)cD=Hh}z}0ejVUsYVK4^8f$<07*qoM6N<$f;4o@1^@s6 literal 0 HcmV?d00001 diff --git a/flags/pk.png b/flags/pk.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc771cf1cafc4d54838ebaa4dab1a97bab791ae GIT binary patch literal 404 zcmV;F0c-w=P)Qx0w}&bc+! z(B|A;r_u7!%g7R{r2VOYm@I1fwg~JQ~l=OKBuZ72K z(;jIw8;yjVuVtE0 y6eTGs(xhcs-irj_a0}>wA$@yR1|=eUP`m>YZ)n>+&6e{30000z0zw!QQgqFEYiP{I5IH9&QVW@x9Gcm>6A}x}fPnvjfLTWdWu& zEzgcr@0V>`xPfPD?(KGgM?ouI|58v|(27~bvuNfJ#4&c zmVT4zpSTIk4ohdTF7n@-zhl*@y!$sE#Iw|TDT^*MXJ813T-3dhect&kw+-gcT(Oa3 p(yLORmrM()_saSw7Wp(<@4g*9d&9NAvOqU8c)I$ztaD0e0ss-CVhI2M literal 0 HcmV?d00001 diff --git a/flags/pm.png b/flags/pm.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0efbd6506c545119472f513f240964f6e8817a GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6;SeLz639z3>VYVLR|0U?|qgx1=es19tG_tj6aTNr?(+_ag3;ge`DbXrL@Hv=Gv0!3;SNArL7fxZ6)4NjC+cm+tmp?J1TgKhf!^S5<`r&x)J(jpAbnTvg?4-Vy$YV zzX7Zx3_NmUx#{Eb*n2*UVV0x_l3&Ym+{U#23%e{Sp7qpHB+DY?A_T(0q<-LKE_nnH zaM>;R4R*wqDa6SRRN*SlTgSQbpo)c$3Xw!Kz3$*o>S=S*(h%aLZIG1;nLCC3IN8ID zH$$e-zkY91!1E=E8#XmYO@LF~-5lL!C7LmDyfw)F#*Kfa+6}?DX3>ZMkX30dOu(3>Afg>QAHgoi|vQFSW5ESydQm+0*nOyM=*nRB| TOx1V300000NkvXXu0mjf5I#UD literal 0 HcmV?d00001 diff --git a/flags/pr.png b/flags/pr.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdf8a21d6211a944eb2af3efd3325b208e335ef GIT binary patch literal 549 zcmV+=0^0qFP)#%>HPn{IZ;Lz6KY)CGU| zVdg#FKkxlB1OEx7xi|-bJ@C0HDnqRRrVN}9kHjDLP1L3#NvAt06!rzYUd_`? zI4C?_?q;!gi0Ny7?o9acY3%|X!JsNTu&lb%OiYb=dG^}E*bz)WF`3U8+}GE*95;Ru zFsoHtZjK%ty3}){BIXuM@x^e&gG^0yPF4g-Ly$CtlH3+o&&-Q=ftWP%6kL!d0+cF( z{H8-N0E;<`9aG2ye9j*IyQ>82)wWSIfM_i0{|vlcv5BUt96Ky^xpKr{R$pTt*{5w3?^^Y!o+Y z>Y&ZdmB-v&o~7&gH%waJYCG1UCI#x&_V*XB63$5Fz2`4A5*9dLVHbXWrmza*3dGz9 n2q@aH02oS3Ty4+|><0M(Woo}WF3Bq700000NkvXXu0mjfOrr8+ literal 0 HcmV?d00001 diff --git a/flags/ps.png b/flags/ps.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a7e9c71699d43ffde86e9436423f4f6511bc7a GIT binary patch literal 353 zcmV-n0iOPeP)4eFd&p!2`=UUE=6!5U3i2Zql=zF zpEtAP}F>z)}>6oEEypRO`FYhIJu%lFMz6XS!z7_CO-#7vc zAf92IhmHfB0J=ry+Ib4VK7?)DPC+?DK@dJ#D|fw~+;_Wn^}kutG{qQGtghquLO=vW zqDW*i5y>)XQj#R+WeICqEMPck9BHCOaLWGA-V(X)qPwLt$Edqne5$mn_L?zOA}) zEGgemHPZo_D}-Y&fZ~Om2jH{bjT--c$X)OY)xLeSoWL+Z00000NkvXXu0mjf-L#QE literal 0 HcmV?d00001 diff --git a/flags/pt.png b/flags/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..37ff3039fa8f4f4eba4d404c07a6d9214e8c798e GIT binary patch literal 471 zcmV;|0Vw{7P)gpfQbbVP>B5B@QRu>c zhN8H0DG2U#)%F_*LN{(yq`DGR6m+9VicJx;mf99ulhE9I-K0sB#0Gre8Ri`3{O8Ot z!+$E(nC11#$ZUp%Wd@ep7cEhpqteVAF=#@~lw{MBhs`G>?OdaFhCv8GSwSFd-K7%C zb!s~#tWjtJ;y;TEG3zI7Tgi7mdqfZQVN?AnZV&Air?*SbOK+TF_Un>Ech)+Bg4STH z$mNd*T^%nO{ZR^Y&r9Zdk9%;Xb0-ZzHX_%L4>>c}UmLF^X7V>!&3HA?1pwj{I|dd# zeR;sb0&gm3?GMvNk97t#?qEG6sq)M|xB5mr&R%n=@2<(9&(C+9*a`sC1%`*7_*6XY zT=i}8y}T=Req`3sdtGz@#R@k+b79X5QC2keUeE9p;?98J@5E}%{YBE#*7iR7cX1O? zRu*lww5bi^Z~UV9nRW_YlxV!YfK(7m+5r;2L_EYwswE%R-HoEU{RXw`fJLV%i?;v( N002ovPDHLkV1iA=)w2Kq literal 0 HcmV?d00001 diff --git a/flags/pw.png b/flags/pw.png new file mode 100644 index 0000000000000000000000000000000000000000..40ca6428c419fa7ce4f26519ec657a79068f5645 GIT binary patch literal 427 zcmV;c0aX5pP)OIEwl)!6s#=7 z2M`NiK(I)W7Z7Z$gru;u2^d3KQyDKvij7%=n~UVk*d&{**(D1eI56kT{2%{eW`KVN z>n(JBebNg21pJ6#IG0t zn8G3)Kb;ic`zGm>V*|;kYGr?o#XCv4=d9JNH7%Z8z{GyJe{d-&5{*I z$%=c5hDM;)cT*AxUkU)S(-G~O(E$3NDGbhc6v=cy0Kw!th;9LxY@pA(=_jb0_yvx4 VcD)6h#sB~S002ovPDHLkV1j0xt{?ya literal 0 HcmV?d00001 diff --git a/flags/py.png b/flags/py.png new file mode 100644 index 0000000000000000000000000000000000000000..48013247303e02d681d140a723dc7cf4268530fe GIT binary patch literal 365 zcmV-z0h0cSP)nKXS%P!{Xwb*7eG9K1Km;vUGk^qXpatONL}zoM3m@_g-zV03ZVQ=INq|L4P$~m7 z+HH16qgwG&nx;&yFF<%SyN3k9&wT5h4h)Cc6MoZV(5H9V=l*U?G&nEqrW9c98p%}g z5gSa!@A_p28~X>G;DZn}!>}6gIF1Q-uI6A@LR`dhvtkqW;VoGLlmd@>jXy{!1yp3< zs%((-XKbxDt|nuZndxW>%fVR(c?4q14PjqEp8-)ZG>Q92>wNJAZ!%kSoT*lR00000 LNkvXXu0mjf)d`ji literal 0 HcmV?d00001 diff --git a/flags/qa.png b/flags/qa.png new file mode 100644 index 0000000000000000000000000000000000000000..5983296e69674f039088b9b46988f7f3af38f12f GIT binary patch literal 410 zcmV;L0cHM)P);r99hP*QPwbVFkE*j2$1AT)u0dV;yt$d3w+FQ}9&ST(Dwa0dV&dz~SJi+@+hT%~zR<+=)Y002t4BI%3!-zk`-=dx9^5Sn0mIZSwE-c>=O~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P69c^08Kgh@(aJA~_=5S?Mn=3T^+7T;_ zU7hkQ`&$0*)wHjXJbuMu$=lyob8T+e_^tD?b(nVGsE~!H(_`Shx;lYji_jINhyR{gaWK|0Y*(4r5PtDNWYhW2;(sP6=of7X zdGFNfHuoV{+RP}0WeXl>o%o!!?@$PDG^e-1)@_1~U+>4eOly~pxM1M&cBRc6pjQ|? MUHx3vIVCg!00KW|K>z>% literal 0 HcmV?d00001 diff --git a/flags/rs.png b/flags/rs.png new file mode 100644 index 0000000000000000000000000000000000000000..937a33effcfbded9cf58ebefa84e058ca02a488b GIT binary patch literal 523 zcmV+m0`&cfP)q`FbmOz8~>nd zKZ3e-r*39;g0B1;Dt-;!h}#i$hPZ0lrfHhw<+*5DiYYS#9=Pzhk8|$5hXel!F@4+s z_fMl?ABR+QyW<~_%ml7^&2#TMmwzfy0H%}`X0d<<{p{P9*4H>bumFZ?yfGyY&n}U8 z8A8=?2L?BYD*_5ss?-K>AOQ+v6hI**=4y)FNO0E%&{|XkOnJTqVBDtj$h*#MXT;9wQ{*y(Legx&>yte`$4*7yjJxL&MacQ) z#Y;ZR_aBl_XCzkf9z15Vb78TQB_x1z-UpyRh{;xHroQ6B$~vvBn?(D2$eM@W*=Fs^=EBKBOk!sJ`?3Dy1x1;U75?Fvk4WT7Lq<`G~2qjssm5e*w!nmoqhGEA0RP N002ovPDHLkV1mwr=R^Pi literal 0 HcmV?d00001 diff --git a/flags/ru.png b/flags/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..5575beec7b4e2c5ce350b1ada474d184ad10ec70 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_qJY5_^ zEP9Vl_RTtMAmBFNG|SVWb;^Yb;Y-3#80=ivhn~o+Qr6#P%Bdo7Q_?W@NZDo$SG86< z34!K)?R5|Rx)K9IukLxh>-e02%O<(8*9&u|r0xs~-Rct(>dc|fz^8C*hoIoe*ljVD zvaD&-WaSKu`5&|&tE->)DnVpM<@T6;{#(V%|j>KirI?Pu;xoE=@E z_Rr|AdfI{bxsIz}UYhuST9i$DMc0SFGsXCo@`FxTxlhokjSKq4z<1O){@1CZFGt0T X)RRx1|0lu-^c91rtDnm{r-UW|Jzj55 literal 0 HcmV?d00001 diff --git a/flags/rw.png b/flags/rw.png new file mode 100644 index 0000000000000000000000000000000000000000..41896092c03228523dba4c73ebc7cb65b344c6be GIT binary patch literal 362 zcmV-w0hRuVP)?8>2)lLNpQ(!OB9g(O%F(!NSg$5b{EH z7U_a7pq-_b7A~R|3Enm_8+YeoktKqq zg0-DRPHOkKLf8qEqPkR~-EMjS#Eq3v;iBK*VBwrd&QX8aqeD)hMFq$NTK^grj^em@ z#zyX%8SjIqq{QX>HW=dpxZ~O?BY2es0ueLiN+jR!@@!VFH4nM%tfGy}RcrI_f=JHx zYX5)-us(mo#ZlhI)u&R0D7JWmaZD`m0Pb4T&hF`Q%<#_~jfv6_NPB{=#5|gO@Sg@Q zfD^0OXrpaIMj4Gv6Btx3AlS!HwlX+8pr`|H!#j&?Y*5+o1^*>s8)(W9OaK4?07*qo IM6N<$g8Nva>;M1& literal 0 HcmV?d00001 diff --git a/flags/sa.png b/flags/sa.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac21cdaab21e911acd29dcb73198dda24813106 GIT binary patch literal 447 zcmV;w0YLtVP)+N$P|N!go4_%iJ(Qa?GLmH`U5Tc z8U2&m*{(&o{}TOr}^i&QgWeElkB4-solStI5iXz4SlwF&U@NiFvOG=EkW&5*_)GN#wgUt@dYKzqXu0Uu z0vtc?bDO|Npj9Dp=U(Va8ZZl8bP>8JsgzF65*h`ap@3^=L`O;8u;DvLB z^Sm>|VcNMO$C{l7-DVh7bhoP zhk@(DgBZN~ru~GuqLelZ3t=ovVOa_hn4S(YGc!!J>h*MB40u-o0)9fw{=UQb_$R_) z!^%pOT+Sw)E|W@?@p^f`ivWObT^&b=L=4BrE_-_pwkK%KOjSamj{=1r-MrH=0u+mNlF1{A#kxO~z{bWYySrypDsFpv?Q;L# zE7>X>SRYCq9rRb|mQwE}ar>FK^D~D_ literal 0 HcmV?d00001 diff --git a/flags/sc.png b/flags/sc.png new file mode 100644 index 0000000000000000000000000000000000000000..6163323994d21ba98b6c1edbcb6458891ab799fd GIT binary patch literal 518 zcmV+h0{Q)kP)DH4Og*dP-6)t&>Af`w&0@JLc|Vc z5TT1p2MI!l7K%gNq)-UBb;u$FqoCm6A{2^P#b_uuMA6WaQWGz23Cpc}vjpo3^7cHjOQ9p-v^d@Tpk(TVN1KS0%XJFf#)? zJKXK;ylHA7I{gtx`#%@~VkJ_NAP|7DG3e_9L8z8g42JIS^5oe8_<`RNgvKEl1doSv zIYIg;jvQHITZyxAv5%aN>rk3=19cC-PDx)Hb6(+>&r8!Q61oF@RiJc0{{R3007*qo IM6N<$f&n_?ZU6uP literal 0 HcmV?d00001 diff --git a/flags/sd.png b/flags/sd.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5fdbf14d2728ed81cb4096704493246c7304f1 GIT binary patch literal 386 zcmV-|0e$|7P)Z1lMBM;y)m^pp**2QEAUy;$VNAro9$?@IpxPUS7UQ;GYnq&K@iWkX%Ic z4ufatj|bLMY=X zMVtkM;J~nnLM7m|0*yT8;!=d!o-Gz&kP?*oNkBSnExO-9l+JR_(`(&X(fSutS}##3 zFh0U8w0bSdcV(*0Dh4xkO{~Er^6Y|GHHgB^xYQ166xWLJ2EOlG6Uk=MbZ@$$H}IzE z%t&J=_yVpVcnm~95S!38=m6)y%RJd%14Tds!!;uE!sDQUPndkBRiFao7TmZE+yWob g`;kK~f^bN_0p^!(KHP`%*8l(j07*qoM6N<$f{oUw82|tP literal 0 HcmV?d00001 diff --git a/flags/se.png b/flags/se.png new file mode 100644 index 0000000000000000000000000000000000000000..f838195a5d4dac2966ff63bad912837048c40226 GIT binary patch literal 415 zcmV;Q0bu@#P)*kSHOIT%t+53wOH~xg^3J5=ed+SZ3${nAu@rKxy4mA~8mz zF#@m_vjDJwf)xw8EXx6G00F?vY@GRn5}IxR+#R1d<|w24nXOVGzmW_Qq{qW$lID9^ z2f(pY9W#I@F#z0_Hx=HvZeVyRfHpuWBfRh*DJgn@0VDt>gsV1_&ow2xotOY~(VChr zmA?Zn4e1D5)$zBGUS#{}oLuL=Y2%KYh?hKH%L|0Q!}=jRkFVs0Gs0UXs&-FTyCYm3 zWleyy`z7xpvl2c+Wx(XqD0M|fO`;#^N=trI(`~pCQc(wy_>5TvY002ov JPDHLkV1ip6ro{jN literal 0 HcmV?d00001 diff --git a/flags/sg.png b/flags/sg.png new file mode 100644 index 0000000000000000000000000000000000000000..3109de1acfe95ae97b68d8217624101463ba1aa6 GIT binary patch literal 363 zcmV-x0hIoUP)f2(y4oJ1#Uoa z846v2qi#Y_BuWNCtD#Yo_tQyDors~G^}vC9FPx9dg$sX_I2JF>rnlF+QYI8_HoLbd z+7*L#qj5iXT{{CC)$4ZQ`*sFrJ$GIE+-f}lTmkG3hnmeY?uJ9WFvO%OUKpO;z-Ad) zo<9`;ZH#nkHM~xT&+(W_5Ri^WTz9)?A-UF00RTWL5CS!wf-%TymHlLL@g4<0Efyq$ z0k{1=dbPr=*XTID2yjlD_g)X_`&eTz+wH}00a!ZD;nCVsfuoi|kizK=eyRTgNRni) zlrm*Qd7hg%j#Kz~rW+|`TL@7t1F+UcTI*NfL!8Xzx64R>n=kaHf~B$96-WR8002ov JPDHLkV1k1GnN|P* literal 0 HcmV?d00001 diff --git a/flags/sh.png b/flags/sh.png new file mode 100644 index 0000000000000000000000000000000000000000..41f6dd9fa2b2edb06c360cbfa4eff2747faeeb4b GIT binary patch literal 666 zcmV;L0%iS)P)JQXY5IqY)(t`w&kkDI{WPuSmq0+Pv1+j+^bwrtEDv6ta#&-9|>+X7(4$07mJ~(hV z2R^=!?;Q9~=rjv6kc&SSIH~hK-raRbsAn=7>JOe-%Ik zuvi>>p4U~+XS?^|RqWio_l7_q%%iF-0E)-UD0XGiTw}#k>LBc?pu6gnGa8+p69E)u zdGFPMB-b-kYW1U>e|eEtV<8xO2f&j%l^ox-gj|1`_P%MJ-trQS#tVTt9e^Wa_pzbs zhQYu6#lB4eU@R%x;{9lEf6b!ut4{=ouB|0icR2vEEMd?KXo`ZSL{bEm6$pknaZOJo zu!;c0-}WW}1b|R9mT2f$WY!fyrbPh8oK`^kank11q?jzR=n+209(a!clT^7BI^zw6z_^nE8`)RWry&NdVBL z92t(l<>4(E>jk>r=OTzI%Yg{7*cxWpKqPGE%7vB_5cnu=cO;2~hVNM?Ql^XVwtB3N zdvv>-i0gNO@$?12#$ z#k1-CjtX9M6)`Q`W~sECrRp=pPPQ^U7}`RhLQ?w|ffA1My4_FyR~eg6p})xsXd0xB zWIY9JKs^Y~ofM^@%>rIvMYn0HXVZ7?fW&(72l{W#cwV;}umAu607*qoM6N<$f)`FM Avj6}9 literal 0 HcmV?d00001 diff --git a/flags/si.png b/flags/si.png new file mode 100644 index 0000000000000000000000000000000000000000..442768e1537908d3b34c735c285f7f4e88598a68 GIT binary patch literal 426 zcmV;b0agBqP)I42C>Hu-6a@c* zo%U9Cc9KT1unF2(C|FpyiZ6s+5??XvOx8wM!GJ4z;KFd3^KtGS2L34ZameLzEkO|2 zaZH}))m+zoi5i7Mp;v3I!FE$J}S$KZBn+)xnHTk=VwY;B6FftUmSo5!^>A=wt%ww(wFy&#dt5?0AC}U Uw|<~zZU6uP07*qoM6N<$f^-DDiU0rr literal 0 HcmV?d00001 diff --git a/flags/sj.png b/flags/sj.png new file mode 100644 index 0000000000000000000000000000000000000000..980b2e40137fff4e3ae0dae2d52d5600c28e1706 GIT binary patch literal 455 zcmV;&0XY7NP)nz9F~-%I-L+6xjS&<*aA7!?`R*KM2L34RZ82}# zv51uIMZ=KWMxRi!O$=#=s!J)eanrTqR2TR5ZbQJdZTC$T3MYY-#3v`2xEvstci6Wd zxLI2II@L5;h{tnfT~ z17Hmf!sSaGE1BfYZaDMP@y-zvt-sh7@%%fYcjt^UNw+AWZ33aI$IA_Raz`R*}n zO6B1PeDWHlp}$8+=rwP3*b5_!EuWIhJM7G+aF33f0>&2VDg<;WWfo^<07zsqKsNyQ zTU!+8=9&Uxu~-ZI!!7&|;HFxwY37$F|E;u0g#6W21>QeXw9~RiEyL)k`@ZK2O9P=< xe%)^qLT?1PN)<}3yAD*e55E3dKauxZJOh+nkbc6ImW==a002ovPDHLkV1nP?$>{(9 literal 0 HcmV?d00001 diff --git a/flags/sk.png b/flags/sk.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0ae19d016c763460032e42799b06846c214f19 GIT binary patch literal 493 zcmVi@aD#mi554>YH@1{g zDy23741n=?JTdoraC5Whh{Yf{|2x-p4KIP#T68)#>f<3g9!DpWU|ExOJdX3DMyF%X zmDXB#0NZ{TGR*>(bq#=7a`~Y0-Hb<`e j3FyvtSc2~u?p^T*fnLUtln;-}Jef-3&4EW~twC z*yMToyT*qehyIm4zS3P7xa#ZEi|P713i2LCigdH|9-HeeALoBy_v%LmE`hJ5wl&!( z>`|6ZtagZKkFtC5#Jp)vYW2Y-vm)-UTcyZ9BP=*`?k>^32me`>Jyx2{w!QLXlThoN zpu5}&J7xH_3XjK^3S`aNX0t8xX3gdLWyX(e6XVoQ_?vL=k)0;CTXW&dWBkVtm~fe{ SPF)7{4}+(xpUXO@geCxXY;o8C literal 0 HcmV?d00001 diff --git a/flags/sm.png b/flags/sm.png new file mode 100644 index 0000000000000000000000000000000000000000..69b230cce0be9d0a63003286f7aafe8e9f4fa410 GIT binary patch literal 481 zcmV<70UrK|P)3?0>Kbyh?~GfG6HTrST5J0~PsP`?`iBw!@5d^K&{z;R}xJjDWc4EK>18>6nemp)h@K1@UYv3}VoLrlmzk{E* zsaN1X!#D*jvsyXc?qUfEP%TA%_q5|=0p}KeN#n$T=m6Hf;oSnjXFVAP&>G2%6zMk$ zq=Jpu1I!QnB@K2KuuzeLaVYX4`GBh@kBbK{7hoIeani1H-EmPGE+0L1ybtPws8|C5 z9PNE^-*vcqUE*-JPjxsyY-|893IwfYpR&{pC+0mE0b45pXRS8?dLzk=A!l4-#ZgmV za~Ido1r${R2vAz(CNl~_g)o8iG1Y*5EE-A3p6RB-)C+itpbhl0>y;G$rK9-p16@K> U8IUKRaR2}S07*qoM6N<$g831c5dZ)H literal 0 HcmV?d00001 diff --git a/flags/so.png b/flags/so.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3bcc6b1021638573d2c8a8dbde557eb77637ad GIT binary patch literal 366 zcmV-!0g?WRP)_u@WrBLM(!5dmVqL|#}Zucxalc3z)fBiUE#3-K8=Nq_=V9zun1TP{s${d zu?nQJ@h|8f5Ue6trV_Le(wh(o3i-gCce%}4csUJsffEM?c4y{&W_HJ(R^Fm$0*+z3JuQM%EU z;4g4n=*C~*q6>e3KfsNPmZJEv8Kl&Oh#M(pz$z+=+Ud+Bxi{BEVv?a^2YlgNa&yjk z?t8)w{HH|e*##;i_JzQpwD+d``IW?)Jgb3GLIQOF0{}ajG5w>$o4bqGTE=kd`#CUy znF63O|75KC9R7tBoY|XT*#Cl9#bR6KZ-Fo!s?8gWpSYYfqNn`>>U}(v7eck$Z6T#h z0f!t{gjuq6e2d`g6uV)SP)-;fXVJSDZL!pS%whF2hs?XK__(u^j$mak$DJMvXEu4V zw9K{E%e?qSrO9ILHuvMxbUWL`K_|}{Wou)V7}t(4ghq&DXkd*^`S%ci~tgEq?c=0DPBy?PZWxK{KaMPQ>ccxo`dH#+Y1X zp|EWj>dUPSU3Q>{eAzwX*>$!XugwRc_6gV{i6{WMghn0NK%RVtw)%U!{-P8x7(_`e z(DKx}Nc>OxcPX79;|PkMsfNi_G}9v;EBJuo5%8mY1I;W(k;;PKy#tk&!#A_5AcCD1f{lem3IzoV3zI@?jp5pOA+Tp|_r_x5trxtw;0GVfJm&l6&3kY7 zPei{LXD*w~BQsS*{VnOn2Pq`bZfoA4*X$I%KnS5=nwIUqK~y-6rIXDrLqQmZpE)x{LmH7vkSe-qA}kTHWg~F~B(B0$xBxd` zC3Y6pBx0w##<$S+u9untHN9X%umDVQ8Lzh$!k{ey*i%nlSs@G8=dHbteq*`QV1B7 z(H^<{6?erLe$Zrj=9cZPeT4Wr=}>@h6s6}H_oj??#z{A(z8z;cKu9*St9bc1R>I1{ z($MN1K(PV`$L_!q7sG(d96+U~fUt$fpbH3sfR>K;E%7%6;pzOvG)xYF=f5?r2~1Rz z)xPmw-3D|&(0Gf90c8Ua1b0sq=G{c2a!@c=pb|{qQs#%SQQ-F*mTf(_AZyZ>wWoL+Vl!B3HXNx z?+yRo`}274pE6dOgOEx{nP|ln*mm#^Dm6eRlj)p(|Dj-9y0Iy_V0SbFD2+NfGu1um zd2=R!5Ta*WzPCH^@~Kta-|IF52m|43u?xTi&{_+Cja^;seIt+4-!5OUwQ1_cDYR7s ztVmZC!SCnBzQL`s^zg1*&Zd`|rLp2e;lUl|{h!FFjXj(5Sur*e7O&kb=RSQ+{|gXH z5V8=Zu=|fPd*}qEvd4x_+1~f;NynFqXKZa4bpf>mu6Lg{GfRHUcKje`95^=|6+SB&dztzPWO4v@_h9XO zgD?yxCUWlS>)(@$Wg7m4wRYT#8SSWEx&6W!9xbhJWULFAnf>9P8XB*DoK`KFYk*3n z5{`~f{yKkaN;)2*sY|OW%JE?JG7`iw(7D$38bwgA06TtKv0SZ4Ef;?QK?|PsJ~@cQ P00000NkvXXu0mjfz{c%e literal 0 HcmV?d00001 diff --git a/flags/sy.png b/flags/sy.png new file mode 100644 index 0000000000000000000000000000000000000000..900dc2d349246355d5ae48bad66dd39c697bd853 GIT binary patch literal 369 zcmV-%0gnEOP)nQU1Q8h@ud!43KDT=1>19*4hHFGN)R-ltBiVgyEX` z8~~LlL_wTAyubHRsjML#VXN_CjMw+*j=Cq|VKBt&d-Nu~1OEWfxN2Zv;F!({pjmFR zTrZJAp0?(??t@O1=tQ5>vG2O>V|E8pN~>0@ot^tPNhz%$2zIY9o6Rl)lu9Mw=nnp( z0>EmuQnqd94mpm4@B81d`%KqDh-cF@@A3fRI36jbUIE|O^Ubt!G16iKtD~8(!tnj8 P00000NkvXXu0mjf-$Sm4 literal 0 HcmV?d00001 diff --git a/flags/sz.png b/flags/sz.png new file mode 100644 index 0000000000000000000000000000000000000000..8153162795cdad8dd0495e5004fb5fd2407e7875 GIT binary patch literal 567 zcmV-70?7S|P)D0on?QoVYr zc-Mo_i#N$Z!CZRr;-&Zx*o2BiL}@Sn0;NSg7zA5N6-%TEX|maEc4s^oHr7K~@P&b4 zX5Q!f_+AG7QzF=y6RSW&ok-x=^D4T>!_Ay3ykG$DFmO!PtiOyz}1Nf zoRt+e^Lg;R;7!~j0-yz5B^0{lvppW;?#K~d#xL@GLoz%)&6&A5(u>c~&mKg#e0nlt z7^WctfMK9vc~l1DWPf%OO%7msAK2gPlFeo*6bh6oHm4utk=6)NYYe4!Isi{3Bj3OF z(_Aw_{pm;-bu?v@NF;)`HQ9w%YO(tGDZc3I4u*)=a0j<)Xj_Uqu^11lRTh_*F${xT zE=M|@W_@XiSC^*H%VqWfs^#ni03{t?YnP7JYRuGXOl2~>6M}`=S$xxEbABEnWhVyZ z_yJ(sz&XEQ?~aML+yvka04J{Pj`9BOq!R!>uNwB`qvD>q|ErJRZZv`+`m)|s%9ndv zI+D_pZlhvD=QG7Yzl^3*;Rs>_{3k$F{B^9iR~Y&2#cwUquMV~2U_$@^002ovPDHLk FV1lQL0r~&{ literal 0 HcmV?d00001 diff --git a/flags/tc.png b/flags/tc.png new file mode 100644 index 0000000000000000000000000000000000000000..cddd9194ae79f44ce600019d6ffe858eb3fc6b29 GIT binary patch literal 671 zcmV;Q0$}}#P)1!8?(9c~CTVJ-As#fh1!+BGScFO+LYNQ{ zgcNk?R8n0cs*BPo>ewX+iXabuko1jU9~2d(2U9U|++07_aCdfQot>Eux@%}<&;$RM zKMyZIp67)Z{!>C~DJyIAg+gB)(P+#{dBNiR41l*|lX}YY`MkoOE!JY^&`>lDaJ!50 zUY%(P<(6;bL1Z&+*Po&&2|gZ}0U*$mgU{ojt-(!gsYJxTn_yFOp{h>Gc7S+%y0Gb? zPNO`>iTn{-x{mTPWP^L{0Niiii+^E=x$V2S(lNsG+dZhNSpvucK#nh`ra$QKTis6` z7yv-3s94jz`t@jCL>YTxPZ?r)<%MCQ02y5Jil|GT3(m z06V};G?uLImbiRrKMnS8OuQRpRCH1;_mYeTaOQnLGiDin@5Ps``=>)18OXePXwp?a< z>6|lgRmmi@e!}4q%!mV*TPL$1!S}ceMT;lX34W)+VG#sy7WeUaBEg$49!diWnc0iT zvzh68e*|=Nj+6A%Vwi9t;NjF^FQ1$aG9-zccfIQaG)?Eui#i4kFN!7L5H0#NH?nn- z?%whB0RX34$C!zH2@tfb2Y%SEb5y>j6Xh4QTQS?by-YJ zEdZtoN*q=`(?;MBhy{O3v?5amx_}?TFRpEQ{zb;}@DulX;w{^|WgP$j002ovPDHLk FV1gttCg1=7 literal 0 HcmV?d00001 diff --git a/flags/td.png b/flags/td.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee6a39e8072adad4f1f5ecdf35ceb85af3d6a25 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt@|JzX3_ zEPCHwcFbaO6li^T{-vU`!hBzTfV$;!}na%-RMu1hK6 zpB6kQ4c%LR^{Bq7M_JA3U(2d}m*+2^{W&H43imeK19v-?hqE!Z9rle4J@0BCKmFCC zSjLGFMgI>PS@+2A`Vi+^ubk~`Ki~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P6} z4S?w}@UlsO42UhjN-5gqGWXRg(cK*=0i(2j`f+dl_w%z(-y_qO(Vvw$cfo?q-Kq18@^vH)DfY2$Bz zIA!dcCc21)eA;(9 dqZg^p;2j3ac1UmBn)mh}w-Zps( zy9H4pWRE~{3A1D}m8$s|jaq?6s;1rvVhEe)9Lc9# zmds;p;QKQjce3m@6B(okf~wnu@C3}|$9uNzB*(V-1VF7y2ZvODegFUf07*qoM6N<$ Ef;7R2QUCw| literal 0 HcmV?d00001 diff --git a/flags/tj.png b/flags/tj.png new file mode 100644 index 0000000000000000000000000000000000000000..630cc7d7041c7ff112e14b7d47f1dd7b4ebd7f9a GIT binary patch literal 392 zcmV;30eAk1P)jy52*kf&X{CZ-XRH1ge}ko! zmA2NAR9aYRK*W$j5@RIshZE-C^LLh~L9erILTs`J7A9XZJO@ zZ8U;JaJs!yI4G)j-1_T46*$Zm#8S$K_Txxm)+?gTJYbL_Ac&eH zd83p_1g2ne``0JwkIA4gr)MB@2JT3JUZ>adWyUyCm{LCP%}y8owxg(gwJU^Lb`cn( m8#>fiz{l`Os7en`7$wx)|DidYe4iCq{( zc@tjmvb(yn2$cSSZn`gmjBwJ0B?hKl)kUL7M5N{-x4C7W{W!XFy3iw9IfEW};e8+8 z?~jM?`@(;g&Dw;+=UtUb)m1JF2PjTZoUvfYy?=L;I+rWkt)9oTN9k^9mOo}PI)DIh zxqSY~c>J3`bWl85^fPe(C7M>@eOCs6wvk5Mt~v%fRbqz}@{!Z#@t&)JQYker187=4 z(DPImms2@zG|$jCe2ww64IT{w@ObbnN0&a6J93Ktp&7;=j)+pJasZeY06ura$%&5W z#P9Q!l1TuR*495}KQT3ZE~kBYC0h+C6b3*Dfh>V2m(bH`0Muv{z3>CmsbX4ysp&Nw zz{1bv)e8xQ$+j!FkF}GnI_Uqp4>b}&jYPOP*FyeMFAkrV5BTX!DCD$a6+i}16sPp& zZkWuw7u=cM#e?UI)Yog=?phNY9sNY(!YoUHAh)gu8S}p8@I8mLTwYHB>>beewpQLv zUX^sVh)ohy4HFnT1KDw@7D$o=@mK=@>1+|dr;dvu*Ooi--+)#bhRL&JW#jz4ppz)* zTSaOSSjshB?nD4!mnC}JRfG`R60Cq}Y)7!NYLL}sOw)P=h5=d;Hd4R?bc3|_UmSsv n0)~OYW=}RY{mvb#y1w`YN}R0aX_a|s00000NkvXXu0mjf4U`dE literal 0 HcmV?d00001 diff --git a/flags/tl.png b/flags/tl.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c043f1d074e62ee7c861f3953c228b658a9c8f GIT binary patch literal 511 zcmVzNEa7DA&cOoE$p)f>286Vx>dDQ4~b{ffi#EFiqNb?{R2iO-Ry04;(n0 z%lGsBp5ekFOLc}*;QfG+gNQ7&K0y<}1(-QPB=PfEV7@$FK;~oQW00cC^*A3z9odyeji|kW76lB`zo!*DUK=JW5 zm+o(ozHG@YT8`!grTc@r0NHGoTrNi($Gm!Dn7!Iy{a3=&yye6*GZ-}KaT<_9p&-?2 zRZ69j>|TbXQ^>vRX=zq`X;yrxKlkNhK9G~Rb6p9-FeHj1M1(L534#CsE4ycj>=}w3 zkf4*IGiRn8S$#An&5AFzC%(L&3uMh1mo>)!C2)JsDVNItTs-6Qa6Zk*hT`*WhuVsQ zUgv&*u~B$%W0Z556hDiK`f7h+U%>I$Vd08Lw50iPcet<%&`M}sn02{{hbcPL_Yo#w zH%S_>_n9U%6P)3mv0#OPl=mTo#L8j zesGBgh!zmXL(<&T4-D}877+1pzDw`b=T#MT9`SY2V_$#d?-Ku;{C1&q$e4BvdbuK-J}T%*0*X6yY{?mBJ&3aDRM4$dGj&HFA>4kZGVokVma_NU^=|)`;}m!c{1h2mO=cF^$?yj#U4hHe%9OGI O0000s2A{;_7 z!fhco_!@wg4m}aNPY#IXvh?P%be|oe#G;+jv?{c>iIab&m|EcL<`#c4L3n?=Ex^|j zJE+r@Oz<2XByx2@Wqk`RF+pH<2E_>D6iY4%EDNMWs47Aa{?tN%lt{~RPaw@2)$}Ey zoekcX*U(oN(Z)tF(-~yB;%x?R^D78l$2i+8BKr1OOJ0e{P6s4yj<-wQy(gAJ!ZQ8eAFc;5%Re)tAs9%yXy S0(e*e0000=4p_YV}?)t$G!<+g4_Z|%V5>+4Wr_<=*TzG!@wA;B$CJ*)* ziqFDb9FLr};!Y>Y(o|};{l2W>iyoo8f*8O6yjYt^QIMr6`_&2+hTJTd-;S+8dl&=9 z0KkiAWenkDg6eeWCQ0M&QZ+YqA?WoOE*6+5;(9h~45%>xd7k@?QcZ6!68y;ZAMghO z3f@cbZA~Tk65c8=00Rwk1-ESi1TqH?!0Y+%(UscZD)9l#U{J1OSN-Y$0000F`mU8gg%NlLuPt}nnuj|H@QU3Y76woPrLa2yB!D42{1FB$ zC|5zfB$ArP8XdvAxWr_#=&fDMOW{{hg&?w=!cHbAPABm*XC>$00ABh8v|AyNfu0c9 zi*xABolh9RJ4~bcdx)$qA$z;42rPw&)?ywWgUi?!Dn5)oGY-%BDgy1|9vop!#zB5f ziTXP9`Zk53Dg5i3DgxkbWet=hy0?Lyn8cbLgIE(LcaM3_gX07@{Zn9aw-hH9kX@Zn zTT{9Vt$(KdEdapx@lVhHges2UqP1&`ABq69F@6#4z}IJLP%ti_EsVgxl?VI4llV5S e2>+zLa^W5PDs+Y zEg}@x(7{dU(sqh%6NfAvZ96GsDGKN0pmoUPkTzB6(tuJpEt2!+(!@x68t@BWcs$z1!G`EXxwZFywW$ zDlMg?1()(Dk&v;GkxWk@n@UZ68Xc9&%8CGz&*$ai(o(EI3nZILO#uu6h=__#PPkLA zb9ZizX0u7@@Q~q|nb_<Q&o5e*m(;T1&{qJqt@~m7IK+@^7d{|x{pa*@BFy!{u z7We1pX}8-v*xO^cSR5=u7eDs*dF(iNo<|S_)Fvm<$H)IXbj7m#qeLS9=V_X}U0;`E zGAX*Q%d5@J$TAEceh<@CL#d+DwCvy9bh^<*K1WgX9QfKlaq66dAUY?%0CsEC|4UuC Qa{vGU07*qoM6N<$f*nx*3;+NC literal 0 HcmV?d00001 diff --git a/flags/tv.png b/flags/tv.png new file mode 100644 index 0000000000000000000000000000000000000000..fab20c61ae18cc9f93ed5eb8f7671361d1a295f7 GIT binary patch literal 526 zcmV+p0`dKcP)n-Y$t2`mKe*@DWCSULjVO(EEY>EH}AHDH7A^{r+h9i zVi(S^(MhpZy)Z5tX}I^Ygy(%x07eivGn*TtK6ixw_6--?O_F?p%Yg-x2$TeERDeFg zk1#Y|UAh)Me0Lz0Y74ZKO_0hkpN#8?KV(R&iI97*GN{Jys%8t?aQI-3nLj57?$hakk6qiNn7UEai8FW&Ff8J?hy# zwtH1po6CdusTG_}xtvdbxQQY}>li5q73EBiLdxaQ?sD9f zB{`C;qnIcFvLojOaMv#CCvG4+x0b4sQEqo7Ozz4{S zScx`bXCao_s30OLnu~7CCdSOcF9Mm9}O;WJ3U2V>XkEsW|E7ake*Cn4cSBVK(0N zIZ}Ug41G@&iayU}4}jvUkK+ct*3y`}P3PAoj!z<7-W>5#keppPzXMeLIy(njq5q1JLjwVIOdfwtKS? c{YW-~ciKU1cJ*|eO8@`>07*qoM6N<$f|!n!n*aa+ literal 0 HcmV?d00001 diff --git a/flags/tz.png b/flags/tz.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc09930917b599d6af0f7f575d6da2a0125130e GIT binary patch literal 484 zcmVq1ZOyKK= zwRvz)0&j_qYyw3QOIi)!X@_VC>;v%fq7Gs@IlG{gwGn14FgFeR`}s2wkV`FSFo35M zqGw?5&#|iIaKQCPT61$-WWiVy%(NA^noO{?Y9!KV!#(j32hikNw|ijd`OEqfb~<72 z$jk;?xXyh@vXIWaL3O2~_4UH+6a)fAtSfpV=0WVoJH(Q;d2bAk%;`TE^CR@TXCFtiKXfaz`O*cbjo*QbQJu-TGrE>xULS%!kGkw zlVNjn1&a#`QBxm|lil*5oKkqbe~0X6suOkMh#&|pl7v#4R7*(TAWwZr~OkemV@l_ zJlyYRXNpxVl5^hV=d}9G0oPOOD`&pDEOdZ<#*xW0@5=ZcWAlq{-=${VxBTeN9Tf~$ z*GBC)#c+(R;#4=I4MV1@^=;WpUH^4n9DdKu(4jOj8FnV;pb+rCDykK?0;wjNTo+s`m^=HcoQH_sN`(LCAe zVWb-g@bCe->w#CHX+dGOK;w9y+-jN9uk&w2I;d1DWQH;r%Ny*~4k8^0fca@w&QG~S zGeiVxYnS!b9aj=S#$j@d_+Pv*qzqO7^@wP0CoQG)K9Uf4PP-?51m1ddvqB_|n4W;^ z;k}rc{xm*D3@8hj&=FA3>BAZD9uCb2N(cR*_yWGSWEs8t+F1Yq002ovPDHLkV1l)) BthN9E literal 0 HcmV?d00001 diff --git a/flags/um.png b/flags/um.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca0bfde2e3e2c0b1f93e2f628bc2a6e38a5f997 GIT binary patch literal 578 zcmV-I0=@l-P)BjQl#(d02{)ZhYTm zb9w2NNbqN8H{T%zFaRY=^+&HZj=t@8Bx%fHwC3yX5o;@pWY%$X++{hLXCr^nU9Uu$ z61jQ3wfXcztJO9DdPYA;hfbP{RZ4{z=R8THhSr)m7qM8MWjM4bF8TxNwF<4n6Ds8rahzjk_Xpk2UpU^0Q6iG|dS1i0W+u^$14n73+#|xbEB+V+tLLQr0mXaE|$WScAL`Gw+M;D5i z=^2z#h(uuwz}oP*QMwKx2!Ke0_Zp=XAq1GpBO=U~^Zu`|9VvvD>$3yzy}o~JGHgE^ zfioEcA_K){Q=Ip5Kj1c6DN!PR49F~;fBYnVr0}mO5y{f@P9ZX|@Zvenxk>ubS`%%( zy#ovegPX&xcLYRDL?F1cPA7%CWvXb{2&iO|cEPtCYy;=NJL^$R5;rP-0{ke*;o6*i QEC2ui07*qoM6N<$f*5!DxBvhE literal 0 HcmV?d00001 diff --git a/flags/us.png b/flags/us.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca0bfde2e3e2c0b1f93e2f628bc2a6e38a5f997 GIT binary patch literal 578 zcmV-I0=@l-P)BjQl#(d02{)ZhYTm zb9w2NNbqN8H{T%zFaRY=^+&HZj=t@8Bx%fHwC3yX5o;@pWY%$X++{hLXCr^nU9Uu$ z61jQ3wfXcztJO9DdPYA;hfbP{RZ4{z=R8THhSr)m7qM8MWjM4bF8TxNwF<4n6Ds8rahzjk_Xpk2UpU^0Q6iG|dS1i0W+u^$14n73+#|xbEB+V+tLLQr0mXaE|$WScAL`Gw+M;D5i z=^2z#h(uuwz}oP*QMwKx2!Ke0_Zp=XAq1GpBO=U~^Zu`|9VvvD>$3yzy}o~JGHgE^ zfioEcA_K){Q=Ip5Kj1c6DN!PR49F~;fBYnVr0}mO5y{f@P9ZX|@Zvenxk>ubS`%%( zy#ovegPX&xcLYRDL?F1cPA7%CWvXb{2&iO|cEPtCYy;=NJL^$R5;rP-0{ke*;o6*i QEC2ui07*qoM6N<$f*5!DxBvhE literal 0 HcmV?d00001 diff --git a/flags/uy.png b/flags/uy.png new file mode 100644 index 0000000000000000000000000000000000000000..a90b9e02e1aa01c22d318bfaa4cc05cae4dc62b5 GIT binary patch literal 493 zcmVxFwqa7M?uEn*Af(j{$QfQ2}O3r(C@8=SqX`g`vzwm{--`($X--A2& zPpLnHMxzl~Yj=&))a`bEbvhlB6)Kg=taHwZh&T?+9le)jfaHs5jb=m~CJJ(B~p7LD5mNUcHABlxX4 zwpT^`DZ=t$9=AVm>Dsd#U@nZKZ2%osQNh{_8T!UNRj9rtgZ%>nM+eq@IL zfqK$@KUk^`4Dbbj@^qL3fR_v)5~zz;mj1D6wC2L8Fas!M(yuF*Cjzw2J?sxBC|tj@ zJQ2XFsUQOYJb&?VB0!WXolW96KAj|qANh87$Xe@bwOSqiex}`8>kCS$+Bm0+$S3dp jQ{bB#s_TKrksp}f9u3?K<_m8b00000NkvXXu0mjfHqPA< literal 0 HcmV?d00001 diff --git a/flags/uz.png b/flags/uz.png new file mode 100644 index 0000000000000000000000000000000000000000..d83031f56e685face14c287598577fd9cddd2720 GIT binary patch literal 410 zcmV;L0cHM)P)}*oni8elgZ(wg{ zZ7YaaSXfy23hAr`u~38JUr5%UY_iT=i^NsC4e`K*Vc8 zpmW>lz|Uuz_Iz(uDK(o#ARn+a literal 0 HcmV?d00001 diff --git a/flags/va.png b/flags/va.png new file mode 100644 index 0000000000000000000000000000000000000000..9935a8ecdfbc95a54f27d1737cca03fe2c938996 GIT binary patch literal 379 zcmV->0fhdEP)+7OXN4$DW7rZ?hp<~wA*g+2>@Ehm!LIU2NC6Z z{YS0%H40&fbAv1+&D7c}*?=@n7qi)H4y(`PNXdl|bj@~iORe=tDRm9JiZxy?qX^V8 Z_yqH{XXhux=l%cy002ovPDHLkV1icsrJeu) literal 0 HcmV?d00001 diff --git a/flags/vc.png b/flags/vc.png new file mode 100644 index 0000000000000000000000000000000000000000..8e50bbadd4c40782b6453637c2699ba443b62664 GIT binary patch literal 398 zcmV;90df9`P)H(F>##D;wTR(Da_$a|`p zafNIe$8YE)a*#!653BKwU%SNzumNU@Ug2T(|SuAUh)9p#nK~cr(N)C>4c{9gSwka0Emx+R&TLl$5e;Niz?C s*2$@f4&NARDx?C``^O{WN&^)azajHkgf^$&V*mgE07*qoM6N<$f`)*n!vFvP literal 0 HcmV?d00001 diff --git a/flags/ve.png b/flags/ve.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb982017bcb409b840a89cb2a2d91a4bc9ed75d GIT binary patch literal 399 zcmV;A0dW3_P)!CCfyiT^6zb%P>eDlQ6X0t^JueI(1VRSX0Zf2M<%d&USioYD(&F8B zLUeK`TVjpr3mO5->tVW{c%=Nm59KzA`hT8?AVYL%!|3QQ)7 z;ZWjv1)9wg#bS0+Yct`x7QP?g`@t&L>3mZz+qka9bgIxgsn2xKXcX7rSc5@Gt+uxY zuR3VZ3u~+HzCp2jZ#+yc2jpz5oRAtx=1Ai6A3gz3B_gLd?AO^wY_`y;r4dXHq*$0{_w!z zf6n>we;&?(|CEqel$11?Bxy?L^ZC_;S5ugi0x&W&7fE;~lToO%s^M3YlfERtV94L{ z{%o6MDci;}0qRhFp0D-`KUh}gE zO|Avb(;UzC>nt|kihMfRt0o*?S z^5NHdu3kApgZ3-4A13IU-AudPj>DeEL{yJ8Kb_QQ1UaJ8*R8`N2ck)UUY{lo-K@kt z`i2`{GPw8BgV89{-U!`NKTAw3u~+HzCp2jZ#+yc2jpz5oRAtx=1Ai6A3gz3B_gLd?AO^wY_`y;r4dXHq*$0{_w!z zf6n>we;&?(|CEqel$11?Bxy?L^ZC_;S5ugi0x&W&7fE;~lToO%s^M3YlfERtV94L{ z{%o6MDci;}0qRhFp0D-`KUh}gE zO|Avb(;UzC>nt|kihMfRt0o*?S z^5NHdu3kApgZ3-4A13IU-AudPj>DeEL{yJ8Kb_QQ1UaJ8*R8`N2ck)UUY{lo-K@kt z`i2`{GPw8BgV89{-U!`NKTAwKP) zPELaO8^qPgMGz4wiWRlU_1a5v4%(}7cO~Epfh6R8^1g(?KP5(!HK-4v;$wP+!9Bzo zV4X(mjNn0m@&Q<|+q^7XLPr98G7Npq018x$4gn;9D=~{%hh9y}Qs@j&rpnfk>ds(d z8eMp6+W=7AjZvW^x%!6KYmL4A8#b39?Mh_J(LC=lwUHnfEzQ#&ddXn#@=XgX3{Gl9 z`$4vjk84DS0a%X;BdNB*-Y8s0p_fhBu@ZoQ^jY$;GD8{*>U$A#&f%W&fr|ktLkE00000NkvXXu0mjfZ`YuF literal 0 HcmV?d00001 diff --git a/flags/vu.png b/flags/vu.png new file mode 100644 index 0000000000000000000000000000000000000000..d609d75aa5ea8794a0140d422787f184c19fc69c GIT binary patch literal 509 zcmVo3cZL$dZ{-l^c0aEN`s1CJb0`S0xi^^vk9p?vmP`iD;NWP@ZinkeLwSM z-oSr`(JaQHrw)(15%oahC)5Ef0LS6!@EZ=Nx6nQeJOogn<{-5XRRJI+slIXgk5?F2 z^*C>U>I5*s)bQfg0bnjJ!r&kj7x2FA5vD&OUq?6{Tv!02y;-fo{5gXpgcQ!eTX91*to7oMj)SugU@JPyH!PB z4tf7KVAE=+`92&SK{DCu1pz1pmEnGUacM=(epop%2ts0jr6m{}gHj1R4+;hNb!My8 zi%i3rbnW(8RoV^tE#m-yav5?tn0hBz-gz#2Cw$wngnf6e8L>yqWMF+Af?n_6$J5ce zn@u^w65>8FwEh9bBBWoL(TCl%bf%uUwqbPA#Q})~mj`E0~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P611h;YSXq=kb=~ou4Q7z5BYh zuSi!VB=W)|6M?!%V(9|w*REVxe_%eN$QiC@rOw9B@}GoU|Khd(Wa<$|S%(MfmYhG7 h?-I1L@6;(fh9l2?m)+dGrV;2n22WQ%mvv4FO#nY9dUF5( literal 0 HcmV?d00001 diff --git a/flags/ye.png b/flags/ye.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c50f804b212241656756c50b46581fd5524aa3 GIT binary patch literal 290 zcmV+-0p0$IP)!iKsD?MBfC+z9;>Kf$l`AM_WxX*Pxy zbz>lqNy^M~VN6|4h~R|_!@xPidoVCD(a+&=yS=c^B_U8*Rn1FTHiO_k%hu0Lb)@UU zo;8L$%<8SK-vyv*+v{K$pzD~6+yDrGs?Ngc?|9W1AO<)Aa=RI4ID9Y&Y!vy$Za<2z zmrD=*2vhR^f*3$mCC~FwpsLCs04R!Llpsx0;IDSzoI4p~f}tcyu-3M4{!Ev^gNR&( o2)y^Nz!UHp{kos^4T~O^f7&ou8EYR z%SK^)i5ZRG@0l2XQ1QF><##jx#3fVCC+?WMXv1b+pL_1BZ>9;kN;B{;2+O{{{FCkd zo6XNR3km)2(=%IJZT}*^O5zXO-J(BRJuWZho{;LPZGOLX>yNyZybqXGtlF8m<51jH zYgU`X)(=XVT#m5)W8N;pa^$v3^JnAGUPI^OhG#ctt#|DYudoU1U2{UBV{X$inb&ep bBK|NxW^?9D2z~Sj=r0COS3j3^P608sg$P7K?HT(bXU`ns_CXrATb@iGLVtpfoN7%a$rEur_<&2a9C?cVgO=;3}97r_p{0MGYjwK>h~^(oxvneORpXIt*_eA zE3+i8=@q)M!OM!m%8J4&ilRSI)wxfM<*g+~JY874IgRogzn>;pz{zb?0DvC2^hD@< zCD;?7mO3TWjGc|0$iB_IXc7Qe0)S)VC|x=y38&u$*+;*})A1D7Rt_QmV~MtV6DfxX z-f{M~UMul=q20TR>Y~}r4u06>;C|5w04~VJOmM0++#711gc54T+%cX-rcU5>fzRKO zv{RV@QuMhMt8s$w-AYcxrNm5*Oh06DOPBCcNhD1NzFv_;)`o4SPp|<%H+Ql7BbO^u z$wwk%1*uq6oPU~UbvFQzt%@)m_2H`h`YZGAO9h9W9L>8t4|z+gI|Sgo z36%gE8X5g2*bF5HJahx1y1Y=^f!YrhPJ0mEftQ=cOw8|iZ zpp6tWwUHLp1R^D_X4!H=jD9o-T-G95vX;&0AMtc;Kil3 zV&Bo6E}LLsTZv*EiM~#B2??P30~m(E{d;|cTjGo)q#JPW6ul~mVATN>SWA#frHI_V zY@a+ckx3dtCg1P8x1wPEEZCylK`v|P!_S`b@KuzWj=b_xxcyi=dI69{?8PNL2OFO$ vfJzsVhRU{05~Q(s1FUY&s5-M7SeY!AKg?B00000NkvXXu0mjf1>PBq literal 0 HcmV?d00001 diff --git a/minitube.pro b/minitube.pro index 1846c02..e229cce 100644 --- a/minitube.pro +++ b/minitube.pro @@ -1,4 +1,4 @@ -CONFIG += release +CONFIG += debug TEMPLATE = app VERSION = 2.0 DEFINES += APP_VERSION="$$VERSION" @@ -13,15 +13,11 @@ DEFINES += QT_USE_FAST_CONCATENATION DEFINES += QT_USE_FAST_OPERATOR_PLUS DEFINES += QT_STRICT_ITERATORS -# TODO Saner string behaviour -# DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII TARGET = minitube -QT += network xml phonon declarative +QT += network xml phonon include(src/qtsingleapplication/qtsingleapplication.pri) HEADERS += \ - src/youtubesearch.h \ src/video.h \ - src/youtubestreamreader.h \ src/searchlineedit.h \ src/urllineedit.h \ src/spacer.h \ @@ -32,7 +28,6 @@ HEADERS += \ src/videomimedata.h \ src/global.h \ src/updatechecker.h \ - src/playlistwidget.h \ src/searchparams.h \ src/minisplitter.h \ src/loadingwidget.h \ @@ -48,7 +43,6 @@ HEADERS += \ src/downloadmodel.h \ src/downloadlistview.h \ src/downloadsettings.h \ - src/youtubesuggest.h \ src/suggester.h \ src/channelsuggest.h \ src/temporary.h \ @@ -59,17 +53,25 @@ HEADERS += \ src/sidebarwidget.h \ src/homeview.h \ src/aboutview.h \ - src/listmodel.h \ src/mainwindow.h \ src/mediaview.h \ src/searchview.h \ src/view.h \ - src/categoriesview.h \ src/userview.h \ - src/youtubecategories.h + src/playlistmodel.h \ + src/videosource.h \ + src/ytsearch.h \ + src/ytstandardfeed.h \ + src/standardfeedsview.h \ + src/ytregions.h \ + src/ytcategories.h \ + src/ytfeedreader.h \ + src/ytsuggester.h \ + src/videosourcewidget.h \ + src/regionsview.h \ + src/ytsinglevideosource.h \ + src/sidebarheader.h SOURCES += src/main.cpp \ - src/youtubesearch.cpp \ - src/youtubestreamreader.cpp \ src/searchlineedit.cpp \ src/urllineedit.cpp \ src/spacer.cpp \ @@ -78,7 +80,6 @@ SOURCES += src/main.cpp \ src/videomimedata.cpp \ src/updatechecker.cpp \ src/networkaccess.cpp \ - src/playlistwidget.cpp \ src/searchparams.cpp \ src/minisplitter.cpp \ src/loadingwidget.cpp \ @@ -95,7 +96,6 @@ SOURCES += src/main.cpp \ src/downloadmodel.cpp \ src/downloadlistview.cpp \ src/downloadsettings.cpp \ - src/youtubesuggest.cpp \ src/channelsuggest.cpp \ src/temporary.cpp \ src/segmentedcontrol.cpp \ @@ -106,13 +106,23 @@ SOURCES += src/main.cpp \ src/homeview.cpp \ src/mainwindow.cpp \ src/mediaview.cpp \ - src/listmodel.cpp \ src/aboutview.cpp \ src/searchview.cpp \ - src/categoriesview.cpp \ src/userview.cpp \ src/playlistitemdelegate.cpp \ - src/youtubecategories.cpp + src/playlistmodel.cpp \ + src/videosource.cpp \ + src/ytsearch.cpp \ + src/ytstandardfeed.cpp \ + src/standardfeedsview.cpp \ + src/ytregions.cpp \ + src/ytcategories.cpp \ + src/ytfeedreader.cpp \ + src/ytsuggester.cpp \ + src/videosourcewidget.cpp \ + src/regionsview.cpp \ + src/ytsinglevideosource.cpp \ + src/sidebarheader.cpp RESOURCES += resources.qrc DESTDIR = build/target/ OBJECTS_DIR = build/obj/ @@ -174,6 +184,3 @@ unix:!mac { icon512.files += data/512x512/minitube.png } mac|win32:include(local/local.pri) - -OTHER_FILES += \ - qml/categories.qml diff --git a/resources.qrc b/resources.qrc index 5961a8f..8206127 100644 --- a/resources.qrc +++ b/resources.qrc @@ -6,6 +6,53 @@ images/search-sortBy.png images/search-quality.png images/search-duration.png - qml/categories.qml + flags/dz.png + flags/ar.png + flags/au.png + flags/be.png + flags/br.png + flags/ca.png + flags/cl.png + flags/co.png + flags/cz.png + flags/eg.png + flags/fr.png + flags/de.png + flags/gh.png + flags/gr.png + flags/hk.png + flags/hu.png + flags/in.png + flags/id.png + flags/ie.png + flags/il.png + flags/it.png + flags/jp.png + flags/jo.png + flags/ke.png + flags/my.png + flags/mx.png + flags/ma.png + flags/nl.png + flags/nz.png + flags/ng.png + flags/pe.png + flags/ph.png + flags/pl.png + flags/ru.png + flags/sa.png + flags/sg.png + flags/za.png + flags/kr.png + flags/es.png + flags/se.png + flags/tw.png + flags/tn.png + flags/tr.png + flags/ug.png + flags/ae.png + flags/gb.png + flags/ye.png + style.css diff --git a/src/downloadmodel.cpp b/src/downloadmodel.cpp index 702711e..2031d3f 100644 --- a/src/downloadmodel.cpp +++ b/src/downloadmodel.cpp @@ -2,7 +2,7 @@ #include "downloadmanager.h" #include "downloaditem.h" #include "video.h" -#include "listmodel.h" +#include "playlistmodel.h" DownloadModel::DownloadModel(DownloadManager *downloadManager, QObject *parent) : QAbstractListModel(parent), diff --git a/src/downloadview.cpp b/src/downloadview.cpp index 11b7400..42db96b 100644 --- a/src/downloadview.cpp +++ b/src/downloadview.cpp @@ -4,7 +4,7 @@ #include "downloadlistview.h" #include "downloaditem.h" #include "downloadsettings.h" -#include "listmodel.h" +#include "playlistmodel.h" #include "playlistitemdelegate.h" #include "segmentedcontrol.h" diff --git a/src/homeview.cpp b/src/homeview.cpp new file mode 100644 index 0000000..f7ad71a --- /dev/null +++ b/src/homeview.cpp @@ -0,0 +1,107 @@ +#include "homeview.h" +#include "segmentedcontrol.h" +#include "searchview.h" +#include "standardfeedsview.h" +#include "userview.h" +#include "mainwindow.h" +#include "mediaview.h" +#include "ytstandardfeed.h" + +HomeView::HomeView(QWidget *parent) : QWidget(parent) { + standardFeedsView = 0; + userView = 0; + + QBoxLayout *layout = new QVBoxLayout(this); + layout->setMargin(0); + layout->setSpacing(0); + + setupBar(); + layout->addWidget(bar); + + stackedWidget = new QStackedWidget(); + layout->addWidget(stackedWidget); + + searchView = new SearchView(); + connect(searchView, SIGNAL(search(SearchParams*)), + MainWindow::instance(), SLOT(showMedia(SearchParams*))); + stackedWidget->addWidget(searchView); +} + +void HomeView::setupBar() { + bar = new SegmentedControl(this); + + QAction *action = new QAction(tr("Search"), this); + action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_1)); + action->setStatusTip(tr("Find videos and channels by keyword")); + connect(action, SIGNAL(triggered()), SLOT(showSearch())); + bar->addAction(action); + bar->setCheckedAction(action); + + action = new QAction(tr("Categories"), this); + action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_2)); + action->setStatusTip(tr("Browse videos by category")); + connect(action, SIGNAL(triggered()), SLOT(showStandardFeeds())); + bar->addAction(action); + + /* + action = new QAction(tr("User"), this); + action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_3)); + action->setStatusTip(tr("Your favorite videos, subscriptions and playlists")); + connect(action, SIGNAL(triggered()), SLOT(showUser())); + bar->addAction(action); + */ + + foreach (QAction* action, bar->actions()) { + // action->setEnabled(false); + addAction(action); + action->setAutoRepeat(false); + if (!action->shortcut().isEmpty()) + action->setStatusTip( + action->statusTip() + " (" + + action->shortcut().toString(QKeySequence::NativeText) + ")"); + } +} + +void HomeView::showWidget(QWidget *widget) { + QWidget* currentWidget = stackedWidget->currentWidget(); + if (currentWidget == widget) return; + QMetaObject::invokeMethod(currentWidget, "disappear"); + currentWidget->setEnabled(false); + stackedWidget->setCurrentWidget(widget); + widget->setEnabled(true); + QMetaObject::invokeMethod(widget, "appear"); + bar->setCheckedAction(stackedWidget->currentIndex()); + // autoChosenView = false; + widget->setFocus(); +} + +void HomeView::appear() { + QMetaObject::invokeMethod(stackedWidget->currentWidget(), "appear"); +} + +void HomeView::disappear() { + QMetaObject::invokeMethod(stackedWidget->currentWidget(), "disappear"); +} + +void HomeView::showSearch() { + showWidget(searchView); +} + +void HomeView::showStandardFeeds() { + if (!standardFeedsView) { + standardFeedsView = new StandardFeedsView(); + connect(standardFeedsView, SIGNAL(activated(VideoSource*)), + MainWindow::instance(), + SLOT(showMedia(VideoSource*))); + stackedWidget->addWidget(standardFeedsView); + } + showWidget(standardFeedsView); +} + +void HomeView::showUser() { + if (!userView) { + userView = new UserView(this); + stackedWidget->addWidget(userView); + } + showWidget(userView); +} diff --git a/src/homeview.h b/src/homeview.h new file mode 100644 index 0000000..20cb46d --- /dev/null +++ b/src/homeview.h @@ -0,0 +1,40 @@ +#ifndef HOMEVIEW_H +#define HOMEVIEW_H + +#include +#include "view.h" + +class SegmentedControl; +class SearchView; +class StandardFeedsView; +class UserView; + +class HomeView : public QWidget, public View { + + Q_OBJECT + +public: + HomeView(QWidget *parent = 0); + void appear(); + void disappear(); + void showWidget(QWidget *widget); + SearchView* getSearchView() { return searchView; } + StandardFeedsView* getStandardFeedsView() { return standardFeedsView; } + +public slots: + void showSearch(); + void showStandardFeeds(); + void showUser(); + +private: + void setupBar(); + SegmentedControl *bar; + QStackedWidget *stackedWidget; + + SearchView *searchView; + StandardFeedsView *standardFeedsView; + UserView* userView; + +}; + +#endif // HOMEVIEW_H diff --git a/src/main.cpp b/src/main.cpp index 02b4abe..3513dba 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,13 +36,16 @@ int main(int argc, char **argv) { #ifndef Q_WS_X11 Extra::appSetup(&app); +#else + QFile cssFile(":/style.css"); + cssFile.open(QFile::ReadOnly); + QString styleSheet = QLatin1String(cssFile.readAll()); + app.setStyleSheet(styleSheet); #endif - const QString locale = QLocale::system().name(); - // qt translations QTranslator qtTranslator; - qtTranslator.load("qt_" + locale, + qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); app.installTranslator(&qtTranslator); @@ -52,13 +55,13 @@ int main(int argc, char **argv) { #else QString dataDir = ""; #endif - QString localeDir = qApp->applicationDirPath() + QDir::separator() + "locale"; + QString localeDir = qApp->applicationDirPath() + "/locale"; if (!QDir(localeDir).exists()) { - localeDir = dataDir + QDir::separator() + "locale"; + localeDir = dataDir + "/locale"; } // qDebug() << "Using locale dir" << localeDir << locale; QTranslator translator; - translator.load(locale, localeDir); + translator.load(QLocale::system(), localeDir); app.installTranslator(&translator); QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c427d91..d418ece 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -11,6 +11,9 @@ #include "videodefinition.h" #include "fontutils.h" #include "globalshortcuts.h" +#include "searchparams.h" +#include "videosource.h" +#include "ytsearch.h" #ifdef Q_WS_X11 #include "gnomeglobalshortcutbackend.h" #endif @@ -21,7 +24,7 @@ #include "macutils.h" #endif #include "downloadmanager.h" -#include "youtubesuggest.h" +#include "ytsuggester.h" #include "updatechecker.h" #include "temporary.h" #ifdef APP_MAC @@ -39,6 +42,9 @@ #include "activationview.h" #include "activationdialog.h" #endif +#include "ytregions.h" +#include "regionsview.h" +#include "standardfeedsview.h" static MainWindow *singleton = 0; @@ -48,12 +54,13 @@ MainWindow* MainWindow::instance() { } MainWindow::MainWindow() : - updateChecker(0), - aboutView(0), - downloadView(0), - mediaObject(0), - audioOutput(0), - m_fullscreen(false) { + updateChecker(0), + aboutView(0), + downloadView(0), + regionsView(0), + mediaObject(0), + audioOutput(0), + m_fullscreen(false) { singleton = this; @@ -66,7 +73,7 @@ MainWindow::MainWindow() : views->addWidget(homeView); // TODO make this lazy - mediaView = new MediaView(this); + mediaView = MediaView::instance(); mediaView->setEnabled(false); views->addWidget(mediaView); @@ -77,7 +84,6 @@ MainWindow::MainWindow() : createStatusBar(); initPhonon(); - mediaView->setSlider(seekSlider); mediaView->setMediaObject(mediaObject); // remove that useless menu/toolbar context menu @@ -479,8 +485,18 @@ void MainWindow::createActions() { action = new QAction(tr("&Refine Search..."), this); action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R)); action->setCheckable(true); + action->setEnabled(false); actions->insert("refine-search", action); + action = new QAction(YTRegions::worldwideRegion().name, this); + actions->insert("worldwide-region", action); + + action = new QAction(YTRegions::localRegion().name, this); + actions->insert("local-region", action); + + action = new QAction(tr("More..."), this); + actions->insert("more-region", action); + #ifdef APP_ACTIVATION Extra::createActivationAction(tr("Buy %1...").arg(Constants::NAME)); #endif @@ -635,7 +651,7 @@ void MainWindow::createToolBars() { seekSlider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); mainToolBar->addWidget(seekSlider); -/* + /* mainToolBar->addWidget(new Spacer()); slider = new QSlider(this); slider->setOrientation(Qt::Horizontal); @@ -660,7 +676,7 @@ void MainWindow::createToolBars() { QSlider* volumeQSlider = volumeSlider->findChild(); if (volumeQSlider) volumeQSlider->setStatusTip(tr("Press %1 to raise the volume, %2 to lower it").arg( - volumeUpAct->shortcut().toString(QKeySequence::NativeText), volumeDownAct->shortcut().toString(QKeySequence::NativeText))); + volumeUpAct->shortcut().toString(QKeySequence::NativeText), volumeDownAct->shortcut().toString(QKeySequence::NativeText))); // this makes the volume slider smaller volumeSlider->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); mainToolBar->addWidget(volumeSlider); @@ -674,7 +690,7 @@ void MainWindow::createToolBars() { toolbarSearch = new SearchLineEdit(this); #endif toolbarSearch->setMinimumWidth(toolbarSearch->fontInfo().pixelSize()*15); - toolbarSearch->setSuggester(new YouTubeSuggest(this)); + toolbarSearch->setSuggester(new YTSuggester(this)); connect(toolbarSearch, SIGNAL(search(const QString&)), this, SLOT(startToolbarSearch(const QString&))); connect(toolbarSearch, SIGNAL(suggestionAccepted(const QString&)), SLOT(startToolbarSearch(const QString&))); toolbarSearch->setStatusTip(searchFocusAct->statusTip()); @@ -691,13 +707,42 @@ void MainWindow::createToolBars() { } void MainWindow::createStatusBar() { - QToolBar* toolBar = new QToolBar(this); - statusToolBar = toolBar; - toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - toolBar->setIconSize(QSize(16, 16)); - toolBar->addAction(The::globalActions()->value("downloads")); - toolBar->addAction(The::globalActions()->value("definition")); - statusBar()->addPermanentWidget(toolBar); + statusToolBar = new QToolBar(this); + statusToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + statusToolBar->setIconSize(QSize(16, 16)); + statusToolBar->addAction(The::globalActions()->value("downloads")); + + regionButton = new QToolButton(this); + regionButton->setStatusTip(tr("Choose your content location")); + regionButton->setIcon(QtIconLoader::icon("go-down")); + regionButton->setIconSize(QSize(16, 16)); + regionButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + regionAction = statusToolBar->addWidget(regionButton); + regionAction->setVisible(false); + + QAction *localAction = The::globalActions()->value("local-region"); + if (!localAction->text().isEmpty()) { + regionButton->setPopupMode(QToolButton::InstantPopup); + QMenu *regionMenu = new QMenu(this); + regionMenu->addAction(The::globalActions()->value("worldwide-region")); + regionMenu->addAction(localAction); + regionMenu->addSeparator(); + QAction *moreRegionsAction = The::globalActions()->value("more-region"); + regionMenu->addAction(moreRegionsAction); + connect(moreRegionsAction, SIGNAL(triggered()), SLOT(showRegionsView())); + regionButton->setMenu(regionMenu); + } else { + connect(regionButton, SIGNAL(clicked()), SLOT(showRegionsView())); + } + + /* Stupid code that generates the QRC items + foreach(YTRegion r, YTRegions::list()) + qDebug() << QString("flags/%1.png").arg(r.id.toLower()); + */ + + statusToolBar->addAction(The::globalActions()->value("definition")); + + statusBar()->addPermanentWidget(statusToolBar); statusBar()->show(); } @@ -719,7 +764,7 @@ void MainWindow::readSettings() { if (settings.contains("geometry")) { restoreGeometry(settings.value("geometry").toByteArray()); #ifdef APP_MAC - MacSupport::fixGeometry(this); + MacSupport::fixGeometry(this); #endif } else { setGeometry(100, 100, 1000, 500); @@ -770,8 +815,9 @@ void MainWindow::showWidget(QWidget* widget, bool transition) { newView->appear(); QHash metadata = newView->metadata(); QString title = metadata.value("title").toString(); - if (!title.isEmpty()) title += " - "; - setWindowTitle(title + Constants::NAME); + if (title.isEmpty()) title = Constants::NAME; + else title += QLatin1String(" - ") + Constants::NAME; + setWindowTitle(title); QString desc = metadata.value("description").toString(); if (!desc.isEmpty()) showMessage(desc); } @@ -811,7 +857,8 @@ void MainWindow::showWidget(QWidget* widget, bool transition) { widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); #ifndef Q_WS_X11 - if (transition) Extra::fadeInWidget(oldWidget, widget); + if (transition && oldWidget != mediaView) + Extra::fadeInWidget(oldWidget, widget); #endif history->push(widget); @@ -903,6 +950,11 @@ void MainWindow::showMedia(SearchParams *searchParams) { showWidget(mediaView); } +void MainWindow::showMedia(VideoSource *videoSource) { + mediaView->setVideoSource(videoSource); + showWidget(mediaView); +} + void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState */) { // qDebug() << "Phonon state: " << newState; @@ -919,7 +971,7 @@ void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState } break; - case Phonon::PlayingState: + case Phonon::PlayingState: pauseAct->setEnabled(true); pauseAct->setIcon(QtIconLoader::icon("media-playback-pause")); pauseAct->setText(tr("&Pause")); @@ -927,12 +979,12 @@ void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState // stopAct->setEnabled(true); break; - case Phonon::StoppedState: + case Phonon::StoppedState: pauseAct->setEnabled(false); // stopAct->setEnabled(false); break; - case Phonon::PausedState: + case Phonon::PausedState: pauseAct->setEnabled(true); pauseAct->setIcon(QtIconLoader::icon("media-playback-start")); pauseAct->setText(tr("&Play")); @@ -940,15 +992,15 @@ void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState // stopAct->setEnabled(true); break; - case Phonon::BufferingState: - case Phonon::LoadingState: + case Phonon::BufferingState: + case Phonon::LoadingState: pauseAct->setEnabled(false); currentTime->clear(); totalTime->clear(); // stopAct->setEnabled(true); break; - default: + default: ; } } @@ -1305,11 +1357,11 @@ void MainWindow::toggleDownloads(bool show) { if (show) { stopAct->setShortcuts(QList() << QKeySequence(Qt::Key_MediaStop)); The::globalActions()->value("downloads")->setShortcuts( - QList() << QKeySequence(Qt::CTRL + Qt::Key_J) - << QKeySequence(Qt::Key_Escape)); + QList() << QKeySequence(Qt::CTRL + Qt::Key_J) + << QKeySequence(Qt::Key_Escape)); } else { The::globalActions()->value("downloads")->setShortcuts( - QList() << QKeySequence(Qt::CTRL + Qt::Key_J)); + QList() << QKeySequence(Qt::CTRL + Qt::Key_J)); stopAct->setShortcuts(QList() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop)); } @@ -1342,7 +1394,7 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *event) { if (urls.isEmpty()) return; QUrl url = urls.first(); - QString videoId = YouTubeSearch::videoIdFromUrl(url.toString()); + QString videoId = YTSearch::videoIdFromUrl(url.toString()); if (!videoId.isNull()) event->acceptProposedAction(); } @@ -1353,7 +1405,7 @@ void MainWindow::dropEvent(QDropEvent *event) { if (urls.isEmpty()) return; QUrl url = urls.first(); - QString videoId = YouTubeSearch::videoIdFromUrl(url.toString()); + QString videoId = YTSearch::videoIdFromUrl(url.toString()); if (!videoId.isNull()) { setWindowTitle(url.toString()); SearchParams *searchParams = new SearchParams(); @@ -1507,3 +1559,13 @@ void MainWindow::hideBuyAction() { action->setEnabled(false); } #endif + +void MainWindow::showRegionsView() { + if (!regionsView) { + regionsView = new RegionsView(this); + connect(regionsView, SIGNAL(regionChanged()), + homeView->getStandardFeedsView(), SLOT(load())); + views->addWidget(regionsView); + } + showWidget(regionsView); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index cdb66f5..1602748 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -14,6 +14,7 @@ class DownloadView; class SearchLineEdit; class UpdateChecker; class SearchParams; +class VideoSource; class MainWindow : public QMainWindow { @@ -27,10 +28,15 @@ public: void readSettings(); void writeSettings(); static void printHelp(); + MediaView* getMediaView() { return mediaView; } + QToolButton* getRegionButton() { return regionButton; } + QAction* getRegionAction() { return regionAction; } public slots: void showHome(bool transition = true); void showMedia(SearchParams *params); + void showMedia(VideoSource *videoSource); + void showRegionsView(); void restore(); void messageReceived(const QString &message); void quit(); @@ -115,6 +121,7 @@ private: MediaView *mediaView; QWidget *aboutView; QWidget *downloadView; + QWidget *regionsView; // actions QAction *addGadgetAct; @@ -153,10 +160,12 @@ private: QMenu *playlistMenu; QMenu *helpMenu; - // toolbar + // toolbar & statusbar QToolBar *mainToolBar; SearchLineEdit *toolbarSearch; QToolBar *statusToolBar; + QToolButton *regionButton; + QAction *regionAction; // phonon Phonon::SeekSlider *seekSlider; @@ -166,11 +175,10 @@ private: QLabel *currentTime; QLabel *totalTime; + // fullscreen bool m_fullscreen; bool m_maximized; - QTimer *mouseTimer; - }; #endif diff --git a/src/mediaview.cpp b/src/mediaview.cpp index 32540b3..6346961 100644 --- a/src/mediaview.cpp +++ b/src/mediaview.cpp @@ -1,6 +1,8 @@ #include "mediaview.h" +#include "playlistmodel.h" #include "playlistview.h" -#include "playlistitemdelegate.h" +#include "loadingwidget.h" +#include "videoareawidget.h" #include "networkaccess.h" #include "videowidget.h" #include "minisplitter.h" @@ -9,75 +11,67 @@ #include "downloaditem.h" #include "mainwindow.h" #include "temporary.h" -#include "sidebarwidget.h" -#include "playlistwidget.h" #include "refinesearchwidget.h" #include "sidebarwidget.h" +#include "sidebarheader.h" #ifdef APP_MAC #include "macfullscreen.h" +#include "macutils.h" #endif #ifdef APP_ACTIVATION #include "activation.h" #endif +#include "videosource.h" +#include "ytsearch.h" +#include "searchparams.h" +#include "ytsinglevideosource.h" namespace The { NetworkAccess* http(); -} - -namespace The { QMap* globalActions(); QMap* globalMenus(); QNetworkAccessManager* networkAccessManager(); } -MediaView::MediaView(QWidget *parent) : QWidget(parent) { +MediaView* MediaView::instance() { + static MediaView *i = new MediaView(); + return i; +} +MediaView::MediaView(QWidget *parent) : QWidget(parent) { reallyStopped = false; downloadItem = 0; - QBoxLayout *layout = new QVBoxLayout(); + QBoxLayout *layout = new QVBoxLayout(this); layout->setMargin(0); - splitter = new MiniSplitter(this); + splitter = new MiniSplitter(); splitter->setChildrenCollapsible(false); - listView = new PlaylistView(this); - listView->setItemDelegate(new PlaylistItemDelegate(this)); - listView->setSelectionMode(QAbstractItemView::ExtendedSelection); - - // dragndrop - listView->setDragEnabled(true); - listView->setAcceptDrops(true); - listView->setDropIndicatorShown(true); - listView->setDragDropMode(QAbstractItemView::DragDrop); - - // cosmetics - listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - listView->setFrameShape( QFrame::NoFrame ); - listView->setAttribute(Qt::WA_MacShowFocusRect, false); - listView->setMinimumSize(320,240); - listView->setUniformItemSizes(true); - + playlistView = new PlaylistView(this); // respond to the user doubleclicking a playlist item - connect(listView, SIGNAL(activated(const QModelIndex &)), this, SLOT(itemActivated(const QModelIndex &))); + connect(playlistView, SIGNAL(activated(const QModelIndex &)), + SLOT(itemActivated(const QModelIndex &))); - listModel = new ListModel(this); - connect(listModel, SIGNAL(activeRowChanged(int)), this, SLOT(activeRowChanged(int))); + playlistModel = new PlaylistModel(); + connect(playlistModel, SIGNAL(activeRowChanged(int)), + SLOT(activeRowChanged(int))); // needed to restore the selection after dragndrop - connect(listModel, SIGNAL(needSelectionFor(QList)), this, SLOT(selectVideos(QList))); - listView->setModel(listModel); + connect(playlistModel, SIGNAL(needSelectionFor(QList)), + SLOT(selectVideos(QList))); + playlistView->setModel(playlistModel); - connect(listView->selectionModel(), - SIGNAL(selectionChanged ( const QItemSelection & , const QItemSelection & )), - this, SLOT(selectionChanged ( const QItemSelection & , const QItemSelection & ))); + connect(playlistView->selectionModel(), + SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), + SLOT(selectionChanged(const QItemSelection &, const QItemSelection &))); - connect(listView, SIGNAL(authorPushed(QModelIndex)), SLOT(authorPushed(QModelIndex))); + connect(playlistView, SIGNAL(authorPushed(QModelIndex)), SLOT(authorPushed(QModelIndex))); sidebar = new SidebarWidget(this); - sidebar->setPlaylist(listView); + sidebar->setPlaylist(playlistView); connect(sidebar->getRefineSearchWidget(), SIGNAL(searchRefined()), SLOT(searchAgain())); - connect(listModel, SIGNAL(haveSuggestions(const QStringList &)), + connect(playlistModel, SIGNAL(haveSuggestions(const QStringList &)), sidebar, SLOT(showSuggestions(const QStringList &))); connect(sidebar, SIGNAL(suggestionAccepted(QString)), MainWindow::instance(), SLOT(startToolbarSearch(QString))); @@ -87,7 +81,7 @@ MediaView::MediaView(QWidget *parent) : QWidget(parent) { videoAreaWidget->setMinimumSize(320,240); videoWidget = new Phonon::VideoWidget(this); videoAreaWidget->setVideoWidget(videoWidget); - videoAreaWidget->setListModel(listModel); + videoAreaWidget->setListModel(playlistModel); loadingWidget = new LoadingWidget(this); videoAreaWidget->setLoadingWidget(loadingWidget); @@ -95,7 +89,6 @@ MediaView::MediaView(QWidget *parent) : QWidget(parent) { splitter->addWidget(videoAreaWidget); layout->addWidget(splitter); - setLayout(layout); splitter->setStretchFactor(0, 1); splitter->setStretchFactor(1, 6); @@ -109,11 +102,6 @@ MediaView::MediaView(QWidget *parent) : QWidget(parent) { errorTimer->setInterval(3000); connect(errorTimer, SIGNAL(timeout()), SLOT(skipVideo())); - workaroundTimer = new QTimer(this); - workaroundTimer->setSingleShot(true); - workaroundTimer->setInterval(3000); - connect(workaroundTimer, SIGNAL(timeout()), SLOT(timerPlay())); - #ifdef APP_ACTIVATION demoTimer = new QTimer(this); demoTimer->setSingleShot(true); @@ -123,13 +111,8 @@ MediaView::MediaView(QWidget *parent) : QWidget(parent) { } void MediaView::initialize() { - connect(videoAreaWidget, SIGNAL(doubleClicked()), The::globalActions()->value("fullscreen"), SLOT(trigger())); - - /* - videoAreaWidget->setContextMenuPolicy(Qt::CustomContextMenu); - connect(videoAreaWidget, SIGNAL(customContextMenuRequested(QPoint)), - this, SLOT(showVideoContextMenu(QPoint))); - */ + connect(videoAreaWidget, SIGNAL(doubleClicked()), + The::globalActions()->value("fullscreen"), SLOT(trigger())); QAction* refineSearchAction = The::globalActions()->value("refine-search"); connect(refineSearchAction, SIGNAL(toggled(bool)), @@ -138,121 +121,131 @@ void MediaView::initialize() { void MediaView::setMediaObject(Phonon::MediaObject *mediaObject) { this->mediaObject = mediaObject; - Phonon::createPath(this->mediaObject, videoWidget); - connect(mediaObject, SIGNAL(finished()), this, SLOT(playbackFinished())); + Phonon::createPath(mediaObject, videoWidget); + connect(mediaObject, SIGNAL(finished()), SLOT(playbackFinished())); connect(mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)), - this, SLOT(stateChanged(Phonon::State, Phonon::State))); + SLOT(stateChanged(Phonon::State, Phonon::State))); connect(mediaObject, SIGNAL(currentSourceChanged(Phonon::MediaSource)), - this, SLOT(currentSourceChanged(Phonon::MediaSource))); - // connect(mediaObject, SIGNAL(bufferStatus(int)), loadingWidget, SLOT(bufferStatus(int))); + SLOT(currentSourceChanged(Phonon::MediaSource))); connect(mediaObject, SIGNAL(aboutToFinish()), SLOT(aboutToFinish())); } +SearchParams* MediaView::getSearchParams() { + VideoSource *videoSource = playlistModel->getVideoSource(); + if (videoSource && videoSource->metaObject()->className() == QLatin1String("YTSearch")) { + YTSearch *search = dynamic_cast(videoSource); + return search->getSearchParams(); + } + return 0; +} + void MediaView::search(SearchParams *searchParams) { + if (!searchParams->keywords().isEmpty()) { + if (searchParams->keywords().startsWith("http://") || + searchParams->keywords().startsWith("https://")) { + QString videoId = YTSearch::videoIdFromUrl(searchParams->keywords()); + if (!videoId.isEmpty()) { + qDebug() << "single video"; + YTSingleVideoSource *singleVideoSource = new YTSingleVideoSource(this); + singleVideoSource->setVideoId(videoId); + setVideoSource(singleVideoSource); + return; + } + } + } + setVideoSource(new YTSearch(searchParams, this)); +} + +void MediaView::setVideoSource(VideoSource *videoSource, bool addToHistory) { reallyStopped = false; #ifdef APP_ACTIVATION demoTimer->stop(); #endif - workaroundTimer->stop(); errorTimer->stop(); - this->searchParams = searchParams; + if (addToHistory) { + int currentIndex = getHistoryIndex(); + if (currentIndex >= 0 && currentIndex < history.size() - 1) { + for (int i = currentIndex + 1; i < history.size(); i++) { + VideoSource *vs = history.takeAt(i); + if (!vs->parent()) delete vs; + } + } + history.append(videoSource); + } - // start serching for videos - listModel->search(searchParams); + playlistModel->setVideoSource(videoSource); sidebar->showPlaylist(); - listView->setFocus(); - - QString keyword = searchParams->keywords(); - QString display = keyword; - if (keyword.startsWith("http://") || keyword.startsWith("https://")) { - int separator = keyword.indexOf("|"); - if (separator > 0 && separator + 1 < keyword.length()) { - display = keyword.mid(separator+1); + sidebar->getRefineSearchWidget()->setSearchParams(getSearchParams()); + sidebar->hideSuggestions(); + sidebar->getHeader()->updateInfo(); + + SearchParams *searchParams = getSearchParams(); + bool isChannel = searchParams && !searchParams->author().isEmpty(); + playlistView->setClickableAuthors(!isChannel); +} + +void MediaView::searchAgain() { + VideoSource *currentVideoSource = playlistModel->getVideoSource(); + setVideoSource(currentVideoSource, false); +} + +bool MediaView::canGoBack() { + return getHistoryIndex() > 0; +} + +void MediaView::goBack() { + if (history.size() > 1) { + int currentIndex = getHistoryIndex(); + if (currentIndex > 0) { + VideoSource *previousVideoSource = history.at(currentIndex - 1); + setVideoSource(previousVideoSource, false); } } +} - sidebar->getRefineSearchWidget()->setSearchParams(searchParams); - sidebar->hideSuggestions(); +bool MediaView::canGoForward() { + int currentIndex = getHistoryIndex(); + return currentIndex >= 0 && currentIndex < history.size() - 1; +} +void MediaView::goForward() { + if (canGoForward()) { + int currentIndex = getHistoryIndex(); + VideoSource *nextVideoSource = history.at(currentIndex + 1); + setVideoSource(nextVideoSource, false); + } } -void MediaView::searchAgain() { - search(searchParams); +int MediaView::getHistoryIndex() { + return history.lastIndexOf(playlistModel->getVideoSource()); } void MediaView::appear() { - listView->setFocus(); + playlistView->setFocus(); } void MediaView::disappear() { - timerPlayFlag = true; + } void MediaView::handleError(QString /* message */) { - QTimer::singleShot(500, this, SLOT(startPlaying())); - - /* - videoAreaWidget->showError(message); - skippedVideo = listModel->activeVideo(); - // recover from errors by skipping to the next video - errorTimer->start(2000); - */ } void MediaView::stateChanged(Phonon::State newState, Phonon::State /*oldState*/) { - // qDebug() << "Phonon state: " << newState; - // slider->setEnabled(newState == Phonon::PlayingState); - - switch (newState) { - - case Phonon::ErrorState: + if (newState == Phonon::PlayingState) + videoAreaWidget->showVideo(); + else if (newState == Phonon::ErrorState) { qDebug() << "Phonon error:" << mediaObject->errorString() << mediaObject->errorType(); if (mediaObject->errorType() == Phonon::FatalError) handleError(mediaObject->errorString()); - break; - - case Phonon::PlayingState: - // qDebug("playing"); - videoAreaWidget->showVideo(); - break; - - case Phonon::StoppedState: - // qDebug("stopped"); - // play() has already been called when setting the source - // but Phonon on Linux needs a little more help to start playback - // if (!reallyStopped) mediaObject->play(); - -#ifdef APP_MAC - // Workaround for Mac playback start problem - if (!timerPlayFlag) { - // workaroundTimer->start(); - } -#endif - - break; - - case Phonon::PausedState: - qDebug("paused"); - break; - - case Phonon::BufferingState: - qDebug("buffering"); - break; - - case Phonon::LoadingState: - qDebug("loading"); - break; - } } void MediaView::pause() { - // qDebug() << "pause() called" << mediaObject->state(); - switch( mediaObject->state() ) { case Phonon::PlayingState: mediaObject->pause(); @@ -261,7 +254,6 @@ void MediaView::pause() { mediaObject->play(); break; } - } QRegExp MediaView::wordRE(QString s) { @@ -269,60 +261,68 @@ QRegExp MediaView::wordRE(QString s) { } void MediaView::stop() { - listModel->abortSearch(); + playlistModel->abortSearch(); reallyStopped = true; mediaObject->stop(); videoAreaWidget->clear(); - workaroundTimer->stop(); errorTimer->stop(); - listView->selectionModel()->clearSelection(); + playlistView->selectionModel()->clearSelection(); if (downloadItem) { downloadItem->stop(); delete downloadItem; downloadItem = 0; } The::globalActions()->value("refine-search")->setChecked(false); + + while (!history.isEmpty()) { + VideoSource *videoSource = history.takeFirst(); + if (!videoSource->parent()) delete videoSource; + } } void MediaView::activeRowChanged(int row) { if (reallyStopped) return; - Video *video = listModel->videoAt(row); + Video *video = playlistModel->videoAt(row); if (!video) return; - // now that we have a new video to play - // stop all the timers - workaroundTimer->stop(); + // Related videos without video interruption + if (row == 0) { + VideoSource *videoSource = playlistModel->getVideoSource(); + if (videoSource && !history.isEmpty() && + mediaObject->state() == Phonon::PlayingState && + videoSource->metaObject()->className() == QLatin1String("YTSingleVideoSource")) { + if (playlistModel->videoAt(row)->title() == downloadItem->getVideo()->title()) + return; + } + } + errorTimer->stop(); + videoAreaWidget->showLoading(video); + mediaObject->stop(); if (downloadItem) { downloadItem->stop(); delete downloadItem; downloadItem = 0; } - // slider->setMinimum(0); - - // immediately show the loading widget - videoAreaWidget->showLoading(video); - connect(video, SIGNAL(gotStreamUrl(QUrl)), SLOT(gotStreamUrl(QUrl)), Qt::UniqueConnection); - // TODO handle signal in a proper slot and impl item error status - connect(video, SIGNAL(errorStreamUrl(QString)), SLOT(handleError(QString)), Qt::UniqueConnection); + connect(video, SIGNAL(gotStreamUrl(QUrl)), + SLOT(gotStreamUrl(QUrl)), Qt::UniqueConnection); + connect(video, SIGNAL(errorStreamUrl(QString)), + SLOT(handleError(QString)), Qt::UniqueConnection); video->loadStreamUrl(); - // reset the timer flag - timerPlayFlag = false; - // video title in the statusbar MainWindow::instance()->showMessage(video->title()); // ensure active item is visible // int row = listModel->activeRow(); if (row != -1) { - QModelIndex index = listModel->index(row, 0, QModelIndex()); - listView->scrollTo(index, QAbstractItemView::EnsureVisible); + QModelIndex index = playlistModel->index(row, 0, QModelIndex()); + playlistView->scrollTo(index, QAbstractItemView::EnsureVisible); } // enable/disable actions @@ -340,7 +340,7 @@ void MediaView::gotStreamUrl(QUrl streamUrl) { Video *video = static_cast