We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
sms_number_to_repo should have default value
Should be initialized here:
https://github.com/google/personfinder/blob/546f238fab407145292cc81c5e5682ad952f92f6/app/setup_pf.py#L62

Otherwise it shows error on save of global admin page unless the user fills it manually.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `app/setup_pf.py`
Content:
```
1 # Copyright 2009-2010 by Ka-Ping Yee
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 from datetime import datetime
16 
17 import const
18 from model import *
19 from utils import *
20 
21 def setup_datastore():
22     """Sets up the subject types and translations in a datastore.  (Existing
23     subject types and messages will be updated; existing Subject or Report
24     information will not be changed or deleted.)"""
25     setup_repos()
26     setup_configs()
27 
28 def wipe_datastore(delete=None, keep=None):
29     """Deletes everything in the datastore.  If 'delete' is given (a list of
30     kind names), deletes only those kinds of entities.  If 'keep' is given,
31     skips deleting those kinds of entities."""
32     query = db.Query(keys_only=True)
33     keys = query.fetch(1000)
34     while keys:
35         db.delete([key for key in keys
36                    if delete is None or key.kind() in delete
37                    if keep is None or key.kind() not in keep])
38         keys = query.with_cursor(query.cursor()).fetch(1000)
39 
40 def reset_datastore():
41     """Wipes everything in the datastore except Accounts,
42     then sets up the datastore for new data."""
43     wipe_datastore(keep=['Account'])
44     setup_datastore()
45 
46 def setup_repos():
47     db.put([Repo(key_name='haiti'),
48             Repo(key_name='japan'),
49             Repo(key_name='pakistan')])
50     # Set some repositories active so they show on the main page.
51     config.set_for_repo('japan', launched=True)
52     config.set_for_repo('haiti', launched=True)
53 
54 def setup_configs():
55     """Installs configuration settings used for testing by server_tests."""
56     COMMON_KEYWORDS = ['person', 'people', 'finder', 'person finder',
57                        'people finder', 'crisis', 'survivor', 'family']
58 
59     # NOTE: the following two CAPTCHA keys are dummy keys for testing only.
60     #       (https://developers.google.com/recaptcha/docs/faq)
61     # They should be replaced with real keys upon launch.
62     config.set(captcha_site_key='6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI',
63                captcha_secret_key='6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe',
64     # A Google Translate API key with a very low quota, just for testing.
65                translate_api_key='AIzaSyCXdz9x7LDL3BvieEP8Wcze64CC_iqslSE',
66                repo_aliases={},
67                referrer_whitelist=[],
68                initialized=True,
69                notification_email=const.DEFAULT_NOTIFICATION_EMAIL,
70                unreviewed_notes_threshold=(
71                    const.DEFAULT_UNREVIEWED_NOTES_THRESHOLD),
72                )
73 
74     config.set_for_repo(
75         'haiti',
76         # Appended to "Google Person Finder" in page titles.
77         repo_titles={
78             'en': 'Haiti Earthquake',
79             'fr': u'S\xe9isme en Ha\xefti',
80             'ht': u'Tranbleman T\xe8 an Ayiti',
81             'es': u'Terremoto en Hait\xed'
82         },
83         # List of language codes that appear in the language menu.
84         language_menu_options=['en', 'ht', 'fr', 'es'],
85         # Content for the <meta name="keywords"> tag.
86         keywords=', '.join([
87             'haiti', 'earthquake', 'haiti earthquake', 'haitian',
88             u'ha\xefti', u's\xe9isme', 'tremblement', 'tremblement de terre',
89             'famille', 'recherche de personnes', 'terremoto'
90         ] + COMMON_KEYWORDS),
91         # If false, hide the family_name field and use only given_name.
92         use_family_name=True,
93         # Presentation order for the given name and family name.
94         family_name_first=False,
95         # If true, show extra fields for alternate names.
96         use_alternate_names=True,
97         # If false, hide the home_zip field.
98         use_postal_code=True,
99         # Require at least this many letters in each word of a text query.
100         min_query_word_length=2,
101         # Show input fields for profile URLs in create page.
102         show_profile_entry=True,
103         # Default list of profile websites to show in create page.
104         profile_websites=const.DEFAULT_PROFILE_WEBSITES,
105         # Default map viewport for the location field in the note form.
106         map_default_zoom=7,
107         map_default_center=[18.968637, -72.284546],
108         map_size_pixels=[400, 280],
109         # If true, the feeds and read API require an authorization key.
110         read_auth_key_required=False,
111         # If true, the search API requires an authorization key.
112         search_auth_key_required=False,
113         # If true, show "believed dead" option in the note status dropdown
114         allow_believed_dead_via_ui=True,
115         # Custom html messages to show on main page, results page, view page,
116         # and query form, keyed by language codes.
117         start_page_custom_htmls={'en': '', 'fr': ''},
118         results_page_custom_htmls={'en': '', 'fr': ''},
119         view_page_custom_htmls={'en': '', 'fr': ''},
120         seek_query_form_custom_htmls={'en': '', 'fr': ''},
121         time_zone_offset=0,
122         time_zone_abbreviation='UTC',
123         published_date=get_timestamp(datetime(2010, 1, 12)),
124         updated_date=get_timestamp(datetime(2010, 1, 12)),
125     )
126 
127     config.set_for_repo(
128         'japan',
129         language_menu_options=['ja', 'en', 'ko', 'zh-CN', 'zh-TW', 'pt-BR', 'es'],
130         repo_titles={
131             'en': '2011 Japan Earthquake',
132             'zh-TW': u'2011 \u65e5\u672c\u5730\u9707',
133             'zh-CN': u'2011 \u65e5\u672c\u5730\u9707',
134             'pt-BR': u'2011 Terremoto no Jap\xe3o',
135             'ja': u'2011 \u65e5\u672c\u5730\u9707',
136             'es': u'2011 Terremoto en Jap\xf3n'
137         },
138         keywords=', '.join(COMMON_KEYWORDS),
139         use_family_name=True,
140         family_name_first=True,
141         use_alternate_names=True,
142         use_postal_code=True,
143         min_query_word_length=1,
144         show_profile_entry=True,
145         profile_websites=const.DEFAULT_PROFILE_WEBSITES,
146         map_default_zoom=7,
147         map_default_center=[38, 140.7],
148         map_size_pixels=[400, 400],
149         search_auth_key_required=True,
150         read_auth_key_required=True,
151         allow_believed_dead_via_ui=True,
152         start_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},
153         results_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},
154         view_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},
155         seek_query_form_custom_htmls={'en': '', 'fr': ''},
156         # NOTE(kpy): These two configuration settings only work for locations
157         # with a single, fixed time zone offset and no Daylight Saving Time.
158         time_zone_offset=9,  # UTC+9
159         time_zone_abbreviation='JST',
160         jp_mobile_carrier_redirect=True,
161         published_date=get_timestamp(datetime(2011, 3, 11)),
162         updated_date=get_timestamp(datetime(2011, 3, 11)),
163     )
164 
165     config.set_for_repo(
166         'pakistan',
167         repo_titles={
168             'en': 'Pakistan Floods',
169             'ur': u'\u067e\u0627\u06a9\u0633\u062a\u0627\u0646\u06cc \u0633\u06cc\u0644\u0627\u0628'
170         },
171         language_menu_options=['en', 'ur'],
172         keywords=', '.join([
173             'pakistan', 'flood', 'pakistan flood', 'pakistani'
174         ] + COMMON_KEYWORDS),
175         use_family_name=False,
176         family_name_first=False,
177         use_alternate_names=False,
178         use_postal_code=False,
179         min_query_word_length=1,
180         map_default_zoom=6,
181         map_default_center=[33.36, 73.26],  # near Rawalpindi, Pakistan
182         map_size_pixels=[400, 500],
183         read_auth_key_required=False,
184         search_auth_key_required=False,
185         allow_believed_dead_via_ui=True,
186         start_page_custom_htmls={'en': '', 'fr': ''},
187         results_page_custom_htmls={'en': '', 'fr': ''},
188         view_page_custom_htmls={'en': '', 'fr': ''},
189         seek_query_form_custom_htmls={'en': '', 'fr': ''},
190         time_zone_offset=0,
191         time_zone_abbreviation='UTC',
192         published_date=get_timestamp(datetime(2010, 8, 6)),
193         updated_date=get_timestamp(datetime(2010, 8, 6)),
194     )
195 
196 
197 def setup_lang_test_config():
198     config.set_for_repo(
199         'lang-test',
200         # We set short titles to avoid exceeding the field's 500-char limit.
201         repo_titles=dict((lang, lang) for lang in const.LANGUAGE_ENDONYMS),
202         language_menu_options=list(const.LANGUAGE_ENDONYMS.keys()),
203         keywords=', '.join(COMMON_KEYWORDS),
204         use_family_name=True,
205         family_name_first=True,
206         use_alternate_names=True,
207         use_postal_code=True,
208         min_query_word_length=1,
209         map_default_zoom=6,
210         map_default_center=[0 ,0],
211         map_size_pixels=[400, 500],
212         read_auth_key_required=False,
213         search_auth_key_required=False,
214         allow_believed_dead_via_ui=True,
215         start_page_custom_htmls={'en': '', 'fr': ''},
216         results_page_custom_htmls={'en': '', 'fr': ''},
217         view_page_custom_htmls={'en': '', 'fr': ''},
218         seek_query_form_custom_htmls={'en': '', 'fr': ''},
219     )
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/app/setup_pf.py b/app/setup_pf.py
--- a/app/setup_pf.py
+++ b/app/setup_pf.py
@@ -64,6 +64,7 @@
     # A Google Translate API key with a very low quota, just for testing.
                translate_api_key='AIzaSyCXdz9x7LDL3BvieEP8Wcze64CC_iqslSE',
                repo_aliases={},
+               sms_number_to_repo={},
                referrer_whitelist=[],
                initialized=True,
                notification_email=const.DEFAULT_NOTIFICATION_EMAIL,

{"golden_diff": "diff --git a/app/setup_pf.py b/app/setup_pf.py\n--- a/app/setup_pf.py\n+++ b/app/setup_pf.py\n@@ -64,6 +64,7 @@\n     # A Google Translate API key with a very low quota, just for testing.\n                translate_api_key='AIzaSyCXdz9x7LDL3BvieEP8Wcze64CC_iqslSE',\n                repo_aliases={},\n+               sms_number_to_repo={},\n                referrer_whitelist=[],\n                initialized=True,\n                notification_email=const.DEFAULT_NOTIFICATION_EMAIL,\n", "issue": "sms_number_to_repo should have default value\nShould be initialized here:\r\nhttps://github.com/google/personfinder/blob/546f238fab407145292cc81c5e5682ad952f92f6/app/setup_pf.py#L62\r\n\r\nOtherwise it shows error on save of global admin page unless the user fills it manually.\n", "before_files": [{"content": "# Copyright 2009-2010 by Ka-Ping Yee\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom datetime import datetime\n\nimport const\nfrom model import *\nfrom utils import *\n\ndef setup_datastore():\n    \"\"\"Sets up the subject types and translations in a datastore.  (Existing\n    subject types and messages will be updated; existing Subject or Report\n    information will not be changed or deleted.)\"\"\"\n    setup_repos()\n    setup_configs()\n\ndef wipe_datastore(delete=None, keep=None):\n    \"\"\"Deletes everything in the datastore.  If 'delete' is given (a list of\n    kind names), deletes only those kinds of entities.  If 'keep' is given,\n    skips deleting those kinds of entities.\"\"\"\n    query = db.Query(keys_only=True)\n    keys = query.fetch(1000)\n    while keys:\n        db.delete([key for key in keys\n                   if delete is None or key.kind() in delete\n                   if keep is None or key.kind() not in keep])\n        keys = query.with_cursor(query.cursor()).fetch(1000)\n\ndef reset_datastore():\n    \"\"\"Wipes everything in the datastore except Accounts,\n    then sets up the datastore for new data.\"\"\"\n    wipe_datastore(keep=['Account'])\n    setup_datastore()\n\ndef setup_repos():\n    db.put([Repo(key_name='haiti'),\n            Repo(key_name='japan'),\n            Repo(key_name='pakistan')])\n    # Set some repositories active so they show on the main page.\n    config.set_for_repo('japan', launched=True)\n    config.set_for_repo('haiti', launched=True)\n\ndef setup_configs():\n    \"\"\"Installs configuration settings used for testing by server_tests.\"\"\"\n    COMMON_KEYWORDS = ['person', 'people', 'finder', 'person finder',\n                       'people finder', 'crisis', 'survivor', 'family']\n\n    # NOTE: the following two CAPTCHA keys are dummy keys for testing only.\n    #       (https://developers.google.com/recaptcha/docs/faq)\n    # They should be replaced with real keys upon launch.\n    config.set(captcha_site_key='6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI',\n               captcha_secret_key='6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe',\n    # A Google Translate API key with a very low quota, just for testing.\n               translate_api_key='AIzaSyCXdz9x7LDL3BvieEP8Wcze64CC_iqslSE',\n               repo_aliases={},\n               referrer_whitelist=[],\n               initialized=True,\n               notification_email=const.DEFAULT_NOTIFICATION_EMAIL,\n               unreviewed_notes_threshold=(\n                   const.DEFAULT_UNREVIEWED_NOTES_THRESHOLD),\n               )\n\n    config.set_for_repo(\n        'haiti',\n        # Appended to \"Google Person Finder\" in page titles.\n        repo_titles={\n            'en': 'Haiti Earthquake',\n            'fr': u'S\\xe9isme en Ha\\xefti',\n            'ht': u'Tranbleman T\\xe8 an Ayiti',\n            'es': u'Terremoto en Hait\\xed'\n        },\n        # List of language codes that appear in the language menu.\n        language_menu_options=['en', 'ht', 'fr', 'es'],\n        # Content for the <meta name=\"keywords\"> tag.\n        keywords=', '.join([\n            'haiti', 'earthquake', 'haiti earthquake', 'haitian',\n            u'ha\\xefti', u's\\xe9isme', 'tremblement', 'tremblement de terre',\n            'famille', 'recherche de personnes', 'terremoto'\n        ] + COMMON_KEYWORDS),\n        # If false, hide the family_name field and use only given_name.\n        use_family_name=True,\n        # Presentation order for the given name and family name.\n        family_name_first=False,\n        # If true, show extra fields for alternate names.\n        use_alternate_names=True,\n        # If false, hide the home_zip field.\n        use_postal_code=True,\n        # Require at least this many letters in each word of a text query.\n        min_query_word_length=2,\n        # Show input fields for profile URLs in create page.\n        show_profile_entry=True,\n        # Default list of profile websites to show in create page.\n        profile_websites=const.DEFAULT_PROFILE_WEBSITES,\n        # Default map viewport for the location field in the note form.\n        map_default_zoom=7,\n        map_default_center=[18.968637, -72.284546],\n        map_size_pixels=[400, 280],\n        # If true, the feeds and read API require an authorization key.\n        read_auth_key_required=False,\n        # If true, the search API requires an authorization key.\n        search_auth_key_required=False,\n        # If true, show \"believed dead\" option in the note status dropdown\n        allow_believed_dead_via_ui=True,\n        # Custom html messages to show on main page, results page, view page,\n        # and query form, keyed by language codes.\n        start_page_custom_htmls={'en': '', 'fr': ''},\n        results_page_custom_htmls={'en': '', 'fr': ''},\n        view_page_custom_htmls={'en': '', 'fr': ''},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n        time_zone_offset=0,\n        time_zone_abbreviation='UTC',\n        published_date=get_timestamp(datetime(2010, 1, 12)),\n        updated_date=get_timestamp(datetime(2010, 1, 12)),\n    )\n\n    config.set_for_repo(\n        'japan',\n        language_menu_options=['ja', 'en', 'ko', 'zh-CN', 'zh-TW', 'pt-BR', 'es'],\n        repo_titles={\n            'en': '2011 Japan Earthquake',\n            'zh-TW': u'2011 \\u65e5\\u672c\\u5730\\u9707',\n            'zh-CN': u'2011 \\u65e5\\u672c\\u5730\\u9707',\n            'pt-BR': u'2011 Terremoto no Jap\\xe3o',\n            'ja': u'2011 \\u65e5\\u672c\\u5730\\u9707',\n            'es': u'2011 Terremoto en Jap\\xf3n'\n        },\n        keywords=', '.join(COMMON_KEYWORDS),\n        use_family_name=True,\n        family_name_first=True,\n        use_alternate_names=True,\n        use_postal_code=True,\n        min_query_word_length=1,\n        show_profile_entry=True,\n        profile_websites=const.DEFAULT_PROFILE_WEBSITES,\n        map_default_zoom=7,\n        map_default_center=[38, 140.7],\n        map_size_pixels=[400, 400],\n        search_auth_key_required=True,\n        read_auth_key_required=True,\n        allow_believed_dead_via_ui=True,\n        start_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},\n        results_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},\n        view_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n        # NOTE(kpy): These two configuration settings only work for locations\n        # with a single, fixed time zone offset and no Daylight Saving Time.\n        time_zone_offset=9,  # UTC+9\n        time_zone_abbreviation='JST',\n        jp_mobile_carrier_redirect=True,\n        published_date=get_timestamp(datetime(2011, 3, 11)),\n        updated_date=get_timestamp(datetime(2011, 3, 11)),\n    )\n\n    config.set_for_repo(\n        'pakistan',\n        repo_titles={\n            'en': 'Pakistan Floods',\n            'ur': u'\\u067e\\u0627\\u06a9\\u0633\\u062a\\u0627\\u0646\\u06cc \\u0633\\u06cc\\u0644\\u0627\\u0628'\n        },\n        language_menu_options=['en', 'ur'],\n        keywords=', '.join([\n            'pakistan', 'flood', 'pakistan flood', 'pakistani'\n        ] + COMMON_KEYWORDS),\n        use_family_name=False,\n        family_name_first=False,\n        use_alternate_names=False,\n        use_postal_code=False,\n        min_query_word_length=1,\n        map_default_zoom=6,\n        map_default_center=[33.36, 73.26],  # near Rawalpindi, Pakistan\n        map_size_pixels=[400, 500],\n        read_auth_key_required=False,\n        search_auth_key_required=False,\n        allow_believed_dead_via_ui=True,\n        start_page_custom_htmls={'en': '', 'fr': ''},\n        results_page_custom_htmls={'en': '', 'fr': ''},\n        view_page_custom_htmls={'en': '', 'fr': ''},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n        time_zone_offset=0,\n        time_zone_abbreviation='UTC',\n        published_date=get_timestamp(datetime(2010, 8, 6)),\n        updated_date=get_timestamp(datetime(2010, 8, 6)),\n    )\n\n\ndef setup_lang_test_config():\n    config.set_for_repo(\n        'lang-test',\n        # We set short titles to avoid exceeding the field's 500-char limit.\n        repo_titles=dict((lang, lang) for lang in const.LANGUAGE_ENDONYMS),\n        language_menu_options=list(const.LANGUAGE_ENDONYMS.keys()),\n        keywords=', '.join(COMMON_KEYWORDS),\n        use_family_name=True,\n        family_name_first=True,\n        use_alternate_names=True,\n        use_postal_code=True,\n        min_query_word_length=1,\n        map_default_zoom=6,\n        map_default_center=[0 ,0],\n        map_size_pixels=[400, 500],\n        read_auth_key_required=False,\n        search_auth_key_required=False,\n        allow_believed_dead_via_ui=True,\n        start_page_custom_htmls={'en': '', 'fr': ''},\n        results_page_custom_htmls={'en': '', 'fr': ''},\n        view_page_custom_htmls={'en': '', 'fr': ''},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n    )", "path": "app/setup_pf.py"}], "after_files": [{"content": "# Copyright 2009-2010 by Ka-Ping Yee\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom datetime import datetime\n\nimport const\nfrom model import *\nfrom utils import *\n\ndef setup_datastore():\n    \"\"\"Sets up the subject types and translations in a datastore.  (Existing\n    subject types and messages will be updated; existing Subject or Report\n    information will not be changed or deleted.)\"\"\"\n    setup_repos()\n    setup_configs()\n\ndef wipe_datastore(delete=None, keep=None):\n    \"\"\"Deletes everything in the datastore.  If 'delete' is given (a list of\n    kind names), deletes only those kinds of entities.  If 'keep' is given,\n    skips deleting those kinds of entities.\"\"\"\n    query = db.Query(keys_only=True)\n    keys = query.fetch(1000)\n    while keys:\n        db.delete([key for key in keys\n                   if delete is None or key.kind() in delete\n                   if keep is None or key.kind() not in keep])\n        keys = query.with_cursor(query.cursor()).fetch(1000)\n\ndef reset_datastore():\n    \"\"\"Wipes everything in the datastore except Accounts,\n    then sets up the datastore for new data.\"\"\"\n    wipe_datastore(keep=['Account'])\n    setup_datastore()\n\ndef setup_repos():\n    db.put([Repo(key_name='haiti'),\n            Repo(key_name='japan'),\n            Repo(key_name='pakistan')])\n    # Set some repositories active so they show on the main page.\n    config.set_for_repo('japan', launched=True)\n    config.set_for_repo('haiti', launched=True)\n\ndef setup_configs():\n    \"\"\"Installs configuration settings used for testing by server_tests.\"\"\"\n    COMMON_KEYWORDS = ['person', 'people', 'finder', 'person finder',\n                       'people finder', 'crisis', 'survivor', 'family']\n\n    # NOTE: the following two CAPTCHA keys are dummy keys for testing only.\n    #       (https://developers.google.com/recaptcha/docs/faq)\n    # They should be replaced with real keys upon launch.\n    config.set(captcha_site_key='6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI',\n               captcha_secret_key='6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe',\n    # A Google Translate API key with a very low quota, just for testing.\n               translate_api_key='AIzaSyCXdz9x7LDL3BvieEP8Wcze64CC_iqslSE',\n               repo_aliases={},\n               sms_number_to_repo={},\n               referrer_whitelist=[],\n               initialized=True,\n               notification_email=const.DEFAULT_NOTIFICATION_EMAIL,\n               unreviewed_notes_threshold=(\n                   const.DEFAULT_UNREVIEWED_NOTES_THRESHOLD),\n               )\n\n    config.set_for_repo(\n        'haiti',\n        # Appended to \"Google Person Finder\" in page titles.\n        repo_titles={\n            'en': 'Haiti Earthquake',\n            'fr': u'S\\xe9isme en Ha\\xefti',\n            'ht': u'Tranbleman T\\xe8 an Ayiti',\n            'es': u'Terremoto en Hait\\xed'\n        },\n        # List of language codes that appear in the language menu.\n        language_menu_options=['en', 'ht', 'fr', 'es'],\n        # Content for the <meta name=\"keywords\"> tag.\n        keywords=', '.join([\n            'haiti', 'earthquake', 'haiti earthquake', 'haitian',\n            u'ha\\xefti', u's\\xe9isme', 'tremblement', 'tremblement de terre',\n            'famille', 'recherche de personnes', 'terremoto'\n        ] + COMMON_KEYWORDS),\n        # If false, hide the family_name field and use only given_name.\n        use_family_name=True,\n        # Presentation order for the given name and family name.\n        family_name_first=False,\n        # If true, show extra fields for alternate names.\n        use_alternate_names=True,\n        # If false, hide the home_zip field.\n        use_postal_code=True,\n        # Require at least this many letters in each word of a text query.\n        min_query_word_length=2,\n        # Show input fields for profile URLs in create page.\n        show_profile_entry=True,\n        # Default list of profile websites to show in create page.\n        profile_websites=const.DEFAULT_PROFILE_WEBSITES,\n        # Default map viewport for the location field in the note form.\n        map_default_zoom=7,\n        map_default_center=[18.968637, -72.284546],\n        map_size_pixels=[400, 280],\n        # If true, the feeds and read API require an authorization key.\n        read_auth_key_required=False,\n        # If true, the search API requires an authorization key.\n        search_auth_key_required=False,\n        # If true, show \"believed dead\" option in the note status dropdown\n        allow_believed_dead_via_ui=True,\n        # Custom html messages to show on main page, results page, view page,\n        # and query form, keyed by language codes.\n        start_page_custom_htmls={'en': '', 'fr': ''},\n        results_page_custom_htmls={'en': '', 'fr': ''},\n        view_page_custom_htmls={'en': '', 'fr': ''},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n        time_zone_offset=0,\n        time_zone_abbreviation='UTC',\n        published_date=get_timestamp(datetime(2010, 1, 12)),\n        updated_date=get_timestamp(datetime(2010, 1, 12)),\n    )\n\n    config.set_for_repo(\n        'japan',\n        language_menu_options=['ja', 'en', 'ko', 'zh-CN', 'zh-TW', 'pt-BR', 'es'],\n        repo_titles={\n            'en': '2011 Japan Earthquake',\n            'zh-TW': u'2011 \\u65e5\\u672c\\u5730\\u9707',\n            'zh-CN': u'2011 \\u65e5\\u672c\\u5730\\u9707',\n            'pt-BR': u'2011 Terremoto no Jap\\xe3o',\n            'ja': u'2011 \\u65e5\\u672c\\u5730\\u9707',\n            'es': u'2011 Terremoto en Jap\\xf3n'\n        },\n        keywords=', '.join(COMMON_KEYWORDS),\n        use_family_name=True,\n        family_name_first=True,\n        use_alternate_names=True,\n        use_postal_code=True,\n        min_query_word_length=1,\n        show_profile_entry=True,\n        profile_websites=const.DEFAULT_PROFILE_WEBSITES,\n        map_default_zoom=7,\n        map_default_center=[38, 140.7],\n        map_size_pixels=[400, 400],\n        search_auth_key_required=True,\n        read_auth_key_required=True,\n        allow_believed_dead_via_ui=True,\n        start_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},\n        results_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},\n        view_page_custom_htmls={'en': 'Custom message', 'fr': 'French'},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n        # NOTE(kpy): These two configuration settings only work for locations\n        # with a single, fixed time zone offset and no Daylight Saving Time.\n        time_zone_offset=9,  # UTC+9\n        time_zone_abbreviation='JST',\n        jp_mobile_carrier_redirect=True,\n        published_date=get_timestamp(datetime(2011, 3, 11)),\n        updated_date=get_timestamp(datetime(2011, 3, 11)),\n    )\n\n    config.set_for_repo(\n        'pakistan',\n        repo_titles={\n            'en': 'Pakistan Floods',\n            'ur': u'\\u067e\\u0627\\u06a9\\u0633\\u062a\\u0627\\u0646\\u06cc \\u0633\\u06cc\\u0644\\u0627\\u0628'\n        },\n        language_menu_options=['en', 'ur'],\n        keywords=', '.join([\n            'pakistan', 'flood', 'pakistan flood', 'pakistani'\n        ] + COMMON_KEYWORDS),\n        use_family_name=False,\n        family_name_first=False,\n        use_alternate_names=False,\n        use_postal_code=False,\n        min_query_word_length=1,\n        map_default_zoom=6,\n        map_default_center=[33.36, 73.26],  # near Rawalpindi, Pakistan\n        map_size_pixels=[400, 500],\n        read_auth_key_required=False,\n        search_auth_key_required=False,\n        allow_believed_dead_via_ui=True,\n        start_page_custom_htmls={'en': '', 'fr': ''},\n        results_page_custom_htmls={'en': '', 'fr': ''},\n        view_page_custom_htmls={'en': '', 'fr': ''},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n        time_zone_offset=0,\n        time_zone_abbreviation='UTC',\n        published_date=get_timestamp(datetime(2010, 8, 6)),\n        updated_date=get_timestamp(datetime(2010, 8, 6)),\n    )\n\n\ndef setup_lang_test_config():\n    config.set_for_repo(\n        'lang-test',\n        # We set short titles to avoid exceeding the field's 500-char limit.\n        repo_titles=dict((lang, lang) for lang in const.LANGUAGE_ENDONYMS),\n        language_menu_options=list(const.LANGUAGE_ENDONYMS.keys()),\n        keywords=', '.join(COMMON_KEYWORDS),\n        use_family_name=True,\n        family_name_first=True,\n        use_alternate_names=True,\n        use_postal_code=True,\n        min_query_word_length=1,\n        map_default_zoom=6,\n        map_default_center=[0 ,0],\n        map_size_pixels=[400, 500],\n        read_auth_key_required=False,\n        search_auth_key_required=False,\n        allow_believed_dead_via_ui=True,\n        start_page_custom_htmls={'en': '', 'fr': ''},\n        results_page_custom_htmls={'en': '', 'fr': ''},\n        view_page_custom_htmls={'en': '', 'fr': ''},\n        seek_query_form_custom_htmls={'en': '', 'fr': ''},\n    )", "path": "app/setup_pf.py"}]}