├── GUIDE.md ├── RELEASE_NOTES.md ├── .gitignore ├── static ├── README.txt ├── style.css ├── style.css.map └── index.css ├── thumbnail.png ├── less └── style.less ├── src ├── modules │ ├── globals.js │ ├── network-canvas.js │ └── network.js ├── utils │ ├── throttle.js │ └── helpers.js ├── network-map.js └── index.js ├── README.md ├── rollup.config.js ├── index.html ├── package.json ├── template.yml └── data └── Bubbles.csv /GUIDE.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /RELEASE_NOTES.md: -------------------------------------------------------------------------------- 1 | # 1.0.0 2 | 3 | * First version -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | template.js 3 | template.js.map -------------------------------------------------------------------------------- /static/README.txt: -------------------------------------------------------------------------------- 1 | You can put static files in this directory. 2 | -------------------------------------------------------------------------------- /thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeForAfrica/bubble-network-flourish/master/thumbnail.png -------------------------------------------------------------------------------- /static/style.css: -------------------------------------------------------------------------------- 1 | body,html{height:100%;margin:0;overflow:hidden}.network-container{overflow:hidden}/*# sourceMappingURL=style.css.map */ -------------------------------------------------------------------------------- /static/style.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../less/style.less"],"names":[],"mappings":"AAEM,KAAN,KAAa,OAAA,KAAc,OAAA,EAAW,SAAA,OAEtC,mBACC,SAAA"} -------------------------------------------------------------------------------- /less/style.less: -------------------------------------------------------------------------------- 1 | /* Styles go in this file. */ 2 | 3 | html, body { height: 100%; margin: 0; overflow: hidden; } 4 | 5 | .network-container { 6 | overflow: hidden; 7 | } -------------------------------------------------------------------------------- /src/modules/globals.js: -------------------------------------------------------------------------------- 1 | const COLOR_SENDING = '#4da7bf' 2 | const COLOR_RECEIVING = '#dba529' 3 | 4 | const COLOR_SENDING_ALT = '#427c88' 5 | 6 | export {COLOR_SENDING, COLOR_RECEIVING, COLOR_SENDING_ALT} 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Code for Africa Bubble Network template 2 | 3 | To run this, clone the repo and run `flourish run` inside the directory. 4 | 5 | For more information, checkout [flourish.studio/developers](https://flourish.studio/developers) 6 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | var nodeResolve = require("rollup-plugin-node-resolve"), 2 | uglify = require("rollup-plugin-uglify"); 3 | 4 | export default { 5 | input: "src/index.js", 6 | output: { 7 | format: "iife", 8 | name: "template", 9 | file: "template.js", 10 | sourcemap: true, 11 | }, 12 | plugins: [ 13 | nodeResolve(), 14 | uglify(), 15 | ] 16 | }; 17 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/throttle.js: -------------------------------------------------------------------------------- 1 | /* 2 | Event throttle using requestAnimationFrame 3 | Author: Mike Simmonds - https://gist.github.com/simmo/34a18a0b98547c16c071 4 | */ 5 | 6 | function throttle(type, name, obj = window) { 7 | let running = false 8 | 9 | let func = () => { 10 | if (running) { 11 | return 12 | } 13 | 14 | running = true 15 | 16 | requestAnimationFrame(() => { 17 | obj.dispatchEvent(new CustomEvent(name)) 18 | running = false 19 | }) 20 | } 21 | 22 | obj.addEventListener(type, func) 23 | } 24 | 25 | export default throttle 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cfa_bubble_networks", 3 | "version": "1.0.0", 4 | "description": "A template for use on flourish.studio", 5 | "main": "template.js", 6 | "author": "Code for Africa", 7 | "license": "ISC", 8 | "keywords": [ 9 | "flourish" 10 | ], 11 | "scripts": { 12 | "build": "rollup -c", 13 | "less": "lessc --plugin=less-plugin-clean-css --source-map less/style.less static/style.css" 14 | }, 15 | "dependencies": { 16 | "@flourish/layout": "^3.1.0", 17 | "d3": "^5.7.0", 18 | "jquery": "^3.3.1", 19 | "less": "^3.0.1", 20 | "less-plugin-clean-css": "^1.5.1", 21 | "rollup": "^0.58.2", 22 | "rollup-plugin-node-resolve": "^3.3.0", 23 | "rollup-plugin-uglify": "^3.0.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/network-map.js: -------------------------------------------------------------------------------- 1 | /* import * as $ from 'jquery' 2 | import * as d3 from 'd3' */ 3 | import NetworkCanvas from './modules/network-canvas' 4 | import NetworkSvg from './modules/network-svg' 5 | import {sortData} from './utils/helpers' 6 | 7 | const $network = document.getElementById('network') 8 | d3.csv(window.location.origin + '/data/data.csv', (error, rawData) => { 9 | if (error) { 10 | console.log(error) 11 | } else { 12 | const data = sortData(rawData) 13 | 14 | if ($network.length > 0) { 15 | const networkCanvas = new NetworkCanvas(data) 16 | networkCanvas.init() 17 | } 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /template.yml: -------------------------------------------------------------------------------- 1 | id: 'bubble-network-cfa' 2 | name: Bubble Network 3 | description: A Flourish template made by Code For Africa 4 | author: Code For Africa 5 | sdk_version: 3 6 | build: 7 | src: 8 | script: npm run build 9 | directory: src 10 | files: 11 | - rollup.config.js 12 | less: 13 | script: npm run less 14 | directory: less 15 | settings: 16 | - Colors 17 | - property: key_colors.color_1 18 | name: Primary 19 | description: Used for "sending" nodes 20 | type: color 21 | width: half 22 | - property: key_colors_selected.color_1 23 | name: Hover 24 | type: color 25 | width: half 26 | - property: key_colors.color_2 27 | name: Secondary 28 | description: Used for "receiving" nodes 29 | type: color 30 | width: half 31 | - property: key_colors_selected.color_2 32 | name: Hover 33 | description: Second Key Color on hover (legend and bubbles) (hex) 34 | type: color 35 | width: half 36 | - property: line_color 37 | name: Line color 38 | type: color 39 | width: half 40 | - property: line_color_selected 41 | name: Hover 42 | type: color 43 | width: half 44 | 45 | 46 | - Text & translation 47 | - property: key_labels.label_1 48 | name: Sending 49 | description: label for the first key 50 | type: string 51 | width: half 52 | - property: key_labels.label_2 53 | name: Receiving 54 | description: label for the second key 55 | type: string 56 | width: half 57 | - property: instruction 58 | name: Instruction 59 | description: Choose the main call to action 60 | type: string 61 | - property: main_bubble_text.one 62 | name: Entity name (singular) 63 | description: What are these bubbles representing? 64 | type: string 65 | width: half 66 | - property: main_bubble_text.many 67 | name: Entity name (plural) 68 | description: What are these bubbles representing? 69 | type: string 70 | width: half 71 | - property: text_after_total.tat_1 72 | name: Detail description (towards) 73 | description: Description label of the detail node (towards) 74 | type: string 75 | - property: text_after_total.tat_2 76 | name: Detail description (from) 77 | description: Description label of the detail node (from). 78 | type: string 79 | 80 | - Layout 81 | - property: layout 82 | import: "@flourish/layout" 83 | 84 | data: 85 | - dataset: bubbles 86 | key: from 87 | name: from 88 | type: column 89 | column: Bubbles::A 90 | - dataset: bubbles 91 | key: to 92 | name: to 93 | type: column 94 | column: Bubbles::B 95 | - dataset: bubbles 96 | key: total 97 | name: total 98 | type: column 99 | column: Bubbles::C 100 | -------------------------------------------------------------------------------- /src/utils/helpers.js: -------------------------------------------------------------------------------- 1 | function hexToRGB(hex, alpha = 1) { 2 | let r = null 3 | let g = null 4 | let b = null 5 | if (hex.length === 4) { 6 | r = parseInt(hex.slice(1, 2) + '' + hex.slice(1, 2), 16) 7 | g = parseInt(hex.slice(2, 3) + '' + hex.slice(2, 3), 16) 8 | b = parseInt(hex.slice(3, 4) + '' + hex.slice(3, 4), 16) 9 | } else { 10 | r = parseInt(hex.slice(1, 3), 16) 11 | g = parseInt(hex.slice(3, 5), 16) 12 | b = parseInt(hex.slice(5, 7), 16) 13 | } 14 | 15 | return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')' 16 | } 17 | 18 | function numberWithCommas(x) { 19 | var parts = x.toString().split('.') 20 | parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',') 21 | return parts.join('.') 22 | } 23 | 24 | function sortData(data) { 25 | const entries = new Array() 26 | const ids = new Array() 27 | for(let i = 0; i < data.length; i++) { 28 | let fromHasBeen = false 29 | let toHasBeen = false 30 | const fromIndex = entries.findIndex((entry) => entry.name === data[i].from) 31 | if (fromIndex > -1) { 32 | fromHasBeen = true 33 | entries[fromIndex].total_sent += parseInt(data[i].total, 10) 34 | const toArrayIndex = entries[fromIndex].to.findIndex((entry) => entry.name === data[i].to) 35 | if (toArrayIndex > -1) { 36 | entries[fromIndex].to[toArrayIndex].value += parseInt(data[i].total, 10) 37 | } else { 38 | entries[fromIndex].to.push({ 39 | 'id': null, 40 | 'name': data[i].to, 41 | 'value': parseInt(data[i].total, 10) 42 | }) 43 | } 44 | } 45 | const toIndex = entries.findIndex((entry) => entry.name === data[i].to) 46 | if (toIndex > -1) { 47 | toHasBeen = true 48 | entries[toIndex].total_received += parseInt(data[i].total, 10) 49 | const fromArrayIndex = entries[toIndex].from.findIndex((entry) => entry.name === data[i].from) 50 | if (fromArrayIndex > -1) { 51 | entries[toIndex].from[fromArrayIndex].value += parseInt(data[i].total, 10) 52 | } else { 53 | entries[toIndex].from.push({ 54 | 'id': null, 55 | 'name': data[i].from, 56 | 'value': parseInt(data[i].total, 10) 57 | }) 58 | } 59 | } 60 | 61 | if (!fromHasBeen) { 62 | entries.push({ 63 | 'id': null, 64 | 'name': data[i].from, 65 | 'total_sent': parseInt(data[i].total, 10), 66 | 'total_received': 0, 67 | 'to': [ 68 | { 69 | 'id': null, 70 | 'name': data[i].to, 71 | 'value': parseInt(data[i].total, 10) 72 | } 73 | ], 74 | 'from': [] 75 | }) 76 | } 77 | 78 | if (!toHasBeen) { 79 | entries.push({ 80 | 'id': null, 81 | 'name': data[i].to, 82 | 'total_sent': 0, 83 | 'total_received': parseInt(data[i].total, 10), 84 | 'to': [], 85 | 'from': [ 86 | { 87 | 'id': null, 88 | 'name': data[i].from, 89 | 'value': parseInt(data[i].total, 10) 90 | } 91 | ] 92 | }) 93 | } 94 | } 95 | 96 | entries.sort((a, b) => { 97 | return (a.name > b.name) - (a.name < b.name) 98 | }) 99 | 100 | for (var m = 0; m < entries.length; m++) { 101 | entries[m].id = m 102 | ids[m] = entries[m].name 103 | } 104 | 105 | for(var k = 0; k < entries.length; k++) { 106 | for(var l = 0; l < entries[k].to.length; l++) { 107 | entries[k].to[l].id = ids.indexOf(entries[k].to[l].name) 108 | } 109 | for(var m = 0; m < entries[k].from.length; m++) { 110 | entries[k].from[m].id = ids.indexOf(entries[k].from[m].name) 111 | } 112 | } 113 | console.log(entries) 114 | return entries 115 | } 116 | 117 | export { hexToRGB, numberWithCommas, sortData } 118 | -------------------------------------------------------------------------------- /src/modules/network-canvas.js: -------------------------------------------------------------------------------- 1 | import * as d3 from 'd3' 2 | import Network from './network' 3 | import { hexToRGB } from '../utils/helpers' 4 | import throttle from '../utils/throttle' 5 | import { state, layout, update } from '../index.js' 6 | 7 | class NetworkCanvas extends Network { 8 | constructor(data) { 9 | super() 10 | this.canvas = null 11 | this.customBase = null 12 | this.custom = null 13 | this.data = data 14 | } 15 | 16 | init() { 17 | super.init() 18 | this.setupCanvas() 19 | this.databind() 20 | this.draw() 21 | this.mouseEvents() 22 | 23 | throttle('resize', 'resize.network') 24 | this.$window.on('resize.network', () => { 25 | this.resize() 26 | }) 27 | } 28 | 29 | switchMode() { 30 | super.switchMode() 31 | this.refreshCanvas() 32 | } 33 | 34 | resize() { 35 | super.resize() 36 | 37 | this.canvas.attr('width', layout.getPrimaryWidth() * 2) 38 | .attr('height', this.height * 2) 39 | 40 | this.refreshCanvas() 41 | } 42 | 43 | setupCanvas() { 44 | this.width = layout.getPrimaryWidth() 45 | this.height = this.$container.outerHeight() 46 | this.canvas = d3.select('.network__canvas-container') 47 | .append('canvas') 48 | .classed('network__canvas', true) 49 | .attr('width', layout.getPrimaryWidth() * 2) 50 | .attr('height', this.height * 2) 51 | this.customBase = document.createElement('custom') 52 | this.custom = d3.select(this.customBase) 53 | } 54 | 55 | databind() { 56 | let column_count = Math.round((this.width / this.entryWidth)); 57 | let join = this.custom.selectAll('custom.line') 58 | .data(this.linesArray); 59 | 60 | const canvasLeft = this.$canvas.offset().left 61 | 62 | let enterSel = join.enter() 63 | .append('custom') 64 | .attr('class', 'line') 65 | .attr('id', (d) => d.from); 66 | 67 | join.merge(enterSel) 68 | .attr('x1', (d, i) => { 69 | let left_offset = (d.from % column_count) * this.entryWidth; 70 | return 2 * Math.floor(left_offset + this.entryWidth / 2) + 0.5 71 | }) 72 | .attr('y1', (d) => { 73 | let top_offset = Math.floor(d.from / column_count) * this.entryHeight; 74 | return 2 * Math.floor(top_offset + 11 + this.entryHeight / 2) + 0.5 75 | }) 76 | .attr('x2', (d) => { 77 | let left_offset = (d.to % column_count) * this.entryWidth; 78 | return 2 * Math.floor(left_offset + this.entryWidth / 2) + 0.5 79 | }) 80 | .attr('y2', (d) => { 81 | let top_offset = Math.floor(d.to / column_count) * this.entryHeight; 82 | return 2 * Math.floor(top_offset + 11 + this.entryHeight / 2) + 0.5 83 | }) 84 | .attr('stroke-width', 1) 85 | .attr('stroke', (d) => { 86 | let color = state.line_color 87 | if (d.status === 'active') color = state.line_color_selected 88 | 89 | let opacity = 1 90 | if (d.status === 'hidden') opacity = 0 91 | 92 | return hexToRGB(color, opacity) 93 | }) 94 | } 95 | 96 | draw() { 97 | // build context 98 | let context = this.canvas.node().getContext('2d') 99 | 100 | // clear canvas 101 | context.clearRect(0, 0, this.width * 2, this.height * 2) 102 | 103 | const elements = this.custom.selectAll('custom.line') 104 | 105 | elements.each(function() { // for each virtual/custom element... 106 | const node = d3.select(this) 107 | context.strokeStyle = node.attr('stroke') 108 | context.lineWidth = node.attr('stroke-width') 109 | context.beginPath() 110 | context.moveTo(node.attr('x1'), node.attr('y1')) 111 | context.lineTo(node.attr('x2'), node.attr('y2')) 112 | context.stroke() 113 | }) 114 | } 115 | 116 | refreshCanvas(callback = false) { 117 | this.databind() 118 | 119 | let t = d3.timer((elapsed) => { 120 | 121 | this.draw() 122 | 123 | if (elapsed > 350) { 124 | t.stop() 125 | 126 | if (callback !== false) { 127 | callback() 128 | } 129 | } 130 | }) 131 | } 132 | 133 | mouseEnter($entry) { 134 | let colorsHover = Object.values(state.key_colors_selected) 135 | const id = $entry.data('id') 136 | 137 | for(let i = 0; i < this.linesArray.length; i++) { 138 | let entry = this.linesArray[i] 139 | if (state.selected_key === 'sending') { 140 | if (entry.from === id || (entry.to === id && entry.bilateral)) { 141 | this.linesArray[i].status = 'active' 142 | } 143 | else { 144 | this.linesArray[i].status = null 145 | } 146 | } else { 147 | if (entry.to === id || (entry.from === id && entry.bilateral)) { 148 | this.linesArray[i].status = 'active' 149 | } 150 | else { 151 | this.linesArray[i].status = null 152 | } 153 | } 154 | } 155 | 156 | this.refreshCanvas() 157 | } 158 | 159 | mouseLeave() { 160 | let colors = Object.values(state.key_colors) 161 | for(let i = 0; i < this.linesArray.length; i++) { 162 | if (this.linesArray[i].status !== 'hidden') { 163 | this.linesArray[i].status = 'neutral' 164 | } 165 | } 166 | 167 | this.refreshCanvas() 168 | } 169 | 170 | mouseEvents() { 171 | this.$entries.on('mouseenter', (e) => { 172 | this.mouseEnter($(e.currentTarget)) 173 | }) 174 | 175 | this.$entries.on('mouseleave', () => { 176 | this.mouseLeave() 177 | }) 178 | 179 | this.$entries.on('click.select', (e) => { 180 | if (state.selected_id != null) return; 181 | const id = $(e.currentTarget).data('id') 182 | 183 | state.selected_entry = e.currentTarget.id; 184 | state.selected_id = id; 185 | 186 | update(); 187 | }) 188 | } 189 | 190 | select() { 191 | $("#" + state.selected_entry).addClass('active'); 192 | super.click() 193 | 194 | for(let i = 0; i < this.linesArray.length; i++) { 195 | const d = this.linesArray[i] 196 | if(state.selected_key === 'sending') { 197 | if (d.from !== state.selected_id && (d.to !== state.selected_id || !d.bilateral)) { 198 | d.status = 'hidden' 199 | } 200 | else { 201 | d.status = 'active' 202 | } 203 | } else { 204 | if (d.to !== state.selected_id && (d.from !== state.selected_id || !d.bilateral)) { 205 | this.linesArray[i].status = 'hidden' 206 | } 207 | else { 208 | d.status = 'active' 209 | } 210 | } 211 | } 212 | 213 | this.refreshCanvas() 214 | 215 | this.$active.on('click.deselect', () => { 216 | state.selected_entry = null; 217 | state.selected_id = null; 218 | 219 | update(); 220 | }) 221 | 222 | $('.network__entry.hide').on('click.deselect', () => { 223 | state.selected_entry = null; 224 | state.selected_id = null; 225 | update(); 226 | }) 227 | } 228 | 229 | deselect() { 230 | super.deselect() 231 | 232 | for(let i = 0; i < this.linesArray.length; i++) { 233 | this.linesArray[i].status = 'neutral' 234 | } 235 | 236 | this.refreshCanvas(this.mouseEvents.bind(this)) 237 | } 238 | } 239 | 240 | export default NetworkCanvas 241 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import initLayout from "@flourish/layout"; 2 | 3 | import NetworkCanvas from './modules/network-canvas' 4 | import Network from './modules/network' 5 | import {sortData} from './utils/helpers' 6 | 7 | export var data = {}; 8 | var bubbles; 9 | var $network_container, $network; 10 | var networkCanvas; 11 | var previously_selected, previous_line_color, previous_line_color_selected, previous_key; 12 | 13 | export var state = { 14 | // The current state of template. You can make some or all of the properties 15 | // of the state object available to the user as settings in settings.js. 16 | mode: 0, 17 | key_labels: { label_1: 'Sending', label_2: 'Receiving'}, 18 | instruction: "Click on a country to see migration flow", 19 | 20 | main_bubble_text: { many: 'countries', one: 'country'}, 21 | text_after_total: { tat_1: 'transactions sent to', tat_2: 'transactions received from'}, 22 | text_after_total_singular: { tats_1: 'transaction to', tats_2: 'transaction from'}, 23 | 24 | key_colors: { color_1: '#2353aa', color_2: '#ae7ea2' }, 25 | key_colors_selected: { color_1: '#0c2e6d', color_2: '#901772' }, 26 | line_color: "#cccccc", 27 | line_color_selected: "#888888", 28 | layout: { 29 | source_name: "Code for Africa", 30 | source_url: "http://codeforafrica.org" 31 | }, 32 | 33 | selected_entry: null, 34 | selected_id: null, 35 | selected_key: "sending" 36 | }; 37 | 38 | export var layout = initLayout(state.layout); 39 | 40 | function setDetailText(){ 41 | if($('#' + state.selected_entry).length > 0){ 42 | const $activeCountry = $('#' + state.selected_entry) 43 | const modeString = state.selected_key === 'sending' ? 'receiving' : 'sending' 44 | const linkedIds = $activeCountry.data(modeString).toString() != "" ? $activeCountry.data(modeString).toString().split(',') : [] 45 | const linkedValues = $activeCountry.data(modeString).toString() != "" ? $activeCountry.data(`${modeString}Values`).toString().split(',') : [] 46 | 47 | if( state.selected_key === 'sending'){ 48 | let activeTotalText = `${$activeCountry.data('totalSent')} ` 49 | activeTotalText += $activeCountry.data('totalSent') > 1 || $activeCountry.data('totalSent') === 0 ? state.text_after_total.tat_1 : state.text_after_total_singular.tats_1; 50 | activeTotalText += linkedIds.length > 1 || linkedIds.length === 0 ? ` ${linkedIds.length} ${state.main_bubble_text.many}` : ` ${linkedIds.length} ${state.main_bubble_text.one}` 51 | $('.network__active__total').text(activeTotalText) 52 | 53 | } else { 54 | let activeTotalText = `${$activeCountry.data('totalReceived')} ` 55 | activeTotalText += $activeCountry.data('totalReceived') > 1 || $activeCountry.data('totalReceived') === 0 ? state.text_after_total.tat_2 : state.text_after_total_singular.tats_2; 56 | activeTotalText += linkedIds.length > 1 || linkedIds.length === 0 ? ` ${linkedIds.length} ${state.main_bubble_text.many}` : ` ${linkedIds.length} ${state.main_bubble_text.one}` 57 | $('.network__active__total').text(activeTotalText) 58 | } 59 | } 60 | } 61 | 62 | export function update() { 63 | if (!data.bubbles.processed) { // If data has changed, draw the canvas again 64 | draw(); 65 | return; 66 | } 67 | 68 | layout.update(); 69 | 70 | if (previous_key != state.selected_key) networkCanvas.updateCircles() 71 | if (state.selected_id != null) networkCanvas.select(); 72 | else if (state.selected_id == null && previously_selected != null) networkCanvas.deselect(); 73 | 74 | updateButtons(); 75 | setDetailText(); 76 | 77 | $('.network__sending').css('background', !state.selected_entry ? state.key_colors.color_1 : state.key_colors.color_2) 78 | $('.network__receiving').css('background', !state.selected_entry ? state.key_colors.color_2 : state.key_colors.color_1) 79 | 80 | $('.network__sending:hover').css('background', state.selected_entry ? state.key_colors_selected.color_2 : state.key_colors_selected.color_1) 81 | $('.network__receiving:hover').css('background', state.selected_entry ? state.key_colors_selected.color_1 : state.key_colors_selected.color_2) 82 | 83 | $('.active .network__sending').css('background', state.key_colors.color_1) 84 | $('.active .network__receiving').css('background', state.key_colors.color_2) 85 | 86 | if (previous_line_color != state.line_color || previous_line_color_selected != state.line_color_selected) networkCanvas.refreshCanvas(); 87 | 88 | previously_selected = state.selected_id; 89 | previous_line_color = state.line_color; 90 | previous_line_color_selected = state.line_color_selected; 91 | previous_key = state.selected_key; 92 | 93 | layout.setHeight($network_container.height()) 94 | } 95 | 96 | function updateButtons() { 97 | var $btn_sending = $('.network__key-item.sending'); 98 | var $btn_receiving = $('.network__key-item.receiving'); 99 | 100 | $btn_sending.css({ 101 | 'border-color': state.key_colors.color_1, 102 | 'background': state.selected_key == "sending" ? state.key_colors.color_1 : "transparent", 103 | 'color': state.selected_key == "sending" ? "#ffffff" : state.key_colors.color_1 104 | }) 105 | $btn_sending.find('.network__key-text').text(state.key_labels.label_1) 106 | $btn_sending.find('.network__key-circle').css('background', state.selected_key == "sending" ? "#ffffff" : state.key_colors.color_1) 107 | 108 | $btn_receiving.css({ 109 | 'border-color': state.key_colors.color_2, 110 | 'background': state.selected_key == "receiving" ? state.key_colors.color_2 : "transparent", 111 | 'color': state.selected_key == "receiving" ? "#ffffff" : state.key_colors.color_2 112 | }) 113 | 114 | $btn_receiving.find('.network__key-text').text(state.key_labels.label_2) 115 | $btn_receiving.find('.network__key-circle').css('background', state.selected_key == "receiving" ? "#ffffff" : state.key_colors.color_2) 116 | 117 | $(".network__legend-item.sending .network__legend-circle").css("background-color", state.key_colors.color_1) 118 | $(".network__legend-item.sending .network__key-text").text(state.key_labels.label_1) 119 | 120 | $(".network__legend-item.receiving .network__legend-circle").css("background-color", state.key_colors.color_2) 121 | $(".network__legend-item.receiving .network__key-text").text(state.key_labels.label_2) 122 | 123 | $('.network__instruction').text(state.instruction) 124 | 125 | $('.network__active__total').css('color', state.selected_key == "sending" ? state.key_colors.color_1 : state.key_colors.color_2) 126 | } 127 | 128 | export function draw() { 129 | if (!$network_container) { 130 | $network_container = $network_container || $('
'); 131 | $network = $('
'); 132 | $network.attr('data-key-titles', '["Sending","Receiving"]') 133 | $network.attr('data-text-before-total', '["Sends","Receives"]') 134 | $network.attr('data-text-after-total', '["transactions to", "transactions from"]') 135 | $network.attr('data-text-after-total-singular', '["transaction to", "transaction from"]') 136 | $network.attr('data-node-type-text', 'countries') 137 | $network.attr('data-node-type-text-singular', 'country') 138 | $network.attr('data-svg', 'false') 139 | $network.attr('data-key-colors', '["#2353aa","#ae7ea2"]') 140 | $network.attr('data-key-colors-selected', '["#0c2e6d","#901772"]') 141 | $network.attr('data-color-lines', "#00ffff") 142 | $network.attr('data-color-lines-hover', "#ff0000") 143 | $network.attr('data-color-background', "#EAEAEA") 144 | $network.attr('data-instructions', "Click on a country to see migration flow") 145 | 146 | $network_container.append($network); 147 | 148 | $(layout.getSection('primary')).append($network_container); 149 | } 150 | 151 | $network.html(""); 152 | 153 | const sortedData = sortData(data.bubbles); 154 | 155 | // We add this to know that the data was processed. If a user makes a 156 | // change to the data in the interface, data.bubbles.processed will 157 | // return undefined 158 | data.bubbles.processed = true; 159 | 160 | if ($network_container.length > 0) { 161 | networkCanvas = new NetworkCanvas(sortedData) 162 | networkCanvas.init() 163 | } 164 | 165 | window.addEventListener("resize", update) 166 | update(); 167 | } 168 | -------------------------------------------------------------------------------- /static/index.css: -------------------------------------------------------------------------------- 1 | a, 2 | abbr, 3 | acronym, 4 | address, 5 | applet, 6 | article, 7 | aside, 8 | audio, 9 | b, 10 | big, 11 | blockquote, 12 | body, 13 | canvas, 14 | caption, 15 | center, 16 | cite, 17 | code, 18 | dd, 19 | del, 20 | details, 21 | dfn, 22 | div, 23 | dl, 24 | dt, 25 | em, 26 | embed, 27 | fieldset, 28 | figcaption, 29 | figure, 30 | footer, 31 | form, 32 | h1, 33 | h2, 34 | h3, 35 | h4, 36 | h5, 37 | h6, 38 | header, 39 | hgroup, 40 | html, 41 | i, 42 | iframe, 43 | img, 44 | ins, 45 | kbd, 46 | label, 47 | legend, 48 | li, 49 | mark, 50 | menu, 51 | nav, 52 | object, 53 | ol, 54 | output, 55 | p, 56 | pre, 57 | q, 58 | ruby, 59 | s, 60 | samp, 61 | section, 62 | small, 63 | span, 64 | strike, 65 | strong, 66 | sub, 67 | summary, 68 | sup, 69 | table, 70 | tbody, 71 | td, 72 | tfoot, 73 | th, 74 | thead, 75 | time, 76 | tr, 77 | tt, 78 | u, 79 | ul, 80 | var, 81 | video { 82 | padding: 0; 83 | border: 0; 84 | margin: 0; 85 | font: inherit; 86 | vertical-align: baseline 87 | } 88 | 89 | article, 90 | aside, 91 | details, 92 | figcaption, 93 | figure, 94 | footer, 95 | header, 96 | hgroup, 97 | main, 98 | menu, 99 | nav, 100 | section { 101 | display: block 102 | } 103 | 104 | body { 105 | -webkit-tap-highlight-color: transparent; 106 | color: #474747; 107 | font-family: proxima-nova, sans-serif; 108 | font-size: 16px; 109 | font-size: 1rem; 110 | font-weight: 400; 111 | line-height: 1.25; 112 | min-width: 320px; 113 | min-width: 20rem 114 | } 115 | 116 | ol, 117 | ul { 118 | list-style: none 119 | } 120 | 121 | blockquote, 122 | q { 123 | quotes: none 124 | } 125 | 126 | blockquote:after, 127 | blockquote:before, 128 | q:after, 129 | q:before { 130 | content: ""; 131 | content: none 132 | } 133 | 134 | table { 135 | border-collapse: collapse; 136 | border-spacing: 0 137 | } 138 | 139 | h1 { 140 | font-size: 24px; 141 | font-size: 1.5rem 142 | } 143 | 144 | h1, 145 | h2 { 146 | line-height: 30px; 147 | line-height: 1.875rem 148 | } 149 | 150 | h2 { 151 | font-size: 18px; 152 | font-size: 1.125rem 153 | } 154 | 155 | h1, 156 | h2, 157 | h3, 158 | h4, 159 | h5, 160 | h6 { 161 | color: #474747 162 | } 163 | 164 | a, 165 | button, 166 | input { 167 | -webkit-tap-highlight-color: transparent; 168 | text-decoration: none 169 | } 170 | 171 | .visuallyhidden { 172 | background-color: transparent; 173 | background-repeat: no-repeat; 174 | background-position: 0 0; 175 | border: 0; 176 | color: transparent; 177 | display: block; 178 | font: 0/0 a; 179 | text-shadow: none 180 | } 181 | 182 | body { 183 | background: #eaeaea 184 | } 185 | 186 | .network { 187 | overflow: hidden; 188 | } 189 | 190 | .network__key { 191 | margin-top: 30px; 192 | margin-top: 1.875rem; 193 | text-align: center 194 | } 195 | 196 | @media screen and (max-width:53.125em) { 197 | .network__key { 198 | margin-bottom: 1.25rem 199 | } 200 | } 201 | 202 | .network__key-item { 203 | border: 1px solid transparent; 204 | border-radius: 1.875rem; 205 | display: inline-block; 206 | font-size: 18px; 207 | font-size: 1.125rem; 208 | height: 18px; 209 | height: 1.125rem; 210 | line-height: 18px; 211 | line-height: 1.125rem; 212 | margin-left: 12.5px; 213 | margin-left: .78125rem; 214 | margin-right: 12.5px; 215 | margin-right: .78125rem; 216 | padding: 5px 20px 5px 5px; 217 | padding: .3125rem 1.25rem .3125rem .3125rem; 218 | -webkit-transition: all .35s; 219 | transition: all .35s 220 | } 221 | 222 | .network__key-item .network__key-circle { 223 | border-radius: 50%; 224 | content: ""; 225 | display: block; 226 | float: left; 227 | height: 18px; 228 | height: 1.125rem; 229 | margin-right: 18px; 230 | margin-right: 1.125rem; 231 | -webkit-transition: background .35s; 232 | transition: background .35s; 233 | width: 18px; 234 | width: 1.125rem 235 | } 236 | 237 | .network__key-item:active, 238 | .network__key-item:focus, 239 | .network__key-item:hover { 240 | color: #fff; 241 | cursor: pointer; 242 | text-decoration: underline 243 | } 244 | 245 | .network__key-item:active .network__key-circle, 246 | .network__key-item:focus .network__key-circle, 247 | .network__key-item:hover .network__key-circle { 248 | background: #fff 249 | } 250 | 251 | .network__key-item.active { 252 | color: #fff 253 | } 254 | 255 | .network__key-item.active:active, 256 | .network__key-item.active:focus, 257 | .network__key-item.active:hover { 258 | cursor: default; 259 | text-decoration: none 260 | } 261 | 262 | .network__key-item.active .network__key-circle { 263 | background: #fff 264 | } 265 | 266 | @media screen and (max-width:45em) { 267 | .network__key-item { 268 | display: block; 269 | margin: 0 auto .625rem; 270 | width: 13.75rem 271 | } 272 | } 273 | 274 | .network__container { 275 | overflow: hidden; 276 | position: relative 277 | } 278 | 279 | .network__entries { 280 | overflow: hidden 281 | } 282 | 283 | .network__instruction { 284 | font-size: 22px; 285 | font-size: 1.375rem; 286 | font-weight: 700; 287 | line-height: 26px; 288 | line-height: 1.625rem; 289 | margin: 20px 0; 290 | margin: 1.25rem 0; 291 | min-height: 26px; 292 | min-height: 1.625rem; 293 | -webkit-transition: opacity .35s; 294 | transition: opacity .35s 295 | } 296 | 297 | 298 | .network__instruction.hide, .network__key.hide { 299 | opacity: 0 300 | } 301 | 302 | .network__entry { 303 | float: left; 304 | height: 22px; 305 | height: 1.375rem; 306 | padding-bottom: 5%; 307 | pointer-events: all; 308 | position: relative; 309 | -webkit-transition: opacity .35s; 310 | transition: opacity .35s; 311 | width: 5% 312 | } 313 | 314 | .network__entry { 315 | cursor: pointer 316 | } 317 | 318 | .network__entry.active:active, 319 | .network__entry.active:focus, 320 | .network__entry.active:hover, 321 | .network__entry.hide:active, 322 | .network__entry.hide:focus, 323 | .network__entry.hide:hover, 324 | .network__entry.linked:active, 325 | .network__entry.linked:focus, 326 | .network__entry.linked:hover { 327 | cursor: default 328 | } 329 | 330 | .network__entry:nth-child(20n+1) { 331 | clear: both 332 | } 333 | 334 | @media (max-width:75em) { 335 | .network__entry { 336 | padding-bottom: 6.666%; 337 | width: 6.666% 338 | } 339 | .network__entry:nth-child(20n+1) { 340 | clear: none 341 | } 342 | .network__entry:nth-child(15n+1) { 343 | clear: both 344 | } 345 | } 346 | 347 | @media (max-width:62.5em) { 348 | .network__entry { 349 | padding-bottom: 10%; 350 | width: 10% 351 | } 352 | .network__entry:nth-child(15n+1) { 353 | clear: none 354 | } 355 | .network__entry:nth-child(10n+1) { 356 | clear: both 357 | } 358 | } 359 | 360 | @media (max-width:46em) { 361 | .network__entry { 362 | padding-bottom: 20%; 363 | width: 20% 364 | } 365 | .network__entry:nth-child(5n+1) { 366 | clear: both 367 | } 368 | } 369 | 370 | .network__name { 371 | display: block; 372 | font-size: 12px; 373 | font-size: .75rem; 374 | font-weight: 700; 375 | margin: 5px 5px 0; 376 | margin: .3125rem .3125rem 0; 377 | overflow: hidden; 378 | position: relative; 379 | text-align: center; 380 | text-overflow: ellipsis; 381 | -webkit-transition: opacity .35s; 382 | transition: opacity .35s; 383 | white-space: nowrap; 384 | z-index: 1 385 | } 386 | 387 | .hide .network__name { 388 | opacity: 0 389 | } 390 | 391 | .linked .network__name { 392 | opacity: 1 393 | } 394 | 395 | .active .network__name { 396 | display: none 397 | } 398 | 399 | .network__count { 400 | display: block; 401 | font-size: 10px; 402 | font-size: .625rem; 403 | font-weight: 300; 404 | opacity: 0; 405 | position: relative; 406 | text-align: center; 407 | -webkit-transition: opacity .35s; 408 | transition: opacity .35s 409 | } 410 | 411 | .linked .network__count { 412 | opacity: 1 413 | } 414 | 415 | .network__receiving, 416 | .network__sending { 417 | border-radius: 50%; 418 | display: block; 419 | height: 0; 420 | left: 50%; 421 | margin-top: 11px; 422 | margin-top: .6875rem; 423 | position: absolute; 424 | top: 50%; 425 | -webkit-transform: translate(-50%, -50%); 426 | -ms-transform: translate(-50%, -50%); 427 | transform: translate(-50%, -50%); 428 | -webkit-transform-style: preserve-3d; 429 | transform-style: preserve-3d; 430 | -webkit-transition: all .5s; 431 | transition: all .5s; 432 | width: 0 433 | } 434 | 435 | .network__active { 436 | box-sizing: border-box; 437 | display: none; 438 | left: 0; 439 | line-height: 1; 440 | overflow: hidden; 441 | padding: 46px 70px 20px; 442 | padding: 2.875rem 4.375rem 1.25rem; 443 | position: fixed; 444 | right: 0; 445 | top: 0; 446 | width: 100%; 447 | z-index: 2 448 | } 449 | 450 | .network__active.active { 451 | display: block 452 | } 453 | 454 | @media (max-width:62.5em) { 455 | .network__active { 456 | padding: 1.25rem 457 | } 458 | } 459 | 460 | .network__active__wrapper { 461 | float: left 462 | } 463 | 464 | @media (max-width:62.5em) { 465 | .network__active__wrapper { 466 | float: none; 467 | margin-bottom: .625rem 468 | } 469 | } 470 | 471 | .network__active__name { 472 | display: block; 473 | float: left; 474 | font-size: 27px; 475 | font-size: 1.6875rem; 476 | font-weight: 700; 477 | line-height: 32px; 478 | line-height: 2rem 479 | } 480 | 481 | @media (max-width:46em) { 482 | .network__active__name { 483 | float: none; 484 | padding-right: 3.4375rem 485 | } 486 | } 487 | 488 | .network__active__total { 489 | clear: both; 490 | display: block; 491 | font-size: 23px; 492 | font-size: 1.4375rem; 493 | line-height: 28px; 494 | line-height: 1.75rem 495 | } 496 | 497 | .network__active__close { 498 | background: url(../../img/icon-close.svg) 50%/60% no-repeat; 499 | border: 1px solid transparent; 500 | border-radius: 50%; 501 | display: block; 502 | float: left; 503 | height: 25px; 504 | height: 1.5625rem; 505 | margin-left: 60px; 506 | margin-left: 3.75rem; 507 | margin-top: 1px; 508 | margin-top: .0625rem; 509 | -webkit-transition: border-color .35s; 510 | transition: border-color .35s; 511 | width: 25px; 512 | width: 1.5625rem 513 | } 514 | 515 | .network__active__close:active, 516 | .network__active__close:focus, 517 | .network__active__close:hover { 518 | border-color: #000; 519 | cursor: pointer 520 | } 521 | 522 | @media (max-width:46em) { 523 | .network__active__close { 524 | position: absolute; 525 | right: 1.25rem; 526 | top: 1.25rem 527 | } 528 | } 529 | 530 | .network__legend { 531 | float: right; 532 | line-height: 32px; 533 | line-height: 2rem 534 | } 535 | 536 | @media (max-width:62.5em) { 537 | .network__legend { 538 | float: none; 539 | line-height: 1 540 | } 541 | } 542 | 543 | .network__legend-item { 544 | display: inline-block; 545 | font-size: 18px; 546 | font-size: 1.125rem; 547 | height: 18px; 548 | height: 1.125rem; 549 | line-height: 18px; 550 | line-height: 1.125rem; 551 | margin-right: 25px; 552 | margin-right: 1.5625rem 553 | } 554 | 555 | .network__legend-item .network__legend-circle { 556 | border-radius: 50%; 557 | content: ""; 558 | display: block; 559 | float: left; 560 | height: 18px; 561 | height: 1.125rem; 562 | margin-right: 18px; 563 | margin-right: 1.125rem; 564 | width: 18px; 565 | width: 1.125rem 566 | } 567 | 568 | @media (max-width:62.5em) { 569 | .network__legend-item { 570 | margin-bottom: .3125rem 571 | } 572 | } 573 | 574 | .network__legend-item:last-child { 575 | margin-right: 0 576 | } 577 | 578 | .network__canvas-container, 579 | .network__svg { 580 | bottom: 0; 581 | height: 100%; 582 | left: 0; 583 | pointer-events: none; 584 | position: absolute; 585 | right: 0; 586 | top: 0; 587 | width: 100%; 588 | overflow: hidden; 589 | line-height: 0; 590 | } 591 | 592 | .network__canvas-container canvas { 593 | -webkit-transform: scale(.5); 594 | -ms-transform: scale(.5); 595 | transform: scale(.5); 596 | -webkit-transform-origin: 0 0; 597 | -ms-transform-origin: 0 0; 598 | transform-origin: 0 0 599 | } 600 | 601 | .network__source { 602 | font-size: 0.8em; 603 | text-align: right; 604 | padding: 5px; 605 | } -------------------------------------------------------------------------------- /src/modules/network.js: -------------------------------------------------------------------------------- 1 | import { numberWithCommas } from '../utils/helpers' 2 | import { state, layout, update } from '../index.js' 3 | 4 | class Network { 5 | constructor() { 6 | this.$network = $('.network') 7 | this.$key = $('
').appendTo('.network') 8 | this.$keyItems = null 9 | this.$instructions = $(`
` + state.instruction || '' + `
`).appendTo('.network') 10 | this.$active = $('
').appendTo('.network') 11 | this.$container = $('
').appendTo('.network') 12 | this.$entryContainer = null 13 | this.$entries = null 14 | this.$circles = null 15 | this.$canvas = null 16 | this.$activeName = null 17 | this.$activeTotal = null 18 | this.$activeClose = null 19 | this.useSvg = false 20 | this.maxTotal = 0 21 | this.maxValue = 0 22 | this.entryWidth = 0 23 | this.entryHeight = 0 24 | this.linesArray = [] 25 | this.colorLines = null 26 | this.colorLinesHover = null 27 | this.width = layout.getPrimaryWidth() 28 | this.height = this.$container.outerHeight() 29 | this.$window = $(window) 30 | this.colors = Object.values(state.key_colors) 31 | this.colorsHover = Object.values(state.key_colors_selected) 32 | this.background = null 33 | this.data = null 34 | } 35 | 36 | 37 | init() { 38 | this.addMarkup() 39 | this.addEntries() 40 | this.calculateSizes() 41 | this.setupKey() 42 | } 43 | 44 | setupKey() { 45 | this.$keyItems.on('click', this.switchKey.bind(this)) 46 | } 47 | 48 | addMarkup() { 49 | const keys = ["sending", "receiving"] 50 | var titles = Object.values(state.key_labels) 51 | 52 | this.colors = Object.values(state.key_colors) 53 | this.colorsHover = Object.values(state.key_colors_selected) //this.$network.data('keyColorsSelected') || ['#0c2e6d','#901772'] 54 | 55 | this.useSvg = this.$network.data('svg') ? this.$network.data('svg') : false 56 | 57 | this.colorLines = state.line_color 58 | this.colorLinesHover = state.line_color_selected 59 | 60 | this.$active.append('
') 61 | this.$activeName = $('').appendTo('.network__active__wrapper') 62 | this.$activeClose = $('').appendTo('.network__active__wrapper') 63 | this.$activeTotal = $(``).appendTo('.network__active__wrapper') 64 | 65 | const $legend = $('
').appendTo('.network__active') 66 | 67 | for (let i = 0; i < keys.length; i++) { 68 | this.$key.append(``) 69 | $legend.append(``) 70 | } 71 | this.$keyItems = $('.network__key-item') 72 | 73 | if (this.useSvg === true) { 74 | this.$container.append('') 75 | } else { 76 | this.$canvas = $('
').appendTo('.network__container') 77 | } 78 | 79 | this.$entryContainer = $('
').appendTo('.network__container') 80 | } 81 | 82 | addEntries() { 83 | $.each(this.data, (index, entry) => { 84 | const $entryDiv = $(`
${entry.name}
`) 85 | $entryDiv.addClass('network__entry') 86 | $entryDiv.attr('id', 'entry-' + entry.id) 87 | $entryDiv.attr('data-total-sent', entry.total_sent) 88 | $entryDiv.attr('data-total-received', entry.total_received) 89 | $entryDiv.attr('data-id', entry.id) 90 | $entryDiv.attr('data-name', entry.name) 91 | $entryDiv.attr('data-sending-entry-count', entry.from.length) 92 | $entryDiv.attr('data-receiving-entry-count', entry.to.length) 93 | $entryDiv.attr('data-receiving', () => { 94 | let receivingArray = [] 95 | $.each(entry.to, (index, toEntry) => { 96 | receivingArray.push(toEntry.id) 97 | }) 98 | return receivingArray 99 | }) 100 | $entryDiv.attr('data-receiving-values', () => { 101 | let toArray = [] 102 | $.each(entry.to, (index, toEntry) => { 103 | toArray.push(toEntry.value) 104 | this.maxValue = toEntry.value > this.maxValue ? toEntry.value : this.maxValue 105 | 106 | if ($.grep(this.linesArray, (e) => { 107 | return e.from === toEntry.id && e.to === entry.id 108 | }).length <= 0) { 109 | let bilateral = $.grep(entry.from, (e) => { 110 | return e.id === toEntry.id 111 | }).length > 0 112 | this.linesArray.push({ 113 | 'from': entry.id, 114 | 'to': toEntry.id, 115 | 'bilateral': bilateral, 116 | 'status': 'neutral' 117 | }) 118 | } 119 | }) 120 | return toArray 121 | }) 122 | $entryDiv.attr('data-sending', () => { 123 | let fromArray = [] 124 | $.each(entry.from, (index, fromEntry) => { 125 | fromArray.push(fromEntry.id) 126 | }) 127 | return fromArray 128 | }) 129 | $entryDiv.attr('data-sending-values', () => { 130 | let fromArray = [] 131 | $.each(entry.from, (index, fromEntry) => { 132 | fromArray.push(fromEntry.value) 133 | this.maxValue = fromEntry.value > this.maxValue ? fromEntry.value : this.maxValue 134 | }) 135 | return fromArray 136 | }) 137 | 138 | this.maxTotal = entry.total_sent > this.maxTotal ? entry.total_sent : this.maxTotal 139 | this.maxTotal = entry.total_received > this.maxTotal ? entry.total_received : this.maxTotal 140 | 141 | this.$entryContainer.append($entryDiv) 142 | }) 143 | 144 | this.$entries = $('.network__entry') 145 | this.$circles = $('.network__sending') 146 | } 147 | 148 | calculateSizes() { 149 | this.entryWidth = this.$entries.first().outerWidth() 150 | this.entryHeight = this.$entries.first().outerHeight() 151 | 152 | $.each(this.data, (index, entry) => { 153 | const $entry = $(`#entry-${entry.id}`) 154 | const sendingWidth = this.entryWidth * Math.sqrt($entry.data('totalSent') / this.maxTotal) 155 | $entry.find('.network__sending').css({ 156 | 'width': sendingWidth, 157 | 'height': sendingWidth 158 | }) 159 | }) 160 | 161 | this.height = this.$container.outerHeight() 162 | } 163 | 164 | click() { 165 | this.$entries.off('mouseenter') 166 | this.$entries.off('mouseleave') 167 | this.$entries.off('click.select') 168 | 169 | this.colors = Object.values(state.key_colors) 170 | 171 | let main_bubble_text = state.main_bubble_text 172 | let text_after_total = Object.values(state.text_after_total) 173 | 174 | const $activeCountry = $(`#entry-${state.selected_id}`) 175 | const modeString = state.selected_key === 'sending' ? 'receiving' : 'sending' 176 | const linkedIds = $activeCountry.data(modeString).toString() ? $activeCountry.data(modeString).toString().split(',') : [] 177 | const linkedValues = $activeCountry.data(`${modeString}Values`).toString() ? $activeCountry.data(`${modeString}Values`).toString().split(',') : [] 178 | var selected_entry = $("#" + state.selected_entry); 179 | 180 | this.$activeName.text(selected_entry.data('name')) 181 | this.$active.removeClass('hide').removeClass('linked').addClass('active') 182 | this.$instructions.addClass('hide') 183 | this.$key.addClass('hide') 184 | 185 | this.$entries.removeClass('hide').removeClass('linked'); 186 | this.$entries.not(`#entry-${state.selected_id}`).addClass('hide') 187 | .find('.network__sending, .network__receiving').css({ 188 | 'width': 0, 189 | 'height': 0 190 | }) 191 | 192 | var circleWidth = this.entryWidth * Math.sqrt($activeCountry.data(state.selected_key === 'sending' ? 'totalSent' : 'totalReceived') / this.maxTotal); 193 | $activeCountry.find('.network__sending, .network__receiving').css({ 194 | 'width': circleWidth, 195 | 'height': circleWidth 196 | }) 197 | 198 | $.each(linkedIds, (index, entryId) => { 199 | const $linkedCountry = $(`#entry-${entryId}`) 200 | $linkedCountry.addClass('linked').removeClass('hide') 201 | $linkedCountry.find('.network__count').text(`${linkedValues[index]}`) 202 | const linkedWidth = this.entryWidth * Math.sqrt(linkedValues[index] / this.maxTotal) 203 | $linkedCountry.find('.network__sending, .network__receiving').css({ 204 | 'width': linkedWidth, 205 | 'height': linkedWidth 206 | }) 207 | }) 208 | } 209 | 210 | deselect() { 211 | this.$entries.off('mouseenter') 212 | this.$entries.off('mouseleave') 213 | this.$entries.off('click.select') 214 | this.$entries.off('click.deselect') 215 | 216 | $('.network__entry.hide').off('click.deselect') 217 | this.$active.removeClass('active') 218 | this.$entries.removeClass('hide linked active') 219 | this.$instructions.removeClass('hide') 220 | this.$key.removeClass('hide') 221 | 222 | this.$circles.each((index, element) => { 223 | const $circle = $(element) 224 | const $entry = $circle.parents('.network__entry') 225 | let circleWidth = this.entryWidth * Math.sqrt($entry.data('totalReceived') / this.maxTotal) 226 | if (state.selected_key === 'sending') { 227 | circleWidth = this.entryWidth * Math.sqrt($entry.data('totalSent') / this.maxTotal) 228 | } 229 | $circle.css({ 230 | 'width': circleWidth, 231 | 'height': circleWidth 232 | }) 233 | }) 234 | } 235 | 236 | switchKey(e) { 237 | var target_key = e.currentTarget.className.indexOf("receiving") > 0 ? "receiving" : "sending"; 238 | if (target_key != state.selected_key) { 239 | state.selected_key = target_key; 240 | this.switchMode(); 241 | } 242 | } 243 | 244 | resize() { 245 | this.entryWidth = this.$entries.first().outerWidth() 246 | this.entryHeight = this.$entries.first().outerHeight() 247 | 248 | this.width = layout.getPrimaryWidth() 249 | this.height = this.$container.outerHeight() 250 | 251 | const $activeCountry = $('.network__entry.active') 252 | let receivingIds = null 253 | let receivingValues = null 254 | if ($activeCountry.length > 0) { 255 | receivingIds = $('.network__entry.active').data('receiving').toString().split(',') 256 | receivingValues = $('.network__entry.active').data('receivingValues').toString().split(',') 257 | } 258 | 259 | $('.network__sending').each((index, element) => { 260 | const $circle = $(element) 261 | const $entry = $circle.parents('.network__entry') 262 | if ($entry.hasClass('linked')) { 263 | const rIndex = receivingIds.indexOf($entry.data('id')) 264 | const receivingWidth = this.entryWidth * Math.sqrt(receivingValues[rIndex] / this.maxTotal) 265 | $entry.find('.network__sending, .network__receiving').css({ 266 | 'width': receivingWidth, 267 | 'height': receivingWidth 268 | }) 269 | } else if (!$entry.hasClass('hide')) { 270 | const sendingWidth = this.entryWidth * Math.sqrt($entry.data('totalSent') / this.maxTotal) 271 | $entry.find('.network__sending, .network__receiving').css({ 272 | 'width': sendingWidth, 273 | 'height': sendingWidth 274 | }) 275 | } 276 | }) 277 | } 278 | 279 | switchMode() { 280 | this.updateCircles(); 281 | update(); 282 | } 283 | 284 | updateCircles() { 285 | this.$circles 286 | .removeClass(state.selected_key == 'sending' ? 'network__receiving' : 'network__sending') 287 | .addClass(state.selected_key == 'sending' ? 'network__sending' : 'network__receiving'); 288 | 289 | this.$circles.each((index, element) => { 290 | const $circle = $(element) 291 | const $entry = $circle.parents('.network__entry') 292 | const circleWidth = this.entryWidth * Math.sqrt($entry.data(state.selected_key == 'receiving' ? 'totalReceived' : 'totalSent') / this.maxTotal) 293 | $circle.css({ 294 | 'width': circleWidth, 295 | 'height': circleWidth 296 | }) 297 | }) 298 | } 299 | } 300 | 301 | export default Network 302 | -------------------------------------------------------------------------------- /data/Bubbles.csv: -------------------------------------------------------------------------------- 1 | from,to,total 2 | Algeria,United States,2 3 | Andorra,United Kingdom,2 4 | Andorra,Sweden,2 5 | Andorra,Spain,2 6 | Andorra,Slovenia,2 7 | Andorra,Slovakia,2 8 | Andorra,Romania,2 9 | Andorra,Portugal,2 10 | Andorra,Poland,2 11 | Andorra,Netherlands,2 12 | Andorra,Malta,2 13 | Andorra,Luxembourg,2 14 | Andorra,Lithuania,2 15 | Andorra,Latvia,2 16 | Andorra,Italy,2 17 | Andorra,Ireland,2 18 | Andorra,Hungary,2 19 | Andorra,Greece,2 20 | Andorra,Gibraltar,2 21 | Andorra,Germany,2 22 | Andorra,France,2 23 | Andorra,Finland,2 24 | Andorra,Estonia,2 25 | Andorra,Denmark,2 26 | Andorra,Czech Republic,2 27 | Andorra,Cyprus,2 28 | Andorra,Croatia,2 29 | Andorra,Bulgaria,2 30 | Andorra,Belgium,2 31 | Andorra,Austria,2 32 | Angola,United States,2 33 | Anguilla,United States,2 34 | Anguilla,United Kingdom,11 35 | Anguilla,Sweden,7 36 | Anguilla,Spain,7 37 | Anguilla,Slovenia,7 38 | Anguilla,Slovakia,7 39 | Anguilla,Romania,7 40 | Anguilla,Portugal,7 41 | Anguilla,Poland,7 42 | Anguilla,Netherlands,7 43 | Anguilla,Malta,7 44 | Anguilla,Luxembourg,7 45 | Anguilla,Lithuania,7 46 | Anguilla,Latvia,7 47 | Anguilla,Italy,7 48 | Anguilla,Ireland,7 49 | Anguilla,Hungary,7 50 | Anguilla,Greece,7 51 | Anguilla,Gibraltar,7 52 | Anguilla,Germany,7 53 | Anguilla,France,7 54 | Anguilla,Finland,7 55 | Anguilla,Estonia,7 56 | Anguilla,Denmark,7 57 | Anguilla,Czech Republic,7 58 | Anguilla,Cyprus,7 59 | Anguilla,Croatia,3 60 | Anguilla,Bulgaria,7 61 | Anguilla,Belgium,7 62 | Anguilla,Austria,7 63 | Antigua and Barbuda,United States,2 64 | Argentina,United Kingdom,2 65 | Argentina,Sweden,2 66 | Argentina,Spain,2 67 | Argentina,South Africa,2 68 | Argentina,Slovenia,2 69 | Argentina,Seychelles,2 70 | Argentina,Romania,2 71 | Argentina,Norway,2 72 | Argentina,Netherlands,2 73 | Argentina,Mexico,2 74 | Argentina,Malta,2 75 | Argentina,Luxembourg,2 76 | Argentina,Lithuania,2 77 | Argentina,Latvia,2 78 | Argentina,"Korea, Republic of",2 79 | Argentina,Jersey,2 80 | Argentina,Italy,2 81 | Argentina,Isle of Man,2 82 | Argentina,Ireland,2 83 | Argentina,India,2 84 | Argentina,Iceland,2 85 | Argentina,Hungary,2 86 | Argentina,Guernsey,2 87 | Argentina,Gibraltar,2 88 | Argentina,Germany,2 89 | Argentina,France,2 90 | Argentina,Finland,2 91 | Argentina,Faroe Islands,2 92 | Argentina,Estonia,2 93 | Argentina,Denmark,2 94 | Argentina,Czech Republic,2 95 | Argentina,Bulgaria,2 96 | Argentina,Belgium,2 97 | Armenia,United States,2 98 | Aruba,United Kingdom,7 99 | Aruba,Sweden,7 100 | Aruba,Spain,7 101 | Aruba,Slovenia,7 102 | Aruba,Slovakia,7 103 | Aruba,Romania,7 104 | Aruba,Portugal,7 105 | Aruba,Poland,7 106 | Aruba,Netherlands,7 107 | Aruba,Malta,7 108 | Aruba,Luxembourg,7 109 | Aruba,Lithuania,7 110 | Aruba,Latvia,7 111 | Aruba,Italy,7 112 | Aruba,Ireland,7 113 | Aruba,Hungary,7 114 | Aruba,Greece,7 115 | Aruba,Gibraltar,7 116 | Aruba,Germany,7 117 | Aruba,France,7 118 | Aruba,Finland,7 119 | Aruba,Estonia,7 120 | Aruba,Denmark,7 121 | Aruba,Czech Republic,7 122 | Aruba,Cyprus,7 123 | Aruba,Croatia,3 124 | Aruba,Bulgaria,7 125 | Aruba,Belgium,7 126 | Aruba,Austria,7 127 | Australia,United States,4 128 | Austria,United States,4 129 | Austria,United Kingdom,1 130 | Austria,Switzerland,1 131 | Austria,Sweden,1 132 | Austria,Spain,1 133 | Austria,Slovenia,1 134 | Austria,Slovakia,1 135 | Austria,San Marino,1 136 | Austria,Romania,1 137 | Austria,Portugal,1 138 | Austria,Poland,1 139 | Austria,Netherlands,1 140 | Austria,Monaco,1 141 | Austria,Malta,1 142 | Austria,Luxembourg,1 143 | Austria,Lithuania,1 144 | Austria,Liechtenstein,1 145 | Austria,Latvia,1 146 | Austria,Italy,1 147 | Austria,Ireland,1 148 | Austria,Hungary,1 149 | Austria,Greece,1 150 | Austria,Gibraltar,1 151 | Austria,Germany,1 152 | Austria,France,1 153 | Austria,Finland,1 154 | Austria,Estonia,1 155 | Austria,Denmark,1 156 | Austria,Czech Republic,1 157 | Austria,Cyprus,1 158 | Austria,Croatia,1 159 | Austria,Bulgaria,1 160 | Austria,Belgium,1 161 | Austria,Andorra,1 162 | Azerbaijan,United States,3 163 | Bahamas,United States,3 164 | Bahrain,United States,2 165 | Barbados,United States,3 166 | Belarus,United States,3 167 | Belgium,"Virgin Islands, British",7 168 | Belgium,United States,2 169 | Belgium,United Kingdom,9 170 | Belgium,Switzerland,2 171 | Belgium,Sweden,9 172 | Belgium,Spain,9 173 | Belgium,South Africa,2 174 | Belgium,Slovenia,9 175 | Belgium,Slovakia,9 176 | Belgium,Seychelles,2 177 | Belgium,San Marino,2 178 | Belgium,Romania,9 179 | Belgium,Portugal,9 180 | Belgium,Poland,9 181 | Belgium,Norway,2 182 | Belgium,Netherlands,9 183 | Belgium,Montserrat,7 184 | Belgium,Monaco,2 185 | Belgium,Mexico,2 186 | Belgium,Malta,9 187 | Belgium,Luxembourg,9 188 | Belgium,Lithuania,9 189 | Belgium,Liechtenstein,2 190 | Belgium,Latvia,9 191 | Belgium,"Korea, Republic of",2 192 | Belgium,Jersey,9 193 | Belgium,Italy,9 194 | Belgium,Isle of Man,9 195 | Belgium,Ireland,9 196 | Belgium,India,2 197 | Belgium,Iceland,2 198 | Belgium,Hungary,9 199 | Belgium,Guernsey,9 200 | Belgium,Greece,9 201 | Belgium,Gibraltar,9 202 | Belgium,Germany,9 203 | Belgium,France,9 204 | Belgium,Finland,9 205 | Belgium,Faroe Islands,2 206 | Belgium,Estonia,9 207 | Belgium,Denmark,9 208 | Belgium,Czech Republic,9 209 | Belgium,Cyprus,9 210 | Belgium,Curacao,7 211 | Belgium,Croatia,5 212 | Belgium,Bulgaria,9 213 | Belgium,"Bonaire, Sint Eustatius and Saba",2 214 | Belgium,Belgium,2 215 | Belgium,Austria,7 216 | Belgium,Aruba,7 217 | Belgium,Argentina,2 218 | Belgium,Andorra,2 219 | Bermuda,United States,4 220 | Bermuda,United Kingdom,2 221 | Bermuda,Sweden,2 222 | Bermuda,Spain,2 223 | Bermuda,South Africa,2 224 | Bermuda,Slovenia,2 225 | Bermuda,Slovakia,2 226 | Bermuda,Seychelles,2 227 | Bermuda,San Marino,2 228 | Bermuda,Romania,2 229 | Bermuda,Norway,2 230 | Bermuda,Netherlands,2 231 | Bermuda,Mexico,2 232 | Bermuda,Malta,2 233 | Bermuda,Luxembourg,2 234 | Bermuda,Lithuania,2 235 | Bermuda,Latvia,2 236 | Bermuda,"Korea, Republic of",2 237 | Bermuda,Italy,2 238 | Bermuda,Ireland,2 239 | Bermuda,India,2 240 | Bermuda,Iceland,2 241 | Bermuda,Hungary,2 242 | Bermuda,Germany,2 243 | Bermuda,France,2 244 | Bermuda,Finland,2 245 | Bermuda,Faroe Islands,2 246 | Bermuda,Estonia,2 247 | Bermuda,Denmark,2 248 | Bermuda,Czech Republic,2 249 | Bermuda,Bulgaria,1 250 | Bermuda,Belgium,2 251 | Bermuda,Argentina,2 252 | "Bonaire, Sint Eustatius and Saba",United Kingdom,2 253 | "Bonaire, Sint Eustatius and Saba",Spain,2 254 | "Bonaire, Sint Eustatius and Saba",Slovenia,2 255 | "Bonaire, Sint Eustatius and Saba",Luxembourg,2 256 | "Bonaire, Sint Eustatius and Saba",Ireland,2 257 | "Bonaire, Sint Eustatius and Saba",France,2 258 | "Bonaire, Sint Eustatius and Saba",Estonia,2 259 | "Bonaire, Sint Eustatius and Saba",Denmark,2 260 | "Bonaire, Sint Eustatius and Saba",Czech Republic,2 261 | "Bonaire, Sint Eustatius and Saba",Belgium,2 262 | Brazil,United States,3 263 | Bulgaria,"Virgin Islands, British",7 264 | Bulgaria,United States,3 265 | Bulgaria,United Kingdom,9 266 | Bulgaria,Switzerland,2 267 | Bulgaria,Sweden,9 268 | Bulgaria,Spain,9 269 | Bulgaria,South Africa,1 270 | Bulgaria,Slovenia,9 271 | Bulgaria,Slovakia,9 272 | Bulgaria,Seychelles,1 273 | Bulgaria,San Marino,2 274 | Bulgaria,Romania,9 275 | Bulgaria,Portugal,9 276 | Bulgaria,Poland,9 277 | Bulgaria,Norway,1 278 | Bulgaria,Netherlands,9 279 | Bulgaria,Montserrat,7 280 | Bulgaria,Monaco,2 281 | Bulgaria,Mexico,1 282 | Bulgaria,Malta,9 283 | Bulgaria,Luxembourg,9 284 | Bulgaria,Lithuania,9 285 | Bulgaria,Liechtenstein,2 286 | Bulgaria,Latvia,9 287 | Bulgaria,"Korea, Republic of",1 288 | Bulgaria,Jersey,8 289 | Bulgaria,Italy,9 290 | Bulgaria,Isle of Man,8 291 | Bulgaria,Ireland,9 292 | Bulgaria,India,1 293 | Bulgaria,Iceland,1 294 | Bulgaria,Hungary,9 295 | Bulgaria,Guernsey,8 296 | Bulgaria,Greece,9 297 | Bulgaria,Gibraltar,9 298 | Bulgaria,Germany,9 299 | Bulgaria,France,9 300 | Bulgaria,Finland,9 301 | Bulgaria,Faroe Islands,1 302 | Bulgaria,Estonia,9 303 | Bulgaria,Denmark,9 304 | Bulgaria,Czech Republic,9 305 | Bulgaria,Cyprus,9 306 | Bulgaria,Curacao,7 307 | Bulgaria,Croatia,5 308 | Bulgaria,Belgium,9 309 | Bulgaria,Austria,9 310 | Bulgaria,Aruba,7 311 | Bulgaria,Argentina,1 312 | Bulgaria,Andorra,2 313 | Cambodia,United States,2 314 | Canada,United States,4 315 | Cape Verde,United States,2 316 | Cayman Islands,United States,4 317 | Cayman Islands,United Kingdom,9 318 | Cayman Islands,Sweden,9 319 | Cayman Islands,Spain,9 320 | Cayman Islands,South Africa,2 321 | Cayman Islands,Slovenia,9 322 | Cayman Islands,Slovakia,9 323 | Cayman Islands,Seychelles,2 324 | Cayman Islands,San Marino,2 325 | Cayman Islands,Romania,9 326 | Cayman Islands,Portugal,7 327 | Cayman Islands,Poland,7 328 | Cayman Islands,Norway,2 329 | Cayman Islands,Netherlands,9 330 | Cayman Islands,Mexico,2 331 | Cayman Islands,Malta,9 332 | Cayman Islands,Luxembourg,9 333 | Cayman Islands,Lithuania,9 334 | Cayman Islands,Latvia,9 335 | Cayman Islands,"Korea, Republic of",2 336 | Cayman Islands,Italy,9 337 | Cayman Islands,Ireland,9 338 | Cayman Islands,India,2 339 | Cayman Islands,Iceland,2 340 | Cayman Islands,Hungary,9 341 | Cayman Islands,Greece,7 342 | Cayman Islands,Gibraltar,7 343 | Cayman Islands,Germany,9 344 | Cayman Islands,France,9 345 | Cayman Islands,Finland,9 346 | Cayman Islands,Faroe Islands,2 347 | Cayman Islands,Estonia,9 348 | Cayman Islands,Denmark,9 349 | Cayman Islands,Czech Republic,9 350 | Cayman Islands,Cyprus,7 351 | Cayman Islands,Croatia,3 352 | Cayman Islands,Bulgaria,8 353 | Cayman Islands,Belgium,9 354 | Cayman Islands,Austria,7 355 | Cayman Islands,Argentina,2 356 | Chile,United States,2 357 | China,United States,2 358 | Colombia,United States,3 359 | Costa Rica,United States,2 360 | Croatia,"Virgin Islands, British",3 361 | Croatia,United States,2 362 | Croatia,United Kingdom,5 363 | Croatia,Switzerland,2 364 | Croatia,Sweden,5 365 | Croatia,Spain,5 366 | Croatia,Slovenia,5 367 | Croatia,Slovakia,5 368 | Croatia,San Marino,2 369 | Croatia,Romania,5 370 | Croatia,Portugal,5 371 | Croatia,Poland,5 372 | Croatia,Netherlands,5 373 | Croatia,Montserrat,3 374 | Croatia,Monaco,2 375 | Croatia,Malta,5 376 | Croatia,Luxembourg,5 377 | Croatia,Lithuania,5 378 | Croatia,Liechtenstein,2 379 | Croatia,Latvia,5 380 | Croatia,Jersey,3 381 | Croatia,Italy,5 382 | Croatia,Isle of Man,3 383 | Croatia,Ireland,5 384 | Croatia,Hungary,5 385 | Croatia,Guernsey,3 386 | Croatia,Greece,5 387 | Croatia,Gibraltar,5 388 | Croatia,Germany,5 389 | Croatia,France,5 390 | Croatia,Finland,5 391 | Croatia,Estonia,5 392 | Croatia,Denmark,5 393 | Croatia,Czech Republic,5 394 | Croatia,Cyprus,5 395 | Croatia,Curacao,3 396 | Croatia,Bulgaria,5 397 | Croatia,Belgium,5 398 | Croatia,Austria,5 399 | Croatia,Aruba,3 400 | Croatia,Andorra,2 401 | Curacao,United States,2 402 | Cyprus,"Virgin Islands, British",7 403 | Cyprus,United States,3 404 | Cyprus,United Kingdom,9 405 | Cyprus,Switzerland,2 406 | Cyprus,Sweden,9 407 | Cyprus,Spain,9 408 | Cyprus,Slovenia,9 409 | Cyprus,Slovakia,9 410 | Cyprus,San Marino,2 411 | Cyprus,Romania,9 412 | Cyprus,Portugal,9 413 | Cyprus,Poland,9 414 | Cyprus,Netherlands,9 415 | Cyprus,Montserrat,7 416 | Cyprus,Monaco,2 417 | Cyprus,Malta,9 418 | Cyprus,Luxembourg,9 419 | Cyprus,Lithuania,9 420 | Cyprus,Liechtenstein,2 421 | Cyprus,Latvia,9 422 | Cyprus,Jersey,7 423 | Cyprus,Italy,9 424 | Cyprus,Isle of Man,7 425 | Cyprus,Ireland,9 426 | Cyprus,Hungary,9 427 | Cyprus,Guernsey,7 428 | Cyprus,Greece,9 429 | Cyprus,Gibraltar,9 430 | Cyprus,Germany,9 431 | Cyprus,France,9 432 | Cyprus,Finland,9 433 | Cyprus,Estonia,9 434 | Cyprus,Denmark,9 435 | Cyprus,Czech Republic,9 436 | Cyprus,Curacao,7 437 | Cyprus,Croatia,5 438 | Cyprus,Bulgaria,9 439 | Cyprus,Belgium,9 440 | Cyprus,Austria,9 441 | Cyprus,Aruba,7 442 | Cyprus,Andorra,2 443 | Czech Republic,"Virgin Islands, British",7 444 | Czech Republic,United States,4 445 | Czech Republic,United Kingdom,9 446 | Czech Republic,Switzerland,2 447 | Czech Republic,Sweden,9 448 | Czech Republic,Spain,9 449 | Czech Republic,South Africa,2 450 | Czech Republic,Slovenia,9 451 | Czech Republic,Slovakia,9 452 | Czech Republic,Seychelles,2 453 | Czech Republic,San Marino,2 454 | Czech Republic,Romania,9 455 | Czech Republic,Portugal,9 456 | Czech Republic,Poland,9 457 | Czech Republic,Norway,2 458 | Czech Republic,Netherlands,9 459 | Czech Republic,Montserrat,7 460 | Czech Republic,Monaco,2 461 | Czech Republic,Mexico,2 462 | Czech Republic,Malta,9 463 | Czech Republic,Luxembourg,9 464 | Czech Republic,Lithuania,9 465 | Czech Republic,Liechtenstein,2 466 | Czech Republic,Latvia,9 467 | Czech Republic,"Korea, Republic of",2 468 | Czech Republic,Jersey,9 469 | Czech Republic,Italy,9 470 | Czech Republic,Isle of Man,9 471 | Czech Republic,Ireland,9 472 | Czech Republic,India,2 473 | Czech Republic,Iceland,2 474 | Czech Republic,Hungary,9 475 | Czech Republic,Guernsey,9 476 | Czech Republic,Greece,9 477 | Czech Republic,Gibraltar,9 478 | Czech Republic,Germany,9 479 | Czech Republic,France,9 480 | Czech Republic,Finland,9 481 | Czech Republic,Faroe Islands,2 482 | Czech Republic,Estonia,9 483 | Czech Republic,Denmark,9 484 | Czech Republic,Cyprus,9 485 | Czech Republic,Curacao,7 486 | Czech Republic,Croatia,5 487 | Czech Republic,Bulgaria,9 488 | Czech Republic,"Bonaire, Sint Eustatius and Saba",2 489 | Czech Republic,Belgium,9 490 | Czech Republic,Austria,9 491 | Czech Republic,Aruba,7 492 | Czech Republic,Argentina,2 493 | Czech Republic,Andorra,2 494 | Denmark,"Virgin Islands, British",7 495 | Denmark,United States,3 496 | Denmark,United Kingdom,9 497 | Denmark,Switzerland,2 498 | Denmark,Sweden,9 499 | Denmark,Spain,9 500 | Denmark,South Africa,2 501 | Denmark,Slovenia,9 502 | Denmark,Slovakia,9 503 | Denmark,Seychelles,2 504 | Denmark,San Marino,2 505 | Denmark,Romania,9 506 | Denmark,Portugal,9 507 | Denmark,Poland,9 508 | Denmark,Norway,2 509 | Denmark,Netherlands,9 510 | Denmark,Montserrat,7 511 | Denmark,Monaco,2 512 | Denmark,Mexico,2 513 | Denmark,Malta,9 514 | Denmark,Luxembourg,9 515 | Denmark,Lithuania,9 516 | Denmark,Liechtenstein,2 517 | Denmark,Latvia,9 518 | Denmark,"Korea, Republic of",2 519 | Denmark,Jersey,9 520 | Denmark,Italy,9 521 | Denmark,Isle of Man,9 522 | Denmark,Ireland,9 523 | Denmark,India,2 524 | Denmark,Iceland,2 525 | Denmark,Hungary,9 526 | Denmark,Guernsey,9 527 | Denmark,Greece,9 528 | Denmark,Gibraltar,9 529 | Denmark,Germany,9 530 | Denmark,France,9 531 | Denmark,Finland,9 532 | Denmark,Faroe Islands,2 533 | Denmark,Estonia,9 534 | Denmark,Czech Republic,9 535 | Denmark,Cyprus,9 536 | Denmark,Curacao,7 537 | Denmark,Croatia,5 538 | Denmark,Bulgaria,9 539 | Denmark,"Bonaire, Sint Eustatius and Saba",2 540 | Denmark,Belgium,9 541 | Denmark,Austria,9 542 | Denmark,Aruba,7 543 | Denmark,Argentina,2 544 | Denmark,Andorra,2 545 | Dominica,United States,2 546 | Dominican Republic,United States,2 547 | Estonia,"Virgin Islands, British",7 548 | Estonia,United States,4 549 | Estonia,United Kingdom,9 550 | Estonia,Switzerland,2 551 | Estonia,Sweden,9 552 | Estonia,Spain,9 553 | Estonia,South Africa,2 554 | Estonia,Slovenia,9 555 | Estonia,Slovakia,9 556 | Estonia,Seychelles,2 557 | Estonia,San Marino,2 558 | Estonia,Romania,9 559 | Estonia,Portugal,9 560 | Estonia,Poland,9 561 | Estonia,Norway,2 562 | Estonia,Netherlands,9 563 | Estonia,Montserrat,7 564 | Estonia,Monaco,2 565 | Estonia,Mexico,2 566 | Estonia,Malta,9 567 | Estonia,Luxembourg,9 568 | Estonia,Lithuania,9 569 | Estonia,Liechtenstein,2 570 | Estonia,Latvia,9 571 | Estonia,"Korea, Republic of",2 572 | Estonia,Jersey,9 573 | Estonia,Italy,9 574 | Estonia,Isle of Man,9 575 | Estonia,Ireland,9 576 | Estonia,India,2 577 | Estonia,Iceland,2 578 | Estonia,Hungary,9 579 | Estonia,Guernsey,9 580 | Estonia,Greece,9 581 | Estonia,Gibraltar,9 582 | Estonia,Germany,9 583 | Estonia,France,9 584 | Estonia,Finland,9 585 | Estonia,Faroe Islands,2 586 | Estonia,Denmark,9 587 | Estonia,Czech Republic,9 588 | Estonia,Cyprus,9 589 | Estonia,Curacao,7 590 | Estonia,Croatia,5 591 | Estonia,Bulgaria,9 592 | Estonia,"Bonaire, Sint Eustatius and Saba",2 593 | Estonia,Belgium,9 594 | Estonia,Austria,9 595 | Estonia,Aruba,7 596 | Estonia,Argentina,2 597 | Estonia,Andorra,2 598 | Faroe Islands,United Kingdom,2 599 | Faroe Islands,Sweden,2 600 | Faroe Islands,Spain,2 601 | Faroe Islands,South Africa,2 602 | Faroe Islands,Slovenia,2 603 | Faroe Islands,Slovakia,2 604 | Faroe Islands,San Marino,2 605 | Faroe Islands,Romania,2 606 | Faroe Islands,Norway,2 607 | Faroe Islands,Netherlands,2 608 | Faroe Islands,Mexico,2 609 | Faroe Islands,Malta,2 610 | Faroe Islands,Luxembourg,2 611 | Faroe Islands,Lithuania,2 612 | Faroe Islands,Latvia,2 613 | Faroe Islands,"Korea, Republic of",2 614 | Faroe Islands,Jersey,2 615 | Faroe Islands,Italy,2 616 | Faroe Islands,Isle of Man,2 617 | Faroe Islands,Ireland,2 618 | Faroe Islands,India,2 619 | Faroe Islands,Iceland,2 620 | Faroe Islands,Hungary,2 621 | Faroe Islands,Guernsey,2 622 | Faroe Islands,Gibraltar,2 623 | Faroe Islands,Germany,2 624 | Faroe Islands,France,2 625 | Faroe Islands,Finland,2 626 | Faroe Islands,Estonia,2 627 | Faroe Islands,Denmark,2 628 | Faroe Islands,Czech Republic,2 629 | Faroe Islands,Bulgaria,1 630 | Faroe Islands,Belgium,2 631 | Faroe Islands,Argentina,2 632 | Finland,"Virgin Islands, British",7 633 | Finland,United States,3 634 | Finland,United Kingdom,9 635 | Finland,Switzerland,2 636 | Finland,Sweden,9 637 | Finland,Spain,9 638 | Finland,South Africa,2 639 | Finland,Slovenia,9 640 | Finland,Slovakia,9 641 | Finland,Seychelles,2 642 | Finland,San Marino,2 643 | Finland,Romania,9 644 | Finland,Portugal,9 645 | Finland,Poland,9 646 | Finland,Norway,2 647 | Finland,Netherlands,9 648 | Finland,Montserrat,7 649 | Finland,Monaco,2 650 | Finland,Mexico,2 651 | Finland,Malta,9 652 | Finland,Luxembourg,9 653 | Finland,Lithuania,9 654 | Finland,Liechtenstein,2 655 | Finland,Latvia,9 656 | Finland,"Korea, Republic of",2 657 | Finland,Jersey,9 658 | Finland,Italy,9 659 | Finland,Isle of Man,9 660 | Finland,Ireland,9 661 | Finland,India,2 662 | Finland,Iceland,2 663 | Finland,Hungary,9 664 | Finland,Guernsey,9 665 | Finland,Greece,9 666 | Finland,Gibraltar,9 667 | Finland,Germany,9 668 | Finland,France,9 669 | Finland,Faroe Islands,2 670 | Finland,Estonia,9 671 | Finland,Denmark,9 672 | Finland,Czech Republic,9 673 | Finland,Cyprus,9 674 | Finland,Curacao,7 675 | Finland,Croatia,5 676 | Finland,Bulgaria,9 677 | Finland,Belgium,9 678 | Finland,Austria,9 679 | Finland,Aruba,7 680 | Finland,Argentina,2 681 | Finland,Andorra,2 682 | France,"Virgin Islands, British",7 683 | France,United States,4 684 | France,United Kingdom,9 685 | France,Switzerland,2 686 | France,Sweden,9 687 | France,Spain,9 688 | France,South Africa,2 689 | France,Slovenia,9 690 | France,Slovakia,9 691 | France,Seychelles,2 692 | France,San Marino,2 693 | France,Romania,9 694 | France,Portugal,9 695 | France,Poland,9 696 | France,Norway,2 697 | France,Netherlands,9 698 | France,Montserrat,7 699 | France,Monaco,2 700 | France,Mexico,2 701 | France,Malta,9 702 | France,Luxembourg,9 703 | France,Lithuania,9 704 | France,Liechtenstein,2 705 | France,Latvia,9 706 | France,"Korea, Republic of",2 707 | France,Jersey,9 708 | France,Italy,9 709 | France,Isle of Man,9 710 | France,Ireland,9 711 | France,India,2 712 | France,Iceland,2 713 | France,Hungary,9 714 | France,Guernsey,9 715 | France,Greece,9 716 | France,Gibraltar,9 717 | France,Germany,9 718 | France,Finland,9 719 | France,Faroe Islands,2 720 | France,Estonia,9 721 | France,Denmark,9 722 | France,Czech Republic,9 723 | France,Cyprus,9 724 | France,Curacao,7 725 | France,Croatia,5 726 | France,Bulgaria,9 727 | France,"Bonaire, Sint Eustatius and Saba",2 728 | France,Belgium,9 729 | France,Austria,9 730 | France,Aruba,7 731 | France,Argentina,2 732 | France,Andorra,2 733 | Georgia,United States,3 734 | Germany,"Virgin Islands, British",7 735 | Germany,United States,5 736 | Germany,United Kingdom,9 737 | Germany,Switzerland,2 738 | Germany,Sweden,9 739 | Germany,Spain,9 740 | Germany,South Africa,2 741 | Germany,Slovenia,9 742 | Germany,Slovakia,9 743 | Germany,Seychelles,2 744 | Germany,San Marino,2 745 | Germany,Romania,9 746 | Germany,Portugal,9 747 | Germany,Poland,9 748 | Germany,Norway,2 749 | Germany,Netherlands,9 750 | Germany,Montserrat,7 751 | Germany,Monaco,2 752 | Germany,Mexico,2 753 | Germany,Malta,9 754 | Germany,Luxembourg,9 755 | Germany,Lithuania,9 756 | Germany,Liechtenstein,2 757 | Germany,Latvia,9 758 | Germany,"Korea, Republic of",2 759 | Germany,Jersey,9 760 | Germany,Italy,9 761 | Germany,Isle of Man,9 762 | Germany,Ireland,9 763 | Germany,India,2 764 | Germany,Iceland,2 765 | Germany,Hungary,9 766 | Germany,Guernsey,9 767 | Germany,Greece,9 768 | Germany,Gibraltar,9 769 | Germany,France,9 770 | Germany,Finland,9 771 | Germany,Faroe Islands,2 772 | Germany,Estonia,9 773 | Germany,Denmark,9 774 | Germany,Czech Republic,9 775 | Germany,Cyprus,9 776 | Germany,Curacao,7 777 | Germany,Croatia,5 778 | Germany,Bulgaria,9 779 | Germany,Belgium,9 780 | Germany,Austria,9 781 | Germany,Aruba,7 782 | Germany,Argentina,2 783 | Germany,Andorra,2 784 | Gibraltar,United States,3 785 | Gibraltar,United Kingdom,6 786 | Gibraltar,Switzerland,2 787 | Gibraltar,Sweden,9 788 | Gibraltar,Spain,9 789 | Gibraltar,South Africa,2 790 | Gibraltar,Slovenia,9 791 | Gibraltar,Slovakia,9 792 | Gibraltar,Seychelles,2 793 | Gibraltar,San Marino,2 794 | Gibraltar,Romania,9 795 | Gibraltar,Portugal,9 796 | Gibraltar,Poland,9 797 | Gibraltar,Norway,2 798 | Gibraltar,Netherlands,9 799 | Gibraltar,Monaco,2 800 | Gibraltar,Mexico,2 801 | Gibraltar,Malta,9 802 | Gibraltar,Luxembourg,9 803 | Gibraltar,Lithuania,9 804 | Gibraltar,Liechtenstein,2 805 | Gibraltar,Latvia,9 806 | Gibraltar,"Korea, Republic of",2 807 | Gibraltar,Italy,9 808 | Gibraltar,Ireland,9 809 | Gibraltar,India,2 810 | Gibraltar,Iceland,2 811 | Gibraltar,Hungary,9 812 | Gibraltar,Greece,9 813 | Gibraltar,Germany,9 814 | Gibraltar,France,9 815 | Gibraltar,Finland,9 816 | Gibraltar,Faroe Islands,2 817 | Gibraltar,Estonia,9 818 | Gibraltar,Denmark,9 819 | Gibraltar,Czech Republic,9 820 | Gibraltar,Cyprus,9 821 | Gibraltar,Croatia,5 822 | Gibraltar,Bulgaria,9 823 | Gibraltar,Belgium,9 824 | Gibraltar,Austria,9 825 | Gibraltar,Argentina,2 826 | Gibraltar,Andorra,2 827 | Greece,"Virgin Islands, British",7 828 | Greece,United States,2 829 | Greece,United Kingdom,9 830 | Greece,Switzerland,2 831 | Greece,Sweden,9 832 | Greece,Spain,9 833 | Greece,Slovenia,9 834 | Greece,Slovakia,9 835 | Greece,San Marino,2 836 | Greece,Romania,9 837 | Greece,Portugal,9 838 | Greece,Poland,9 839 | Greece,Netherlands,9 840 | Greece,Montserrat,7 841 | Greece,Monaco,2 842 | Greece,Malta,9 843 | Greece,Luxembourg,9 844 | Greece,Lithuania,9 845 | Greece,Liechtenstein,2 846 | Greece,Latvia,9 847 | Greece,Jersey,7 848 | Greece,Italy,9 849 | Greece,Isle of Man,7 850 | Greece,Ireland,9 851 | Greece,Hungary,9 852 | Greece,Guernsey,7 853 | Greece,Gibraltar,9 854 | Greece,Germany,9 855 | Greece,France,9 856 | Greece,Finland,9 857 | Greece,Estonia,9 858 | Greece,Denmark,9 859 | Greece,Czech Republic,9 860 | Greece,Cyprus,9 861 | Greece,Curacao,7 862 | Greece,Croatia,5 863 | Greece,Bulgaria,9 864 | Greece,Belgium,9 865 | Greece,Austria,9 866 | Greece,Aruba,7 867 | Greece,Andorra,2 868 | Greenland,United States,2 869 | Greenland,United Kingdom,2 870 | Greenland,Sweden,2 871 | Greenland,Spain,2 872 | Greenland,Slovenia,2 873 | Greenland,Norway,2 874 | Greenland,Netherlands,2 875 | Greenland,Mexico,2 876 | Greenland,Malta,2 877 | Greenland,Luxembourg,2 878 | Greenland,Latvia,2 879 | Greenland,Jersey,2 880 | Greenland,Italy,2 881 | Greenland,Isle of Man,2 882 | Greenland,Ireland,2 883 | Greenland,India,2 884 | Greenland,Iceland,2 885 | Greenland,Guernsey,2 886 | Greenland,Gibraltar,2 887 | Greenland,Germany,2 888 | Greenland,France,2 889 | Greenland,Finland,2 890 | Greenland,Faroe Islands,2 891 | Greenland,Estonia,2 892 | Greenland,Denmark,2 893 | Greenland,Bulgaria,1 894 | Greenland,Belgium,2 895 | Grenada,United States,2 896 | Guernsey,United States,3 897 | Guernsey,United Kingdom,9 898 | Guernsey,Sweden,7 899 | Guernsey,Spain,7 900 | Guernsey,South Africa,2 901 | Guernsey,Slovenia,7 902 | Guernsey,Slovakia,7 903 | Guernsey,Seychelles,2 904 | Guernsey,San Marino,2 905 | Guernsey,Romania,7 906 | Guernsey,Portugal,5 907 | Guernsey,Poland,5 908 | Guernsey,Norway,2 909 | Guernsey,Netherlands,7 910 | Guernsey,Mexico,2 911 | Guernsey,Malta,7 912 | Guernsey,Luxembourg,7 913 | Guernsey,Lithuania,7 914 | Guernsey,Latvia,7 915 | Guernsey,"Korea, Republic of",2 916 | Guernsey,Italy,7 917 | Guernsey,Ireland,7 918 | Guernsey,India,2 919 | Guernsey,Iceland,2 920 | Guernsey,Hungary,7 921 | Guernsey,Greece,5 922 | Guernsey,Gibraltar,5 923 | Guernsey,Germany,7 924 | Guernsey,France,7 925 | Guernsey,Finland,7 926 | Guernsey,Faroe Islands,2 927 | Guernsey,Estonia,7 928 | Guernsey,Denmark,7 929 | Guernsey,Czech Republic,7 930 | Guernsey,Cyprus,5 931 | Guernsey,Croatia,3 932 | Guernsey,Bulgaria,6 933 | Guernsey,Belgium,7 934 | Guernsey,Austria,5 935 | Guernsey,Argentina,2 936 | Guyana,United States,2 937 | Haiti,United States,2 938 | Holy See,United States,3 939 | Honduras,United States,3 940 | Hong Kong,United States,2 941 | Hungary,"Virgin Islands, British",7 942 | Hungary,United States,4 943 | Hungary,United Kingdom,9 944 | Hungary,Switzerland,2 945 | Hungary,Sweden,9 946 | Hungary,Spain,9 947 | Hungary,South Africa,4 948 | Hungary,Slovenia,9 949 | Hungary,Slovakia,9 950 | Hungary,Seychelles,4 951 | Hungary,San Marino,2 952 | Hungary,Romania,9 953 | Hungary,Portugal,9 954 | Hungary,Poland,9 955 | Hungary,Norway,4 956 | Hungary,Netherlands,9 957 | Hungary,Montserrat,7 958 | Hungary,Monaco,2 959 | Hungary,Mexico,4 960 | Hungary,Malta,9 961 | Hungary,Luxembourg,9 962 | Hungary,Lithuania,9 963 | Hungary,Liechtenstein,2 964 | Hungary,Latvia,9 965 | Hungary,"Korea, Republic of",4 966 | Hungary,Jersey,11 967 | Hungary,Italy,9 968 | Hungary,Isle of Man,11 969 | Hungary,Ireland,9 970 | Hungary,India,4 971 | Hungary,Iceland,4 972 | Hungary,Guernsey,11 973 | Hungary,Greece,9 974 | Hungary,Gibraltar,9 975 | Hungary,Germany,9 976 | Hungary,France,9 977 | Hungary,Finland,9 978 | Hungary,Faroe Islands,4 979 | Hungary,Estonia,9 980 | Hungary,Denmark,9 981 | Hungary,Czech Republic,9 982 | Hungary,Cyprus,9 983 | Hungary,Curacao,7 984 | Hungary,Croatia,5 985 | Hungary,Bulgaria,9 986 | Hungary,Belgium,9 987 | Hungary,Austria,9 988 | Hungary,Aruba,7 989 | Hungary,Argentina,4 990 | Hungary,Andorra,2 991 | Iceland,United States,3 992 | Iceland,United Kingdom,2 993 | Iceland,Sweden,2 994 | Iceland,Spain,2 995 | Iceland,South Africa,2 996 | Iceland,Slovenia,2 997 | Iceland,Slovakia,2 998 | Iceland,Seychelles,2 999 | Iceland,San Marino,2 1000 | Iceland,Romania,2 1001 | Iceland,Norway,2 1002 | Iceland,Netherlands,2 1003 | Iceland,Mexico,2 1004 | Iceland,Malta,2 1005 | Iceland,Luxembourg,2 1006 | Iceland,Lithuania,2 1007 | Iceland,Latvia,2 1008 | Iceland,"Korea, Republic of",2 1009 | Iceland,Jersey,2 1010 | Iceland,Italy,2 1011 | Iceland,Isle of Man,2 1012 | Iceland,Ireland,2 1013 | Iceland,India,2 1014 | Iceland,Hungary,2 1015 | Iceland,Guernsey,2 1016 | Iceland,Gibraltar,2 1017 | Iceland,Germany,2 1018 | Iceland,France,2 1019 | Iceland,Finland,2 1020 | Iceland,Faroe Islands,2 1021 | Iceland,Estonia,2 1022 | Iceland,Denmark,2 1023 | Iceland,Czech Republic,2 1024 | Iceland,Bulgaria,1 1025 | Iceland,Belgium,2 1026 | Iceland,Argentina,2 1027 | India,United States,3 1028 | India,United Kingdom,2 1029 | India,Sweden,2 1030 | India,Spain,2 1031 | India,South Africa,2 1032 | India,Slovenia,2 1033 | India,Seychelles,2 1034 | India,San Marino,2 1035 | India,Romania,2 1036 | India,Norway,2 1037 | India,Netherlands,2 1038 | India,Mexico,2 1039 | India,Malta,2 1040 | India,Luxembourg,2 1041 | India,Lithuania,2 1042 | India,Latvia,2 1043 | India,"Korea, Republic of",2 1044 | India,Jersey,2 1045 | India,Italy,2 1046 | India,Isle of Man,2 1047 | India,Ireland,2 1048 | India,Iceland,2 1049 | India,Hungary,2 1050 | India,Guernsey,2 1051 | India,Gibraltar,2 1052 | India,Germany,2 1053 | India,France,2 1054 | India,Finland,2 1055 | India,Faroe Islands,2 1056 | India,Estonia,2 1057 | India,Denmark,2 1058 | India,Czech Republic,2 1059 | India,Bulgaria,1 1060 | India,Belgium,2 1061 | India,Argentina,2 1062 | Indonesia,United States,2 1063 | Iraq,United States,2 1064 | Ireland,"Virgin Islands, British",7 1065 | Ireland,United States,4 1066 | Ireland,United Kingdom,9 1067 | Ireland,Switzerland,2 1068 | Ireland,Sweden,9 1069 | Ireland,Spain,9 1070 | Ireland,South Africa,2 1071 | Ireland,Slovenia,9 1072 | Ireland,Slovakia,9 1073 | Ireland,Seychelles,2 1074 | Ireland,San Marino,2 1075 | Ireland,Romania,9 1076 | Ireland,Portugal,9 1077 | Ireland,Poland,9 1078 | Ireland,Norway,2 1079 | Ireland,Netherlands,9 1080 | Ireland,Montserrat,7 1081 | Ireland,Monaco,2 1082 | Ireland,Mexico,2 1083 | Ireland,Malta,9 1084 | Ireland,Luxembourg,9 1085 | Ireland,Lithuania,9 1086 | Ireland,Liechtenstein,2 1087 | Ireland,Latvia,9 1088 | Ireland,"Korea, Republic of",2 1089 | Ireland,Jersey,9 1090 | Ireland,Italy,9 1091 | Ireland,Isle of Man,9 1092 | Ireland,India,2 1093 | Ireland,Iceland,2 1094 | Ireland,Hungary,9 1095 | Ireland,Guernsey,9 1096 | Ireland,Greece,9 1097 | Ireland,Gibraltar,9 1098 | Ireland,Germany,9 1099 | Ireland,France,9 1100 | Ireland,Finland,9 1101 | Ireland,Faroe Islands,2 1102 | Ireland,Estonia,9 1103 | Ireland,Denmark,9 1104 | Ireland,Czech Republic,9 1105 | Ireland,Cyprus,9 1106 | Ireland,Curacao,7 1107 | Ireland,Croatia,5 1108 | Ireland,Bulgaria,9 1109 | Ireland,"Bonaire, Sint Eustatius and Saba",2 1110 | Ireland,Belgium,9 1111 | Ireland,Austria,9 1112 | Ireland,Aruba,7 1113 | Ireland,Argentina,2 1114 | Ireland,Andorra,2 1115 | Isle of Man,United States,3 1116 | Isle of Man,United Kingdom,7 1117 | Isle of Man,Sweden,7 1118 | Isle of Man,Spain,7 1119 | Isle of Man,South Africa,2 1120 | Isle of Man,Slovenia,7 1121 | Isle of Man,Slovakia,7 1122 | Isle of Man,Seychelles,2 1123 | Isle of Man,San Marino,2 1124 | Isle of Man,Romania,7 1125 | Isle of Man,Portugal,5 1126 | Isle of Man,Poland,5 1127 | Isle of Man,Norway,2 1128 | Isle of Man,Netherlands,7 1129 | Isle of Man,Mexico,2 1130 | Isle of Man,Malta,7 1131 | Isle of Man,Luxembourg,7 1132 | Isle of Man,Lithuania,7 1133 | Isle of Man,Latvia,7 1134 | Isle of Man,"Korea, Republic of",2 1135 | Isle of Man,Italy,7 1136 | Isle of Man,Ireland,7 1137 | Isle of Man,India,2 1138 | Isle of Man,Iceland,2 1139 | Isle of Man,Hungary,7 1140 | Isle of Man,Greece,5 1141 | Isle of Man,Gibraltar,5 1142 | Isle of Man,Germany,7 1143 | Isle of Man,France,7 1144 | Isle of Man,Finland,7 1145 | Isle of Man,Faroe Islands,2 1146 | Isle of Man,Estonia,7 1147 | Isle of Man,Denmark,7 1148 | Isle of Man,Czech Republic,7 1149 | Isle of Man,Cyprus,5 1150 | Isle of Man,Croatia,3 1151 | Isle of Man,Bulgaria,6 1152 | Isle of Man,Belgium,7 1153 | Isle of Man,Austria,5 1154 | Isle of Man,Argentina,2 1155 | Israel,United States,2 1156 | Italy,"Virgin Islands, British",7 1157 | Italy,United States,3 1158 | Italy,United Kingdom,9 1159 | Italy,Switzerland,2 1160 | Italy,Sweden,9 1161 | Italy,Spain,9 1162 | Italy,South Africa,2 1163 | Italy,Slovenia,9 1164 | Italy,Slovakia,9 1165 | Italy,Seychelles,2 1166 | Italy,San Marino,2 1167 | Italy,Romania,9 1168 | Italy,Portugal,9 1169 | Italy,Poland,9 1170 | Italy,Norway,2 1171 | Italy,Netherlands,9 1172 | Italy,Montserrat,7 1173 | Italy,Monaco,2 1174 | Italy,Mexico,2 1175 | Italy,Malta,9 1176 | Italy,Luxembourg,9 1177 | Italy,Lithuania,9 1178 | Italy,Liechtenstein,2 1179 | Italy,Latvia,9 1180 | Italy,"Korea, Republic of",2 1181 | Italy,Jersey,9 1182 | Italy,Isle of Man,9 1183 | Italy,Ireland,9 1184 | Italy,India,2 1185 | Italy,Iceland,2 1186 | Italy,Hungary,9 1187 | Italy,Guernsey,9 1188 | Italy,Greece,9 1189 | Italy,Gibraltar,9 1190 | Italy,Germany,9 1191 | Italy,France,9 1192 | Italy,Finland,9 1193 | Italy,Faroe Islands,2 1194 | Italy,Estonia,9 1195 | Italy,Denmark,9 1196 | Italy,Czech Republic,9 1197 | Italy,Cyprus,9 1198 | Italy,Curacao,7 1199 | Italy,Croatia,5 1200 | Italy,Bulgaria,9 1201 | Italy,Belgium,9 1202 | Italy,Austria,9 1203 | Italy,Aruba,7 1204 | Italy,Argentina,2 1205 | Italy,Andorra,2 1206 | Jamaica,United States,3 1207 | Japan,United States,5 1208 | Jersey,United States,3 1209 | Jersey,United Kingdom,6 1210 | Jersey,Sweden,4 1211 | Jersey,Spain,4 1212 | Jersey,South Africa,2 1213 | Jersey,Slovenia,4 1214 | Jersey,Slovakia,4 1215 | Jersey,San Marino,2 1216 | Jersey,Romania,4 1217 | Jersey,Portugal,2 1218 | Jersey,Poland,2 1219 | Jersey,Norway,2 1220 | Jersey,Netherlands,4 1221 | Jersey,Mexico,2 1222 | Jersey,Malta,4 1223 | Jersey,Luxembourg,4 1224 | Jersey,Lithuania,4 1225 | Jersey,Latvia,4 1226 | Jersey,"Korea, Republic of",2 1227 | Jersey,Italy,4 1228 | Jersey,Ireland,4 1229 | Jersey,India,2 1230 | Jersey,Iceland,2 1231 | Jersey,Hungary,4 1232 | Jersey,Greece,2 1233 | Jersey,Gibraltar,2 1234 | Jersey,Germany,4 1235 | Jersey,France,4 1236 | Jersey,Finland,4 1237 | Jersey,Faroe Islands,2 1238 | Jersey,Estonia,4 1239 | Jersey,Denmark,4 1240 | Jersey,Czech Republic,4 1241 | Jersey,Cyprus,2 1242 | Jersey,Croatia,2 1243 | Jersey,Bulgaria,3 1244 | Jersey,Belgium,4 1245 | Jersey,Austria,2 1246 | Jersey,Argentina,2 1247 | Kazakhstan,United States,2 1248 | "Korea, Republic of",United States,2 1249 | "Korea, Republic of",United Kingdom,2 1250 | "Korea, Republic of",Sweden,2 1251 | "Korea, Republic of",Spain,2 1252 | "Korea, Republic of",South Africa,2 1253 | "Korea, Republic of",Slovenia,2 1254 | "Korea, Republic of",Slovakia,2 1255 | "Korea, Republic of",Seychelles,2 1256 | "Korea, Republic of",Romania,2 1257 | "Korea, Republic of",Norway,2 1258 | "Korea, Republic of",Netherlands,2 1259 | "Korea, Republic of",Mexico,2 1260 | "Korea, Republic of",Malta,2 1261 | "Korea, Republic of",Luxembourg,2 1262 | "Korea, Republic of",Lithuania,2 1263 | "Korea, Republic of",Latvia,2 1264 | "Korea, Republic of",Jersey,2 1265 | "Korea, Republic of",Italy,2 1266 | "Korea, Republic of",Isle of Man,2 1267 | "Korea, Republic of",Ireland,2 1268 | "Korea, Republic of",India,2 1269 | "Korea, Republic of",Iceland,2 1270 | "Korea, Republic of",Hungary,2 1271 | "Korea, Republic of",Guernsey,2 1272 | "Korea, Republic of",Gibraltar,2 1273 | "Korea, Republic of",Germany,2 1274 | "Korea, Republic of",France,2 1275 | "Korea, Republic of",Finland,2 1276 | "Korea, Republic of",Faroe Islands,2 1277 | "Korea, Republic of",Estonia,2 1278 | "Korea, Republic of",Denmark,2 1279 | "Korea, Republic of",Czech Republic,2 1280 | "Korea, Republic of",Bulgaria,1 1281 | "Korea, Republic of",Belgium,2 1282 | "Korea, Republic of",Argentina,2 1283 | Kosovo,United States,3 1284 | Kuwait,United States,2 1285 | Latvia,"Virgin Islands, British",7 1286 | Latvia,United States,4 1287 | Latvia,United Kingdom,9 1288 | Latvia,Switzerland,2 1289 | Latvia,Sweden,9 1290 | Latvia,Spain,9 1291 | Latvia,South Africa,2 1292 | Latvia,Slovenia,9 1293 | Latvia,Slovakia,9 1294 | Latvia,Seychelles,2 1295 | Latvia,San Marino,2 1296 | Latvia,Romania,9 1297 | Latvia,Portugal,9 1298 | Latvia,Poland,9 1299 | Latvia,Norway,2 1300 | Latvia,Netherlands,9 1301 | Latvia,Montserrat,7 1302 | Latvia,Monaco,2 1303 | Latvia,Mexico,2 1304 | Latvia,Malta,9 1305 | Latvia,Luxembourg,9 1306 | Latvia,Lithuania,9 1307 | Latvia,Liechtenstein,2 1308 | Latvia,"Korea, Republic of",2 1309 | Latvia,Jersey,9 1310 | Latvia,Italy,9 1311 | Latvia,Isle of Man,9 1312 | Latvia,Ireland,9 1313 | Latvia,India,2 1314 | Latvia,Iceland,2 1315 | Latvia,Hungary,9 1316 | Latvia,Guernsey,9 1317 | Latvia,Greece,9 1318 | Latvia,Gibraltar,9 1319 | Latvia,Germany,9 1320 | Latvia,France,9 1321 | Latvia,Finland,9 1322 | Latvia,Faroe Islands,2 1323 | Latvia,Estonia,9 1324 | Latvia,Denmark,9 1325 | Latvia,Czech Republic,9 1326 | Latvia,Cyprus,9 1327 | Latvia,Curacao,7 1328 | Latvia,Croatia,5 1329 | Latvia,Bulgaria,9 1330 | Latvia,Belgium,9 1331 | Latvia,Austria,9 1332 | Latvia,Aruba,7 1333 | Latvia,Argentina,2 1334 | Latvia,Andorra,2 1335 | Liechtenstein,United States,3 1336 | Liechtenstein,United Kingdom,2 1337 | Liechtenstein,Sweden,2 1338 | Liechtenstein,Spain,2 1339 | Liechtenstein,Slovenia,2 1340 | Liechtenstein,Slovakia,2 1341 | Liechtenstein,Romania,2 1342 | Liechtenstein,Portugal,2 1343 | Liechtenstein,Poland,2 1344 | Liechtenstein,Netherlands,2 1345 | Liechtenstein,Malta,2 1346 | Liechtenstein,Luxembourg,2 1347 | Liechtenstein,Lithuania,2 1348 | Liechtenstein,Latvia,2 1349 | Liechtenstein,Italy,2 1350 | Liechtenstein,Ireland,2 1351 | Liechtenstein,Hungary,2 1352 | Liechtenstein,Greece,2 1353 | Liechtenstein,Gibraltar,2 1354 | Liechtenstein,Germany,2 1355 | Liechtenstein,France,2 1356 | Liechtenstein,Finland,2 1357 | Liechtenstein,Estonia,2 1358 | Liechtenstein,Denmark,2 1359 | Liechtenstein,Czech Republic,2 1360 | Liechtenstein,Cyprus,2 1361 | Liechtenstein,Croatia,2 1362 | Liechtenstein,Bulgaria,2 1363 | Liechtenstein,Belgium,2 1364 | Liechtenstein,Austria,2 1365 | Lithuania,"Virgin Islands, British",7 1366 | Lithuania,United States,4 1367 | Lithuania,United Kingdom,9 1368 | Lithuania,Switzerland,2 1369 | Lithuania,Sweden,9 1370 | Lithuania,Spain,9 1371 | Lithuania,South Africa,2 1372 | Lithuania,Slovenia,9 1373 | Lithuania,Slovakia,9 1374 | Lithuania,Seychelles,2 1375 | Lithuania,San Marino,2 1376 | Lithuania,Romania,9 1377 | Lithuania,Portugal,9 1378 | Lithuania,Poland,9 1379 | Lithuania,Norway,2 1380 | Lithuania,Netherlands,9 1381 | Lithuania,Montserrat,7 1382 | Lithuania,Monaco,2 1383 | Lithuania,Mexico,2 1384 | Lithuania,Malta,9 1385 | Lithuania,Luxembourg,9 1386 | Lithuania,Liechtenstein,2 1387 | Lithuania,Latvia,9 1388 | Lithuania,"Korea, Republic of",2 1389 | Lithuania,Jersey,9 1390 | Lithuania,Italy,9 1391 | Lithuania,Isle of Man,9 1392 | Lithuania,Ireland,9 1393 | Lithuania,India,2 1394 | Lithuania,Iceland,2 1395 | Lithuania,Hungary,9 1396 | Lithuania,Guernsey,9 1397 | Lithuania,Greece,9 1398 | Lithuania,Gibraltar,9 1399 | Lithuania,Germany,9 1400 | Lithuania,France,9 1401 | Lithuania,Finland,9 1402 | Lithuania,Faroe Islands,2 1403 | Lithuania,Estonia,9 1404 | Lithuania,Denmark,9 1405 | Lithuania,Czech Republic,9 1406 | Lithuania,Cyprus,9 1407 | Lithuania,Curacao,7 1408 | Lithuania,Croatia,5 1409 | Lithuania,Bulgaria,9 1410 | Lithuania,Belgium,9 1411 | Lithuania,Austria,9 1412 | Lithuania,Aruba,7 1413 | Lithuania,Argentina,2 1414 | Lithuania,Andorra,2 1415 | Luxembourg,"Virgin Islands, British",2 1416 | Luxembourg,United States,3 1417 | Luxembourg,United Kingdom,4 1418 | Luxembourg,Switzerland,2 1419 | Luxembourg,Sweden,4 1420 | Luxembourg,Spain,4 1421 | Luxembourg,South Africa,2 1422 | Luxembourg,Slovenia,4 1423 | Luxembourg,Slovakia,4 1424 | Luxembourg,Seychelles,2 1425 | Luxembourg,San Marino,2 1426 | Luxembourg,Romania,4 1427 | Luxembourg,Portugal,4 1428 | Luxembourg,Poland,4 1429 | Luxembourg,Norway,2 1430 | Luxembourg,Netherlands,4 1431 | Luxembourg,Montserrat,2 1432 | Luxembourg,Monaco,2 1433 | Luxembourg,Mexico,2 1434 | Luxembourg,Malta,4 1435 | Luxembourg,Lithuania,4 1436 | Luxembourg,Liechtenstein,2 1437 | Luxembourg,Latvia,4 1438 | Luxembourg,"Korea, Republic of",2 1439 | Luxembourg,Jersey,4 1440 | Luxembourg,Italy,4 1441 | Luxembourg,Isle of Man,4 1442 | Luxembourg,Ireland,4 1443 | Luxembourg,India,2 1444 | Luxembourg,Iceland,2 1445 | Luxembourg,Hungary,4 1446 | Luxembourg,Guernsey,4 1447 | Luxembourg,Greece,4 1448 | Luxembourg,Gibraltar,4 1449 | Luxembourg,Germany,4 1450 | Luxembourg,France,4 1451 | Luxembourg,Finland,4 1452 | Luxembourg,Faroe Islands,2 1453 | Luxembourg,Estonia,4 1454 | Luxembourg,Denmark,4 1455 | Luxembourg,Czech Republic,4 1456 | Luxembourg,Cyprus,4 1457 | Luxembourg,Curacao,2 1458 | Luxembourg,Croatia,4 1459 | Luxembourg,Bulgaria,4 1460 | Luxembourg,"Bonaire, Sint Eustatius and Saba",2 1461 | Luxembourg,Belgium,4 1462 | Luxembourg,Austria,4 1463 | Luxembourg,Aruba,2 1464 | Luxembourg,Argentina,2 1465 | Luxembourg,Andorra,2 1466 | Macao,United States,2 1467 | Malaysia,United States,2 1468 | Malta,"Virgin Islands, British",7 1469 | Malta,United States,4 1470 | Malta,United Kingdom,9 1471 | Malta,Switzerland,2 1472 | Malta,Sweden,9 1473 | Malta,Spain,9 1474 | Malta,South Africa,2 1475 | Malta,Slovenia,9 1476 | Malta,Slovakia,9 1477 | Malta,Seychelles,2 1478 | Malta,San Marino,2 1479 | Malta,Romania,9 1480 | Malta,Portugal,9 1481 | Malta,Poland,9 1482 | Malta,Norway,2 1483 | Malta,Netherlands,9 1484 | Malta,Montserrat,7 1485 | Malta,Monaco,2 1486 | Malta,Mexico,2 1487 | Malta,Luxembourg,9 1488 | Malta,Lithuania,9 1489 | Malta,Liechtenstein,2 1490 | Malta,Latvia,9 1491 | Malta,"Korea, Republic of",2 1492 | Malta,Jersey,9 1493 | Malta,Italy,9 1494 | Malta,Isle of Man,9 1495 | Malta,Ireland,9 1496 | Malta,India,2 1497 | Malta,Iceland,2 1498 | Malta,Hungary,9 1499 | Malta,Guernsey,9 1500 | Malta,Greece,9 1501 | Malta,Gibraltar,9 1502 | Malta,Germany,9 1503 | Malta,France,9 1504 | Malta,Finland,9 1505 | Malta,Faroe Islands,2 1506 | Malta,Estonia,9 1507 | Malta,Denmark,9 1508 | Malta,Czech Republic,9 1509 | Malta,Cyprus,9 1510 | Malta,Curacao,7 1511 | Malta,Croatia,5 1512 | Malta,Bulgaria,9 1513 | Malta,Belgium,9 1514 | Malta,Austria,9 1515 | Malta,Aruba,7 1516 | Malta,Argentina,2 1517 | Malta,Andorra,2 1518 | Mauritius,United States,4 1519 | Mexico,United States,4 1520 | Mexico,United Kingdom,2 1521 | Mexico,Sweden,2 1522 | Mexico,Spain,2 1523 | Mexico,South Africa,2 1524 | Mexico,Slovenia,2 1525 | Mexico,Slovakia,2 1526 | Mexico,Seychelles,2 1527 | Mexico,San Marino,2 1528 | Mexico,Romania,2 1529 | Mexico,Norway,2 1530 | Mexico,Netherlands,2 1531 | Mexico,Malta,2 1532 | Mexico,Luxembourg,2 1533 | Mexico,Lithuania,2 1534 | Mexico,Latvia,2 1535 | Mexico,"Korea, Republic of",2 1536 | Mexico,Jersey,2 1537 | Mexico,Italy,2 1538 | Mexico,Isle of Man,2 1539 | Mexico,Ireland,2 1540 | Mexico,India,2 1541 | Mexico,Iceland,2 1542 | Mexico,Hungary,2 1543 | Mexico,Guernsey,2 1544 | Mexico,Gibraltar,2 1545 | Mexico,Germany,2 1546 | Mexico,France,2 1547 | Mexico,Finland,2 1548 | Mexico,Faroe Islands,2 1549 | Mexico,Estonia,2 1550 | Mexico,Denmark,2 1551 | Mexico,Czech Republic,2 1552 | Mexico,Bulgaria,1 1553 | Mexico,Belgium,2 1554 | Mexico,Argentina,2 1555 | "Moldova, Republic of",United States,2 1556 | Monaco,United Kingdom,2 1557 | Monaco,Sweden,2 1558 | Monaco,Spain,2 1559 | Monaco,Slovenia,2 1560 | Monaco,Slovakia,2 1561 | Monaco,Romania,2 1562 | Monaco,Portugal,2 1563 | Monaco,Poland,2 1564 | Monaco,Netherlands,2 1565 | Monaco,Malta,2 1566 | Monaco,Luxembourg,2 1567 | Monaco,Lithuania,2 1568 | Monaco,Latvia,2 1569 | Monaco,Italy,2 1570 | Monaco,Ireland,2 1571 | Monaco,Hungary,2 1572 | Monaco,Greece,2 1573 | Monaco,Gibraltar,2 1574 | Monaco,Germany,2 1575 | Monaco,France,2 1576 | Monaco,Finland,2 1577 | Monaco,Estonia,2 1578 | Monaco,Denmark,2 1579 | Monaco,Czech Republic,2 1580 | Monaco,Cyprus,2 1581 | Monaco,Croatia,2 1582 | Monaco,Bulgaria,2 1583 | Monaco,Belgium,2 1584 | Monaco,Austria,2 1585 | Montenegro,United States,2 1586 | Montserrat,United States,2 1587 | Montserrat,United Kingdom,9 1588 | Montserrat,Sweden,7 1589 | Montserrat,Spain,7 1590 | Montserrat,Slovenia,7 1591 | Montserrat,Slovakia,7 1592 | Montserrat,Romania,7 1593 | Montserrat,Portugal,7 1594 | Montserrat,Poland,7 1595 | Montserrat,Netherlands,7 1596 | Montserrat,Malta,7 1597 | Montserrat,Luxembourg,7 1598 | Montserrat,Lithuania,7 1599 | Montserrat,Latvia,7 1600 | Montserrat,Italy,7 1601 | Montserrat,Ireland,7 1602 | Montserrat,Hungary,7 1603 | Montserrat,Greece,7 1604 | Montserrat,Gibraltar,7 1605 | Montserrat,Germany,7 1606 | Montserrat,France,7 1607 | Montserrat,Finland,7 1608 | Montserrat,Estonia,7 1609 | Montserrat,Denmark,7 1610 | Montserrat,Czech Republic,7 1611 | Montserrat,Cyprus,7 1612 | Montserrat,Croatia,3 1613 | Montserrat,Bulgaria,7 1614 | Montserrat,Belgium,7 1615 | Montserrat,Austria,7 1616 | Netherlands,"Virgin Islands, British",7 1617 | Netherlands,United States,3 1618 | Netherlands,United Kingdom,9 1619 | Netherlands,Switzerland,2 1620 | Netherlands,Sweden,9 1621 | Netherlands,Spain,9 1622 | Netherlands,South Africa,2 1623 | Netherlands,Slovenia,9 1624 | Netherlands,Slovakia,9 1625 | Netherlands,Seychelles,2 1626 | Netherlands,San Marino,2 1627 | Netherlands,Romania,9 1628 | Netherlands,Portugal,9 1629 | Netherlands,Poland,9 1630 | Netherlands,Norway,2 1631 | Netherlands,Montserrat,7 1632 | Netherlands,Monaco,2 1633 | Netherlands,Mexico,2 1634 | Netherlands,Malta,9 1635 | Netherlands,Luxembourg,9 1636 | Netherlands,Lithuania,9 1637 | Netherlands,Liechtenstein,2 1638 | Netherlands,Latvia,9 1639 | Netherlands,"Korea, Republic of",2 1640 | Netherlands,Jersey,9 1641 | Netherlands,Italy,9 1642 | Netherlands,Isle of Man,9 1643 | Netherlands,Ireland,9 1644 | Netherlands,India,2 1645 | Netherlands,Iceland,2 1646 | Netherlands,Hungary,9 1647 | Netherlands,Guernsey,9 1648 | Netherlands,Greece,9 1649 | Netherlands,Gibraltar,9 1650 | Netherlands,Germany,9 1651 | Netherlands,France,9 1652 | Netherlands,Finland,9 1653 | Netherlands,Faroe Islands,2 1654 | Netherlands,Estonia,9 1655 | Netherlands,Denmark,9 1656 | Netherlands,Czech Republic,9 1657 | Netherlands,Cyprus,9 1658 | Netherlands,Curacao,7 1659 | Netherlands,Croatia,5 1660 | Netherlands,Bulgaria,9 1661 | Netherlands,Belgium,9 1662 | Netherlands,Austria,9 1663 | Netherlands,Aruba,7 1664 | Netherlands,Argentina,2 1665 | Netherlands,Andorra,2 1666 | New Zealand,United States,4 1667 | Nicaragua,United States,2 1668 | Norway,United States,4 1669 | Norway,United Kingdom,2 1670 | Norway,Sweden,2 1671 | Norway,Spain,2 1672 | Norway,South Africa,2 1673 | Norway,Slovenia,2 1674 | Norway,Slovakia,2 1675 | Norway,Seychelles,2 1676 | Norway,San Marino,2 1677 | Norway,Romania,2 1678 | Norway,Netherlands,2 1679 | Norway,Mexico,2 1680 | Norway,Malta,2 1681 | Norway,Luxembourg,2 1682 | Norway,Lithuania,2 1683 | Norway,Latvia,2 1684 | Norway,"Korea, Republic of",2 1685 | Norway,Jersey,2 1686 | Norway,Italy,2 1687 | Norway,Isle of Man,2 1688 | Norway,Ireland,2 1689 | Norway,India,2 1690 | Norway,Iceland,2 1691 | Norway,Hungary,2 1692 | Norway,Guernsey,2 1693 | Norway,Gibraltar,2 1694 | Norway,Germany,2 1695 | Norway,France,2 1696 | Norway,Finland,2 1697 | Norway,Faroe Islands,2 1698 | Norway,Estonia,2 1699 | Norway,Denmark,2 1700 | Norway,Czech Republic,2 1701 | Norway,Bulgaria,1 1702 | Norway,Belgium,2 1703 | Norway,Argentina,2 1704 | Panama,United States,2 1705 | Paraguay,United States,2 1706 | Peru,United States,2 1707 | Philippines,United States,2 1708 | Poland,"Virgin Islands, British",7 1709 | Poland,United States,3 1710 | Poland,United Kingdom,9 1711 | Poland,Switzerland,2 1712 | Poland,Sweden,9 1713 | Poland,Spain,9 1714 | Poland,Slovenia,9 1715 | Poland,Slovakia,9 1716 | Poland,San Marino,2 1717 | Poland,Romania,9 1718 | Poland,Portugal,9 1719 | Poland,Netherlands,9 1720 | Poland,Montserrat,7 1721 | Poland,Monaco,2 1722 | Poland,Malta,9 1723 | Poland,Luxembourg,9 1724 | Poland,Lithuania,9 1725 | Poland,Liechtenstein,2 1726 | Poland,Latvia,9 1727 | Poland,Jersey,7 1728 | Poland,Italy,9 1729 | Poland,Isle of Man,7 1730 | Poland,Ireland,9 1731 | Poland,Hungary,9 1732 | Poland,Guernsey,7 1733 | Poland,Greece,9 1734 | Poland,Gibraltar,9 1735 | Poland,Germany,9 1736 | Poland,France,9 1737 | Poland,Finland,9 1738 | Poland,Estonia,9 1739 | Poland,Denmark,9 1740 | Poland,Czech Republic,9 1741 | Poland,Cyprus,9 1742 | Poland,Curacao,7 1743 | Poland,Croatia,5 1744 | Poland,Bulgaria,9 1745 | Poland,Belgium,9 1746 | Poland,Austria,9 1747 | Poland,Aruba,7 1748 | Poland,Andorra,2 1749 | Portugal,"Virgin Islands, British",7 1750 | Portugal,United States,2 1751 | Portugal,United Kingdom,9 1752 | Portugal,Switzerland,2 1753 | Portugal,Sweden,9 1754 | Portugal,Spain,9 1755 | Portugal,Slovenia,9 1756 | Portugal,Slovakia,9 1757 | Portugal,San Marino,2 1758 | Portugal,Romania,9 1759 | Portugal,Poland,9 1760 | Portugal,Netherlands,9 1761 | Portugal,Montserrat,7 1762 | Portugal,Monaco,2 1763 | Portugal,Malta,9 1764 | Portugal,Luxembourg,9 1765 | Portugal,Lithuania,9 1766 | Portugal,Liechtenstein,2 1767 | Portugal,Latvia,9 1768 | Portugal,Jersey,7 1769 | Portugal,Italy,9 1770 | Portugal,Isle of Man,7 1771 | Portugal,Ireland,9 1772 | Portugal,Hungary,9 1773 | Portugal,Guernsey,7 1774 | Portugal,Greece,9 1775 | Portugal,Gibraltar,9 1776 | Portugal,Germany,9 1777 | Portugal,France,9 1778 | Portugal,Finland,9 1779 | Portugal,Estonia,9 1780 | Portugal,Denmark,9 1781 | Portugal,Czech Republic,9 1782 | Portugal,Cyprus,9 1783 | Portugal,Curacao,7 1784 | Portugal,Croatia,5 1785 | Portugal,Bulgaria,9 1786 | Portugal,Belgium,9 1787 | Portugal,Austria,9 1788 | Portugal,Aruba,7 1789 | Portugal,Andorra,2 1790 | Qatar,United States,3 1791 | Romania,"Virgin Islands, British",7 1792 | Romania,United States,3 1793 | Romania,United Kingdom,9 1794 | Romania,Switzerland,2 1795 | Romania,Sweden,9 1796 | Romania,Spain,9 1797 | Romania,South Africa,2 1798 | Romania,Slovenia,9 1799 | Romania,Slovakia,9 1800 | Romania,Seychelles,2 1801 | Romania,San Marino,2 1802 | Romania,Portugal,9 1803 | Romania,Poland,9 1804 | Romania,Norway,2 1805 | Romania,Netherlands,9 1806 | Romania,Montserrat,7 1807 | Romania,Monaco,2 1808 | Romania,Mexico,2 1809 | Romania,Malta,9 1810 | Romania,Luxembourg,9 1811 | Romania,Lithuania,9 1812 | Romania,Liechtenstein,2 1813 | Romania,Latvia,9 1814 | Romania,"Korea, Republic of",2 1815 | Romania,Jersey,9 1816 | Romania,Italy,9 1817 | Romania,Isle of Man,9 1818 | Romania,Ireland,9 1819 | Romania,India,2 1820 | Romania,Iceland,2 1821 | Romania,Hungary,9 1822 | Romania,Guernsey,9 1823 | Romania,Greece,9 1824 | Romania,Gibraltar,9 1825 | Romania,Germany,9 1826 | Romania,France,9 1827 | Romania,Finland,9 1828 | Romania,Faroe Islands,2 1829 | Romania,Estonia,9 1830 | Romania,Denmark,9 1831 | Romania,Czech Republic,9 1832 | Romania,Cyprus,9 1833 | Romania,Curacao,7 1834 | Romania,Croatia,5 1835 | Romania,Bulgaria,9 1836 | Romania,Belgium,9 1837 | Romania,Austria,9 1838 | Romania,Aruba,7 1839 | Romania,Argentina,2 1840 | Romania,Andorra,2 1841 | Saint Kitts and Nevis,United States,2 1842 | Saint Lucia,United States,2 1843 | Saint Vincent and the Grenadines,United States,2 1844 | San Marino,United States,2 1845 | San Marino,United Kingdom,2 1846 | San Marino,Sweden,2 1847 | San Marino,Spain,2 1848 | San Marino,Slovenia,2 1849 | San Marino,Slovakia,2 1850 | San Marino,Romania,2 1851 | San Marino,Portugal,2 1852 | San Marino,Poland,2 1853 | San Marino,Norway,2 1854 | San Marino,Netherlands,2 1855 | San Marino,Mexico,2 1856 | San Marino,Malta,2 1857 | San Marino,Luxembourg,2 1858 | San Marino,Lithuania,2 1859 | San Marino,Latvia,2 1860 | San Marino,Jersey,2 1861 | San Marino,Italy,2 1862 | San Marino,Isle of Man,2 1863 | San Marino,Ireland,2 1864 | San Marino,India,2 1865 | San Marino,Iceland,2 1866 | San Marino,Hungary,2 1867 | San Marino,Guernsey,2 1868 | San Marino,Greece,2 1869 | San Marino,Gibraltar,2 1870 | San Marino,Germany,2 1871 | San Marino,France,2 1872 | San Marino,Finland,2 1873 | San Marino,Faroe Islands,2 1874 | San Marino,Estonia,2 1875 | San Marino,Denmark,2 1876 | San Marino,Czech Republic,2 1877 | San Marino,Cyprus,2 1878 | San Marino,Croatia,2 1879 | San Marino,Bulgaria,2 1880 | San Marino,Belgium,2 1881 | San Marino,Austria,2 1882 | Saudi Arabia,United States,2 1883 | Serbia,United States,2 1884 | Seychelles,United States,2 1885 | Seychelles,United Kingdom,2 1886 | Seychelles,Sweden,2 1887 | Seychelles,Spain,2 1888 | Seychelles,South Africa,2 1889 | Seychelles,Slovenia,2 1890 | Seychelles,Slovakia,2 1891 | Seychelles,Romania,2 1892 | Seychelles,Norway,2 1893 | Seychelles,Netherlands,2 1894 | Seychelles,Mexico,2 1895 | Seychelles,Malta,2 1896 | Seychelles,Luxembourg,2 1897 | Seychelles,Lithuania,2 1898 | Seychelles,Latvia,2 1899 | Seychelles,"Korea, Republic of",2 1900 | Seychelles,Italy,2 1901 | Seychelles,Isle of Man,2 1902 | Seychelles,Ireland,2 1903 | Seychelles,India,2 1904 | Seychelles,Iceland,2 1905 | Seychelles,Hungary,2 1906 | Seychelles,Guernsey,2 1907 | Seychelles,Gibraltar,2 1908 | Seychelles,Germany,2 1909 | Seychelles,France,2 1910 | Seychelles,Finland,2 1911 | Seychelles,Estonia,2 1912 | Seychelles,Denmark,2 1913 | Seychelles,Czech Republic,2 1914 | Seychelles,Bulgaria,1 1915 | Seychelles,Belgium,2 1916 | Seychelles,Argentina,2 1917 | Singapore,United States,3 1918 | Slovakia,"Virgin Islands, British",7 1919 | Slovakia,United States,3 1920 | Slovakia,United Kingdom,9 1921 | Slovakia,Switzerland,2 1922 | Slovakia,Sweden,9 1923 | Slovakia,Spain,9 1924 | Slovakia,Slovenia,9 1925 | Slovakia,San Marino,2 1926 | Slovakia,Romania,9 1927 | Slovakia,Portugal,9 1928 | Slovakia,Poland,9 1929 | Slovakia,Netherlands,9 1930 | Slovakia,Montserrat,7 1931 | Slovakia,Monaco,2 1932 | Slovakia,Malta,9 1933 | Slovakia,Luxembourg,9 1934 | Slovakia,Lithuania,9 1935 | Slovakia,Liechtenstein,2 1936 | Slovakia,Latvia,9 1937 | Slovakia,Jersey,7 1938 | Slovakia,Italy,9 1939 | Slovakia,Isle of Man,7 1940 | Slovakia,Ireland,9 1941 | Slovakia,Hungary,9 1942 | Slovakia,Guernsey,7 1943 | Slovakia,Greece,9 1944 | Slovakia,Gibraltar,9 1945 | Slovakia,Germany,9 1946 | Slovakia,France,9 1947 | Slovakia,Finland,9 1948 | Slovakia,Estonia,9 1949 | Slovakia,Denmark,9 1950 | Slovakia,Czech Republic,9 1951 | Slovakia,Cyprus,9 1952 | Slovakia,Curacao,7 1953 | Slovakia,Croatia,5 1954 | Slovakia,Bulgaria,9 1955 | Slovakia,Belgium,9 1956 | Slovakia,Austria,9 1957 | Slovakia,Aruba,7 1958 | Slovakia,Andorra,2 1959 | Slovenia,"Virgin Islands, British",7 1960 | Slovenia,United States,4 1961 | Slovenia,United Kingdom,9 1962 | Slovenia,Switzerland,2 1963 | Slovenia,Sweden,9 1964 | Slovenia,Spain,9 1965 | Slovenia,South Africa,2 1966 | Slovenia,Slovakia,9 1967 | Slovenia,Seychelles,2 1968 | Slovenia,San Marino,2 1969 | Slovenia,Romania,9 1970 | Slovenia,Portugal,9 1971 | Slovenia,Poland,9 1972 | Slovenia,Norway,2 1973 | Slovenia,Netherlands,9 1974 | Slovenia,Montserrat,7 1975 | Slovenia,Monaco,2 1976 | Slovenia,Mexico,2 1977 | Slovenia,Malta,9 1978 | Slovenia,Luxembourg,9 1979 | Slovenia,Lithuania,9 1980 | Slovenia,Liechtenstein,2 1981 | Slovenia,Latvia,9 1982 | Slovenia,"Korea, Republic of",2 1983 | Slovenia,Jersey,9 1984 | Slovenia,Italy,9 1985 | Slovenia,Isle of Man,9 1986 | Slovenia,Ireland,9 1987 | Slovenia,India,2 1988 | Slovenia,Iceland,2 1989 | Slovenia,Hungary,9 1990 | Slovenia,Guernsey,9 1991 | Slovenia,Greece,9 1992 | Slovenia,Gibraltar,9 1993 | Slovenia,Germany,9 1994 | Slovenia,France,9 1995 | Slovenia,Finland,9 1996 | Slovenia,Faroe Islands,2 1997 | Slovenia,Estonia,9 1998 | Slovenia,Denmark,9 1999 | Slovenia,Czech Republic,9 2000 | Slovenia,Cyprus,9 2001 | Slovenia,Curacao,7 2002 | Slovenia,Croatia,5 2003 | Slovenia,Bulgaria,9 2004 | Slovenia,"Bonaire, Sint Eustatius and Saba",2 2005 | Slovenia,Belgium,9 2006 | Slovenia,Austria,9 2007 | Slovenia,Aruba,7 2008 | Slovenia,Argentina,2 2009 | Slovenia,Andorra,2 2010 | South Africa,United States,4 2011 | South Africa,United Kingdom,2 2012 | South Africa,Sweden,2 2013 | South Africa,Spain,2 2014 | South Africa,Slovenia,2 2015 | South Africa,Slovakia,2 2016 | South Africa,Seychelles,2 2017 | South Africa,Romania,2 2018 | South Africa,Norway,2 2019 | South Africa,Netherlands,2 2020 | South Africa,Mexico,2 2021 | South Africa,Malta,2 2022 | South Africa,Luxembourg,2 2023 | South Africa,Lithuania,2 2024 | South Africa,Latvia,2 2025 | South Africa,"Korea, Republic of",2 2026 | South Africa,Jersey,2 2027 | South Africa,Italy,2 2028 | South Africa,Isle of Man,2 2029 | South Africa,Ireland,2 2030 | South Africa,India,2 2031 | South Africa,Iceland,2 2032 | South Africa,Hungary,2 2033 | South Africa,Guernsey,2 2034 | South Africa,Gibraltar,2 2035 | South Africa,Germany,2 2036 | South Africa,France,2 2037 | South Africa,Finland,2 2038 | South Africa,Faroe Islands,2 2039 | South Africa,Estonia,2 2040 | South Africa,Denmark,2 2041 | South Africa,Czech Republic,2 2042 | South Africa,Bulgaria,1 2043 | South Africa,Belgium,2 2044 | South Africa,Argentina,2 2045 | Spain,"Virgin Islands, British",7 2046 | Spain,United States,5 2047 | Spain,United Kingdom,9 2048 | Spain,Switzerland,2 2049 | Spain,Sweden,9 2050 | Spain,South Africa,2 2051 | Spain,Slovenia,9 2052 | Spain,Slovakia,9 2053 | Spain,Seychelles,2 2054 | Spain,San Marino,2 2055 | Spain,Romania,9 2056 | Spain,Portugal,9 2057 | Spain,Poland,9 2058 | Spain,Norway,2 2059 | Spain,Netherlands,9 2060 | Spain,Montserrat,7 2061 | Spain,Monaco,2 2062 | Spain,Mexico,2 2063 | Spain,Malta,9 2064 | Spain,Luxembourg,9 2065 | Spain,Lithuania,9 2066 | Spain,Liechtenstein,2 2067 | Spain,Latvia,9 2068 | Spain,"Korea, Republic of",2 2069 | Spain,Jersey,9 2070 | Spain,Italy,9 2071 | Spain,Isle of Man,9 2072 | Spain,Ireland,9 2073 | Spain,India,2 2074 | Spain,Iceland,2 2075 | Spain,Hungary,9 2076 | Spain,Guernsey,9 2077 | Spain,Greece,9 2078 | Spain,Gibraltar,9 2079 | Spain,Germany,9 2080 | Spain,France,9 2081 | Spain,Finland,9 2082 | Spain,Faroe Islands,2 2083 | Spain,Estonia,9 2084 | Spain,Denmark,9 2085 | Spain,Czech Republic,9 2086 | Spain,Cyprus,9 2087 | Spain,Curacao,7 2088 | Spain,Croatia,5 2089 | Spain,Bulgaria,9 2090 | Spain,"Bonaire, Sint Eustatius and Saba",2 2091 | Spain,Belgium,9 2092 | Spain,Austria,9 2093 | Spain,Aruba,7 2094 | Spain,Argentina,2 2095 | Spain,Andorra,2 2096 | Sweden,"Virgin Islands, British",7 2097 | Sweden,United States,3 2098 | Sweden,United Kingdom,9 2099 | Sweden,Switzerland,2 2100 | Sweden,Spain,9 2101 | Sweden,South Africa,2 2102 | Sweden,Slovenia,9 2103 | Sweden,Slovakia,9 2104 | Sweden,Seychelles,2 2105 | Sweden,San Marino,2 2106 | Sweden,Romania,9 2107 | Sweden,Portugal,9 2108 | Sweden,Poland,9 2109 | Sweden,Norway,2 2110 | Sweden,Netherlands,9 2111 | Sweden,Montserrat,7 2112 | Sweden,Monaco,2 2113 | Sweden,Mexico,2 2114 | Sweden,Malta,9 2115 | Sweden,Luxembourg,9 2116 | Sweden,Lithuania,9 2117 | Sweden,Liechtenstein,2 2118 | Sweden,Latvia,9 2119 | Sweden,"Korea, Republic of",2 2120 | Sweden,Jersey,9 2121 | Sweden,Italy,9 2122 | Sweden,Isle of Man,9 2123 | Sweden,Ireland,9 2124 | Sweden,India,2 2125 | Sweden,Iceland,2 2126 | Sweden,Hungary,9 2127 | Sweden,Guernsey,9 2128 | Sweden,Greece,9 2129 | Sweden,Gibraltar,9 2130 | Sweden,Germany,9 2131 | Sweden,France,9 2132 | Sweden,Finland,9 2133 | Sweden,Faroe Islands,2 2134 | Sweden,Estonia,9 2135 | Sweden,Denmark,9 2136 | Sweden,Czech Republic,9 2137 | Sweden,Cyprus,9 2138 | Sweden,Curacao,7 2139 | Sweden,Croatia,5 2140 | Sweden,Bulgaria,9 2141 | Sweden,"Bonaire, Sint Eustatius and Saba",2 2142 | Sweden,Belgium,9 2143 | Sweden,Austria,9 2144 | Sweden,Aruba,7 2145 | Sweden,Argentina,2 2146 | Sweden,Andorra,2 2147 | Switzerland,United States,4 2148 | Switzerland,United Kingdom,2 2149 | Switzerland,Sweden,2 2150 | Switzerland,Spain,2 2151 | Switzerland,Slovenia,2 2152 | Switzerland,Slovakia,2 2153 | Switzerland,Romania,2 2154 | Switzerland,Portugal,2 2155 | Switzerland,Poland,2 2156 | Switzerland,Netherlands,2 2157 | Switzerland,Malta,2 2158 | Switzerland,Luxembourg,2 2159 | Switzerland,Lithuania,2 2160 | Switzerland,Latvia,2 2161 | Switzerland,Italy,2 2162 | Switzerland,Ireland,2 2163 | Switzerland,Hungary,2 2164 | Switzerland,Greece,2 2165 | Switzerland,Gibraltar,2 2166 | Switzerland,Germany,2 2167 | Switzerland,France,2 2168 | Switzerland,Finland,2 2169 | Switzerland,Estonia,2 2170 | Switzerland,Denmark,2 2171 | Switzerland,Czech Republic,2 2172 | Switzerland,Cyprus,2 2173 | Switzerland,Croatia,2 2174 | Switzerland,Bulgaria,2 2175 | Switzerland,Belgium,2 2176 | Switzerland,Austria,2 2177 | "Taiwan, Province of China",United States,2 2178 | Thailand,United States,2 2179 | Trinidad and Tobago,United States,2 2180 | Tunisia,United States,2 2181 | Turkey,United States,2 2182 | Turkmenistan,United States,2 2183 | Turks and Caicos Islands,United States,3 2184 | Turks and Caicos Islands,United Kingdom,8 2185 | Turks and Caicos Islands,Sweden,6 2186 | Turks and Caicos Islands,Spain,6 2187 | Turks and Caicos Islands,South Africa,2 2188 | Turks and Caicos Islands,Slovenia,6 2189 | Turks and Caicos Islands,Slovakia,4 2190 | Turks and Caicos Islands,Seychelles,2 2191 | Turks and Caicos Islands,Romania,6 2192 | Turks and Caicos Islands,Portugal,4 2193 | Turks and Caicos Islands,Poland,4 2194 | Turks and Caicos Islands,Norway,2 2195 | Turks and Caicos Islands,Netherlands,6 2196 | Turks and Caicos Islands,Mexico,2 2197 | Turks and Caicos Islands,Malta,6 2198 | Turks and Caicos Islands,Luxembourg,6 2199 | Turks and Caicos Islands,Lithuania,6 2200 | Turks and Caicos Islands,Latvia,6 2201 | Turks and Caicos Islands,"Korea, Republic of",2 2202 | Turks and Caicos Islands,Italy,6 2203 | Turks and Caicos Islands,Ireland,6 2204 | Turks and Caicos Islands,India,2 2205 | Turks and Caicos Islands,Iceland,2 2206 | Turks and Caicos Islands,Hungary,6 2207 | Turks and Caicos Islands,Greece,4 2208 | Turks and Caicos Islands,Gibraltar,4 2209 | Turks and Caicos Islands,Germany,6 2210 | Turks and Caicos Islands,France,6 2211 | Turks and Caicos Islands,Finland,6 2212 | Turks and Caicos Islands,Faroe Islands,2 2213 | Turks and Caicos Islands,Estonia,6 2214 | Turks and Caicos Islands,Denmark,6 2215 | Turks and Caicos Islands,Czech Republic,6 2216 | Turks and Caicos Islands,Cyprus,4 2217 | Turks and Caicos Islands,Croatia,3 2218 | Turks and Caicos Islands,Bulgaria,5 2219 | Turks and Caicos Islands,Belgium,6 2220 | Turks and Caicos Islands,Austria,4 2221 | Turks and Caicos Islands,Argentina,2 2222 | Ukraine,United States,2 2223 | United Arab Emirates,United States,2 2224 | United Kingdom,"Virgin Islands, British",7 2225 | United Kingdom,United States,4 2226 | United Kingdom,Switzerland,2 2227 | United Kingdom,Sweden,9 2228 | United Kingdom,Spain,9 2229 | United Kingdom,South Africa,2 2230 | United Kingdom,Slovenia,9 2231 | United Kingdom,Slovakia,9 2232 | United Kingdom,Seychelles,2 2233 | United Kingdom,San Marino,2 2234 | United Kingdom,Romania,9 2235 | United Kingdom,Portugal,9 2236 | United Kingdom,Poland,9 2237 | United Kingdom,Norway,2 2238 | United Kingdom,Netherlands,9 2239 | United Kingdom,Montserrat,7 2240 | United Kingdom,Monaco,2 2241 | United Kingdom,Mexico,2 2242 | United Kingdom,Malta,9 2243 | United Kingdom,Luxembourg,9 2244 | United Kingdom,Lithuania,9 2245 | United Kingdom,Liechtenstein,2 2246 | United Kingdom,Latvia,9 2247 | United Kingdom,"Korea, Republic of",2 2248 | United Kingdom,Jersey,11 2249 | United Kingdom,Italy,9 2250 | United Kingdom,Isle of Man,9 2251 | United Kingdom,Ireland,9 2252 | United Kingdom,India,2 2253 | United Kingdom,Iceland,2 2254 | United Kingdom,Hungary,9 2255 | United Kingdom,Guernsey,11 2256 | United Kingdom,Greece,9 2257 | United Kingdom,Gibraltar,13 2258 | United Kingdom,Germany,9 2259 | United Kingdom,France,9 2260 | United Kingdom,Finland,9 2261 | United Kingdom,Faroe Islands,2 2262 | United Kingdom,Estonia,9 2263 | United Kingdom,Denmark,9 2264 | United Kingdom,Czech Republic,9 2265 | United Kingdom,Cyprus,9 2266 | United Kingdom,Curacao,7 2267 | United Kingdom,Croatia,5 2268 | United Kingdom,Bulgaria,9 2269 | United Kingdom,"Bonaire, Sint Eustatius and Saba",2 2270 | United Kingdom,Belgium,9 2271 | United Kingdom,Austria,9 2272 | United Kingdom,Aruba,7 2273 | United Kingdom,Argentina,2 2274 | United Kingdom,Andorra,2 2275 | United States,United Kingdom,4 2276 | United States,Turkey,2 2277 | United States,Trinidad and Tobago,2 2278 | United States,Thailand,2 2279 | United States,Sweden,3 2280 | United States,Spain,5 2281 | United States,South Africa,4 2282 | United States,Slovenia,4 2283 | United States,Slovakia,3 2284 | United States,Saint Lucia,2 2285 | United States,Romania,3 2286 | United States,Portugal,2 2287 | United States,Poland,3 2288 | United States,Philippines,2 2289 | United States,Panama,2 2290 | United States,Norway,4 2291 | United States,New Zealand,4 2292 | United States,Netherlands,3 2293 | United States,Mexico,4 2294 | United States,Mauritius,4 2295 | United States,Malta,4 2296 | United States,Luxembourg,3 2297 | United States,Lithuania,4 2298 | United States,Liechtenstein,3 2299 | United States,Latvia,4 2300 | United States,"Korea, Republic of",2 2301 | United States,Jersey,3 2302 | United States,Jamaica,3 2303 | United States,Italy,3 2304 | United States,Israel,2 2305 | United States,Isle of Man,3 2306 | United States,Ireland,4 2307 | United States,India,3 2308 | United States,Iceland,3 2309 | United States,Hungary,4 2310 | United States,Honduras,3 2311 | United States,Guyana,2 2312 | United States,Guernsey,3 2313 | United States,Gibraltar,3 2314 | United States,Germany,5 2315 | United States,France,4 2316 | United States,Finland,3 2317 | United States,Estonia,4 2318 | United States,Dominican Republic,2 2319 | United States,Denmark,3 2320 | United States,Czech Republic,4 2321 | United States,Cyprus,3 2322 | United States,Curacao,2 2323 | United States,Croatia,2 2324 | United States,Costa Rica,2 2325 | United States,Colombia,3 2326 | United States,Canada,4 2327 | United States,Brazil,3 2328 | United States,Belgium,2 2329 | United States,Barbados,3 2330 | United States,Azerbaijan,3 2331 | United States,Australia,4 2332 | Uzbekistan,United States,2 2333 | Viet Nam,United States,2 2334 | "Virgin Islands, British",United States,3 2335 | "Virgin Islands, British",United Kingdom,9 2336 | "Virgin Islands, British",Sweden,7 2337 | "Virgin Islands, British",Spain,7 2338 | "Virgin Islands, British",South Africa,2 2339 | "Virgin Islands, British",Slovenia,7 2340 | "Virgin Islands, British",Slovakia,7 2341 | "Virgin Islands, British",Seychelles,2 2342 | "Virgin Islands, British",San Marino,2 2343 | "Virgin Islands, British",Romania,5 2344 | "Virgin Islands, British",Portugal,5 2345 | "Virgin Islands, British",Poland,5 2346 | "Virgin Islands, British",Norway,2 2347 | "Virgin Islands, British",Netherlands,7 2348 | "Virgin Islands, British",Mexico,2 2349 | "Virgin Islands, British",Malta,7 2350 | "Virgin Islands, British",Luxembourg,7 2351 | "Virgin Islands, British",Lithuania,7 2352 | "Virgin Islands, British",Latvia,7 2353 | "Virgin Islands, British","Korea, Republic of",2 2354 | "Virgin Islands, British",Italy,7 2355 | "Virgin Islands, British",Ireland,7 2356 | "Virgin Islands, British",India,2 2357 | "Virgin Islands, British",Iceland,2 2358 | "Virgin Islands, British",Hungary,7 2359 | "Virgin Islands, British",Greece,5 2360 | "Virgin Islands, British",Gibraltar,5 2361 | "Virgin Islands, British",Germany,7 2362 | "Virgin Islands, British",France,7 2363 | "Virgin Islands, British",Finland,7 2364 | "Virgin Islands, British",Faroe Islands,2 2365 | "Virgin Islands, British",Estonia,7 2366 | "Virgin Islands, British",Denmark,7 2367 | "Virgin Islands, British",Czech Republic,7 2368 | "Virgin Islands, British",Cyprus,5 2369 | "Virgin Islands, British",Croatia,3 2370 | "Virgin Islands, British",Bulgaria,7 2371 | "Virgin Islands, British",Belgium,7 2372 | "Virgin Islands, British",Austria,5 2373 | "Virgin Islands, British",Argentina,2 2374 | --------------------------------------------------------------------------------