Merge: nitx: start migration to `doc_phases`
authorJean Privat <jean@pryen.org>
Thu, 21 May 2015 00:32:21 +0000 (20:32 -0400)
committerJean Privat <jean@pryen.org>
Thu, 21 May 2015 00:32:21 +0000 (20:32 -0400)
This PR introduces the base rendering services for doc in console.

This will be used in the next version of `nitx` to benefit fron the new nitdoc architecture.

Pull-Request: #1315

401 files changed:
contrib/friendz/src/friendz.nit
contrib/friendz/src/friendz_android.nit
contrib/inkscape_tools/tests/app/src/s2pn.nit
contrib/nitiwiki/Makefile
contrib/nitiwiki/README.md
contrib/nitiwiki/src/nitiwiki.nit
contrib/nitiwiki/src/wiki_base.nit
contrib/nitiwiki/src/wiki_html.nit
contrib/nitiwiki/src/wiki_links.nit [new file with mode: 0644]
contrib/nitiwiki/tests/nitiwiki.args
contrib/nitiwiki/tests/nitiwiki_render.args [deleted file]
contrib/nitiwiki/tests/nitiwiki_status.args [deleted file]
contrib/nitiwiki/tests/res/nitiwiki_render.res [deleted file]
contrib/nitiwiki/tests/res/wiki1_nitiwiki_render.res [new file with mode: 0644]
contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res [new file with mode: 0644]
contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res [new file with mode: 0644]
contrib/nitiwiki/tests/res/wiki2_nitiwiki_status.res [moved from contrib/nitiwiki/tests/res/nitiwiki_status.res with 68% similarity]
contrib/nitiwiki/tests/wiki1_nitiwiki_render.args [new file with mode: 0644]
contrib/nitiwiki/tests/wiki1_nitiwiki_status.args [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/assets/css/main.css [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/config.ini [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/contact.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/other_page.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec1/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/config.ini [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec21/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/index.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/other.md [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/footer.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/header.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/menu.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2/templates/template.html [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2_nitiwiki_render.args [new file with mode: 0644]
contrib/nitiwiki/tests/wiki2_nitiwiki_status.args [new file with mode: 0644]
contrib/nitrpg/src/achievements.nit
contrib/nitrpg/src/reactors.nit
contrib/nitrpg/src/statistics.nit
contrib/refund/.gitignore [new file with mode: 0644]
contrib/refund/Makefile [new file with mode: 0644]
contrib/refund/src/refund.nit [new file with mode: 0644]
contrib/refund/src/refund_base.nit [new file with mode: 0644]
contrib/refund/src/refund_json.nit [new file with mode: 0644]
contrib/refund/tests/Makefile [new file with mode: 0644]
contrib/refund/tests/client_error1.json [new file with mode: 0644]
contrib/refund/tests/client_error2.json [new file with mode: 0644]
contrib/refund/tests/client_error3.json [new file with mode: 0644]
contrib/refund/tests/client_error4.json [new file with mode: 0644]
contrib/refund/tests/contractA1.json [new file with mode: 0644]
contrib/refund/tests/contractA2.json [new file with mode: 0644]
contrib/refund/tests/contractA3.json [new file with mode: 0644]
contrib/refund/tests/contractA4.json [new file with mode: 0644]
contrib/refund/tests/contractA5.json [new file with mode: 0644]
contrib/refund/tests/contractB1.json [new file with mode: 0644]
contrib/refund/tests/contractB2.json [new file with mode: 0644]
contrib/refund/tests/contractB3.json [new file with mode: 0644]
contrib/refund/tests/contractB4.json [new file with mode: 0644]
contrib/refund/tests/contractB5.json [new file with mode: 0644]
contrib/refund/tests/contractC1.json [new file with mode: 0644]
contrib/refund/tests/contractC2.json [new file with mode: 0644]
contrib/refund/tests/contractC3.json [new file with mode: 0644]
contrib/refund/tests/contractD1.json [new file with mode: 0644]
contrib/refund/tests/contractD2.json [new file with mode: 0644]
contrib/refund/tests/contractD3.json [new file with mode: 0644]
contrib/refund/tests/contractD4.json [new file with mode: 0644]
contrib/refund/tests/contractE1.json [new file with mode: 0644]
contrib/refund/tests/contractE2.json [new file with mode: 0644]
contrib/refund/tests/contractE3.json [new file with mode: 0644]
contrib/refund/tests/contractE4.json [new file with mode: 0644]
contrib/refund/tests/contract_error1.json [new file with mode: 0644]
contrib/refund/tests/contract_error2.json [new file with mode: 0644]
contrib/refund/tests/contract_error3.json [new file with mode: 0644]
contrib/refund/tests/contract_error4.json [new file with mode: 0644]
contrib/refund/tests/dossier_error1.json [new file with mode: 0644]
contrib/refund/tests/json_error1.json [new file with mode: 0644]
contrib/refund/tests/json_error2.json [new file with mode: 0644]
contrib/refund/tests/json_error3.json [new file with mode: 0644]
contrib/refund/tests/month_error1.json [new file with mode: 0644]
contrib/refund/tests/month_error2.json [new file with mode: 0644]
contrib/refund/tests/month_error3.json [new file with mode: 0644]
contrib/refund/tests/month_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error3.json [new file with mode: 0644]
contrib/refund/tests/recl_date_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_error3.json [new file with mode: 0644]
contrib/refund/tests/recl_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error3.json [new file with mode: 0644]
contrib/refund/tests/recl_fees_error4.json [new file with mode: 0644]
contrib/refund/tests/recl_soin_error1.json [new file with mode: 0644]
contrib/refund/tests/recl_soin_error2.json [new file with mode: 0644]
contrib/refund/tests/recl_soin_error3.json [new file with mode: 0644]
contrib/refund/tests/res/client_error1.res [new file with mode: 0644]
contrib/refund/tests/res/client_error2.res [new file with mode: 0644]
contrib/refund/tests/res/client_error3.res [new file with mode: 0644]
contrib/refund/tests/res/client_error4.res [new file with mode: 0644]
contrib/refund/tests/res/contractA1.res [new file with mode: 0644]
contrib/refund/tests/res/contractA2.res [new file with mode: 0644]
contrib/refund/tests/res/contractA3.res [new file with mode: 0644]
contrib/refund/tests/res/contractA4.res [new file with mode: 0644]
contrib/refund/tests/res/contractA5.res [new file with mode: 0644]
contrib/refund/tests/res/contractB1.res [new file with mode: 0644]
contrib/refund/tests/res/contractB2.res [new file with mode: 0644]
contrib/refund/tests/res/contractB3.res [new file with mode: 0644]
contrib/refund/tests/res/contractB4.res [new file with mode: 0644]
contrib/refund/tests/res/contractB5.res [new file with mode: 0644]
contrib/refund/tests/res/contractC1.res [new file with mode: 0644]
contrib/refund/tests/res/contractC2.res [new file with mode: 0644]
contrib/refund/tests/res/contractC3.res [new file with mode: 0644]
contrib/refund/tests/res/contractD1.res [new file with mode: 0644]
contrib/refund/tests/res/contractD2.res [new file with mode: 0644]
contrib/refund/tests/res/contractD3.res [new file with mode: 0644]
contrib/refund/tests/res/contractD4.res [new file with mode: 0644]
contrib/refund/tests/res/contractE1.res [new file with mode: 0644]
contrib/refund/tests/res/contractE2.res [new file with mode: 0644]
contrib/refund/tests/res/contractE3.res [new file with mode: 0644]
contrib/refund/tests/res/contractE4.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error1.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error2.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error3.res [new file with mode: 0644]
contrib/refund/tests/res/contract_error4.res [new file with mode: 0644]
contrib/refund/tests/res/dossier_error1.res [new file with mode: 0644]
contrib/refund/tests/res/json_error1.res [new file with mode: 0644]
contrib/refund/tests/res/json_error2.res [new file with mode: 0644]
contrib/refund/tests/res/json_error3.res [new file with mode: 0644]
contrib/refund/tests/res/month_error1.res [new file with mode: 0644]
contrib/refund/tests/res/month_error2.res [new file with mode: 0644]
contrib/refund/tests/res/month_error3.res [new file with mode: 0644]
contrib/refund/tests/res/month_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error3.res [new file with mode: 0644]
contrib/refund/tests/res/recl_date_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error3.res [new file with mode: 0644]
contrib/refund/tests/res/recl_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error3.res [new file with mode: 0644]
contrib/refund/tests/res/recl_fees_error4.res [new file with mode: 0644]
contrib/refund/tests/res/recl_soin_error1.res [new file with mode: 0644]
contrib/refund/tests/res/recl_soin_error2.res [new file with mode: 0644]
contrib/refund/tests/res/recl_soin_error3.res [new file with mode: 0644]
contrib/refund/tests/tests.sh [new file with mode: 0755]
examples/calculator/.gitignore [new file with mode: 0644]
examples/calculator/Makefile
examples/calculator/src/calculator.nit [new file with mode: 0644]
examples/calculator/src/calculator_android.nit [deleted file]
examples/calculator/src/calculator_gtk.nit [deleted file]
examples/calculator/src/calculator_test.nit
examples/langannot.nit
examples/languages/en/LC_MESSAGES/langannot.po
examples/languages/fr/LC_MESSAGES/langannot.po
examples/languages/ja/LC_MESSAGES/langannot.po
examples/languages/langannot.pot
examples/mnit_ballz/src/ballz_android.nit
examples/mnit_dino/src/dino.nit
examples/mnit_moles/src/moles.nit
examples/mnit_simple/src/complete_simple_android.nit
examples/mnit_simple/src/simple.nit
examples/mnit_simple/src/test_audio.nit
examples/mnit_simple/src/test_data_store.nit
examples/mnit_simple/src/test_intent.nit
examples/mnit_simple/src/test_target_api.nit
examples/rosettacode/balanced_brackets.nit [new file with mode: 0644]
examples/rosettacode/loops_break.nit [new file with mode: 0644]
examples/rosettacode/loops_continue.nit [new file with mode: 0644]
examples/rosettacode/loops_do_while.nit [new file with mode: 0644]
examples/rosettacode/loops_downward_for.nit [new file with mode: 0644]
examples/rosettacode/loops_for.nit [new file with mode: 0644]
examples/rosettacode/loops_infinite.nit [new file with mode: 0644]
examples/rosettacode/loops_n_plus_one_half.nit [new file with mode: 0644]
examples/rosettacode/loops_while.nit [new file with mode: 0644]
examples/rosettacode/read_entire_file.nit [new file with mode: 0644]
examples/rosettacode/tree_traversal.nit [new file with mode: 0644]
examples/shoot/src/shoot.nit
lib/android/README.md
lib/android/android.nit
lib/android/assets_and_resources.nit
lib/android/audio.nit
lib/android/aware.nit
lib/android/data_store.nit [moved from lib/android/android_data_store.nit with 97% similarity]
lib/android/examples/Makefile
lib/android/examples/src/ui_test.nit
lib/android/intent/intent_api10.nit
lib/android/intent/intent_api11.nit
lib/android/intent/intent_api12.nit
lib/android/intent/intent_api14.nit
lib/android/intent/intent_api15.nit
lib/android/intent/intent_api16.nit
lib/android/intent/intent_api17.nit
lib/android/intent/intent_api18.nit
lib/android/intent/intent_api19.nit
lib/android/log.nit
lib/android/nit_activity.nit
lib/android/notification/native_notification.nit
lib/android/shared_preferences/shared_preferences_api10.nit
lib/android/shared_preferences/shared_preferences_api11.nit
lib/android/toast.nit
lib/android/ui/native_ui.nit [moved from lib/android/ui.nit with 61% similarity]
lib/android/ui/ui.nit [new file with mode: 0644]
lib/android/vibration.nit
lib/app/README.md [new file with mode: 0644]
lib/app/app_base.nit
lib/app/ui.nit [new file with mode: 0644]
lib/binary/binary.nit [new file with mode: 0644]
lib/bitmap/bitmap.nit [new file with mode: 0644]
lib/bitmap/test_bitmap.nit [new file with mode: 0644]
lib/bucketed_game.nit
lib/buffered_ropes.nit
lib/c.nit
lib/counter.nit
lib/csv/csv.nit
lib/dummy_array.nit
lib/filter_stream.nit
lib/github/api.nit
lib/gtk/v3_4/gdk_enums.nit
lib/gtk/v3_4/gtk_assistant.nit
lib/gtk/v3_4/gtk_core.nit
lib/gtk/v3_4/gtk_dialogs.nit
lib/gtk/v3_4/gtk_widgets_ext.nit
lib/gtk/v3_4/v3_4.nit
lib/gtk/v3_6.nit
lib/gtk/v3_8.nit
lib/io/io.nit [deleted file]
lib/io/push_back_reader.nit [deleted file]
lib/io/test_push_back_reader.nit [deleted file]
lib/json/static.nit
lib/json_serialization.nit
lib/linux/data_store.nit [moved from lib/linux/linux_data_store.nit with 93% similarity]
lib/linux/linux.nit
lib/linux/ui.nit [new file with mode: 0644]
lib/markdown/markdown.nit
lib/mnit/assets.nit
lib/mnit/mnit_injected_input.nit
lib/mnit/mnit_null.nit
lib/mnit_linux/linux_app.nit
lib/mnit_linux/linux_assets.nit
lib/mongodb/mongodb.nit [new file with mode: 0644]
lib/mongodb/native_mongodb.nit [new file with mode: 0644]
lib/neo4j/graph/graph.nit
lib/saxophonit/lexer.nit
lib/serialization/serialization.nit
lib/socket/socket.nit
lib/socket/socket_c.nit
lib/standard/bytes.nit [new file with mode: 0644]
lib/standard/collection/abstract_collection.nit
lib/standard/collection/array.nit
lib/standard/collection/hash_collection.nit
lib/standard/collection/range.nit
lib/standard/collection/union_find.nit
lib/standard/environ.nit
lib/standard/exec.nit
lib/standard/file.nit
lib/standard/kernel.nit
lib/standard/math.nit
lib/standard/ropes.nit
lib/standard/standard.nit
lib/standard/stream.nit
lib/standard/string.nit
lib/trees/bintree.nit
lib/websocket/websocket.nit
misc/vim/syntax/nit.vim
share/nitdoc/css/nitdoc.css
share/nitdoc/vendors/bootstrap/css/bootstrap.min.css
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.eot
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.svg
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.ttf
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff
share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2 [new file with mode: 0644]
share/nitdoc/vendors/bootstrap/js/bootstrap.min.js
src/astbuilder.nit
src/c_tools.nit
src/compiler/compiler_ffi/compiler_ffi.nit [moved from src/compiler/compiler_ffi.nit with 63% similarity]
src/compiler/compiler_ffi/light.nit [new file with mode: 0644]
src/compiler/compiler_ffi/light_only.nit [new file with mode: 0644]
src/compiler/separate_compiler.nit
src/compiler/separate_erasure_compiler.nit
src/doc/doc_phases/doc_graphs.nit
src/doc/doc_phases/doc_hierarchies.nit
src/doc/doc_phases/doc_html.nit
src/doc/doc_phases/doc_indexing.nit
src/doc/doc_phases/doc_intros_redefs.nit
src/doc/doc_phases/doc_structure.nit
src/doc/html_templates/html_components.nit
src/doc/html_templates/html_model.nit
src/doc/html_templates/html_templates.nit
src/ffi/c.nit
src/ffi/extern_classes.nit
src/ffi/ffi.nit
src/ffi/ffi_base.nit
src/ffi/java.nit
src/ffi/light_c.nit [new file with mode: 0644]
src/ffi/light_ffi.nit [new file with mode: 0644]
src/ffi/light_ffi_base.nit [new file with mode: 0644]
src/frontend/i18n_phase.nit
src/frontend/serialization_phase.nit
src/frontend/simple_misc_analysis.nit
src/location.nit
src/modelize/modelize_property.nit
src/neo.nit
src/nith.nit
src/nitni/nitni_base.nit
src/parser/lexer.nit
src/parser/nit.sablecc3xx
src/parser/parser.nit
src/parser/parser_abs.nit
src/parser/parser_nodes.nit
src/parser/parser_prod.nit
src/parser/tables_nit.c
src/platform/android_annotations.nit
tests/base_attr_abstract2.nit [new file with mode: 0644]
tests/base_primitive_recv.nit [new file with mode: 0644]
tests/example_wc.nit
tests/exec.skip
tests/sav/balanced_brackets.res [new file with mode: 0644]
tests/sav/base_attr_abstract2.res [new file with mode: 0644]
tests/sav/base_formal_subtype.res
tests/sav/base_gen2_alt1.res
tests/sav/base_gen2_alt3.res
tests/sav/base_gen2_alt5.res
tests/sav/base_isa_gen1.res
tests/sav/base_isa_gen2.res
tests/sav/base_isa_gen4.res
tests/sav/base_isa_gen5.res
tests/sav/base_isa_gen8.res
tests/sav/base_isa_nullable1.res
tests/sav/base_isa_nullable2.res
tests/sav/base_isa_vt_gen1.res
tests/sav/base_primitive_recv.res [new file with mode: 0644]
tests/sav/error_formal.res
tests/sav/error_needed_method_alt2.res
tests/sav/error_operators.res
tests/sav/error_redef_1alt2_alt1.res
tests/sav/error_redef_1alt2_alt4.res
tests/sav/error_redef_1alt4_alt1.res
tests/sav/error_redef_1alt4_alt4.res
tests/sav/error_type_unk_alt2.res
tests/sav/error_virtual_type2.res
tests/sav/error_virtual_type2_alt1.res
tests/sav/error_virtual_type2_alt2.res
tests/sav/error_virtual_type2_alt3.res
tests/sav/error_virtual_type2_alt4.res
tests/sav/error_virtual_type2_alt5.res
tests/sav/error_virtual_type2_alt6.res
tests/sav/error_virtual_type_alt3.res
tests/sav/loops_break.res [new file with mode: 0644]
tests/sav/loops_continue.res [new file with mode: 0644]
tests/sav/loops_do_while.res [new file with mode: 0644]
tests/sav/loops_downward_for.res [new file with mode: 0644]
tests/sav/loops_for.res [new file with mode: 0644]
tests/sav/loops_n_plus_one_half.res [new file with mode: 0644]
tests/sav/loops_while.res [new file with mode: 0644]
tests/sav/nitg-e/base_isa_gen1.res
tests/sav/nitg-e/base_isa_gen4.res
tests/sav/nitg-e/base_isa_gen5.res
tests/sav/nitg-e/base_isa_nullable1.res
tests/sav/nitg-e/base_isa_nullable2.res
tests/sav/nitg-e/test_serialization.res
tests/sav/nitg-e/test_serialization_redef.res
tests/sav/nitg-e/test_serialization_redef_alt0.res
tests/sav/nitg-e/test_serialization_redef_alt1.res
tests/sav/nitg-e/test_serialization_redef_alt2.res
tests/sav/nitmetrics_args1.res
tests/sav/nitpretty_args21.res
tests/sav/nitserial_args1.res
tests/sav/nitunit_args6.res
tests/sav/syntax_semi.res [new file with mode: 0644]
tests/sav/syntax_semi2.res [new file with mode: 0644]
tests/sav/syntax_semi2_alt1.res [new file with mode: 0644]
tests/sav/test_attr_easy.res
tests/sav/test_binary.res [new file with mode: 0644]
tests/sav/test_binary_alt1.res [new file with mode: 0644]
tests/sav/test_binary_alt2.res [new file with mode: 0644]
tests/sav/test_binary_alt3.res [new file with mode: 0644]
tests/sav/test_coll_eq.res [new file with mode: 0644]
tests/sav/test_deserialization_serial.res
tests/sav/test_parser_args1.res
tests/sav/test_parser_args7.res
tests/sav/test_peek.res [new file with mode: 0644]
tests/sav/test_serialization.res
tests/sav/test_serialization_redef.res
tests/sav/test_serialization_redef_alt0.res
tests/sav/test_serialization_redef_alt1.res
tests/sav/test_serialization_redef_alt2.res
tests/sav/tree_traversal.res [new file with mode: 0644]
tests/syntax_semi.nit [new file with mode: 0644]
tests/syntax_semi2.nit [new file with mode: 0644]
tests/test_binary.nit [new file with mode: 0644]
tests/test_coll_eq.nit [new file with mode: 0644]
tests/test_deserialization.nit
tests/test_deserialization_serial.nit
tests/test_gtk.nit
tests/test_peek.nit [new file with mode: 0644]
tests/tests.sh

index 2dd8d80..35f82cd 100644 (file)
@@ -1583,7 +1583,7 @@ redef class App
        # Wanted screen height
        var screen_height = 480
 
-       redef fun window_created
+       redef fun on_create
        do
                super
                game = new Game
index 13a139e..2d164c5 100644 (file)
@@ -18,7 +18,7 @@ redef class App
        # Zoom applied for the device display from the game logic coordinates
        var zoom = 1.0
 
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index 43a633d..9b496a1 100644 (file)
@@ -22,7 +22,7 @@ redef class App
 
        init do super
 
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index 2bff3fc..b2b3fed 100644 (file)
@@ -4,8 +4,7 @@ nitiwiki:
        mkdir -p bin
        ../../bin/nitc src/nitiwiki.nit -o bin/nitiwiki
 
-check: tests
-tests: nitiwiki
+check: nitiwiki
        cd tests; make
 
 doc:
index abe84ad..1c764d4 100644 (file)
@@ -128,6 +128,55 @@ For more details on each option see `WikiConfig`.
 
 To add content in your wiki simply add markdown files (with `.md` extension) into the `pages/` folder.
 
+#### Write content
+
+Nitiwiki only support content written in
+[markdown format](http://daringfireball.net/projects/markdown/).
+
+#### Link wiki articles
+
+In nitiwiki, linking to a section or an article is done using the *wikilinks*.
+
+Wikilinks provide easy linking between pages of the wiki.
+To create a wikilink, just put the name of the page to link to in double brackets.
+For example `[[WikiLink]]`.
+
+If you ever need to write something like `[[WikiLink]]` without creating a wikilink,
+just prefix it with a `\\`, like `\\[[WikiLink]]`.
+
+There are some special linking precedence that come into play when linking between
+sections and sub-sections.
+
+Nitiwiki will chose the first entry that match the given wikilinks in that order:
+1. Looks in the current section
+2. Looks in the current section children recursively
+3. Looks in the current section parents until root
+
+To link to or from a subpage, you can use a regular wikilink that does not
+contain the name of the parent directory of the subpage.
+Nikiwiki descends the directory hierarchy looking for a page that matches your link.
+
+For example, if `FooBar/SubPage` links to `OtherPage`, nikiwiki will first prefer
+pointing the link to `FooBar/SubPage/OtherPage` if it exists, next to
+`FooBar/OtherPage` and finally to `OtherPage` in the root of the wiki.
+
+You can also specify a link that contains a relative section name,
+like `FooBar/OtherPage` to specify what page to link to.
+
+You can also use `/` at the start of a link, to specify exactly which page to link to,
+when there are multiple pages with similar names and the link goes to the wrong page by default.
+For example, linking from `FooBar/SubPage` to `/OtherPage` will link to the `OtherPage`
+in the root of the wiki, even if there is a `FooBar/OtherPage`.
+
+It's also possible to write a wikilink that uses something other than the page
+name as the link text.
+For example `[[Contact|Contact me!]]` links to the `Contact` page, but the link
+will appear like this: `Contact me!`.
+
+You can link to an anchor inside a page, using something like `[[WikiLink#foo]]`.
+
+#### Render the wiki in HTML
+
 Once you have done your changes, use:
 
        nitiwiki --status
index 200f971..803da02 100644 (file)
@@ -157,7 +157,11 @@ if opt_rsync.value then
 end
 
 # --status
-if opt_status.value or args.is_empty then
+if opt_status.value or
+       (not opt_clean.value and
+        not opt_fetch.value and
+        not opt_render.value and
+        not opt_rsync.value) then
        wiki.parse
        wiki.status
 end
index 1527d4c..56cbbcb 100644 (file)
@@ -16,7 +16,6 @@
 module wiki_base
 
 import template::macro
-import markdown
 import opts
 import ini
 
@@ -72,6 +71,9 @@ class Nitiwiki
                end
        end
 
+       # Render output.
+       fun render do end
+
        # Show wiki status.
        fun status do
                print "nitiWiki"
@@ -105,7 +107,7 @@ class Nitiwiki
                end
        end
 
-       # Display msg if `level >= verbose_level`
+       # Display msg if `level <= verbose_level`
        fun message(msg: String, level: Int) do
                if level <= verbose_level then print msg
        end
@@ -163,6 +165,7 @@ class Nitiwiki
        # `path` is used to determine the ancestor sections.
        protected fun new_article(path: String): WikiArticle do
                if entries.has_key(path) then return entries[path].as(WikiArticle)
+               message("Found article `{path}`", 2)
                var article = new WikiArticle.from_source(self, path)
                var section = new_section(path.dirname)
                section.add_child(article)
@@ -447,7 +450,7 @@ class WikiSection
        private fun try_load_config do
                var cfile = wiki.expand_path(wiki.config.root_dir, src_path, wiki.config_filename)
                if not cfile.file_exists then return
-               wiki.message("Custom config for section {name}", 2)
+               wiki.message("Custom config for section {name}", 1)
                config = new SectionConfig(cfile)
        end
 
@@ -512,18 +515,13 @@ class WikiArticle
        # Page content.
        #
        # What you want to be displayed in the page.
-       var content: nullable Writable = null
-
-       # Headlines ids and titles.
-       var headlines = new ArrayMap[String, HeadLine]
+       var content: nullable Writable = null is writable
 
-       # Create a new articleu sing a markdown source file.
+       # Create a new article using a markdown source file.
        init from_source(wiki: Nitiwiki, md_file: String) do
                src_full_path = md_file
                init(wiki, md_file.basename(".md"))
-               var md_proc = new MarkdownProcessor
-               content = md_proc.process(md)
-               headlines = md_proc.emitter.decorator.headlines
+               content = md
        end
 
        redef var src_full_path: nullable String = null
@@ -538,8 +536,8 @@ class WikiArticle
        # Extract the markdown text from `source_file`.
        #
        # REQUIRE: `has_source`.
-       var md: String is lazy do
-               assert has_source
+       var md: nullable String is lazy do
+               if not has_source then return null
                var file = new FileReader.open(src_full_path.to_s)
                var md = file.read_all
                file.close
index 3427016..461e9e5 100644 (file)
 # HTML wiki rendering
 module wiki_html
 
-import wiki_base
+import wiki_links
 
 redef class Nitiwiki
 
        # Render HTML output looking for changes in the markdown sources.
-       fun render do
+       redef fun render do
+               super
                if not root_section.is_dirty and not force_render then return
                var out_dir = expand_path(config.root_dir, config.out_dir)
                out_dir.mkdir
@@ -47,10 +48,6 @@ redef class Nitiwiki
 end
 
 redef class WikiEntry
-
-       # Url to `self` once generated.
-       fun url: String do return wiki.config.root_url.join_path(breadcrumbs.join("/"))
-
        # Get a `<a>` template link to `self`
        fun tpl_link: Writable do
                return "<a href=\"{url}\">{title}</a>"
@@ -103,17 +100,6 @@ redef class WikiSection
                end
        end
 
-       # The index page for this section.
-       #
-       # If no file `index.md` exists for this section,
-       # a summary is generated using contained articles.
-       var index: WikiArticle is lazy do
-               for child in children.values do
-                       if child isa WikiArticle and child.is_index then return child
-               end
-               return new WikiSectionIndex(wiki, "index", self)
-       end
-
        redef fun tpl_link do return index.tpl_link
 
        # Render the section hierarchy as a html tree.
@@ -173,26 +159,13 @@ redef class WikiArticle
                end
        end
 
-       redef fun url do
-               if parent == null then
-                       return wiki.config.root_url.join_path("{name}.html")
-               else
-                       return parent.url.join_path("{name}.html")
-               end
-       end
-
-       # Is `self` an index page?
-       #
-       # Checks if `self.name == "index"`.
-       fun is_index: Bool do return name == "index"
-
        redef fun render do
+               super
                if not is_dirty and not wiki.force_render then return
                wiki.message("Render article {name}", 2)
                var file = out_full_path
                file.dirname.mkdir
                tpl_page.write_to_file file
-               super
        end
 
 
@@ -317,15 +290,7 @@ class WikiSitemap
 end
 
 # A `WikiArticle` that contains the section index tree.
-class WikiSectionIndex
-       super WikiArticle
-
-       # The section described by `self`.
-       var section: WikiSection
-
-       redef fun title do return section.title
-
-       redef fun url do return section.url
+redef class WikiSectionIndex
 
        redef var is_dirty = false
 
diff --git a/contrib/nitiwiki/src/wiki_links.nit b/contrib/nitiwiki/src/wiki_links.nit
new file mode 100644 (file)
index 0000000..bbbfea0
--- /dev/null
@@ -0,0 +1,295 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Wiki internal links handling.
+module wiki_links
+
+import wiki_base
+intrude import markdown
+
+redef class Nitiwiki
+       # Looks up a WikiEntry by its `name`.
+       #
+       # Rules are:
+       # 1. Looks in the current section
+       # 2. Looks in the current section children
+       # 3. Looks in the current section parent
+       # 4. Looks up to wiki root
+       #
+       # Returns `null` if no article can be found.
+       fun lookup_entry_by_name(context: WikiEntry, name: String): nullable WikiEntry do
+               var section = context.parent
+               var res = section.lookup_entry_by_name(name)
+               if res != null then return res
+               while section != null do
+                       if section.name == name then return section
+                       if section.children.has_key(name) then return section.children[name]
+                       section = section.parent
+               end
+               return null
+       end
+
+       # Looks up a WikiEntry by its `title`.
+       #
+       # Rules are:
+       # 1. Looks in the current section
+       # 2. Looks in the current section children
+       # 3. Looks in the current section parent
+       # 4. Looks up to wiki root
+       #
+       # Returns `null` if no article can be found.
+       fun lookup_entry_by_title(context: WikiEntry, title: String): nullable WikiEntry do
+               var section = context.parent
+               var res = section.lookup_entry_by_title(title)
+               if res != null then return res
+               while section != null do
+                       if section.title == title then return section
+                       for child in section.children.values do
+                               if child.title == title then return child
+                       end
+                       section = section.parent
+               end
+               return null
+       end
+
+       # Looks up a WikiEntry by its `path`.
+       #
+       # Path can be relative from `context` like `context/entry`.
+       # Or absolute like `/entry1/entry2`.
+       #
+       # Returns `null` if no article can be found.
+       fun lookup_entry_by_path(context: WikiEntry, path: String): nullable WikiEntry do
+               var entry = context.parent
+               var parts = path.split_with("/")
+               if path.has_prefix("/") then
+                       entry = root_section
+                       if parts.is_empty then return root_section.index
+                       parts.shift
+               end
+               while not parts.is_empty do
+                       var name = parts.shift
+                       if name.is_empty then continue
+                       if not entry.children.has_key(name) then return null
+                       entry = entry.children[name]
+               end
+               return entry
+       end
+end
+
+redef class WikiEntry
+
+       # Url to `self` once generated.
+       fun url: String do return wiki.config.root_url.join_path(breadcrumbs.join("/"))
+
+       redef fun render do
+               super
+               if not is_dirty and not wiki.force_render then return
+       end
+
+       # Search in `self` then `self.children` if an entry has the name `name`.
+       fun lookup_entry_by_name(name: String): nullable WikiEntry do
+               if children.has_key(name) then return children[name]
+               for child in children.values do
+                       var res = child.lookup_entry_by_name(name)
+                       if res != null then return res
+               end
+               return null
+       end
+
+       # Search in `self` then `self.children` if an entry has the title `title`.
+       fun lookup_entry_by_title(title: String): nullable WikiEntry do
+               for child in children.values do
+                       if child.title == title then return child
+               end
+               for child in children.values do
+                       var res = child.lookup_entry_by_title(title)
+                       if res != null then return res
+               end
+               return null
+       end
+end
+
+redef class WikiSection
+
+       # The index page for this section.
+       #
+       # If no file `index.md` exists for this section,
+       # a summary is generated using contained articles.
+       var index: WikiArticle is lazy do
+               for child in children.values do
+                       if child isa WikiArticle and child.is_index then return child
+               end
+               return new WikiSectionIndex(wiki, "index", self)
+       end
+end
+
+redef class WikiArticle
+
+       # Headlines ids and titles.
+       var headlines = new ArrayMap[String, HeadLine]
+
+       # Is `self` an index page?
+       #
+       # Checks if `self.name == "index"`.
+       fun is_index: Bool do return name == "index"
+
+       redef fun url do
+               if parent == null then
+                       return wiki.config.root_url.join_path("{name}.html")
+               else
+                       return parent.url.join_path("{name}.html")
+               end
+       end
+
+       redef fun render do
+               super
+               if not is_dirty and not wiki.force_render or not has_source then return
+               var md_proc = new NitiwikiMdProcessor(wiki, self)
+               content = md_proc.process(md.as(not null))
+               headlines.recover_with(md_proc.emitter.decorator.headlines)
+       end
+end
+
+# A `WikiArticle` that contains the section index tree.
+class WikiSectionIndex
+       super WikiArticle
+
+       # The section described by `self`.
+       var section: WikiSection
+
+       redef fun title do return section.title
+
+       redef fun url do return section.url
+end
+
+# A MarkdownProcessor able to parse wiki links.
+class NitiwikiMdProcessor
+       super MarkdownProcessor
+
+       # Wiki used to resolve links.
+       var wiki: Nitiwiki
+
+       # Article parsed by `self`.
+       #
+       # Used to contextualize links.
+       var context: WikiArticle
+
+       init do
+               emitter = new MarkdownEmitter(self)
+               emitter.decorator = new NitiwikiDecorator(wiki, context)
+       end
+
+       redef fun token_at(text, pos) do
+               var token = super
+               if not token isa TokenLink then return token
+               if pos + 1 < text.length then
+                       var c = text[pos + 1]
+                       if c == '[' then return new TokenWikiLink(pos, c)
+               end
+               return token
+       end
+end
+
+private class NitiwikiDecorator
+       super HTMLDecorator
+
+       # Wiki used to resolve links.
+       var wiki: Nitiwiki
+
+       # Article used to contextualize links.
+       var context: WikiArticle
+
+       fun add_wikilink(v: MarkdownEmitter, link: Text, name, comment: nullable Text) do
+               var wiki = v.processor.as(NitiwikiMdProcessor).wiki
+               var target: nullable WikiEntry = null
+               var anchor: nullable String = null
+               if link.has("#") then
+                       var parts = link.split_with("#")
+                       link = parts.first
+                       anchor = parts.subarray(1, parts.length - 1).join("#")
+               end
+               if link.has("/") then
+                       target = wiki.lookup_entry_by_path(context, link.to_s)
+               else
+                       target = wiki.lookup_entry_by_name(context, link.to_s)
+                       if target == null then
+                               target = wiki.lookup_entry_by_title(context, link.to_s)
+                       end
+               end
+               v.add "<a "
+               if target != null then
+                       if name == null then name = target.title
+                       link = target.url
+               else
+                       wiki.message("Warning: unknown wikilink `{link}` (in {context.src_path.as(not null)})", 0)
+                       v.add "class=\"broken\" "
+               end
+               v.add "href=\""
+               append_value(v, link)
+               if anchor != null then append_value(v, "#{anchor}")
+               v.add "\""
+               if comment != null and not comment.is_empty then
+                       v.add " title=\""
+                       append_value(v, comment)
+                       v.add "\""
+               end
+               v.add ">"
+               if name == null then name = link
+               v.emit_text(name)
+               v.add "</a>"
+       end
+end
+
+# A NitiWiki link token.
+#
+# Something of the form `[[foo]]`.
+#
+# Allowed formats:
+#
+# * `[[Wikilink]]`
+# * `[[Wikilink/Bar]]`
+# * `[[Wikilink#foo]]`
+# * `[[Wikilink/Bar#foo]]`
+# * `[[title|Wikilink]]`
+# * `[[title|Wikilink/Bar]]`
+# * `[[title|Wikilink/Bar#foo]]`
+class TokenWikiLink
+       super TokenLink
+
+       redef fun emit_hyper(v) do
+               v.decorator.as(NitiwikiDecorator).add_wikilink(v, link.as(not null), name, comment)
+       end
+
+       redef fun check_link(v, out, start, token) do
+               var md = v.current_text
+               var pos = start + 2
+               var tmp = new FlatBuffer
+               pos = md.read_md_link_id(tmp, pos)
+               if pos < start then return -1
+               var name = tmp.write_to_string
+               if name.has("|") then
+                       var parts = name.split_once_on("|")
+                       self.name = parts.first
+                       self.link = parts[1]
+               else
+                       self.name = null
+                       self.link = name
+               end
+               pos += 1
+               pos = md.skip_spaces(pos)
+               if pos < start then return -1
+               pos += 1
+               return pos
+       end
+end
diff --git a/contrib/nitiwiki/tests/nitiwiki_render.args b/contrib/nitiwiki/tests/nitiwiki_render.args
deleted file mode 100644 (file)
index 6f7050e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-nitiwiki --config wiki1/config.ini --clean --render -v
diff --git a/contrib/nitiwiki/tests/nitiwiki_status.args b/contrib/nitiwiki/tests/nitiwiki_status.args
deleted file mode 100644 (file)
index aa96d13..0000000
+++ /dev/null
@@ -1 +0,0 @@
-nitiwiki --config wiki1/config.ini --clean --status
diff --git a/contrib/nitiwiki/tests/res/nitiwiki_render.res b/contrib/nitiwiki/tests/res/nitiwiki_render.res
deleted file mode 100644 (file)
index 25f17ab..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Render section out
-Render section out/sec1
-Render section out/sec2
-Render auto-index for section out/sec2
-Render section out/sec2/sub-sec21
-Render section out/sec2/sub-sec22
diff --git a/contrib/nitiwiki/tests/res/wiki1_nitiwiki_render.res b/contrib/nitiwiki/tests/res/wiki1_nitiwiki_render.res
new file mode 100644 (file)
index 0000000..adf25a7
--- /dev/null
@@ -0,0 +1 @@
+Render section out
diff --git a/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res b/contrib/nitiwiki/tests/res/wiki1_nitiwiki_status.res
new file mode 100644 (file)
index 0000000..936a764
--- /dev/null
@@ -0,0 +1,10 @@
+nitiWiki
+name: wiki1
+config: wiki1/config.ini
+url: http://localhost/
+
+There is modified files:
+ + pages
+ + /pages/index.md
+
+Use nitiwiki --render to render modified files
diff --git a/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res b/contrib/nitiwiki/tests/res/wiki2_nitiwiki_render.res
new file mode 100644 (file)
index 0000000..46cf17c
--- /dev/null
@@ -0,0 +1,20 @@
+Custom config for section sec2
+Render section out
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Warning: unknown wikilink `Not Found` (in /pages/index.md)
+Warning: unknown wikilink `/not/found` (in /pages/index.md)
+Warning: unknown wikilink `not/found` (in /pages/index.md)
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Warning: unknown wikilink `not found` (in /pages/index.md)
+Render section out/sec1
+Render section out/sec2
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `Not Found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `/not/found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not/found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Warning: unknown wikilink `not found` (in /pages/sec2/index.md)
+Render section out/sec2/sub-sec21
+Render section out/sec2/sub-sec22
@@ -1,17 +1,21 @@
 nitiWiki
-name: wiki1
-config: wiki1/config.ini
+name: wiki2
+config: wiki2/config.ini
 url: http://localhost/
 
 There is modified files:
  + pages
+ + /pages/contact.md
  + /pages/index.md
+ + /pages/other_page.md
  + pages/sec1
  + /pages/sec1/index.md
  + pages/sec2
+ + /pages/sec2/index.md
  + pages/sec2/sub-sec21
  + /pages/sec2/sub-sec21/index.md
  + pages/sec2/sub-sec22
  + /pages/sec2/sub-sec22/index.md
+ + /pages/sec2/sub-sec22/other.md
 
 Use nitiwiki --render to render modified files
diff --git a/contrib/nitiwiki/tests/wiki1_nitiwiki_render.args b/contrib/nitiwiki/tests/wiki1_nitiwiki_render.args
new file mode 100644 (file)
index 0000000..a7633a0
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki1/config.ini --clean --render -v
diff --git a/contrib/nitiwiki/tests/wiki1_nitiwiki_status.args b/contrib/nitiwiki/tests/wiki1_nitiwiki_status.args
new file mode 100644 (file)
index 0000000..d4b6826
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki1/config.ini --clean --status
diff --git a/contrib/nitiwiki/tests/wiki2/assets/css/main.css b/contrib/nitiwiki/tests/wiki2/assets/css/main.css
new file mode 100644 (file)
index 0000000..b3c3af5
--- /dev/null
@@ -0,0 +1,3 @@
+dummy { margin: 0 }
+
+a.broken { font-style: italic; color: red }
diff --git a/contrib/nitiwiki/tests/wiki2/config.ini b/contrib/nitiwiki/tests/wiki2/config.ini
new file mode 100644 (file)
index 0000000..ba285d6
--- /dev/null
@@ -0,0 +1,2 @@
+wiki.name=wiki2
+wiki.root_dir=wiki2
diff --git a/contrib/nitiwiki/tests/wiki2/pages/contact.md b/contrib/nitiwiki/tests/wiki2/pages/contact.md
new file mode 100644 (file)
index 0000000..09f7129
--- /dev/null
@@ -0,0 +1 @@
+# Contact
diff --git a/contrib/nitiwiki/tests/wiki2/pages/index.md b/contrib/nitiwiki/tests/wiki2/pages/index.md
new file mode 100644 (file)
index 0000000..9ad0a4d
--- /dev/null
@@ -0,0 +1,63 @@
+# Test wikilinks
+
+## Link to entries by name
+
+* Link to [[sec1]]
+* Link to [[sec2]]
+* Link to [[contact]]
+* Link to [[other_page]]
+* Link to [[other]]
+* Link to [[not found]]
+
+## Link to entries by title
+
+* Link to [[Sec1]]
+* Link to [[Section 2]]
+* Link to [[Contact]]
+* Link to [[Other Page]]
+* Link to [[Other]]
+* Link to [[Not Found]]
+
+## Link to entries by absolute path
+
+* Link to [[/index]]
+* Link to [[/sec1]]
+* Link to [[/sec1/index]]
+* Link to [[/sec1/]]
+* Link to [[/sec2/sub-sec22]]
+* Link to [[/sec2/sub-sec22/]]
+* Link to [[/sec2/sub-sec22/index]]
+* Link to [[/sec2/sub-sec22/other]]
+* Link to [[/not/found]]
+
+## Link to entries by relative path
+
+* Link to [[sec1]]
+* Link to [[sec1/index]]
+* Link to [[sec1/]]
+* Link to [[sec2/sub-sec22]]
+* Link to [[sec2/sub-sec22/]]
+* Link to [[sec2/sub-sec22/index]]
+* Link to [[sec2/sub-sec22/other]]
+* Link to [[not/found]]
+
+## Link with custom text
+
+* Link to [[1Fooi|Other Page]]
+* Link to [[2 Foo bar|/sec2/sub-sec22/index]]
+* Link to [[3|sec2/sub-sec22/other]]
+* Link to [[foo>bar>bar|other_page]]
+* Link to [[5|not found]]
+
+## Link with anchors
+
+* Link to [[Other Page#Foo]]
+* Link to [[/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[sec2/sub-sec22/other#3]]
+* Link to [[other_page#4]]
+* Link to [[not found#5_lol]]
+* Link to [[1|Other Page#Foo]]
+* Link to [[2|/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[3|sec2/sub-sec22/other#3]]
+* Link to [[4|other_page#4foobar#baz]]
+* Link to [[5|not found#5]]
diff --git a/contrib/nitiwiki/tests/wiki2/pages/other_page.md b/contrib/nitiwiki/tests/wiki2/pages/other_page.md
new file mode 100644 (file)
index 0000000..a1ca7d9
--- /dev/null
@@ -0,0 +1 @@
+# Other Page
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec1/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec1/index.md
new file mode 100644 (file)
index 0000000..7c2fd43
--- /dev/null
@@ -0,0 +1 @@
+# Section 1
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/config.ini b/contrib/nitiwiki/tests/wiki2/pages/sec2/config.ini
new file mode 100644 (file)
index 0000000..dcde4cc
--- /dev/null
@@ -0,0 +1 @@
+section.title=Section 2
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/index.md
new file mode 100644 (file)
index 0000000..c81eb7d
--- /dev/null
@@ -0,0 +1,58 @@
+# Test wikilinks
+
+## Link to entries by name
+
+* Link to [[sec1]]
+* Link to [[sec2]]
+* Link to [[contact]]
+* Link to [[other_page]]
+* Link to [[not found]]
+
+## Link to entries by title
+
+* Link to [[Sec1]]
+* Link to [[Section 2]]
+* Link to [[Contact]]
+* Link to [[Other Page]]
+* Link to [[Not Found]]
+
+## Link to entries by absolute path
+
+* Link to [[/index]]
+* Link to [[/sec1]]
+* Link to [[/sec1/index]]
+* Link to [[/sec1/]]
+* Link to [[/sec2/sub-sec22]]
+* Link to [[/sec2/sub-sec22/]]
+* Link to [[/sec2/sub-sec22/index]]
+* Link to [[/sec2/sub-sec22/other]]
+* Link to [[/not/found]]
+
+## Link to entries by relative path
+
+* Link to [[sub-sec22]]
+* Link to [[sub-sec22/index]]
+* Link to [[sub-sec22/other]]
+* Link to [[sub-sec22/]]
+* Link to [[not/found]]
+
+## Link with custom text
+
+* Link to [[1Foo|Other Page]]
+* Link to [[2 Foo bar|/sec2/sub-sec22/index]]
+* Link to [[3|sub-sec22/other]]
+* Link to [[4foo>bar>baz|other_page]]
+* Link to [[5|not found]]
+
+## Link with anchors
+
+* Link to [[Other Page#Foo]]
+* Link to [[/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[sub-sec22/other#3]]
+* Link to [[other_page#4]]
+* Link to [[not found#5_lol]]
+* Link to [[1|Other Page#Foo]]
+* Link to [[2|/sec2/sub-sec22/index#2 Foo bar]]
+* Link to [[3|sub-sec22/other#3]]
+* Link to [[4|other_page#4foobar#baz]]
+* Link to [[5|not found#5]]
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec21/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec21/index.md
new file mode 100644 (file)
index 0000000..4c40d90
--- /dev/null
@@ -0,0 +1 @@
+# Section 2-1
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/index.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/index.md
new file mode 100644 (file)
index 0000000..03e06f2
--- /dev/null
@@ -0,0 +1 @@
+# Section 2-2
diff --git a/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/other.md b/contrib/nitiwiki/tests/wiki2/pages/sec2/sub-sec22/other.md
new file mode 100644 (file)
index 0000000..10a1342
--- /dev/null
@@ -0,0 +1 @@
+# Other page
diff --git a/contrib/nitiwiki/tests/wiki2/templates/footer.html b/contrib/nitiwiki/tests/wiki2/templates/footer.html
new file mode 100644 (file)
index 0000000..7506b39
--- /dev/null
@@ -0,0 +1,10 @@
+<div class="row footer">
+       <div class="container-fluid">
+               <div class="well well-sm">
+                       <p><strong>%TITLE% &copy; %YEAR%</strong></p>
+                       <p class="text-muted"><em>last modification %GEN_TIME%</em></p>
+                       <p class="text-muted">Proudly powered by
+                               <a href="http://nitlanguage.org">nit</a>!</p>
+               </div>
+       </div>
+</div>
diff --git a/contrib/nitiwiki/tests/wiki2/templates/header.html b/contrib/nitiwiki/tests/wiki2/templates/header.html
new file mode 100644 (file)
index 0000000..1cb06bf
--- /dev/null
@@ -0,0 +1,9 @@
+<div class="container-fluid header">
+       <div class="container">
+               <div class="header">
+                       <a href="http://uqam.ca"><img src="%ROOT_URL%/%LOGO%" alt="logo" /></a>
+                       <h2>%SUBTITLE%</h2>
+                       <h1>%TITLE%</h1>
+               </div>
+       </div>
+</div>
diff --git a/contrib/nitiwiki/tests/wiki2/templates/menu.html b/contrib/nitiwiki/tests/wiki2/templates/menu.html
new file mode 100644 (file)
index 0000000..1ff832e
--- /dev/null
@@ -0,0 +1,20 @@
+<nav class="menu" role="navigation">
+       <div class="container">
+               <!-- Brand and toggle get grouped for better mobile display -->
+               <div class="navbar-header">
+                       <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                               <span class="sr-only">Toggle navigation</span>
+                               <span class="icon-bar"></span>
+                               <span class="icon-bar"></span>
+                               <span class="icon-bar"></span>
+                       </button>
+                       <a class="navbar-brand" href="%ROOT_URL%index.html">%TITLE%</a>
+               </div>
+               <!-- Collect the nav links, forms, and other content for toggling -->
+               <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+                       <ul class="nav navbar-nav">
+                       %MENUS%
+                       </ul>
+               </div><!-- /.navbar-collapse -->
+       </div>
+</nav>
diff --git a/contrib/nitiwiki/tests/wiki2/templates/template.html b/contrib/nitiwiki/tests/wiki2/templates/template.html
new file mode 100644 (file)
index 0000000..6b3b126
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+       <head>
+               <meta charset="utf-8">
+               <meta http-equiv="X-UA-Compatible" content="IE=edge">
+               <meta name="viewport" content="width=device-width, initial-scale=1">
+               <title>%TITLE%</title>
+
+               <link href="%ROOT_URL%/assets/vendors/bootstrap/bootstrap-3.2.0-dist/css/bootstrap.min.css" rel="stylesheet">
+               <link href="%ROOT_URL%/assets/css/main.css" rel="stylesheet">
+
+               <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+               <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+               <!--[if lt IE 9]>
+               <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+               <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+               <![endif]-->
+       </head>
+       <body>
+               %HEADER%
+               %TOP_MENU%
+               <div class="container">
+                       <div class="row">
+                               %BODY%
+                       </div>
+                       %FOOTER%
+               </div>
+
+               <script src="%ROOT_URL%/vendors/jquery/jquery-1.11.1.min.js"></script>
+               <script src="%ROOT_URL%/vendors/bootstrap/bootstrap-3.2.0-dist/js/bootstrap.min.js"></script>
+       </body>
+</html>
diff --git a/contrib/nitiwiki/tests/wiki2_nitiwiki_render.args b/contrib/nitiwiki/tests/wiki2_nitiwiki_render.args
new file mode 100644 (file)
index 0000000..d4d6ee6
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki2/config.ini --clean --render -v
diff --git a/contrib/nitiwiki/tests/wiki2_nitiwiki_status.args b/contrib/nitiwiki/tests/wiki2_nitiwiki_status.args
new file mode 100644 (file)
index 0000000..d2da70b
--- /dev/null
@@ -0,0 +1 @@
+../bin/nitiwiki --config wiki2/config.ini --clean --status
index 99cc0c2..c799b86 100644 (file)
@@ -490,7 +490,7 @@ class PlayerFirstReview
        redef fun react_event(game, event) do
                if not event isa IssueCommentEvent then return
                # FIXME use a more precise way to locate reviews
-               if event.comment.has_ok_review then
+               if event.comment.is_ack then
                        var player = event.comment.user.player(game)
                        var a = new_achievement(game)
                        player.unlock_achievement(a, event)
index 79a3682..2424d86 100644 (file)
@@ -88,12 +88,9 @@ redef class IssueCommentEvent
 
        # Rewards player for review comments.
        #
-       # Actuallty we look if the comment contains the string `"+1"`.
-       #
        # TODO only give nitcoins if reviewers < 2
        redef fun react_player_event(r, game) do
-               # FIXME use a more precise way to locate reviews
-               if comment.body.has("\\+1\\b".to_re) then
+               if comment.is_ack then
                        react_player_review(r, game)
                end
        end
index e8afccc..b7d3530 100644 (file)
@@ -273,7 +273,7 @@ redef class IssueCommentEvent
                        game.stats.inc("comments")
                        player.stats.inc("comments")
                        # FIXME use a more precise way to locate reviews
-                       if comment.has_ok_review then
+                       if comment.is_ack then
                                game.stats.inc("reviews")
                                player.stats.inc("reviews")
                        end
@@ -282,8 +282,3 @@ redef class IssueCommentEvent
                end
        end
 end
-
-redef class IssueComment
-       # Does this comment contain a "+1"?
-       fun has_ok_review: Bool do return body.has("\\+1\\b".to_re)
-end
diff --git a/contrib/refund/.gitignore b/contrib/refund/.gitignore
new file mode 100644 (file)
index 0000000..f8f6caf
--- /dev/null
@@ -0,0 +1,3 @@
+bin/
+tests/out/
+stats.json
diff --git a/contrib/refund/Makefile b/contrib/refund/Makefile
new file mode 100644 (file)
index 0000000..e3b2579
--- /dev/null
@@ -0,0 +1,29 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+all: refund
+
+refund:
+       mkdir -p bin
+       ../../bin/nitc src/refund.nit -o bin/refund
+
+check: refund
+       cd tests; make
+
+clean:
+       rm -rf bin
+       rm -rf -- .nit_compile 2> /dev/null || true
+       cd tests; make clean
diff --git a/contrib/refund/src/refund.nit b/contrib/refund/src/refund.nit
new file mode 100644 (file)
index 0000000..02e0af1
--- /dev/null
@@ -0,0 +1,132 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Insurance refunds calculation tool.
+#
+# `refund` computes automatically the allowed refund for a reclamation according
+# to an insurrance policy.
+#
+# Usage:
+#
+# ~~~sh
+# > refund (<input_file> <output_file> | [OPTIONS])
+# ~~~
+#
+# Input file:
+#
+# `refund` expects a JSON input file on the form:
+#
+# ~~~json
+# {
+#  "dossier": "A100323",
+#  "mois": "2015-01",
+#  "reclamations": [
+#   {
+#    "soin": 100,
+#    "date": "2015-01-11",
+#    "montant": "234.00$"
+#   }, {
+#    "soin": 200,
+#    "date": "2015-01-13",
+#    "montant": "128.00$"
+#   }, {
+#    "soin": 334,
+#    "date": "2015-01-23",
+#    "montant": "50.00$"
+#   }
+#  ]
+# }
+# ~~~
+#
+# Output file:
+#
+# You have to specify the path where `refund` should output the result file.
+#
+# Results are formatted as JSON:
+#
+# ~~~json
+# {
+#  "client": "100323",
+#  "mois": "2015-01",
+#  "remboursements": [
+#   {
+#    "soin": 100,
+#    "date": "2015-01-11",
+#    "montant": "58.50$"
+#   }, {
+#    "soin": 200,
+#    "date": "2015-01-13",
+#    "montant": "22.50$"
+#   }, {
+#    "soin": 334,
+#    "date": "2015-01-23",
+#    "montant": "0.00$"
+#   }
+#  ]
+# }
+# ~~~
+#
+# Options:
+#
+# `refund` can generate statistics about reclamations and refunds computed.
+#
+# * `-S`: display statistics
+# * `-SR`: reset statistics
+#
+# Error handling:
+#
+# In case of error, a JSON object is generated in place of the output file:
+#
+# ~~~json
+# { "message": "Invalid input data" }
+# ~~~
+module refund
+
+
+import refund_json
+
+# Display usage in console then leave.
+fun usage do
+       print ""
+       print "Usage:"
+       print "refund <input.json> <output.json>"
+       print ""
+       print "options"
+       print " -S\tShow stats in console"
+       print " -RS\tClear stats"
+       exit 1
+end
+
+var proc = new RefundProcessor
+
+if args.length == 1 then
+       var flag = args.first
+       if flag == "-RS" then
+               proc.clear_stats
+               exit 0
+       else if flag == "-S" then
+               proc.show_stats
+               exit 0
+       else
+               print "Error: Unknown flag {flag}."
+               usage
+       end
+else if args.length != 2 then
+       print "Error: Incorrect number of arguments. Got {args.length}, expected 2."
+       usage
+end
+
+proc.process(args[0], args[1])
diff --git a/contrib/refund/src/refund_base.nit b/contrib/refund/src/refund_base.nit
new file mode 100644 (file)
index 0000000..fbd5fee
--- /dev/null
@@ -0,0 +1,421 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Insurance refunds calculation base classes.
+module refund_base
+
+import counter
+
+# `RefundProcessor` manages the calculation of the refunds.
+#
+# See `process`.
+class RefundProcessor
+
+       # Where to generate output file.
+       var output_file: String is noinit, writable
+
+       # Where to save usage statistics.
+       var stats_file = "stats.json"
+
+       # Processes the `input_file` and write the output in `output_file`.
+       #
+       # Steps:
+       #
+       # 1. Parses the input_file and check json validity (see `load_input`).
+       # 2. Instantiates and checks the reclamation sheet against client rules
+       #   (see `ReclamationSheet.from_json`).
+       # 3. Processes refunds (see `proces_refunds`).
+       # 4. Writes the output file (see `write_output`).
+       fun process(input_file, output_file: String) is abstract
+
+       # Refunds allowed for the current reclamation sheet.
+       var current_refunds = new HashMap[Care, Dollar]
+
+       # Computes allowed refunds for a given `Reclamation` found in a `ReclamationSheet`.
+       fun process_refund(sheet: ReclamationSheet, recl: Reclamation): Dollar is abstract
+
+       # Shows stats values in console
+       fun show_stats do print load_stats
+
+       # Loads stats from file as a RefundStats instance.
+       fun load_stats: RefundStats is abstract
+
+       # Saves stats in file.
+       fun save_stats(stats: RefundStats) is abstract
+
+       # Outputs error object then exit.
+       fun die(msg: String) is abstract
+
+       # Clears stats.
+       #
+       # Basically delete the stats file.
+       fun clear_stats do if stats_file.file_exists then stats_file.file_delete
+end
+
+# Stats representation using a `Counter`.
+class RefundStats
+       super Counter[String]
+end
+
+# A `Client` can ask for refunds from the insurance company.
+class Client
+
+       # Client number.
+       var number: String
+
+       redef fun to_s do return "#{number}"
+end
+
+# A `ReclamationSheet` is filled by the `Client` to obtain a `RefundSheet`.
+class ReclamationSheet
+
+       # File used for this refund.
+       var file: ReclFile is writable
+
+       # Month concerned by the refund.
+       var month: ReclMonth is writable
+
+       # Array of reclamations.
+       var recls = new Array[Reclamation] is writable
+
+       redef fun to_s do
+               return "Refund (file: {file}, month: {month}, recls: {recls.length})"
+       end
+end
+
+# A File found in a `ReclamationSheet`.
+#
+# A File points to a `Contract` and a `Client`.
+#
+# Allowed format is: `X12345` where `X` is the contract kind and `12345` is the
+# client number.
+class ReclFile
+
+       # File string id.
+       var id: String is writable
+
+       # Contract instance linked to this file.
+       var contract: Contract is noinit, writable
+
+       # Client instance linked to this file.
+       var client: Client is noinit, writable
+
+       # Returns the contract instance corresponding to `kind`.
+       fun contract_factory(proc: RefundProcessor, kind: String): Contract do
+               if kind == "A" then return new ContractA
+               if kind == "B" then return new ContractB
+               if kind == "C" then return new ContractC
+               if kind == "D" then return new ContractD
+               if kind == "E" then return new ContractE
+               proc.die("Unknown contract {kind}")
+               abort
+       end
+
+       redef fun to_s do return "{contract.kind}{client.number}"
+end
+
+# Month date formatted for contracts.
+#
+# Mainly used to factorize treatments on date calculation.
+class ReclMonth
+
+       # Internal date used to store the month.
+       var date: ReclDate is writable
+
+       # Is `date` in this month?
+       fun has(date: ReclDate): Bool do return self.date.month == date.month
+
+       redef fun to_s do
+               if date.month < 10 then
+                       return "{date.year}-0{date.month}"
+               end
+               return "{date.year}-0{date.month}"
+       end
+end
+
+# The date on which a `Care` occured.
+class ReclDate
+       # Year of the month.
+       var year: Int is writable
+
+       # Month number (`1` is January).
+       var month: Int is writable
+
+       # Day number.
+       var day: Int is writable
+
+       redef fun to_s do
+               var res = new FlatBuffer
+               res.append "{year}-"
+               if month < 10 then
+                       res.append "0{month}-"
+               else
+                       res.append "{month}-"
+               end
+               if day < 10 then
+                       res.append "0{day}"
+               else
+                       res.append day.to_s
+               end
+               return res.write_to_string
+       end
+end
+
+# `RefundRecl` are parts of the `RefundReclamation`.
+class Reclamation
+       # `Care` id concerned by this reclamation.
+       var care_id: Int is writable
+
+       # Date this care was applied.
+       var date: ReclDate is writable
+
+       # Amount of money given by the `Client` in exchange of this care.
+       var fees: Dollar is writable
+
+       redef fun to_s do return "Entry (care: {care_id}, date: {date}, fees: {fees})"
+end
+
+# A `Contract` specifies the refund applicable on care.
+class Contract
+
+       # Kind of the contract (specified by a letter).
+       var kind: String is noinit, writable
+
+       # Covered cares for this kind of contract.
+       var cares = new Array[Care] is writable
+
+       # Adds a care to this contract.
+       fun add_care(care: Care) do cares.add care
+
+       # Gets a `Care` instance by its id.
+       #
+       # Returns `null` if no `Care` found.
+       fun care_by_id(id: Int): nullable Care do
+               for care in cares do
+                       if care.match_id(id) then return care
+               end
+               return null
+       end
+
+       redef fun to_s do return "{kind} ({cares.length} cares)"
+end
+
+# Contracts
+# FIXME move contracts to a JSON configuration file.
+
+private class ContractA
+       super Contract
+
+       init do
+               kind = "A"
+               add_care(new UniqCare.with_vals(0,   25.0, null, null))
+               add_care(new UniqCare.with_vals(100, 35.0, null, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(175, 50.0, null, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 25.0, null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 0.0, null, null))
+               add_care(new UniqCare.with_vals(400, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(500, 25.0, null, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 40.0, null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 0.0,  null, null))
+       end
+end
+
+private class ContractB
+       super Contract
+
+       init do
+               kind = "B"
+               add_care(new UniqCare.with_vals(0,   50.0, 40.0.to_dollar, null))
+               add_care(new UniqCare.with_vals(100, 50.0, 50.0.to_dollar, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(175, 75.0, null, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 100.0,null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 50.0, null, null))
+               add_care(new UniqCare.with_vals(400, 0.0,  null, null))
+               add_care(new UniqCare.with_vals(500, 50.0, 50.0.to_dollar, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 100.0,null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 70.0, null, null))
+       end
+end
+
+private class ContractC
+       super Contract
+
+       init do
+               kind = "C"
+               add_care(new UniqCare.with_vals(0,   90.0, null, null))
+               add_care(new UniqCare.with_vals(100, 95.0, null, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 85.0, null, null))
+               add_care(new UniqCare.with_vals(175, 90.0, null, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 90.0, null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 90.0, null, null))
+               add_care(new UniqCare.with_vals(400, 90.0, null, null))
+               add_care(new UniqCare.with_vals(500, 90.0, null, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 75.0, null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 90.0, null, null))
+       end
+end
+
+private class ContractD
+       super Contract
+
+       init do
+               kind = "D"
+               add_care(new UniqCare.with_vals(0,   100.0, 85.0.to_dollar,  null))
+               add_care(new UniqCare.with_vals(100, 100.0, 75.0.to_dollar,  250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 100.0, 150.0.to_dollar, null))
+               add_care(new UniqCare.with_vals(175, 95.0,  null,  200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 100.0, 100.0.to_dollar, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399],100.0, null, null))
+               add_care(new UniqCare.with_vals(400, 100.0, 65.0.to_dollar,  null))
+               add_care(new UniqCare.with_vals(500, 100.0, null,  150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 100.0, 100.0.to_dollar, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 100.0, 90.0.to_dollar, null))
+       end
+end
+
+private class ContractE
+       super Contract
+
+       init do
+               kind = "E"
+               add_care(new UniqCare.with_vals(0,   15.0, null, null))
+               add_care(new UniqCare.with_vals(100, 25.0, null, 250.0.to_dollar))
+               add_care(new UniqCare.with_vals(150, 15.0, null, null))
+               add_care(new UniqCare.with_vals(175, 25.0, 20.0.to_dollar, 200.0.to_dollar))
+               add_care(new UniqCare.with_vals(200, 12.0, null, 250.0.to_dollar))
+               add_care(new RangeCare.with_vals([300..399], 60.0, null, null))
+               add_care(new UniqCare.with_vals(400, 25.0, 15.0.to_dollar, null))
+               add_care(new UniqCare.with_vals(500, 30.0, 20.0.to_dollar, 150.0.to_dollar))
+               add_care(new UniqCare.with_vals(600, 15.0, null, 300.0.to_dollar))
+               add_care(new UniqCare.with_vals(700, 22.0, null, null))
+       end
+end
+
+# A `Care` is payed by the `Client` and can raises a `Refund`.
+interface Care
+
+       # Does `id` is acceptable for this care?
+       fun match_id(id: Int): Bool is abstract
+
+       # Percent covered for this kind of care.
+       fun cover: Float is abstract
+
+       # Max amount covered for this kind of care by reclamation.
+       fun max: nullable Dollar is abstract
+
+       # Max amount covered for this kind of care by month.
+       fun month_max: nullable Dollar is abstract
+
+       # Computes the refund for this care.
+       fun process_refund(fees: Dollar): Dollar do
+               var max = self.max
+               var val = ((fees.value.to_f * (cover / 100.0)) / 100.0).to_dollar
+               if max != null and val > max then val = max
+               return val
+       end
+end
+
+# A `UniqCare` refers to one and only one kind of `Care`.
+#
+# For example, the care `Ostéopathie` as the uniq id `200`.
+class UniqCare
+       super Care
+
+       # Care id.
+       var id: Int
+
+       redef fun match_id(id) do return self.id == id
+
+       redef var cover = 0.0
+       redef var max = null
+       redef var month_max = null
+
+       # Inits this `Care` with values.
+       #
+       # * `id`: the `Care` id.
+       # * `cover`: refund percentage covered for this `Care`.
+       # * `max`: max amount refunded for this `Care` in a reclamation sheet.
+       # * `month_max`: max amount refunded by month.
+       init with_vals(id: Int, cover: Float, max, month_max: nullable Dollar) do
+               self.id = id
+               self.cover = cover
+               self.max = max
+               self.month_max = month_max
+       end
+
+       redef fun to_s do return id.to_s
+end
+
+# A `RangeCare` refers to a set of id corresponding to the same `Care`.
+#
+# For example, the care `Soins Dentaires` is refered by the ids 300 to 399.
+class RangeCare
+       super Care
+
+       # Care id range.
+       var id: Range[Int]
+
+       redef fun match_id(id) do return self.id.has(id)
+       redef var cover = 0.0
+       redef var max = null
+       redef var month_max = null
+
+       # Inits this `Care` with values.
+       #
+       # * `id`: the `Care` id.
+       # * `cover`: refund percentage covered for this `Care`.
+       # * `max`: max amount refunded for this `Care` in a reclamation sheet.
+       # * `month_max`: max amount refunded by month.
+       init with_vals(id: Range[Int], cover: Float, max, month_max: nullable Dollar) do
+               self.id = id
+               self.cover = cover
+               self.max = max
+               self.month_max = month_max
+       end
+
+       redef fun to_s do return id.first.to_s
+end
+
+# Used to represent currencies values.
+class Dollar
+       super Comparable
+
+       redef type OTHER: Dollar
+
+       # Amount of cents.
+       var value: Int
+
+       # Inits `self` from a float `value`.
+       init from_float(value: Float) do
+               self.value = (value * 100.0).to_i
+       end
+
+       redef fun to_s do return "{value / 100}.{value % 100}$"
+       redef fun <(o) do return value < o.value
+
+       # Dollars addition.
+       fun +(o: Dollar): Dollar do return new Dollar(value + o.value)
+
+       # Dollars substraction.
+       fun -(o: Dollar): Dollar do return new Dollar(value - o.value)
+end
+
+redef class Float
+       # Returns `self` as a Dollar instance.
+       fun to_dollar: Dollar do return new Dollar.from_float(self)
+end
diff --git a/contrib/refund/src/refund_json.nit b/contrib/refund/src/refund_json.nit
new file mode 100644 (file)
index 0000000..33032b3
--- /dev/null
@@ -0,0 +1,326 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# JSON handling for `refund`.
+module refund_json
+
+import refund_base
+import json::static
+
+redef class RefundProcessor
+
+       redef fun process(input_file, output_file) do
+               self.output_file = output_file
+               var json = load_input(input_file)
+               var sheet = new ReclamationSheet.from_json(self, json)
+               var res = process_refunds(sheet)
+               write_output(res.to_pretty_json, output_file)
+       end
+
+       # Computes allowed refunds for a given `ReclamationSheet`.
+       fun process_refunds(sheet: ReclamationSheet): JsonObject do
+               # update stats
+               var stats = load_stats
+               stats.inc("total_treatments")
+               # compute refunds
+               current_refunds.clear
+               var json = new JsonObject
+               json["dossier"] = sheet.file.to_s
+               json["mois"] = sheet.month.to_s
+               var arr = new JsonArray
+               var sum = 0.0.to_dollar
+               for recl in sheet.recls do
+                       var refund = process_refund(sheet, recl)
+                       var obj = new JsonObject
+                       obj["soin"] = recl.care_id
+                       obj["date"] = recl.date.to_s
+                       obj["montant"] = refund.to_s
+                       arr.add obj
+                       sum += refund
+                       # update stats for care
+                       stats.inc("total_{recl.care_id}")
+               end
+               save_stats(stats)
+               json["remboursements"] = arr
+               json["total"] = sum.to_s
+               return json
+       end
+
+       # Loads the input string and returns its content as a JsonObject.
+       #
+       # Dies if the file cannot be read or does not contain a valid JSONObject.
+       fun load_input(file: String): JsonObject do
+               if not file.file_exists then
+                       die("File `{file}` not found.")
+                       abort
+               end
+               var ptr = new FileReader.open(file)
+               var json = ptr.read_all.parse_json
+               if json isa JsonParseError then
+                       die("Wrong input file ({json.message})")
+                       abort
+               else if not json isa JsonObject then
+                       die("Wrong input type (expected JsonObject got {json.class_name})")
+                       abort
+               end
+               ptr.close
+               return json
+       end
+
+       # Writes `str` in path specified by `file`.
+       #
+       # Used to produce output and stats.
+       fun write_output(str: String, file: String) do
+               var ofs = new FileWriter.open(file)
+               ofs.write(str)
+               ofs.close
+       end
+
+       # UTILS
+
+       # Does `json` contains `key`? Dies otherwise.
+       private fun check_key(json: JsonObject, key: String) do
+               if json.has_key(key) then return
+               die("Malformed input (missing key {key})")
+       end
+
+       # Does `str` match the regex `re`.
+       private fun check_format(str, re: String): Bool do
+               return str.has(re.to_re)
+       end
+
+       redef fun die(msg) do
+               # save error
+               var obj = new JsonObject
+               obj["message"] = msg
+               write_output(obj.to_pretty_json, output_file)
+               # update stats
+               var stats = load_stats
+               stats.inc("total_reject")
+               save_stats(stats)
+               # leave
+               exit 1
+       end
+
+       redef fun show_stats do print load_stats.to_json.to_pretty_json
+
+       redef fun load_stats do
+               # If no stats found, return a new object
+               if not stats_file.file_exists then return new RefundStats
+               # Try to read from file
+               var ifs = new FileReader.open(stats_file)
+               var content = ifs.read_all.parse_json
+               ifs.close
+               # If file is corrupted, return a new object
+               if not content isa JsonObject then return new RefundStats
+               # Return file contained stats
+               return new RefundStats.from_json(content)
+       end
+
+       redef fun save_stats(stats: RefundStats) do
+               write_output(stats.to_json.to_pretty_json, stats_file)
+       end
+end
+
+redef class RefundStats
+
+       # Inits `self` from the content of a JsonObject
+       init from_json(json: JsonObject) do
+               for k, v in json do self[k] = v.as(Int)
+       end
+
+       # Outputs `self` as a JSON string.
+       fun to_json: JsonObject do
+               var obj = new JsonObject
+               for k, v in self do obj[k] = v
+               return obj
+       end
+end
+
+redef class ReclamationSheet
+
+       # Inits `self` from the content of a `JsonObject`.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               file = new ReclFile.from_json(proc, json)
+               month = new ReclMonth.from_json(proc, json)
+               recls = parse_recls(proc, json)
+               init(file, month)
+       end
+
+       # Parses and checks the given `json` then returns an array of `Reclamation` instances.
+       private fun parse_recls(proc: RefundProcessor, json: JsonObject): Array[Reclamation] do
+               proc.check_key(json, "reclamations")
+               var res = new Array[Reclamation]
+               var recls = json["reclamations"]
+               if not recls isa JsonArray then
+                       proc.die("Wrong type for `number` (expected JsonArray got {recls.class_name})")
+                       abort
+               end
+               var i = 0
+               for obj in recls do
+                       if not obj isa JsonObject then
+                               proc.die("Wrong type for `reclamations#{i}` " +
+                                       "(expected JsonObject got {obj.class_name})")
+                               abort
+                       end
+                       var recl = new Reclamation.from_json(proc, obj)
+                       if not month.has(recl.date) then
+                               proc.die("Wrong `mois` for `soin` with id `{recl.care_id}`")
+                               abort
+                       end
+                       if file.contract.care_by_id(recl.care_id) == null then
+                               proc.die("Unknown `soin` with id `{recl.care_id}`")
+                               abort
+                       end
+                       res.add recl
+                       i += 1
+               end
+               return res
+       end
+end
+
+redef class ReclFile
+       # Inits `self` from the content of a JsonObject.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               proc.check_key(json, "dossier")
+               var id = json["dossier"]
+               if not id isa String then
+                       proc.die("Wrong type for `dossier` (expected String got {id.class_name})")
+                       abort
+               end
+               # Check format
+               parse_contract(proc, id)
+               parse_client(proc, id)
+               init(id)
+       end
+
+       # Tries to parse the contract from `file_id` string.
+       private fun parse_contract(proc: RefundProcessor, file_id: String) do
+               var kind = file_id.first.to_s
+               if not proc.check_format(kind, "^[A-E]\{1\}$") then
+                       proc.die("Wrong contract (expected A, B, C, D or E got {kind})")
+               end
+               contract = contract_factory(proc, kind)
+       end
+
+       # Tries to parse the client number from the `file_id` string.
+       private fun parse_client(proc: RefundProcessor, file_id: String) do
+               var num = file_id.substring_from(1)
+               if not proc.check_format(num, "^[0-9]\{6\}$") then
+                       proc.die("Wrong format for `number` (expected XXXXXX got {num})")
+                       abort
+               end
+               client = new Client(num)
+       end
+end
+
+redef class ReclMonth
+       # Inits `self` from a `JsonObject`.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               proc.check_key(json, "mois")
+               var month = json["mois"]
+               if not month isa String then
+                       proc.die("Wrong type for `mois` (expected String got {month.class_name})")
+                       return
+               end
+               if not proc.check_format(month, "^[0-9]\{4\}-[0-9]\{2\}$") then
+                       proc.die("Wrong format for `mois` (expected AAAA-MM got {month})")
+                       return
+               end
+               from_string(proc, month)
+       end
+
+       # Inits `self` from a string representation formatted as `AAAA-MM`.
+       init from_string(proc: RefundProcessor, str: String) do
+               var parts = str.split("-")
+               var year = parts[0].to_i
+               var month = parts[1].to_i
+               if month < 1 or month > 12 then
+                       proc.die("Wrong format for `mois` (expected AAAA-MM got {str})")
+                       return
+               end
+               date = new ReclDate(year, month, 1)
+               init(date)
+       end
+end
+
+redef class ReclDate
+       # Inits `self` from a `JsonObject`.
+       #
+       # Dies if the `json` input is invalid.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               proc.check_key(json, "date")
+               var date = json["date"]
+               if not date isa String then
+                       proc.die("Wrong type for `date` (expected String got {date.class_name})")
+                       abort
+               end
+               if not proc.check_format(date, "^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}$") then
+                       proc.die("Wrong format for `date` (expected AAAA-MM-DD got {date})")
+                       abort
+               end
+               from_string(proc, date)
+       end
+
+       # Inits `self` from its string representation formatted as `AAAA-MM`.
+       init from_string(proc: RefundProcessor, str: String) do
+               var parts = str.split("-")
+               year = parts[0].to_i
+               month = parts[1].to_i
+               day = parts[2].to_i
+               if month < 1 or month > 12 or day < 1 or day > 31 then
+                       proc.die("Wrong format for `mois` (expected AAAA-MM got {str})")
+                       abort
+               end
+               init(year, month, day)
+       end
+end
+
+redef class Reclamation
+       # Inits `self` from a `JsonObject`.
+       init from_json(proc: RefundProcessor, json: JsonObject) do
+               care_id = parse_care_id(proc, json)
+               date = new ReclDate.from_json(proc, json)
+               fees = parse_fees(proc, json)
+               init(care_id, date, fees)
+       end
+
+       # Inits `self` from its string representation formatted as `Int`.
+       private fun parse_care_id(proc: RefundProcessor, json: JsonObject): Int do
+               proc.check_key(json, "soin")
+               var id = json["soin"]
+               if not id isa Int then
+                       proc.die("Wrong type for `soin` (expected Int got {id.class_name})")
+                       abort
+               end
+               return id
+       end
+
+       # Inits `self` from its string representation formatted as `0.00$`.
+       private fun parse_fees(proc: RefundProcessor, json: JsonObject): Dollar do
+               proc.check_key(json, "montant")
+               var fees = json["montant"]
+               if not fees isa String then
+                       proc.die("Wrong type for `fees` (expected String got {fees.class_name})")
+                       abort
+               end
+               if not proc.check_format(fees, "^[0-9]+((\\.|\\,)[0-9]+)?\\$$") then
+                       proc.die("Wrong format for `montant` (expected XX.XX$ got {fees})")
+                       abort
+               end
+               return new Dollar.from_float(fees.basename("$").to_f)
+       end
+end
diff --git a/contrib/refund/tests/Makefile b/contrib/refund/tests/Makefile
new file mode 100644 (file)
index 0000000..0dce637
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright 2013 Alexandre Terrasa <alexandre@moz-code.org>.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+all: tests
+
+tests: clean
+       ./tests.sh
+
+clean:
+       rm -rf out/
diff --git a/contrib/refund/tests/client_error1.json b/contrib/refund/tests/client_error1.json
new file mode 100644 (file)
index 0000000..eef9501
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/client_error2.json b/contrib/refund/tests/client_error2.json
new file mode 100644 (file)
index 0000000..a6011f9
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A1003233",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/client_error3.json b/contrib/refund/tests/client_error3.json
new file mode 100644 (file)
index 0000000..7a2fe14
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A10032A",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/client_error4.json b/contrib/refund/tests/client_error4.json
new file mode 100644 (file)
index 0000000..025d228
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": 1003233,
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA1.json b/contrib/refund/tests/contractA1.json
new file mode 100644 (file)
index 0000000..21ebb8b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA2.json b/contrib/refund/tests/contractA2.json
new file mode 100644 (file)
index 0000000..13373a1
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 0,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA3.json b/contrib/refund/tests/contractA3.json
new file mode 100644 (file)
index 0000000..c119435
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA4.json b/contrib/refund/tests/contractA4.json
new file mode 100644 (file)
index 0000000..d6d02b4
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200,00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractA5.json b/contrib/refund/tests/contractA5.json
new file mode 100644 (file)
index 0000000..ca6f222
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "reclamations": [
+               {
+                       "soin": 175,
+                       "date": "2015-01-11",
+                       "montant": "130.00$"
+               },
+               {
+                       "soin": 175,
+                       "date": "2015-01-14",
+                       "montant": "130.00$"
+               },
+               {
+                       "soin": 175,
+                       "date": "2015-01-15",
+                       "montant": "130.00$"
+               },
+               {
+                       "soin": 175,
+                       "date": "2015-01-17",
+                       "montant": "130.00$"
+               }
+       ]
+}
diff --git a/contrib/refund/tests/contractB1.json b/contrib/refund/tests/contractB1.json
new file mode 100644 (file)
index 0000000..31afc35
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB2.json b/contrib/refund/tests/contractB2.json
new file mode 100644 (file)
index 0000000..16af82c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB3.json b/contrib/refund/tests/contractB3.json
new file mode 100644 (file)
index 0000000..b2df55a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB4.json b/contrib/refund/tests/contractB4.json
new file mode 100644 (file)
index 0000000..555766f
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200,00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200,00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractB5.json b/contrib/refund/tests/contractB5.json
new file mode 100644 (file)
index 0000000..0ea3611
--- /dev/null
@@ -0,0 +1,41 @@
+{
+    "dossier": "B100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "400,00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-11",
+            "montant": "1400,00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractC1.json b/contrib/refund/tests/contractC1.json
new file mode 100644 (file)
index 0000000..628f9e6
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "C100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "100.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-13",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 399,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractC2.json b/contrib/refund/tests/contractC2.json
new file mode 100644 (file)
index 0000000..c9f2a9a
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "dossier": "C100323",
+    "mois": "2015-01",
+    "reclamations": []
+}
diff --git a/contrib/refund/tests/contractC3.json b/contrib/refund/tests/contractC3.json
new file mode 100644 (file)
index 0000000..a502605
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "C100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractD1.json b/contrib/refund/tests/contractD1.json
new file mode 100644 (file)
index 0000000..7a47a3f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-13",
+            "montant": "900.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "100.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractD2.json b/contrib/refund/tests/contractD2.json
new file mode 100644 (file)
index 0000000..c7fb96f
--- /dev/null
@@ -0,0 +1,26 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "0.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractD3.json b/contrib/refund/tests/contractD3.json
new file mode 100644 (file)
index 0000000..7580bbf
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+       ]
+}
diff --git a/contrib/refund/tests/contractD4.json b/contrib/refund/tests/contractD4.json
new file mode 100644 (file)
index 0000000..55e50f5
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "D100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractE1.json b/contrib/refund/tests/contractE1.json
new file mode 100644 (file)
index 0000000..91ba4c1
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-13",
+            "montant": "900.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "100.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractE2.json b/contrib/refund/tests/contractE2.json
new file mode 100644 (file)
index 0000000..d805d2b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 600,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contractE3.json b/contrib/refund/tests/contractE3.json
new file mode 100644 (file)
index 0000000..4cfed1b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 200,
+            "date": "2015-01-11",
+            "montant": "69.00$"
+        },
+        {
+            "soin": 400,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 500,
+            "date": "2015-01-23",
+            "montant": "400.00$"
+        }
+       ]
+}
diff --git a/contrib/refund/tests/contractE4.json b/contrib/refund/tests/contractE4.json
new file mode 100644 (file)
index 0000000..6c16688
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "dossier": "E100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 150,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        },
+        {
+            "soin": 175,
+            "date": "2015-01-11",
+            "montant": "200.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error1.json b/contrib/refund/tests/contract_error1.json
new file mode 100644 (file)
index 0000000..feb423f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error2.json b/contrib/refund/tests/contract_error2.json
new file mode 100644 (file)
index 0000000..4aac886
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "a100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error3.json b/contrib/refund/tests/contract_error3.json
new file mode 100644 (file)
index 0000000..271111c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "Z100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/contract_error4.json b/contrib/refund/tests/contract_error4.json
new file mode 100644 (file)
index 0000000..30bd236
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "100100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/dossier_error1.json b/contrib/refund/tests/dossier_error1.json
new file mode 100644 (file)
index 0000000..be5cdc3
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/json_error1.json b/contrib/refund/tests/json_error1.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/contrib/refund/tests/json_error2.json b/contrib/refund/tests/json_error2.json
new file mode 100644 (file)
index 0000000..fe51488
--- /dev/null
@@ -0,0 +1 @@
+[]
diff --git a/contrib/refund/tests/json_error3.json b/contrib/refund/tests/json_error3.json
new file mode 100644 (file)
index 0000000..98232c6
--- /dev/null
@@ -0,0 +1 @@
+{
diff --git a/contrib/refund/tests/month_error1.json b/contrib/refund/tests/month_error1.json
new file mode 100644 (file)
index 0000000..9f8213e
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/month_error2.json b/contrib/refund/tests/month_error2.json
new file mode 100644 (file)
index 0000000..d1f4321
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": 10,
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/month_error3.json b/contrib/refund/tests/month_error3.json
new file mode 100644 (file)
index 0000000..734fc6a
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015/01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/month_error4.json b/contrib/refund/tests/month_error4.json
new file mode 100644 (file)
index 0000000..26faacf
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-23",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error1.json b/contrib/refund/tests/recl_date_error1.json
new file mode 100644 (file)
index 0000000..46654c1
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error2.json b/contrib/refund/tests/recl_date_error2.json
new file mode 100644 (file)
index 0000000..b26aac6
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015/01/11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error3.json b/contrib/refund/tests/recl_date_error3.json
new file mode 100644 (file)
index 0000000..b11c1a9
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-13-32",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_date_error4.json b/contrib/refund/tests/recl_date_error4.json
new file mode 100644 (file)
index 0000000..b40c028
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-02-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_error1.json b/contrib/refund/tests/recl_error1.json
new file mode 100644 (file)
index 0000000..664374e
--- /dev/null
@@ -0,0 +1,4 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01"
+}
diff --git a/contrib/refund/tests/recl_error2.json b/contrib/refund/tests/recl_error2.json
new file mode 100644 (file)
index 0000000..25d29f6
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": {
+        "1": {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        "2": {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        "3": {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    }
+}
diff --git a/contrib/refund/tests/recl_error3.json b/contrib/refund/tests/recl_error3.json
new file mode 100644 (file)
index 0000000..eaeb509
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [1, 2, 3]
+}
diff --git a/contrib/refund/tests/recl_error4.json b/contrib/refund/tests/recl_error4.json
new file mode 100644 (file)
index 0000000..c1218bd
--- /dev/null
@@ -0,0 +1,17 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {},
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error1.json b/contrib/refund/tests/recl_fees_error1.json
new file mode 100644 (file)
index 0000000..164d3f0
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error2.json b/contrib/refund/tests/recl_fees_error2.json
new file mode 100644 (file)
index 0000000..8bd0eb5
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "ABCD"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error3.json b/contrib/refund/tests/recl_fees_error3.json
new file mode 100644 (file)
index 0000000..a51948e
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_fees_error4.json b/contrib/refund/tests/recl_fees_error4.json
new file mode 100644 (file)
index 0000000..baf4d5b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 100,
+            "date": "2015-01-11",
+            "montant": "234.00"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_soin_error1.json b/contrib/refund/tests/recl_soin_error1.json
new file mode 100644 (file)
index 0000000..35f0425
--- /dev/null
@@ -0,0 +1,20 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_soin_error2.json b/contrib/refund/tests/recl_soin_error2.json
new file mode 100644 (file)
index 0000000..34ffd0b
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": "200",
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        },
+        {
+            "soin": 200,
+            "date": "2015-01-13",
+            "montant": "90.00$"
+        },
+        {
+            "soin": 334,
+            "date": "2015-01-23",
+            "montant": "125.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/recl_soin_error3.json b/contrib/refund/tests/recl_soin_error3.json
new file mode 100644 (file)
index 0000000..acf7c8d
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "dossier": "A100323",
+    "mois": "2015-01",
+    "reclamations": [
+        {
+            "soin": 900,
+            "date": "2015-01-11",
+            "montant": "234.00$"
+        }
+    ]
+}
diff --git a/contrib/refund/tests/res/client_error1.res b/contrib/refund/tests/res/client_error1.res
new file mode 100644 (file)
index 0000000..379d67e
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `number` (expected XXXXXX got )"
+}
diff --git a/contrib/refund/tests/res/client_error2.res b/contrib/refund/tests/res/client_error2.res
new file mode 100644 (file)
index 0000000..0984ee4
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `number` (expected XXXXXX got 1003233)"
+}
diff --git a/contrib/refund/tests/res/client_error3.res b/contrib/refund/tests/res/client_error3.res
new file mode 100644 (file)
index 0000000..3490290
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `number` (expected XXXXXX got 10032A)"
+}
diff --git a/contrib/refund/tests/res/client_error4.res b/contrib/refund/tests/res/client_error4.res
new file mode 100644 (file)
index 0000000..975c246
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `dossier` (expected String got Int)"
+}
diff --git a/contrib/refund/tests/res/contractA1.res b/contrib/refund/tests/res/contractA1.res
new file mode 100644 (file)
index 0000000..4d0387b
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "81.89$"
+       }, {
+               "soin": 200,
+               "date": "2015-01-13",
+               "montant": "22.50$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-23",
+               "montant": "0.0$"
+       }],
+       "total": "104.39$"
+}
diff --git a/contrib/refund/tests/res/contractA2.res b/contrib/refund/tests/res/contractA2.res
new file mode 100644 (file)
index 0000000..cb578a2
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 0,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-23",
+               "montant": "0.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-13",
+               "montant": "36.0$"
+       }],
+       "total": "86.0$"
+}
diff --git a/contrib/refund/tests/res/contractA3.res b/contrib/refund/tests/res/contractA3.res
new file mode 100644 (file)
index 0000000..5cbc843
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "100.0$"
+       }],
+       "total": "100.0$"
+}
diff --git a/contrib/refund/tests/res/contractA4.res b/contrib/refund/tests/res/contractA4.res
new file mode 100644 (file)
index 0000000..5cbc843
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "100.0$"
+       }],
+       "total": "100.0$"
+}
diff --git a/contrib/refund/tests/res/contractA5.res b/contrib/refund/tests/res/contractA5.res
new file mode 100644 (file)
index 0000000..d30e4ba
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "dossier": "A100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "65.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-14",
+               "montant": "65.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-15",
+               "montant": "65.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-17",
+               "montant": "5.0$"
+       }],
+       "total": "200.0$"
+}
diff --git a/contrib/refund/tests/res/contractB1.res b/contrib/refund/tests/res/contractB1.res
new file mode 100644 (file)
index 0000000..39a5161
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 200,
+               "date": "2015-01-13",
+               "montant": "90.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-23",
+               "montant": "200.0$"
+       }],
+       "total": "340.0$"
+}
diff --git a/contrib/refund/tests/res/contractB2.res b/contrib/refund/tests/res/contractB2.res
new file mode 100644 (file)
index 0000000..559dcfd
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "69.0$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "0.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "300.0$"
+       }],
+       "total": "369.0$"
+}
diff --git a/contrib/refund/tests/res/contractB3.res b/contrib/refund/tests/res/contractB3.res
new file mode 100644 (file)
index 0000000..3556ba0
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "150.0$"
+       }],
+       "total": "150.0$"
+}
diff --git a/contrib/refund/tests/res/contractB4.res b/contrib/refund/tests/res/contractB4.res
new file mode 100644 (file)
index 0000000..3556ba0
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "150.0$"
+       }],
+       "total": "150.0$"
+}
diff --git a/contrib/refund/tests/res/contractB5.res b/contrib/refund/tests/res/contractB5.res
new file mode 100644 (file)
index 0000000..9a31198
--- /dev/null
@@ -0,0 +1,34 @@
+{
+       "dossier": "B100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "50.0$"
+       }, {
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "0.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-11",
+               "montant": "300.0$"
+       }],
+       "total": "550.0$"
+}
diff --git a/contrib/refund/tests/res/contractC1.res b/contrib/refund/tests/res/contractC1.res
new file mode 100644 (file)
index 0000000..42f11ed
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "C100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "95.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-13",
+               "montant": "180.0$"
+       }, {
+               "soin": 399,
+               "date": "2015-01-23",
+               "montant": "360.0$"
+       }],
+       "total": "635.0$"
+}
diff --git a/contrib/refund/tests/res/contractC2.res b/contrib/refund/tests/res/contractC2.res
new file mode 100644 (file)
index 0000000..1f8f2bf
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "dossier": "C100323",
+       "mois": "2015-01",
+       "remboursements": [],
+       "total": "0.0$"
+}
diff --git a/contrib/refund/tests/res/contractC3.res b/contrib/refund/tests/res/contractC3.res
new file mode 100644 (file)
index 0000000..8c4a0a6
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "C100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "170.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "180.0$"
+       }],
+       "total": "350.0$"
+}
diff --git a/contrib/refund/tests/res/contractD1.res b/contrib/refund/tests/res/contractD1.res
new file mode 100644 (file)
index 0000000..b69ed8c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "75.0$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-13",
+               "montant": "900.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "100.0$"
+       }],
+       "total": "1075.0$"
+}
diff --git a/contrib/refund/tests/res/contractD2.res b/contrib/refund/tests/res/contractD2.res
new file mode 100644 (file)
index 0000000..2520f7f
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "69.0$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "65.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "100.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "0.0$"
+       }],
+       "total": "234.0$"
+}
diff --git a/contrib/refund/tests/res/contractD3.res b/contrib/refund/tests/res/contractD3.res
new file mode 100644 (file)
index 0000000..2d00ee8
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "69.0$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "65.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "100.0$"
+       }],
+       "total": "234.0$"
+}
diff --git a/contrib/refund/tests/res/contractD4.res b/contrib/refund/tests/res/contractD4.res
new file mode 100644 (file)
index 0000000..9f26bfe
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "D100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "150.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "190.0$"
+       }],
+       "total": "340.0$"
+}
diff --git a/contrib/refund/tests/res/contractE1.res b/contrib/refund/tests/res/contractE1.res
new file mode 100644 (file)
index 0000000..2f9d9c3
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 100,
+               "date": "2015-01-11",
+               "montant": "58.50$"
+       }, {
+               "soin": 334,
+               "date": "2015-01-13",
+               "montant": "540.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "15.0$"
+       }],
+       "total": "613.50$"
+}
diff --git a/contrib/refund/tests/res/contractE2.res b/contrib/refund/tests/res/contractE2.res
new file mode 100644 (file)
index 0000000..5bb6f4d
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "8.27$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "15.0$"
+       }, {
+               "soin": 600,
+               "date": "2015-01-23",
+               "montant": "60.0$"
+       }],
+       "total": "83.27$"
+}
diff --git a/contrib/refund/tests/res/contractE3.res b/contrib/refund/tests/res/contractE3.res
new file mode 100644 (file)
index 0000000..f28adb2
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 200,
+               "date": "2015-01-11",
+               "montant": "8.27$"
+       }, {
+               "soin": 400,
+               "date": "2015-01-13",
+               "montant": "15.0$"
+       }, {
+               "soin": 500,
+               "date": "2015-01-23",
+               "montant": "20.0$"
+       }],
+       "total": "43.27$"
+}
diff --git a/contrib/refund/tests/res/contractE4.res b/contrib/refund/tests/res/contractE4.res
new file mode 100644 (file)
index 0000000..961ec12
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "dossier": "E100323",
+       "mois": "2015-01",
+       "remboursements": [{
+               "soin": 150,
+               "date": "2015-01-11",
+               "montant": "30.0$"
+       }, {
+               "soin": 175,
+               "date": "2015-01-11",
+               "montant": "20.0$"
+       }],
+       "total": "50.0$"
+}
diff --git a/contrib/refund/tests/res/contract_error1.res b/contrib/refund/tests/res/contract_error1.res
new file mode 100644 (file)
index 0000000..dd8b5e7
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got 1)"
+}
diff --git a/contrib/refund/tests/res/contract_error2.res b/contrib/refund/tests/res/contract_error2.res
new file mode 100644 (file)
index 0000000..c6b464a
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got a)"
+}
diff --git a/contrib/refund/tests/res/contract_error3.res b/contrib/refund/tests/res/contract_error3.res
new file mode 100644 (file)
index 0000000..c009811
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got Z)"
+}
diff --git a/contrib/refund/tests/res/contract_error4.res b/contrib/refund/tests/res/contract_error4.res
new file mode 100644 (file)
index 0000000..dd8b5e7
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong contract (expected A, B, C, D or E got 1)"
+}
diff --git a/contrib/refund/tests/res/dossier_error1.res b/contrib/refund/tests/res/dossier_error1.res
new file mode 100644 (file)
index 0000000..8af54e2
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key dossier)"
+}
diff --git a/contrib/refund/tests/res/json_error1.res b/contrib/refund/tests/res/json_error1.res
new file mode 100644 (file)
index 0000000..958aa8d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong input file (Unexpected Eof; is acceptable instead: value)"
+}
diff --git a/contrib/refund/tests/res/json_error2.res b/contrib/refund/tests/res/json_error2.res
new file mode 100644 (file)
index 0000000..9a451f7
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong input type (expected JsonObject got JsonArray)"
+}
diff --git a/contrib/refund/tests/res/json_error3.res b/contrib/refund/tests/res/json_error3.res
new file mode 100644 (file)
index 0000000..d35b982
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong input file (Unexpected Eof; is acceptable instead: members, pair)"
+}
diff --git a/contrib/refund/tests/res/month_error1.res b/contrib/refund/tests/res/month_error1.res
new file mode 100644 (file)
index 0000000..57810ce
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key mois)"
+}
diff --git a/contrib/refund/tests/res/month_error2.res b/contrib/refund/tests/res/month_error2.res
new file mode 100644 (file)
index 0000000..16557d6
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `mois` (expected String got Int)"
+}
diff --git a/contrib/refund/tests/res/month_error3.res b/contrib/refund/tests/res/month_error3.res
new file mode 100644 (file)
index 0000000..088b6fe
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `mois` (expected AAAA-MM got 2015\/01)"
+}
diff --git a/contrib/refund/tests/res/month_error4.res b/contrib/refund/tests/res/month_error4.res
new file mode 100644 (file)
index 0000000..a81529d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `mois` (expected AAAA-MM got 2015-23)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error1.res b/contrib/refund/tests/res/recl_date_error1.res
new file mode 100644 (file)
index 0000000..307401c
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key date)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error2.res b/contrib/refund/tests/res/recl_date_error2.res
new file mode 100644 (file)
index 0000000..5fee43f
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `date` (expected AAAA-MM-DD got 2015\/01\/11)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error3.res b/contrib/refund/tests/res/recl_date_error3.res
new file mode 100644 (file)
index 0000000..e8a33ce
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `mois` (expected AAAA-MM got 2015-13-32)"
+}
diff --git a/contrib/refund/tests/res/recl_date_error4.res b/contrib/refund/tests/res/recl_date_error4.res
new file mode 100644 (file)
index 0000000..6e3f2ca
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong `mois` for `soin` with id `100`"
+}
diff --git a/contrib/refund/tests/res/recl_error1.res b/contrib/refund/tests/res/recl_error1.res
new file mode 100644 (file)
index 0000000..c4e34c8
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key reclamations)"
+}
diff --git a/contrib/refund/tests/res/recl_error2.res b/contrib/refund/tests/res/recl_error2.res
new file mode 100644 (file)
index 0000000..5716df8
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `number` (expected JsonArray got JsonObject)"
+}
diff --git a/contrib/refund/tests/res/recl_error3.res b/contrib/refund/tests/res/recl_error3.res
new file mode 100644 (file)
index 0000000..e8f5c80
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `reclamations#0` (expected JsonObject got Int)"
+}
diff --git a/contrib/refund/tests/res/recl_error4.res b/contrib/refund/tests/res/recl_error4.res
new file mode 100644 (file)
index 0000000..74de465
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key soin)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error1.res b/contrib/refund/tests/res/recl_fees_error1.res
new file mode 100644 (file)
index 0000000..beebcee
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key montant)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error2.res b/contrib/refund/tests/res/recl_fees_error2.res
new file mode 100644 (file)
index 0000000..09232e5
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `montant` (expected XX.XX$ got ABCD)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error3.res b/contrib/refund/tests/res/recl_fees_error3.res
new file mode 100644 (file)
index 0000000..1679482
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `montant` (expected XX.XX$ got 234)"
+}
diff --git a/contrib/refund/tests/res/recl_fees_error4.res b/contrib/refund/tests/res/recl_fees_error4.res
new file mode 100644 (file)
index 0000000..1ee1660
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong format for `montant` (expected XX.XX$ got 234.00)"
+}
diff --git a/contrib/refund/tests/res/recl_soin_error1.res b/contrib/refund/tests/res/recl_soin_error1.res
new file mode 100644 (file)
index 0000000..74de465
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Malformed input (missing key soin)"
+}
diff --git a/contrib/refund/tests/res/recl_soin_error2.res b/contrib/refund/tests/res/recl_soin_error2.res
new file mode 100644 (file)
index 0000000..c2a092d
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Wrong type for `soin` (expected Int got FlatString)"
+}
diff --git a/contrib/refund/tests/res/recl_soin_error3.res b/contrib/refund/tests/res/recl_soin_error3.res
new file mode 100644 (file)
index 0000000..3f38e32
--- /dev/null
@@ -0,0 +1,3 @@
+{
+       "message": "Unknown `soin` with id `900`"
+}
diff --git a/contrib/refund/tests/tests.sh b/contrib/refund/tests/tests.sh
new file mode 100755 (executable)
index 0000000..9ebf63f
--- /dev/null
@@ -0,0 +1,85 @@
+#!/bin/bash
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+BIN=../bin
+OUT=out
+RES=res
+
+# Execute test with name $1.
+run_test()
+{
+       local test="$1"
+       $BIN/refund $test.json $OUT/$test.res > $OUT/$test.out 2> $OUT/$test.err
+       diff $OUT/$test.res $RES/$test.res > $OUT/$test.diff 2> /dev/null
+}
+
+# Return
+#  0 if the sav not exists
+#  1 if the file does match
+#  2 if the file does not match
+check_result() {
+       local test="$1"
+
+       if [ ! -r "$RES/$test.res" ]; then
+               return 0
+       elif [ ! -s $OUT/$test.diff ]; then
+               return 1
+       else
+               return 2
+       fi
+}
+
+echo "Testing..."
+echo ""
+
+rm -rf $OUT 2>/dev/null
+mkdir $OUT 2>/dev/null
+
+all=0
+ok=0
+ko=0
+sk=0
+
+for file in `ls *.json`; do
+       ((all++))
+       test="${file%.*}"
+       echo -n "* $test: "
+
+       run_test $test
+       check_result $test
+
+       case "$?" in
+               0)
+                       echo "skip ($test.res not found)"
+                       ((sk++))
+                       continue;;
+               1)
+                       echo "success"
+                       ((ok++))
+                       ;;
+               2)
+                       echo "error (diff $OUT/$test.res $RES/$test.res)"
+                       ((ko++))
+                       ;;
+       esac
+done
+
+# clear tmp stats file.
+rm stats.json
+
+echo ""
+echo "==> success $ok/$all ($ko tests failed, $sk skipped)"
diff --git a/examples/calculator/.gitignore b/examples/calculator/.gitignore
new file mode 100644 (file)
index 0000000..700b511
--- /dev/null
@@ -0,0 +1 @@
+res/
index 6f9a0a3..071fa2b 100644 (file)
@@ -1,13 +1,26 @@
-all:
-       mkdir -p bin/
+NITC=../../bin/nitc
+NITLS=../../bin/nitls
 
-       # Compile in global mode to silence warnings on unused GTK deprecated
-       ../../bin/nitc --global --dir bin/ src/calculator_gtk.nit src/calculator_test.nit
+all: bin/calculator bin/calculator.apk bin/test
 
-android:
-       mkdir -p bin/ res/
+bin/calculator: $(shell ${NITLS} -M src/calculator.nit ../../lib/linux/ui.nit) ${NITC}
+       mkdir -p bin
+       ${NITC} -o $@ src/calculator.nit -m ../../lib/linux/ui.nit
+
+bin/calculator.apk: $(shell ${NITLS} -M src/calculator.nit ../../lib/android/ui/) ${NITC} ../../contrib/inkscape_tools/bin/svg_to_icons
+       mkdir -p bin res
        ../../contrib/inkscape_tools/bin/svg_to_icons art/icon.svg --android --out res/
-       ../../bin/nitc -o bin/calculator.apk src/calculator_android.nit
+       ${NITC} -o $@ src/calculator.nit -m ../../lib/android/ui/
+
+../../contrib/inkscape_tools/bin/svg_to_icons:
+       make -C ../../contrib/inkscape_tools/
 
-android-install: android
+android-install: bin/calculator.apk
        adb install -r bin/calculator.apk
+
+bin/test: $(shell ${NITLS} -M src/calculator_test.nit) ${NITC}
+       mkdir -p bin
+       ${NITC} -o $@ src/calculator_test.nit
+
+check: bin/test
+       bin/test
diff --git a/examples/calculator/src/calculator.nit b/examples/calculator/src/calculator.nit
new file mode 100644 (file)
index 0000000..2e2f437
--- /dev/null
@@ -0,0 +1,114 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Portable calculator UI
+module calculator is
+app_name "app.nit Calc."
+       app_version(0, 1, git_revision)
+       app_namespace "org.nitlanguage.calculator"
+
+       # Lock in portrait mode
+       android_manifest_activity """android:screenOrientation="portrait""""
+       android_api_target 15
+end
+
+import app::ui
+import app::data_store
+import android::aware
+
+import calculator_logic
+
+redef class App
+       redef fun on_create
+       do
+               # Create the main window
+               window = new CalculatorWindow
+               super
+       end
+end
+
+# The main (and only) window of this calculator
+class CalculatorWindow
+       super Window
+
+       # Calculator context, our business logic
+       private var context = new CalculatorContext
+
+       # Main window layout
+       private var layout = new VerticalLayout(parent=self)
+
+       # Main display, at the top of the screen
+       private var display = new TextInput(parent=layout)
+
+       # Maps operators as `String` to their `Button`
+       private var buttons = new HashMap[String, Button]
+
+       init
+       do
+               # All the button labels, row by row
+               var rows = [["7", "8", "9", "+"],
+                           ["4", "5", "6", "-"],
+                           ["1", "2", "3", "*"],
+                           ["0", ".", "C", "/"],
+                           ["="]]
+
+               for row in rows do
+                       var row_layout = new HorizontalLayout(parent=layout)
+
+                       for op in row do
+                               var but = new Button(parent=row_layout, text=op)
+                               but.observers.add self
+                               buttons[op] = but
+                       end
+               end
+       end
+
+       redef fun on_event(event)
+       do
+               if event isa ButtonPressEvent then
+
+                       var op = event.sender.text
+                       if op == "." then
+                               event.sender.enabled = false
+                               context.switch_to_decimals
+                       else if op.is_numeric then
+                               var n = op.to_i
+                               context.push_digit n
+                       else
+                               buttons["."].enabled = true
+                               context.push_op op.chars.first
+                       end
+
+                       display.text = context.display_text
+               end
+       end
+
+       redef fun on_save_state
+       do
+               app.data_store["context"] = context.to_json
+               super
+       end
+
+       redef fun on_restore_state
+       do
+               super
+
+               var save = app.data_store["context"]
+               if save == null then return
+               assert save isa String
+
+               self.context = new CalculatorContext.from_json(save)
+               display.text = context.display_text
+       end
+end
diff --git a/examples/calculator/src/calculator_android.nit b/examples/calculator/src/calculator_android.nit
deleted file mode 100644 (file)
index 1b1e686..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Android calculator application
-module calculator_android is
-       app_name "app.nit Calc."
-       app_version(0, 1, git_revision)
-       app_namespace "org.nitlanguage.calculator"
-
-       # Lock in portrait mode
-       android_manifest_activity """android:screenOrientation="portrait""""
-end
-
-# FIXME the next line should import `android` only when it uses nit_activity
-import android::log
-import android::ui
-
-import calculator_logic
-
-redef class Activity
-       super EventCatcher
-
-       private var context = new CalculatorContext
-
-       # The main display, at the top of the screen
-       private var display: EditText
-
-       # Maps operators as `String` to their `Button`
-       private var op2but = new HashMap[String, Button]
-
-       # Has this window been initialized?
-       private var inited = false
-
-       redef fun on_start
-       do
-               super
-
-               if inited then return
-               inited = true
-
-               # Setup UI
-               var layout = new NativeLinearLayout(native)
-               layout.set_vertical
-
-               # Display screen
-               var display = new EditText
-               layout.add_view_with_weight(display.native, 1.0)
-               display.text_size = 36.0
-               self.display = display
-
-               # Buttons; numbers and operators
-               var ops = [["7", "8", "9", "+"],
-                          ["4", "5", "6", "-"],
-                          ["1", "2", "3", "*"],
-                          ["0", ".", "C", "/"],
-                          ["="]]
-
-               for line in ops do
-                       var buts_layout = new NativeLinearLayout(native)
-                       buts_layout.set_horizontal
-                       layout.add_view_with_weight(buts_layout, 1.0)
-
-                       for op in line do
-                               var but = new Button
-                               but.event_catcher = self
-                               but.text = op
-                               but.text_size = 40
-                               buts_layout.add_view_with_weight(but.native, 1.0)
-                               op2but[op] = but
-                       end
-               end
-
-               native.content_view = layout
-       end
-
-       redef fun on_save_instance_state(state)
-       do
-               super
-
-               var nity = new Bundle.from(state)
-               nity["context"] = context.to_json
-       end
-
-       redef fun on_restore_instance_state(state)
-       do
-               super
-
-               var nity = new Bundle.from(state)
-               if not nity.has("context") then return
-
-               var json = nity.string("context")
-               if json == null then return
-
-               context = new CalculatorContext.from_json(json)
-       end
-
-       redef fun on_resume
-       do
-               display.text = context.display_text
-       end
-
-       redef fun catch_event(event)
-       do
-               if event isa ClickEvent then
-                       var sender = event.sender
-                       var op = sender.text
-
-                       if op == "." then
-                               sender.enabled = false
-                               context.switch_to_decimals
-                       else if op.is_numeric then
-                               var n = op.to_i
-                               context.push_digit n
-                       else
-                               op2but["."].enabled = true
-                               context.push_op op.chars.first
-                       end
-
-                       display.text = context.display_text
-               end
-       end
-end
diff --git a/examples/calculator/src/calculator_gtk.nit b/examples/calculator/src/calculator_gtk.nit
deleted file mode 100644 (file)
index bd01986..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Copyright 2013-2014 Alexis Laferrière <alexis.laf@xymus.net>
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# GTK calculator
-module calculator_gtk
-
-import calculator_logic
-
-import gtk
-
-# GTK calculator UI
-class CalculatorGui
-       super GtkCallable
-
-       private var win: GtkWindow is noinit
-       private var container: GtkGrid is noinit
-
-       private var lbl_disp: GtkLabel is noinit
-       private var but_eq: GtkButton is noinit
-       private var but_dot: GtkButton is noinit
-
-       private var context = new CalculatorContext
-
-       redef fun signal(sender, op)
-       do
-               if op isa Char then # is an operation
-                       if op == '.' then
-                               but_dot.sensitive = false
-                               context.switch_to_decimals
-                       else
-                               but_dot.sensitive = true
-                               context.push_op op
-                       end
-               else if op isa Int then # is a number
-                       context.push_digit op
-               end
-
-               lbl_disp.text = context.display_text
-       end
-
-       init
-       do
-               init_gtk
-
-               win = new GtkWindow(0)
-
-               container = new GtkGrid(5, 5, true)
-               win.add(container)
-
-               lbl_disp = new GtkLabel("_")
-               container.attach(lbl_disp, 0, 0, 5, 1)
-
-               # Digits
-               for n in [0..9] do
-                       var but = new GtkButton.with_label(n.to_s)
-                       but.request_size(64, 64)
-                       but.signal_connect("clicked", self, n)
-                       if n == 0 then
-                               container.attach(but, 0, 4, 1, 1)
-                       else container.attach(but, (n-1)%3, 3-(n-1)/3, 1, 1)
-               end
-
-               # Operators
-               var r = 1
-               for op in ['+', '-', '*', '/'] do
-                       var but = new GtkButton.with_label(op.to_s)
-                       but.request_size(64, 64)
-                       but.signal_connect("clicked", self, op)
-                       container.attach(but, 3, r, 1, 1)
-                       r+=1
-               end
-
-               # =
-               but_eq = new GtkButton.with_label("=")
-               but_eq.request_size(64, 64)
-               but_eq.signal_connect("clicked", self, '=')
-               container.attach(but_eq, 4, 3, 1, 2)
-
-               # .
-               but_dot = new GtkButton.with_label(".")
-               but_dot.request_size(64, 64)
-               but_dot.signal_connect("clicked", self, '.')
-               container.attach(but_dot, 1, 4, 1, 1)
-
-               # C
-               var but_c =  new GtkButton.with_label("C")
-               but_c.request_size(64, 64)
-               but_c.signal_connect("clicked", self, 'C')
-               container.attach(but_c, 2, 4, 1, 1)
-
-               win.show_all
-       end
-end
-
-# Do not show GUI in when testing
-if "NIT_TESTING".environ == "true" then exit 0
-
-var app = new CalculatorGui
-run_gtk
index 6937751..270854c 100644 (file)
@@ -29,7 +29,7 @@ context.push_op( '*' )
 context.push_digit( 2 )
 context.push_op( '=' )
 var r = context.result
-assert r == "30.00" else print r or else "-"
+assert r == 30 else print r or else "-"
 
 context = new CalculatorContext
 context.push_digit( 1 )
@@ -40,14 +40,14 @@ context.push_op( '*' )
 context.push_digit( 3 )
 context.push_op( '=' )
 r = context.result
-assert r == "42.30" else print r or else "-"
+assert r == 42.3 else print r or else "-"
 
 context.push_op( '+' )
 context.push_digit( 1 )
 context.push_digit( 1 )
 context.push_op( '=' )
 r = context.result
-assert r == "53.30" else print r or else "-"
+assert r == 53.3 else print r or else "-"
 
 context = new CalculatorContext
 context.push_digit( 4 )
@@ -58,7 +58,7 @@ context.push_op( '/' )
 context.push_digit( 3 )
 context.push_op( '=' )
 r = context.result
-assert r == "14.10" else print r or else "-"
+assert r == 14.1 else print r or else "-"
 
 #test multiple decimals
 context = new CalculatorContext
@@ -72,7 +72,7 @@ context.push_op( '+' )
 context.push_digit( 1 )
 context.push_op( '=' )
 r = context.result
-assert r == "51.123" else print r or else "-"
+assert r == 51.123 else print r or else "-"
 
 #test 'C' button
 context = new CalculatorContext
@@ -84,4 +84,4 @@ context.push_digit( 0 )
 context.push_op( '=' )
 context.push_op( 'C' )
 r = context.result
-assert r == "0.0" else print r or else "-"
+assert r == null else print r
index 7d471f6..cd294e1 100644 (file)
@@ -35,3 +35,9 @@ example
 
 of the language annotation capacities
 """
+
+var s = "example"
+
+print "This superstring {s} rocks"
+
+print "This superstring %1 rocks".format(s)
index e4e0d02..a3bd0f7 100644 (file)
@@ -6,4 +6,12 @@ msgstr "This String is a test"
 msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
 msgstr "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
 
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr "example"
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr "This superstring %1 rocks"
+
 # Generated file, do not modify
index 78ed2e7..0fbd368 100644 (file)
@@ -6,4 +6,12 @@ msgstr "Cette chaîne de caractères est un test"
 msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
 msgstr "Example de\n\nchaine multiligne\n\n\navec annotation de localisation\n"
 
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr "exemple"
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr "Cet %1 de superstring est génial"
+
 # Generated file, do not modify
index 1a50944..8cdb8e4 100644 (file)
@@ -6,4 +6,12 @@ msgstr "この文字列はてストです"
 msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
 msgstr "複数行の文字列\n\nなサンプルプログラム\n\n\n新しい国際化アノテーションとともに\n"
 
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr "サンプル"
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr "このスパ文字列%1は驚くべきです"
+
 # Generated file, do not modify
index f6c2096..9c86286 100644 (file)
@@ -6,4 +6,12 @@ msgstr ""
 msgid "Multiline string\n\nexample\n\n\nof the language annotation capacities\n"
 msgstr ""
 
+#: langannot::langannot 39--9:17
+msgid "example"
+msgstr ""
+
+#: langannot::langannot 41--7:34, langannot::langannot 43--7:33
+msgid "This superstring %1 rocks"
+msgstr ""
+
 # Generated file, do not modify
index ace5787..249ee68 100644 (file)
@@ -41,7 +41,7 @@ redef class App
                super
        end
 
-       redef fun window_created
+       redef fun on_create
        do
                super
                screen = new Screen(self, display.as(Display))
index 11efd91..d92c468 100644 (file)
@@ -35,7 +35,7 @@ redef class App
        var imgs : nullable ImageSet = null
        var splash : nullable SplashScreen = null
 
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index 7266a0c..c3824a4 100644 (file)
@@ -233,7 +233,7 @@ redef class App
 
        var screen: nullable Screen = null
 
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index f8cff4f..68f3a85 100644 (file)
@@ -16,7 +16,7 @@
 
 module complete_simple_android is
        app_namespace "org.nitlanguage.test_all"
-       target_api_version 19
+       android_api_target 19
 end
 
 import test_bundle
index 9a3212d..b89f8af 100644 (file)
@@ -26,7 +26,7 @@ redef class App
 
        var img : nullable I = null
 
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index 88a2812..cca7e1f 100644 (file)
@@ -26,7 +26,7 @@ redef class App
        var test_assets = false
        var test_ressources = true
 
-       redef fun window_created
+       redef fun on_create
        do
                super
                if test_assets then
index 4abd9a6..03b2eef 100644 (file)
@@ -21,7 +21,7 @@ import simple
 import app::data_store
 
 redef class App
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index 3265258..90af8a2 100644 (file)
@@ -32,14 +32,14 @@ redef class App
 
        fun test_intent
        do
-               intent = new Intent(self)
+               intent = new Intent
                intent.action = intent_action.view.to_s
                intent.data   = "content://contacts/people/"
 
-               intent.launch_activity
+               start_activity intent
                intent.destroy
 
-               intent = new Intent(self)
+               intent = new Intent
                var p1 = new Point(10, 20)
                intent["a_point"] = p1
                var p2 = intent["a_point"]
index 6a2503a..3992c09 100644 (file)
@@ -16,8 +16,8 @@
 
 # Test for the API level related annotations
 module test_target_api is
-       min_api_version(10)
-       max_api_version(19)
+       android_api_min 10
+       android_api_max 19
 end
 
 import simple_android
diff --git a/examples/rosettacode/balanced_brackets.nit b/examples/rosettacode/balanced_brackets.nit
new file mode 100644 (file)
index 0000000..a1ae476
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Balanced brackets
+# SEE: <http://rosettacode.org/wiki/Balanced_brackets>
+module balanced_brackets
+
+# Are `[` and `]` balanced?
+# Other characters are ignored.
+#
+#     assert is_balanced("[][[]]")
+#     assert is_balanced("")
+#     assert not is_balanced("[[]")
+#     assert not is_balanced("][][")
+fun is_balanced(s: String): Bool
+do
+       var l = 0
+       for x in s.chars do
+               if x == '[' then
+                       l += 1
+               else if x == ']' then
+                       l -= 1
+                       if l < 0 then return false
+               end
+       end
+       return l == 0
+end
+
+var n = 3
+if args.not_empty then n = args.first.to_i
+
+for i in [0..10[ do
+       var a = (['[', ']'] * n)
+       a.shuffle
+       var b = a.join("")
+       if is_balanced(b) then print "{b} is well-balanced" else print "{b} is not well-balanced"
+end
diff --git a/examples/rosettacode/loops_break.nit b/examples/rosettacode/loops_break.nit
new file mode 100644 (file)
index 0000000..b34d480
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/Break
+#
+# SEE: http://rosettacode.org/wiki/Loops/Break
+module loops_break
+
+loop
+       var a = 20.rand
+       print a
+       if a == 10 then break
+       print 20.rand
+end
diff --git a/examples/rosettacode/loops_continue.nit b/examples/rosettacode/loops_continue.nit
new file mode 100644 (file)
index 0000000..805f05d
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/Continue
+#
+# SEE: http://rosettacode.org/wiki/Loops/Continue
+module loops_continue
+
+for i in [1..10] do
+       printn i
+       if i % 5 == 0 then
+               printn "\n"
+               continue
+       end
+       printn ", "
+end
diff --git a/examples/rosettacode/loops_do_while.nit b/examples/rosettacode/loops_do_while.nit
new file mode 100644 (file)
index 0000000..0e02e25
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/Do-while
+#
+# SEE: http://rosettacode.org/wiki/Loops/Do-while
+module loops_do_while
+
+var val = 0
+loop
+       val += 1
+       print val
+       if val % 6 == 0 then break
+end
diff --git a/examples/rosettacode/loops_downward_for.nit b/examples/rosettacode/loops_downward_for.nit
new file mode 100644 (file)
index 0000000..c5b739e
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/Downward for
+#
+# SEE: http://rosettacode.org/wiki/Loops/Downward_for
+module loops_downward_for
+
+for i in [0..10].reverse_iterator do
+       print i
+end
diff --git a/examples/rosettacode/loops_for.nit b/examples/rosettacode/loops_for.nit
new file mode 100644 (file)
index 0000000..712658d
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/For
+#
+# SEE: http://rosettacode.org/wiki/Loops/For
+module loops_for
+
+for i in [1..5] do
+       for j in [1..i] do printn "*"
+       print ""
+end
diff --git a/examples/rosettacode/loops_infinite.nit b/examples/rosettacode/loops_infinite.nit
new file mode 100644 (file)
index 0000000..75a1a70
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/Infinite
+#
+# SEE: http://rosettacode.org/wiki/Loops/Infinite
+module loops_infinite
+
+loop print "SPAM"
diff --git a/examples/rosettacode/loops_n_plus_one_half.nit b/examples/rosettacode/loops_n_plus_one_half.nit
new file mode 100644 (file)
index 0000000..ebd32f3
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/n + 1/2
+#
+# SEE: http://rosettacode.org/wiki/Loops/N_plus_one_half
+module loops_n_plus_one_half
+
+for i in [0..10] do
+       printn i
+       if i == 10 then break
+       printn ", "
+end
+print ""
+
+# Here the idiomatic version using `join`
+print([0..10].join(", "))
diff --git a/examples/rosettacode/loops_while.nit b/examples/rosettacode/loops_while.nit
new file mode 100644 (file)
index 0000000..9493d00
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Loops/While
+#
+# SEE: http://rosettacode.org/wiki/Loops/While
+module loops_while
+
+var i = 2014
+while i > 0 do
+       print i
+       i /= 2
+end
diff --git a/examples/rosettacode/read_entire_file.nit b/examples/rosettacode/read_entire_file.nit
new file mode 100644 (file)
index 0000000..57e0345
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Read entire file
+#
+# SEE: http://rosettacode.org/wiki/Read_entire_file
+module read_entire_file
+
+var filename = "/etc/issue"
+var content  = filename.to_path.read_all
+print content
diff --git a/examples/rosettacode/tree_traversal.nit b/examples/rosettacode/tree_traversal.nit
new file mode 100644 (file)
index 0000000..dcea146
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/env nit
+#
+# This file is part of NIT ( http://www.nitlanguage.org ).
+# This program is public domain
+
+# Task: Tree traversal
+#
+# SEE: http://rosettacode.org/wiki/Tree_traversal
+module tree_traversal
+
+class Node
+       var value: Int
+       var left: nullable Node
+       var right: nullable Node
+
+       fun preorder
+       do
+               print value
+               var l = left
+               if l != null then l.preorder
+               var r = right
+               if r != null then r.preorder
+       end
+
+       fun inorder
+       do
+               var l = left
+               if l != null then l.inorder
+               print value
+               var r = right
+               if r != null then r.inorder
+       end
+
+       fun postorder
+       do
+               var l = left
+               if l != null then l.postorder
+               var r = right
+               if r != null then r.postorder
+               print value
+       end
+
+       fun levelorder
+       do
+               var q = new List[Node]
+               q.add self
+               while q.not_empty do
+                       var n = q.shift
+                       print n.value
+                       var l = n.left
+                       if l != null then q.push l
+                       var r = n.right
+                       if r != null then q.push r
+               end
+       end
+end
+
+var tree = new Node(1,
+       new Node(2,
+               new Node(4,
+                       new Node(7)),
+               new Node(5)),
+       new Node(3,
+               new Node(6,
+                       new Node(8),
+                       new Node(9))))
+
+print "preorder:"
+tree.preorder
+print "inorder:"
+tree.inorder
+print "postorder:"
+tree.postorder
+print "levelorder:"
+tree.levelorder
index f897ae0..fd94447 100644 (file)
@@ -315,7 +315,7 @@ redef class App
        var img_boss_left: Image
        var img_boss_right: Image
 
-       redef fun window_created
+       redef fun on_create
        do
                super
 
index fb11c65..47c0e4b 100644 (file)
@@ -13,29 +13,15 @@ The tools `android`, `ndk-build` and `ant` must be in your PATH.
 
 # Configure your Android application
 
-The `app.nit` framework and this project offers some services to
-customized the generated Android application.
+The _app.nit_ framework and this project offers some services to
+customize the generated Android application.
 
-## Module annotations
+## Annotations
 
-* `app_version` specifies the version of the generated APK file.
-It takes 3 arguments: the major, minor and revision version numbers.
-The special function `git_revision` will use the prefix of the hash of the
-latest git commit. The default version is 1.0.
+* All _app.nit_ annotations are applied to Android projects:
+  `app_name`, `app_namespace` and `app_version`.
 
-    Example: `app_version(1, 0, git_revision)`
-
-* `app_name` takes a single argument, the visible name of the Android
-application. By default, the compiler would use the name of the target
-module. This name will be used as the name of the main activity and
-as the launcher name.
-
-    Example: `app_name "My App"`
-
-* `app_namespace` specifies the package used by the generated Java
-classes and the APK file. Once the application is published, this
-value should not be changed. By default, the compiler will use
-the package `org.nitlanguage.{module_name}`.
+    See: `../app/README.md`
 
 * Custom information can be added to the Android manifest file
 using the annotations `android_manifest`, `android_manifest_application`
@@ -47,8 +33,8 @@ and `android_manifest_activity`.
     android_manifest """<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>"""
     ~~~
 
-* The API version target can be specified with `min_api_version`,
-`max_api_version` and `target_api_version`. These take a single
+* The API version target can be specified with `android_api_min`,
+`android_api_max` and `android_api_target`. These take a single
 integer as argument. They are applied in the Android manifest as
 `minSdkVesion`, `targetSdkVersion` and `maxSdkVersion`.
 
index 584b89b..a92ed8d 100644 (file)
@@ -24,55 +24,42 @@ import platform
 import native_app_glue
 import dalvik
 private import log
-private import android_data_store
-
-# Uses Android logs to print everything
-redef fun print(text) do log_write(priority_info, app.log_prefix.to_cstring, text.to_s.to_cstring)
+private import data_store
 
 redef class App
-       redef fun log_error(msg) do log_write(priority_error, log_prefix.to_cstring, msg.to_cstring)
-
-       redef fun log_warning(msg) do log_write(priority_warn, log_prefix.to_cstring, msg.to_cstring)
-
        redef fun init_window
        do
                super
-               window_created
+               on_create
+               on_restore_state
+               on_start
        end
 
        redef fun term_window
        do
                super
-               window_closing
+               on_stop
        end
 
        # Is the application currently paused?
        var paused = true
 
-       redef fun window_created
-       do
-               super
-               paused = false
-       end
-
-       redef fun window_closing
-       do
-               paused = true
-               super
-       end
-
        redef fun pause
        do
                paused = true
+               on_pause
                super
        end
 
        redef fun resume
        do
                paused = false
+               on_resume
                super
        end
 
+       redef fun save_state do on_save_state
+
        redef fun lost_focus
        do
                paused = true
@@ -85,5 +72,5 @@ redef class App
                super
        end
 
-       redef fun destroy do exit 0
+       redef fun destroy do on_destroy
 end
index ae124ba..f70b26f 100644 (file)
@@ -24,7 +24,7 @@
 # impossible for you to compile the apk correctly
 module assets_and_resources
 
-import native_app_glue
+import dalvik
 import java
 import java::io
 
index 74452e0..464b2f8 100644 (file)
@@ -40,6 +40,7 @@ module audio
 import java
 import java::io
 import assets_and_resources
+import native_app_glue # FIXME update this module to use nit_activity
 import app::audio
 
 in "Java" `{
index fec387d..0257dc8 100644 (file)
 
 # Android compatibility module
 #
-# Defines all Android related annoations including the `@android` annotations
-# used to tag `ldflags` annotations.
+# Defines all Android related annotations, including `ldflags@android`.
 module aware is
        new_annotation android
-       new_annotation min_api_version
-       new_annotation max_api_version
-       new_annotation target_api_version
+       new_annotation android_api_min
+       new_annotation android_api_max
+       new_annotation android_api_target
        new_annotation android_manifest
        new_annotation android_manifest_application
        new_annotation android_manifest_activity
similarity index 97%
rename from lib/android/android_data_store.nit
rename to lib/android/data_store.nit
index 57eb281..989b64c 100644 (file)
@@ -17,7 +17,7 @@
 # Implements `app::data_store` using `shared_preferences`
 #
 # We use the shared preferences named "data_store" to store the data.
-module android_data_store
+module data_store
 
 import app::data_store
 private import shared_preferences
index f0fd982..17fb8bf 100644 (file)
@@ -2,10 +2,9 @@ android:
        mkdir -p bin/ res/
        ../../../contrib/inkscape_tools/bin/svg_to_icons art/icon.svg --android --out res/
        ../../../bin/nitc --dir bin/ src/ui_test.nit
-       adb install -r bin/ui_test.apk
 
 install: android
-       adb install -r bin/ui.apk
+       adb install -r bin/ui_test.apk
 
 clean:
        rm -rf bin
index bdb06c5..4f63a92 100644 (file)
@@ -20,44 +20,37 @@ module ui_test is
        app_version(0, 1, git_revision)
        app_namespace "org.nitlanguage.ui_test"
        android_manifest_activity """android:theme="@android:style/Theme.Light""""
+       android_api_target 15
 end
 
-import android
 import android::ui
 import android::toast
 import android::notification
 
 redef class App
-
-       var but_notif: Button
-       var but_toast: Button
-
-       var notif: nullable Notification = null
-
-       var inited = false
-       redef fun init_window
+       redef fun on_create
        do
+               self.window = new Window
                super
+       end
+end
 
-               if inited then return
-               inited = true
+redef class Window
 
-               # Setup UI
-               var context = native_activity
-               var layout = new NativeLinearLayout(context)
-               layout.set_vertical
+       private var layout = new VerticalLayout(parent=self)
 
-               but_notif = new Button
-               but_notif.text = "Show Notification"
-               layout.add_view but_notif.native
+       private var but_notif = new Button(parent=layout, text="Show Notification")
+       private var but_toast = new Button(parent=layout, text="Show Toast")
 
-               but_toast = new Button
-               but_toast.text = "Show Toast"
-               layout.add_view but_toast.native
+       private var notif: nullable Notification = null
 
-               context.content_view = layout
+       init
+       do
+               but_notif.observers.add self
+               but_toast.observers.add self
        end
 
+       # Action when pressing `but_notif`
        fun act_notif
        do
                var notif = self.notif
@@ -72,14 +65,16 @@ redef class App
                end
        end
 
+       # Action when pressing `but_toast`
        fun act_toast
        do
-               toast("Sample toast from app.nit at {get_time}", false)
+               app.toast("Sample toast from app.nit at {get_time}", false)
        end
 
-       redef fun catch_event(event)
+       redef fun on_event(event)
        do
-               if event isa ClickEvent then
+               print "on_event {event}"
+               if event isa ButtonPressEvent then
                        var sender = event.sender
                        if sender == but_notif then
                                act_notif
index d2aa796..5f37179 100644 (file)
@@ -18,7 +18,7 @@
 # `android.content.Intent` for the android platform
 module intent_api10
 
-import native_app_glue
+import dalvik
 import android::bundle
 import serialization
 private import json_serialization
@@ -34,6 +34,8 @@ in "Java" `{
 extern class NativeIntent in "Java" `{ android.content.Intent `}
        super JavaObject
 
+       new in "Java" `{ return new Intent(); `}
+
        fun add_category(category: JavaString) in "Java" `{ recv.addCategory(category); `}
        fun add_flags(flags: Int) in "Java" `{ recv.addFlags((int)flags); `}
        fun filter_equals(other: NativeIntent): Bool in "Java" `{
@@ -626,23 +628,7 @@ end
 
 # Services allowing to launch an activity and start/stop services
 class Intent
-       protected var intent: NativeIntent
-       protected var context: NativeActivity
-
-       init (app: App)
-       do
-               self.context = app.native_activity
-               setup
-       end
-
-       private fun set_vars(intent: NativeIntent) do
-               self.intent = intent.new_global_ref
-       end
-
-       private fun setup import context, intent, set_vars in "Java" `{
-               Intent intent = new Intent();
-               Intent_set_vars(recv, intent);
-       `}
+       protected var intent: NativeIntent = (new NativeIntent).new_global_ref is lazy
 
        # The general action to be performed
        #
@@ -1311,14 +1297,6 @@ class Intent
                sys.jni_env.pop_local_frame
                return self
        end
-       # Execute the intent and launch the appropriate application
-       fun launch_activity do context.start_activity(intent)
-
-       # Start a service that will be running until the `stop_service` call
-       fun start_service do context.start_service(intent)
-
-       # Stop service
-       fun stop_service do context.stop_service(intent)
 
        # Deletes intent global reference
        fun destroy do self.intent.delete_global_ref
@@ -1328,9 +1306,9 @@ class Intent
 end
 
 redef extern class NativeActivity
-       fun start_activity(intent: NativeIntent) in "Java" `{ recv.startActivity(intent); `}
-       fun start_service(intent: NativeIntent) in "Java" `{ recv.startService(intent); `}
-       fun stop_service(intent: NativeIntent) in "Java" `{ recv.stopService(intent); `}
+       private fun start_activity(intent: NativeIntent) in "Java" `{ recv.startActivity(intent); `}
+       private fun start_service(intent: NativeIntent) in "Java" `{ recv.startService(intent); `}
+       private fun stop_service(intent: NativeIntent) in "Java" `{ recv.stopService(intent); `}
 end
 
 # Allows user to get values with enum-like syntax : `intent_action.main`
@@ -1349,3 +1327,15 @@ private class StringCopyHashSet
        var collection = new HashSet[String]
        fun add(element: JavaString) do collection.add element.to_s
 end
+
+redef class App
+
+       # Execute the intent and launch the appropriate application
+       fun start_activity(intent: Intent) do native_activity.start_activity(intent.intent)
+
+       # Start a service that will be running until the `stop_service` call
+       fun start_service(intent: Intent) do native_activity.start_service(intent.intent)
+
+       # Stop service
+       fun stop_service(intent: Intent) do native_activity.stop_service(intent.intent)
+end
index 1ba5e88..db0415a 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 11 services
-module intent_api11 is min_api_version(11)
+module intent_api11 is android_api_min 11
 
 import intent
 
index ddf2cff..9af4402 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 12 services
-module intent_api12 is min_api_version(12)
+module intent_api12 is android_api_min 12
 
 import intent_api11
 
index 3bb6576..dc323d2 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 14 services
-module intent_api14 is min_api_version(14)
+module intent_api14 is android_api_min 14
 
 import intent_api12
 
index 4df53ce..cab60aa 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 15 services
-module intent_api15 is min_api_version(15)
+module intent_api15 is android_api_min 15
 
 import intent_api14
 
index 74f6b0a..1513ab8 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 16 services
-module intent_api16 is min_api_version(16)
+module intent_api16 is android_api_min 16
 
 import intent_api15
 
index 0299a21..1d92cdc 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 17 services
-module intent_api17 is min_api_version(17)
+module intent_api17 is android_api_min 17
 
 import intent_api16
 
index 840bceb..b348b3d 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 18 services
-module intent_api18 is min_api_version(18)
+module intent_api18 is android_api_min 18
 
 import intent_api17
 
index 73b1d8b..08af94a 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines intent module to add API 19 services
-module intent_api19 is min_api_version(19)
+module intent_api19 is android_api_min 19
 
 import intent_api18
 
index 6b0faea..b7f7e64 100644 (file)
@@ -23,31 +23,54 @@ in "C" `{
        #include <android/log.h>
 `}
 
+# Use Android logs to print
+redef fun print(object)
+do
+       log_write(priority_info, app.log_prefix.to_cstring, object.to_s.to_cstring)
+end
+
+# Use Android logs to print errors
+redef fun print_error(object)
+do
+       log_write(priority_error, app.log_prefix.to_cstring, object.to_s.to_cstring)
+end
+
+# Use Android logs to print warnings
+redef fun print_warning(object)
+do
+       log_write(priority_warn, app.log_prefix.to_cstring, object.to_s.to_cstring)
+end
+
+redef class App
+       # Prefix to all log messages
+       protected fun log_prefix: String do return "app.nit"
+end
+
 # Default Android log priority
-fun priority_default: Int do return 1
+private fun priority_default: Int do return 1
 
 # Verbose Android log priority
-fun priority_verbose: Int do return 2
+private fun priority_verbose: Int do return 2
 
 # Debug Android log priority
-fun priority_debug: Int do return 3
+private fun priority_debug: Int do return 3
 
 # Info Android log priority
-fun priority_info: Int do return 4
+private fun priority_info: Int do return 4
 
 # Warn Android log priority
-fun priority_warn: Int do return 5
+private fun priority_warn: Int do return 5
 
 # Error Android log priority
-fun priority_error: Int do return 6
+private fun priority_error: Int do return 6
 
 # Fatal Android log priority
-fun priority_fatal: Int do return 7
+private fun priority_fatal: Int do return 7
 
 # Silent Android log priority
-fun priority_silent: Int do return 8
+private fun priority_silent: Int do return 8
 
 # Write `text` to Android log at priority `level` with tag `tag`
-fun log_write(level: Int, tag, text: NativeString) `{
+private fun log_write(level: Int, tag, text: NativeString) `{
        __android_log_write(level, tag, text);
 `}
index 765ed01..d41e04c 100644 (file)
@@ -189,7 +189,11 @@ class Activity
        # as registered by `on_save_instance_state`.
        #
        # Followed by `on_start`.
-       fun on_create(save_state: NativeBundle) do end
+       fun on_create(save_state: NativeBundle)
+       do
+               app.on_create
+               app.on_restore_state
+       end
 
        # Notification from Android, the activity has been restarted
        #
@@ -199,28 +203,30 @@ class Activity
        # Notification from Android, the activity has been started
        #
        # Followed by `on_resume` or `on_stop`.
-       fun on_start do end
+       fun on_start do app.on_start
 
        # Notification from Android, the activity has been resumed
        #
        # Followed by `on_pause`
-       fun on_resume do end
+       fun on_resume do app.on_resume
 
        # Notification from Android, the activity has been paused
        #
        # Followed by `on_resume` or `on_stop`.
-       fun on_pause do end
+       fun on_pause do app.on_pause
 
        # Notification from Android, the activity has been stopped
        #
        # Followed by `on_restart` or `on_destroy`.
-       fun on_stop do end
+       fun on_stop do app.on_stop
 
        # Notification from Android, the activity is being destroyed
        #
        # Clean up and exit.
        fun on_destroy
        do
+               app.on_destroy
+
                native.delete_global_ref
                app.activities.remove self
        end
@@ -233,7 +239,7 @@ class Activity
        # Notification from Android, the activity may be stopped, save state
        #
        # Occurs before `on_stop` and, without guarantee, before or after `on_pause`.
-       fun on_save_instance_state(save_state: NativeBundle) do end
+       fun on_save_instance_state(save_state: NativeBundle) do app.on_save_state
 
        # Notification from Android, the system is running low on memory
        #
index 988727f..82c873f 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Native Java classes for notifications
-module native_notification is min_api_version 11
+module native_notification is android_api_min 11
 
 import android::assets_and_resources
 
index 6b6edde..72a634c 100644 (file)
@@ -17,7 +17,7 @@
 # Services to save/load data using `android.content.SharedPreferences` for the android platform
 module shared_preferences_api10
 
-import native_app_glue
+import dalvik
 import serialization
 private import json_serialization
 
index cb55acc..48d600a 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Refines shared_preferences module to add API 11 services
-module shared_preferences_api11 is min_api_version(11)
+module shared_preferences_api11 is android_api_min 11
 
 import shared_preferences
 
index dd8e149..954a380 100644 (file)
@@ -17,7 +17,7 @@
 # Services to display a _toast_, a small popup on Android
 module toast
 
-import native_app_glue
+import dalvik
 
 in "Java" `{
        import android.widget.Toast;
@@ -34,7 +34,7 @@ redef class App
 
        private fun native_toast(message: JavaString, is_long: Bool)
        import native_activity in "Java" `{
-               final android.app.NativeActivity context = App_native_activity(recv);
+               final android.app.Activity context = App_native_activity(recv);
                final CharSequence final_message = message;
                final int duration = is_long? Toast.LENGTH_LONG: Toast.LENGTH_SHORT;
 
similarity index 61%
rename from lib/android/ui.nit
rename to lib/android/ui/native_ui.nit
index 6d0e0f8..79b75a5 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Views and services to use the Android native user interface
-#
-# Events, such as a button click, come from the UI thread and are then
-# passed to the main thread. It is recommended to specialize one of the
-# methods of the main thread to customize the response to a given event.
-#
-# This graph shows the path of a button click:
-# ~~~raw
-#     UI Thread     #   Main thread
-#
-#       User
-#        |
-#        V
-# Button::click_ui --> Button::click
-#                           |
-#                           V
-#                    App::catch_event
-# ~~~
-module ui is min_api_version 14
+# Native services from the `android.view` and `android.widget` namespaces
+module native_ui is android_api_min 14
 
 import nit_activity
-import pthreads::concurrent_collections
 
 in "Java" `{
        import android.app.Activity;
 
        import android.view.Gravity;
-       import android.view.MotionEvent;
+       import android.view.View;
        import android.view.ViewGroup;
        import android.view.ViewGroup.MarginLayoutParams;
 
@@ -55,31 +37,6 @@ in "Java" `{
        import java.util.*;
 `}
 
-# An event from the `app.nit` framework
-interface AppEvent
-       # Reaction to this event
-       fun react do end
-end
-
-# A control click event
-class ClickEvent
-       super AppEvent
-
-       # Sender of this event
-       var sender: Button
-
-       redef fun react do sender.click self
-end
-
-# Receiver of events not handled directly by the sender
-interface EventCatcher
-       fun catch_event(event: AppEvent) do end
-end
-
-redef class App
-       super EventCatcher
-end
-
 redef extern class NativeActivity
 
        # Set the main layout of this activity
@@ -98,107 +55,25 @@ redef extern class NativeActivity
        `}
 end
 
-# An `Object` that raises events
-abstract class Eventful
-       var event_catcher: EventCatcher = app is lazy, writable
-end
-
-#
-## Nity classes and services
-#
-
-# An Android control with text
-abstract class TextView
-       super Finalizable
-       super Eventful
-
-       # Native Java variant to this Nity class
-       type NATIVE: NativeTextView
-
-       # The native Java object encapsulated by `self`
-       var native: NATIVE is noinit
-
-       # Get the text of this view
-       fun text: String
-       do
-               var jstr = native.text
-               var str = jstr.to_s
-               jstr.delete_local_ref
-               return str
-       end
-
-       # Set the text of this view
-       fun text=(value: Text)
-       do
-               var jstr = value.to_s.to_java_string
-               native.text = jstr
-               jstr.delete_local_ref
-       end
-
-       # Get whether this view is enabled or not
-       fun enabled: Bool do return native.enabled
-
-       # Set if this view is enabled
-       fun enabled=(val: Bool) do native.enabled = val
-
-       # Set the size of the text in this view at `dpi`
-       fun text_size=(dpi: Numeric) do native.text_size = dpi.to_f
-
-       private var finalized = false
-       redef fun finalize
-       do
-               if not finalized then
-                       native.delete_global_ref
-                       finalized = true
-               end
-       end
-end
-
-# An Android button
-class Button
-       super TextView
-
-       redef type NATIVE: NativeButton
-
-       init
-       do
-               var native = new NativeButton(app.native_activity, self)
-               self.native = native.new_global_ref
-       end
-
-       # Click event
-       #
-       # By default, this method calls `app.catch_event`. It can be specialized
-       # with custom behavior or the receiver of `catch_event` can be changed
-       # with `event_catcher=`.
-       fun click(event: AppEvent) do event_catcher.catch_event(event)
-
-       private fun click_from_native do click(new ClickEvent(self))
-end
-
-# An Android editable text field
-class EditText
-       super TextView
-
-       redef type NATIVE: NativeEditText
-
-       init
-       do
-               var native = new NativeEditText(app.activities.first.native)
-               self.native = native.new_global_ref
-       end
-end
-
-#
-## Native classes
-#
-
 # A `View` for Android
 extern class NativeView in "Java" `{ android.view.View `}
        super JavaObject
 
        fun minimum_width=(val: Int) in "Java" `{ recv.setMinimumWidth((int)val); `}
        fun minimum_height=(val: Int) in "Java" `{ recv.setMinimumHeight((int)val); `}
+
+       fun enabled: Bool in "Java" `{ return recv.isEnabled(); `}
+       fun enabled=(value: Bool) in "Java" `{
+               final View final_recv = recv;
+               final boolean final_value = value;
+
+               ((Activity)recv.getContext()).runOnUiThread(new Runnable() {
+                       @Override
+                       public void run()  {
+                               final_recv.setEnabled(final_value);
+                       }
+               });
+       `}
 end
 
 # A collection of `NativeView`
@@ -206,6 +81,11 @@ extern class NativeViewGroup in "Java" `{ android.view.ViewGroup `}
        super NativeView
 
        fun add_view(view: NativeView) in "Java" `{ recv.addView(view); `}
+
+       fun add_view_with_weight(view: NativeView, weight: Float)
+       in "Java" `{
+               recv.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, (float)weight));
+       `}
 end
 
 # A `NativeViewGroup` organized in a line
@@ -224,11 +104,6 @@ extern class NativeLinearLayout in "Java" `{ android.widget.LinearLayout `}
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                recv.addView(view, params);
        `}
-
-       fun add_view_with_weight(view: NativeView, weight: Float)
-       in "Java" `{
-               recv.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, (float)weight));
-       `}
 end
 
 # A `NativeViewGroup` organized as a grid
@@ -278,23 +153,13 @@ extern class NativeTextView in "Java" `{ android.widget.TextView `}
                });
        `}
 
-       fun enabled: Bool in "Java" `{ return recv.isEnabled(); `}
-       fun enabled=(value: Bool) in "Java" `{
-               final TextView final_recv = recv;
-               final boolean final_value = value;
-
-               ((Activity)recv.getContext()).runOnUiThread(new Runnable() {
-                       @Override
-                       public void run()  {
-                               final_recv.setEnabled(final_value);
-                       }
-               });
-       `}
-
        fun gravity_center in "Java" `{
                recv.setGravity(Gravity.CENTER);
        `}
 
+       fun text_size: Float in "Java" `{
+               return recv.getTextSize();
+       `}
        fun text_size=(dpi: Float) in "Java" `{
                recv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, (float)dpi);
        `}
@@ -323,22 +188,6 @@ extern class NativeButton in "Java" `{ android.widget.Button `}
 
        redef type SELF: NativeButton
 
-       new (context: NativeActivity, sender_object: Object)
-       import Button.click_from_native in "Java" `{
-               final int final_sender_object = sender_object;
-
-               return new Button(context){
-                       @Override
-                       public boolean onTouchEvent(MotionEvent event) {
-                               if(event.getAction() == MotionEvent.ACTION_DOWN) {
-                                       Button_click_from_native(final_sender_object);
-                                       return true;
-                               }
-                               return false;
-                       }
-               };
-       `}
-
        redef fun new_global_ref: SELF import sys, Sys.jni_env `{
                Sys sys = NativeButton_sys(recv);
                JNIEnv *env = Sys_jni_env(sys);
diff --git a/lib/android/ui/ui.nit b/lib/android/ui/ui.nit
new file mode 100644 (file)
index 0000000..f534e77
--- /dev/null
@@ -0,0 +1,141 @@
+# This file is part of NIT (http://www.nitlanguage.org).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Views and services to use the Android native user interface
+module ui
+
+# Implementation note:
+#
+# We cannot rely on `Activity::on_restore_instance_state` to implement
+# `on_restore_state` is it only invoked if there is a bundled state,
+# and we don't use the Android bundled state.
+
+import native_ui
+import log
+import nit_activity
+
+import app::ui
+private import data_store
+
+redef class Control
+       # The Android element used to implement `self`
+       fun native: NATIVE is abstract
+
+       # Type of `native`
+       type NATIVE: JavaObject
+end
+
+redef class Window
+       redef var native = app.native_activity
+
+       redef type NATIVE: NativeActivity
+
+       redef fun add(item)
+       do
+               super
+
+               # FIXME abstract the Android restriction where `content_view` must be a layout
+               assert item isa Layout
+               native.content_view = item.native
+       end
+end
+
+redef class View
+       redef type NATIVE: NativeView
+
+       redef fun enabled=(enabled) do native.enabled = enabled or else true
+       redef fun enabled do return native.enabled
+end
+
+redef class Layout
+       redef type NATIVE: NativeViewGroup
+
+       redef fun add(item)
+       do
+               super
+
+               assert item isa View
+
+               # FIXME abstract the use either homogeneous or weight to balance views size in a layout
+               native.add_view_with_weight(item.native, 1.0)
+       end
+end
+
+redef class HorizontalLayout
+       redef var native do
+               var layout = new NativeLinearLayout(app.native_activity)
+               layout.set_horizontal
+               return layout
+       end
+end
+
+redef class VerticalLayout
+       redef var native do
+               var layout = new NativeLinearLayout(app.native_activity)
+               layout.set_vertical
+               return layout
+       end
+end
+
+redef class TextView
+       redef type NATIVE: NativeTextView
+
+       redef fun text do return native.text.to_s
+       redef fun text=(value) do
+               if value == null then value = ""
+               native.text = value.to_java_string
+       end
+
+       # Size of the text
+       fun text_size: Float do return native.text_size
+
+       # Size of the text
+       fun text_size=(text_size: nullable Float) do
+               if text_size != null then native.text_size = text_size
+       end
+end
+
+redef class TextInput
+       redef type NATIVE: NativeEditText
+       redef var native = (new NativeEditText(app.native_activity)).new_global_ref
+end
+
+redef class Button
+       super Finalizable
+
+       redef type NATIVE: NativeButton
+       redef var native = (new NativeButton(app.native_activity, self)).new_global_ref
+
+       private fun on_click do notify_observers new ButtonPressEvent(self)
+
+       redef fun finalize do native.delete_global_ref
+end
+
+redef class NativeButton
+       private new (context: NativeActivity, sender_object: Button)
+       import Button.on_click in "Java" `{
+               final int final_sender_object = sender_object;
+
+               return new android.widget.Button(context){
+                       @Override
+                       public boolean onTouchEvent(android.view.MotionEvent event) {
+                               if(event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
+                                       Button_on_click(final_sender_object);
+                                       return true;
+                               }
+                               return false;
+                       }
+               };
+       `}
+end
index 79941dc..430e047 100644 (file)
@@ -21,7 +21,7 @@ module vibration is
        android_manifest("""<uses-permission android:name="android.permission.VIBRATE" />""")
 end
 
-import native_app_glue
+import dalvik
 
 # Handle to an Android vibrator
 extern class Vibrator in "Java" `{ android.os.Vibrator `}
diff --git a/lib/app/README.md b/lib/app/README.md
new file mode 100644 (file)
index 0000000..22f4f77
--- /dev/null
@@ -0,0 +1,184 @@
+_app.nit_ is a framework to create cross-platform applications
+
+The framework provides services to manage common needs of modern mobile applications:
+
+* Life-cycle
+* User interface
+* Persistence
+* Package metadata
+* Compilation and packaging
+
+The features offered by _app.nit_ are common to all platforms, but
+may not be available on all devices.
+
+## Application Life-Cycle
+
+The _app.nit_ application life-cycle is compatible with all target platforms.
+It relies on the following sequence of events, represented here by their callback method name:
+
+1. `on_create`: The application is being created.
+   You should build the UI at this time.
+
+2. `on_start`: The app is starting or restarting, background activities may
+
+3. `on_resume`: The app enters the active state, it is in the foreground.
+
+4. `on_pause`: The app leaves the active state and the foreground.
+   It may still be visible in the background.
+   It may then go back to `on_resume` or `on_stop`.
+
+5. `on_stop`: The app is completely hidden.
+   It may then be destroyed (`on_destroy`) or go back to `on_start`.
+
+6. `on_destroy`: The app is being destroyed.
+
+Life-cycle events related to saving and restoring the application state are provided by two special callback methods:
+
+* `on_save_state`: The app may be destroyed soon, save its state for a future `on_restore_state`.
+  More on how it can be done in the `app::data_store` section.
+
+* `on_restore_state`: The app is launching, restore its state from a previous `on_save_state`.
+
+These events are synchronized to the native platforms applications
+The `App` instance is the first to be notified of these events.
+Other UI elements, from the `ui` submodule, are notified of the same events using a simple depth first visit.
+So all UI elements can react separately to live-cycle events.
+
+## User Interface
+
+The `app::ui` module defines an abstract API to build a portable graphical application.
+The API is composed of interactive `Control`s, visible `View`s and an active `Window`.
+
+Here is a subset of the most useful controls and views:
+
+* The classic pushable `Button` with text (usually rectangular).
+
+* `TextInput` is a field for the user to enter text.
+
+* `HorizontalLayout` and `VerticalLayout` organize other controls in order.
+
+Each control is notified of input events by callbacks to `on_event`.
+All controls have observers that are also notified of the events.
+So there is two ways  to customize the behavior on a given event:
+
+* Create a subclass of the wanted `Control`, let's say `Button`, and specialize `on_event`.
+
+* Add an observer to a `Button` instance, and implement `on_event` in the observer.
+
+### Usage Example
+
+The calculator example (at `../../examples/calculator/src/calculator.nit`) is a concrete,
+simple and complete use of the _app.nit_ portable UI.
+
+### Platform-specific UI
+
+You can go beyond the portable UI API of _app.nit_ by using the natives services of a platform.
+
+The suggested approach is to use platform specific modules to customize the application on a precise platform.
+This module redefine `Window::on_start` to call the native language of the platform and setup a native UI.
+
+_TODO complete description and add concrete examples_
+
+## Persistent State with data\_store
+
+_app.nit_ offers the submodule `app::data_store` to easily save the application state and user preferences.
+The service is accessible by the method `App::data_store`. The `DataStore` itself defines 2 methods:
+
+* `DataStore::[]=` saves and associates any serializable instances to a `String` key.
+Pass `null` to clear the value associated to a key.
+
+* `DataStore::[]` returns the object associated to a `String` key.
+It returns `null` if nothing is associated to the key.
+
+### Usage Example
+
+~~~
+import app::data_store
+
+redef class App
+       var user_name: String
+
+       redef fun on_save_state
+       do
+               app.data_store["first run"] = false
+               app.data_store["user name"] = user_name
+
+               super # call `on_save_state` on all attached instances of `AppComponent`
+       end
+
+       redef fun on_restore_state
+       do
+               var first_run = app.data_store["first run"]
+               if first_run != true then
+                       print "It's the first run of this application"
+               end
+
+               var user_name = app.data_store["user name"]
+               if user_name isa String then
+                       self.user_name = user_name
+               else self.user_name = "Undefined"
+
+               super
+       end
+end
+~~~
+
+## Metadata annotations
+
+The _app.nit_ framework defines three annotations to customize the application package.
+
+* `app_name` takes a single argument, the visible name of the application.
+  This name is used for launchers and window title.
+  By default, the name of the target module.
+
+* `app_namespace` specifies the full namespace (or package name) of the application package.
+  This value usually identify the application uniquely on application stores.
+  It should not change once the application has benn published.
+  By default, the namespace is `org.nitlanguage.{module_name}`.
+
+* `app_version` specifies the version of the application package.
+  This annotation expects at least one argument, usually we use three version numbers:
+  the major, minor and revision.
+  The special function `git_revision` will use the prefix of the hash of the latest git commit.
+  By default, the version is 0.1.
+
+### Usage Example
+
+~~~
+module my_module is
+    app_name "My App"
+    app_namespace "org.example.my_app"
+    app_version(1, 0, git_revision)
+end
+~~~
+
+## Compiling and Packaging an Application
+
+The Nit compiler detects the target platform from the importations and generates the appropriate application format and package.
+
+Applications using only the portable services of _app.nit_ require some special care at compilation.
+Such an application, let's say `calculator.nit`, does not depend on a specific platform and use the portable UI.
+The target platform must be specifed to the compiler for it to produce the correct application package.
+There is two main ways to achieve this goal:
+
+* The the mixin option (`-m path`) loads an additionnal module before compiling.
+  It can be used to load platform specific implementations of the _app.nit_ portable UI.
+
+  ~~~
+  # GNU/Linux version, using GTK
+  nitc calculator.nit -m NIT_DIR/lib/linux/ui.nit
+
+  # Android version
+  nitc calculator.nit -m NIT_DIR/lib/android/ui/
+  ~~~
+
+* A common alternative for larger projects is to use platform specific modules.
+  Continuing with the `calculator.nit` example, it can be accompagnied by the module `calculator_linux.nit`.
+  This module imports both `calculator` and `linux::ui`, and can also use other GNU/Linux specific code.
+
+  ~~~
+  module calculator_linux
+
+  import calculator
+  import linux::ui
+  ~~~
index 2a335c4..e709e84 100644 (file)
@@ -14,6 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# Base of the _app.nit_ framework, defines `App`
 module app_base is
        new_annotation app_name
        new_annotation app_namespace
@@ -22,9 +23,11 @@ end
 
 # App subclasses are cross-platform applications
 #
-# This class is redefed by plateform modules and so
-# App can be specialized directly in the user app.
+# This class is refined by platform modules and so
+# App can be specialized directly in the user application code.
 class App
+       super AppComponent
+
        protected init do end
 
        # Starts the internal setup of graphical and other stuff
@@ -33,25 +36,58 @@ class App
 
        # Main entry point of your application
        fun run do end
+end
+
+# An element of an application that is notified of the application life cycle
+#
+# Most users of _app.nit_ need only to implement `on_create` to setup the application.
+#
+# On mobile devices, the application can be stopped a anytime when another application takes the foreground.
+# Implement the callbacks `on_save_state` and `on_load_state` to keep the state of the application between execution,
+# for an illusion of continuous execution.
+abstract class AppComponent
+
+       # The application is being created
+       #
+       # You should build the UI at this time.
+       fun on_create do end
 
-       # Prefix to all log messages, used by `log_error`, `log_warning` and `log_info`.
-       fun log_prefix: String do return "app.nit"
+       # The application is starting or restarting, it is visible to the user
+       fun on_start do end
 
-       # Helper function for logging errors
-       fun log_error(msg: String) do sys.stderr.write "{log_prefix} error: {msg}\n"
+       # The application enters the active state, it is in the foreground and interactive
+       fun on_resume do end
 
-       # Helper function for logging warnings
-       fun log_warning(msg: String) do sys.stderr.write "{log_prefix} warn: {msg}\n"
+       # The application leaves the active state but is still partially visible
+       #
+       # It may still be visible in the background.
+       # It may then go back to `on_resume` or `on_stop`.
+       fun on_pause do end
 
-       # Main init method for graphical stuff
-       # Is called when display is ready so graphical assets
-       # can be loaded at this time.
-       fun window_created do end
+       # The application is completely hidden from the user
+       #
+       # It may then be destroyed (`on_destroy`) or go back to `on_start`.
+       fun on_stop do end
 
-       # Called before destroying the window
-       fun window_closing do end
+       # The application is being destroyed
+       fun on_destroy do end
+
+       # The application may be destroyed soon, save its state for a future `on_restore_state`
+       fun on_save_state do end
+
+       # The application is launching, restore its state from a previous `on_save_state`
+       fun on_restore_state do end
 end
 
+# Print a warning
+fun print_warning(object: Object)
+do
+       sys.stderr.write object.to_s
+       sys.stderr.write "\n"
+end
+
+# The running `App`
 fun app: App do return once new App
+
 app.setup
 app.run
diff --git a/lib/app/ui.nit b/lib/app/ui.nit
new file mode 100644 (file)
index 0000000..2e30c76
--- /dev/null
@@ -0,0 +1,189 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Portable UI API for the _app.nit_ framework
+module ui
+
+import app_base
+
+redef class App
+       super AppComponent
+
+       # The current `Window` of this activity
+       #
+       # This attribute must be set by refinements of `App`.
+       var window: Window is writable
+
+       redef fun on_create do window.on_create
+
+       redef fun on_start do window.on_start
+
+       redef fun on_resume do window.on_resume
+
+       redef fun on_pause do window.on_pause
+
+       redef fun on_stop do window.on_stop
+
+       redef fun on_destroy do window.on_destroy
+
+       redef fun on_restore_state do window.on_restore_state
+
+       redef fun on_save_state do window.on_save_state
+end
+
+# An event created by an `AppComponent` and sent to `AppObserver`s
+interface AppEvent
+end
+
+# Observer of `AppEvent`s raised by `AppComponent`s
+interface AppObserver
+       # Notification of `event` raised by `sender`
+       #
+       # To be implemented in subclasses as needed.
+       fun on_event(event: AppEvent) do end
+end
+
+redef class AppComponent
+       super AppObserver
+
+       # All `AppObserver` notified of events raised by `self`
+       #
+       # By default, only `self` is an observer.
+       # Any other `AppObserver` can be added to this collection.
+       var observers = new HashSet[AppObserver].from([self: AppObserver])
+
+       # Propagate `event` to all `observers` by calling `AppObserver::on_event`
+       fun notify_observers(event: AppEvent)
+       do
+               for observer in observers do
+                       observer.on_event(event)
+               end
+       end
+end
+
+# A control implementing the UI
+class Control
+       super AppComponent
+
+       # Direct parent `Control` in the control tree
+       #
+       # If `null` then `self` is at the root of the tree, or not yet attached.
+       var parent: nullable CompositeControl = null is private writable(set_parent)
+
+       # Direct parent `Control` in the control tree
+       #
+       # Setting `parent` calls `remove` on the old parent and `add` on the new one.
+       fun parent=(parent: nullable CompositeControl)
+       is autoinit     do
+               var old_parent = self.parent
+               if old_parent != null and old_parent != parent then
+                       old_parent.remove self
+               end
+
+               if parent != null then parent.add self
+
+               set_parent parent
+       end
+end
+
+# A `Control` grouping other controls
+class CompositeControl
+       super Control
+
+       private var items = new HashSet[Control]
+
+       # Add `item` as a child of `self`
+       protected fun add(item: Control) do items.add item
+
+       # Remove `item` from `self`
+       protected fun remove(item: Control) do if has(item) then items.remove item
+
+       # Is `item` in `self`?
+       protected fun has(item: Control): Bool do return items.has(item)
+
+       redef fun on_create do for i in items do i.on_create
+
+       redef fun on_start do for i in items do i.on_start
+
+       redef fun on_resume do for i in items do i.on_resume
+
+       redef fun on_pause do for i in items do i.on_pause
+
+       redef fun on_stop do for i in items do i.on_stop
+
+       redef fun on_destroy do for i in items do i.on_destroy
+
+       redef fun on_restore_state do for i in items do i.on_restore_state
+
+       redef fun on_save_state do for i in items do i.on_save_state
+end
+
+# A window, root of the `Control` tree
+class Window
+       super CompositeControl
+end
+
+# A viewable `Control`
+abstract class View
+       super Control
+
+       # Is this control enabled so the user can interact with it?
+       #
+       # By default, or if set to `null`, the control is enabled.
+       var enabled: nullable Bool is writable #, abstract FIXME with #1311
+end
+
+# A control with some `text`
+abstract class TextView
+       super View
+
+       # Main `Text` of this control
+       #
+       # By default, or if set to `null`, no text is shown.
+       var text: nullable Text is writable #, abstract FIXME with #1311
+end
+
+# A control for the user to enter custom `text`
+class TextInput
+       super TextView
+end
+
+# A pushable button, raises `ButtonPressEvent`
+class Button
+       super TextView
+end
+
+# A `Button` press event
+class ButtonPressEvent
+       super AppEvent
+
+       # The `Button` that raised this event
+       var sender: Button
+end
+
+# A layout to visually organize `Control`s
+abstract class Layout
+       super View
+       super CompositeControl
+end
+
+# An horizontal linear organization
+class HorizontalLayout
+       super Layout
+end
+
+# A vertical linear organization
+class VerticalLayout
+       super Layout
+end
diff --git a/lib/binary/binary.nit b/lib/binary/binary.nit
new file mode 100644 (file)
index 0000000..0084227
--- /dev/null
@@ -0,0 +1,327 @@
+# This file is part of NIT (http://www.nitlanguage.org).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Add reading and writing binary services
+#
+# ~~~
+# var w = new FileWriter.open("/tmp/data.bin")
+# w.write "hello"
+# w.write_int64 123456789
+# w.write_byte 3
+# w.write_float 1.25
+# w.write_double 1.234567
+# w.write_bits(true, false, true)
+# assert w.last_error == null
+# w.close
+#
+# var r = new FileReader.open("/tmp/data.bin")
+# assert r.read(5) == "hello"
+# assert r.read_int64 == 123456789
+# assert r.read_byte == 3
+# assert r.read_float == 1.25
+# assert r.read_double == 1.234567
+#
+# var bits = r.read_bits
+# assert bits[0] and not bits[1] and bits[2]
+#
+# assert r.last_error == null
+# r.close
+# ~~~
+module binary
+
+in "C" `{
+       #include <inttypes.h>
+       #include <endian.h>
+
+       // Android compatibility
+       #ifndef be64toh
+               #define be64toh(val) betoh64(val)
+       #endif
+       #ifndef le64toh
+               #define le64toh(val) letoh64(val)
+       #endif
+`}
+
+# A stream of binary data
+abstract class BinaryStream
+       super Stream
+
+       # Use the big-endian convention? otherwise use little-endian.
+       #
+       # By default, `true` to use big-endian.
+       var big_endian = true is writable
+end
+
+redef abstract class Writer
+       super BinaryStream
+
+       # Write a boolean `value` on a byte, using 0 for `false` and 1 for `true`
+       fun write_bool(value: Bool) do write_byte if value then 1 else 0
+
+       # Write up to 8 `Bool` in a byte
+       #
+       # To be used with `BinaryReader::read_bits`.
+       #
+       # Ensure: `bits.length <= 8`
+       fun write_bits(bits: Bool...)
+       do
+               assert bits.length <= 8
+
+               var int = 0
+               for b in bits.length.times do
+                       if bits[b] then int += 2**b
+               end
+
+               write_byte int
+       end
+
+       # Write a floating point `value` on 32 bits
+       #
+       # Using this format may result in a loss of precision as it uses less bits
+       # than Nit `Float`.
+       fun write_float(value: Float)
+       do
+               for i in [0..4[ do write_byte value.float_byte_at(i, big_endian)
+       end
+
+       # Write a floating point `value` on 64 bits
+       fun write_double(value: Float)
+       do
+               for i in [0..8[ do write_byte value.double_byte_at(i, big_endian)
+       end
+
+       # Write `value` as a signed integer on 64 bits
+       #
+       # Using this format may result in a loss of precision as the length of a
+       # Nit `Int` may be more than 64 bits on some platforms.
+       fun write_int64(value: Int)
+       do
+               for i in [0..8[ do write_byte value.int64_byte_at(i, big_endian)
+       end
+
+       # TODO:
+       #
+       # fun write_int8
+       # fun write_uint8 # No need for this one, it is the current `read_char`
+       # fun write_int16
+       # fun write_uint16
+       # fun write_int32
+       # fun write_uint32
+       # fun write_uint64
+       # fun write_long_double?
+end
+
+redef abstract class Reader
+       super BinaryStream
+
+       # Read a single byte and return `true` if its value is different than 0
+       fun read_bool: Bool do return read_byte != 0
+
+       # Get an `Array` of 8 `Bool` by reading a single byte
+       #
+       # To be used with `BinaryWriter::write_bits`.
+       fun read_bits: Array[Bool]
+       do
+               var int = read_byte
+               if int == null then return new Array[Bool]
+               return [for b in 8.times do int.bin_and(2**b) > 0]
+       end
+
+       # Read a floating point on 32 bits and return it as a `Float`
+       #
+       # Using this format may result in a loss of precision as it uses less bits
+       # than Nit `Float`.
+       fun read_float: Float
+       do
+               if last_error != null then return 0.0
+
+               var b0 = read_byte
+               var b1 = read_byte
+               var b2 = read_byte
+               var b3 = read_byte
+
+               # Check for error, `last_error` is set by `read_byte`
+               if b0 == null or b1 == null or b2 == null or b3 == null then return 0.0
+
+               return native_read_float(b0, b1, b2, b3, big_endian)
+       end
+
+       # Utility for `read_float`
+       private fun native_read_float(b0, b1, b2, b3: Int, big_endian: Bool): Float `{
+               union {
+                       unsigned char b[4];
+                       float val;
+                       uint32_t conv;
+               } u;
+
+               u.b[0] = b0;
+               u.b[1] = b1;
+               u.b[2] = b2;
+               u.b[3] = b3;
+
+               if (big_endian)
+                       u.conv = be32toh(u.conv);
+               else u.conv = le32toh(u.conv);
+
+               return u.val;
+       `}
+
+       # Read a floating point on 64 bits and return it as a `Float`
+       fun read_double: Float
+       do
+               if last_error != null then return 0.0
+
+               var b0 = read_byte
+               var b1 = read_byte
+               var b2 = read_byte
+               var b3 = read_byte
+               var b4 = read_byte
+               var b5 = read_byte
+               var b6 = read_byte
+               var b7 = read_byte
+
+               # Check for error, `last_error` is set by `read_byte`
+               if b0 == null or b1 == null or b2 == null or b3 == null or
+                  b4 == null or b5 == null or b6 == null or b7 == null then return 0.0
+
+               return native_read_double(b0, b1, b2, b3, b4, b5, b6, b7, big_endian)
+       end
+
+       # Utility for `read_double`
+       private fun native_read_double(b0, b1, b2, b3, b4, b5, b6, b7: Int, big_endian: Bool): Float `{
+               union {
+                       unsigned char b[8];
+                       double val;
+                       uint64_t conv;
+               } u;
+
+               u.b[0] = b0;
+               u.b[1] = b1;
+               u.b[2] = b2;
+               u.b[3] = b3;
+               u.b[4] = b4;
+               u.b[5] = b5;
+               u.b[6] = b6;
+               u.b[7] = b7;
+
+               if (big_endian)
+                       u.conv = be64toh(u.conv);
+               else u.conv = le64toh(u.conv);
+
+               return u.val;
+       `}
+
+       # Read a signed integer on 64 bits and return is an `Int`
+       #
+       # Using this format may result in a loss of precision as the length of a
+       # Nit `Int` may be less than 64 bits on some platforms.
+       fun read_int64: Int
+       do
+               if last_error != null then return 0
+
+               var b0 = read_byte
+               var b1 = read_byte
+               var b2 = read_byte
+               var b3 = read_byte
+               var b4 = read_byte
+               var b5 = read_byte
+               var b6 = read_byte
+               var b7 = read_byte
+
+               # Check for error, `last_error` is set by `read_byte`
+               if b0 == null or b1 == null or b2 == null or b3 == null or
+                  b4 == null or b5 == null or b6 == null or b7 == null then return 0
+
+               return native_read_int64(b0, b1, b2, b3, b4, b5, b6, b7, big_endian)
+       end
+
+       # Utility for `read_int64`
+       private fun native_read_int64(b0, b1, b2, b3, b4, b5, b6, b7: Int, big_endian: Bool): Int `{
+               union {
+                       unsigned char b[8];
+                       int64_t val;
+                       uint64_t conv;
+               } u;
+
+               u.b[0] = b0;
+               u.b[1] = b1;
+               u.b[2] = b2;
+               u.b[3] = b3;
+               u.b[4] = b4;
+               u.b[5] = b5;
+               u.b[6] = b6;
+               u.b[7] = b7;
+
+               if (big_endian)
+                       u.conv = be64toh(u.conv);
+               else u.conv = le64toh(u.conv);
+
+               return u.val;
+       `}
+end
+
+redef class Int
+       # Utility for `BinaryWriter`
+       private fun int64_byte_at(index: Int, big_endian: Bool): Int `{
+               union {
+                       unsigned char bytes[8];
+                       int64_t val;
+                       uint64_t conv;
+               } u;
+
+               u.val = recv;
+
+               if (big_endian)
+                       u.conv = htobe64(u.conv);
+               else u.conv = htole64(u.conv);
+
+               return u.bytes[index];
+       `}
+end
+
+redef class Float
+       # Utility for `BinaryWriter`
+       private fun float_byte_at(index: Int, big_endian: Bool): Int `{
+               union {
+                       unsigned char bytes[4];
+                       float val;
+                       uint32_t conv;
+               } u;
+
+               u.val = recv;
+
+               if (big_endian)
+                       u.conv = htobe32(u.conv);
+               else u.conv = htole32(u.conv);
+
+               return u.bytes[index];
+       `}
+
+       # Utility for `BinaryWriter`
+       private fun double_byte_at(index: Int, big_endian: Bool): Int `{
+               union {
+                       unsigned char bytes[8];
+                       double val;
+                       uint64_t conv;
+               } u;
+
+               u.val = recv;
+
+               if (big_endian)
+                       u.conv = htobe64(u.conv);
+               else u.conv = htole64(u.conv);
+
+               return u.bytes[index];
+       `}
+end
diff --git a/lib/bitmap/bitmap.nit b/lib/bitmap/bitmap.nit
new file mode 100644 (file)
index 0000000..0343b8e
--- /dev/null
@@ -0,0 +1,261 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Budi Kurniawan <budi2020@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# The Bitmap class represents a 24-bit bitmap image. An instance can be constructed
+# by calling load or with_size:
+#
+#      new Bitmap.load(path_to_a_bmp_file)
+#      new Bitmap.with_size(400, 300)
+#
+# The width and height attributes contain the image's width and height,
+# respectively.
+#
+# Individual pixels can be manipulated by calling the set_pixel function:
+#
+#      set_pixel(x, y, color)
+#
+# The no-argument grayscale function converts the bitmap to grayscale and is an
+# implementation of this Rossetacode task:
+# http://rosettacode.org/wiki/Grayscale_image
+#
+# Finally, the bitmap can be saved to a file by calling save:
+#
+#      save(path_to_a_file)
+#
+# For information on the bitmap format, see
+# http://en.wikipedia.org/wiki/BMP_file_format
+#
+# A module containing classes for manipulating bitmap images
+module bitmap
+#
+# A class that represents a Bitmap image
+class Bitmap
+       # The file path if this Bitmap is created by loading a bitmap file
+       var file_path: String is noinit
+
+       # The file extension if this Bitmap is created by loading a bitmap file
+       var file_extension: String is noinit
+
+       # The file size if this Bitmap is created by loading a bitmap file
+       var file_size: Int is noinit
+
+       # The image width in pixels
+       var width: Int is noinit
+
+       # The image height in pixels
+       var height: Int is noinit
+
+       # The offset of image data. Typically, 54
+       private var data_offset: Int is noinit
+
+       # The number of bits representing a pixel. Currently only 24-bit bitmaps are supported
+       private var bits_per_pixel: Int is noinit
+
+       # The size of images. For a 24-bit bitmap, this is equal to (3*width*height)
+       private var image_size: Int is noinit
+
+       # 14-byte bitmap header
+       private var bitmap_header: Array[Int] = [66, 77, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0]
+
+       # 40-byte dib header
+       private var dib_header: Array[Int] = [40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+
+       # The image data, each cell contains a pixel.
+       # The first 8 least-significant bits represent the red component,
+       # the next 8 least-significant bits represent the green component,
+       # and the next 8 bit represent the blue component.
+       # The last 8 most-significant bits are not used
+       private var data = new Array[Array[Int]]
+
+       # Constructs a Bitmap object by passing the image's width and height (in pixels)
+       init with_size(width: Int, height: Int)
+       do
+               self.width = width
+               self.height = height
+               self.bits_per_pixel = 24
+               self.data_offset = 54
+               #set width and height
+
+               self.set_value(dib_header, 4, width)
+               self.set_value(dib_header, 8, height)
+               #set file size
+               var file_size = 3 * width * height + 54
+               self.set_value(bitmap_header, 2, file_size)
+
+               #init pixel data
+               self.data = new Array[Array[Int]].with_capacity(height)
+               for x in [0..height[ do
+                       var row = new Array[Int].with_capacity(width)
+                       for y in [0..width[ do
+                               row.add(0x00FFFFFF)
+                       end
+                       self.data[x] = row
+               end
+       end
+
+       # Creates an instance of Bitmap by loading an existing image file
+       init load(path: String)
+       do
+               self.file_path = path
+               var temp = path.file_extension
+               if temp != null then
+                       self.file_extension = temp
+               else
+                       self.file_extension = ""
+               end
+               var fileReader = new FileReader.open(path)
+
+               # =============== Bitmap header ================
+               for x in [0..13] do
+                       bitmap_header[x] = fileReader.read(1)[0].ascii
+               end
+               self.file_size = get_value(bitmap_header.subarray(2, 4))
+               self.data_offset = get_value(bitmap_header.subarray(10, 4))
+
+               # =============== DIB header ================
+               for x in [0..39] do
+                       dib_header[x] = fileReader.read(1)[0].ascii
+               end
+               var dib_size = get_value(dib_header.subarray(0, 4))
+               # only support BITMAPINFOHEADER
+               if dib_size != 40 then
+                       print "This type of bitmap is not supported"
+                       fileReader.close
+                       return
+               end
+
+               self.width = get_value(dib_header.subarray(4, 4))
+               self.height = get_value(dib_header.subarray(8, 4))
+               self.bits_per_pixel = get_value(dib_header.subarray(14, 2))
+               self.image_size = get_value(dib_header.subarray(20, 4))
+
+               if self.bits_per_pixel != 24 then
+                       print "Only full color bitmaps are supported"
+                       fileReader.close
+                       return
+               end
+
+               if self.bits_per_pixel == 24 then
+                       # assert self.image_size + 54 <= self.file_size
+                       # start loading image data, for now assume no padding
+                       for x in [0..self.height[
+                       do
+                               var row = new Array[Int].with_capacity(self.width)
+                               for y in [0..self.width[
+                               do
+                                       var red = fileReader.read(1)[0].ascii * 256 * 256
+                                       var green = fileReader.read(1)[0].ascii * 256
+                                       var blue = fileReader.read(1)[0].ascii
+                                       row.add(red + green + blue)
+                               end
+                               self.data.add(row)
+                       end
+               end
+               fileReader.close
+       end #end of load_from_file method
+
+       # Reads in a series of bytes from the FileReader when loading a Bitmap from a file
+       # FileReader.read(1) is used due to https://github.com/privat/nit/issues/1264
+       private fun read_chars(fr: FileReader, howMany: Int): String
+       do
+               var s = ""
+               for x in [1..howMany]
+               do
+                       s += fr.read(1)
+               end
+               return s
+       end
+
+       # Converts the value contained in two or four bytes into an Int. Since Nit
+       # does not have a byte type, Int is used
+       private fun get_value(array: Array[Int]): Int
+       do
+               var value = 0
+               for x in [0..array.length[ do
+                       value += array[x] * 256.to_f.pow(x.to_f).to_i
+               end
+               return value
+       end
+
+       # Converts the value in an Int to four bytes. Since Nit does not have a byte
+       # type, Int is used.
+       private fun set_value(array: Array[Int], start_index: Int, value: Int)
+       do
+               array[start_index] = value.bin_and(0x000000FF)
+               array[start_index + 1] = value.rshift(8).bin_and(0x000000FF)
+               array[start_index + 2] = value.rshift(16).bin_and(0x000000FF)
+               array[start_index + 3] = value.rshift(24).bin_and(0x000000FF)
+       end
+
+       # Saves the bitmap into a file
+       fun save(path: String)
+       do
+               var fw = new FileWriter.open(path)
+               # Write bitmap header
+               for x in [0..self.bitmap_header.length[ do
+                       fw.write(self.bitmap_header[x].ascii.to_s)
+               end
+               # Write dib header
+               for x in [0..self.dib_header.length[ do
+                       fw.write(self.dib_header[x].ascii.to_s)
+               end
+               # Write color table (if any)
+               # Write data (no padding for now)
+               for x in [0..self.height[ do
+                       var row = self.data[x]
+                       for y in [0..self.width[ do
+                               var pixel = row[y]
+                               var red = pixel.rshift(16)
+                               var green = pixel.bin_and(0x00FF00).rshift(8)
+                               var blue = pixel.bin_and(0x000000FF)
+                               fw.write(red.ascii.to_s)
+                               fw.write(green.ascii.to_s)
+                               fw.write(blue.ascii.to_s)
+                       end
+               end
+               fw.close
+       end #end of save
+
+       # Converts the bitmap to grayscale by manipulating each individual pixel
+       fun grayscale
+       do
+               for x in [0..self.height[ do
+                       var row = self.data[x]
+                       for y in [0..self.width[ do
+                               var pixel = row[y]
+                               var red = pixel.rshift(16)
+                               var green = pixel.bin_and(0x00FF00).rshift(8)
+                               var blue = pixel.bin_and(0x000000FF)
+                               var lum = (0.2126 * red.to_f + 0.7152 * green.to_f + 0.0722 * blue.to_f).to_i
+                               pixel = lum * 256 * 256 + lum * 256 + lum
+                               self.data[x][y] = pixel
+                       end
+               end
+       end
+
+       # Sets an individual pixel, where position (0, 0) represents the top-left pixel.
+       fun set_pixel(x: Int, y: Int, color: Int)
+       do
+               if x >= 0 and y >= 0 and x < self.width and y < self.height then
+                       # Since a bitmap stores its rows of pixels upside-down, y is mapped to
+                       # height - 1 - y to make (0, 0) the top-left pixel
+                       self.data[self.height - 1 - y][x] = color
+               end
+       end
+end #end of class Bitmap
diff --git a/lib/bitmap/test_bitmap.nit b/lib/bitmap/test_bitmap.nit
new file mode 100644 (file)
index 0000000..4475689
--- /dev/null
@@ -0,0 +1,44 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Budi Kurniawan <budi2020@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file tests the Bitmap class in the bitmap module
+# It has to be called by passing two arguments:
+#
+#   - An input bitmap file
+#   - An output bitmap file
+#
+# It converts the input bitmap to grayscale and save it to the specified
+# output file. In addition, it creates a blank.bmp file in the current directory.
+#
+#
+# A module for testing the classes in the bitmap module
+module test_bitmap is test_suite
+
+import bitmap
+import test_suite
+
+class TestBitmap
+       super TestSuite
+
+       fun test_grayscale do
+               var bitmap = new Bitmap.with_size(400, 300)
+               for y in [0..300] do
+                       for x in [0..200] do bitmap.set_pixel(x, y, 0x0077AAAA)
+               end
+               bitmap.grayscale
+               bitmap.save("./blank.bmp")
+       end
+end
index eba5d69..a621c54 100644 (file)
 # such as a forest with many individual trees.
 module bucketed_game
 
+import serialization
+
 # Something acting on the game
 class Turnable[G: Game]
+       auto_serializable
 
        # Execute `turn` for this instance.
        fun do_turn(turn: GameTurn[G]) is abstract
@@ -32,6 +35,8 @@ end
 # Something acting on the game from time to time
 class Bucketable[G: Game]
        super Turnable[G]
+       auto_serializable
+
        private var act_at: nullable Int = null
 
        # Cancel the previously registered acting turn
@@ -44,6 +49,7 @@ end
 # Optimized organization of `Bucketable` instances
 class Buckets[G: Game]
        super Turnable[G]
+       auto_serializable
 
        # Bucket type used in this implementation.
        type BUCKET: HashSet[Bucketable[G]]
@@ -112,10 +118,12 @@ end
 # Event raised at the first turn
 class FirstTurnEvent
        super GameEvent
+       auto_serializable
 end
 
 # Game logic on the client
 class ThinGame
+       auto_serializable
 
        # Game tick when `self` should act.
        #
@@ -125,17 +133,19 @@ end
 
 # Game turn on the client
 class ThinGameTurn[G: ThinGame]
+       auto_serializable
 
        # Game tick when `self` should act.
        var tick: Int is protected writable
 
-       # List of game events occured for `self`.
-       var events = new List[GameEvent] is protected writable
+       # Game events occurred for `self`.
+       var events = new Array[GameEvent] is protected writable
 end
 
 # Game turn on the full logic
 class GameTurn[G: Game]
        super ThinGameTurn[G]
+       auto_serializable
 
        # Game that `self` belongs to.
        var game: G
@@ -163,6 +173,7 @@ end
 # Full game logic
 class Game
        super ThinGame
+       auto_serializable
 
        # Game type used in this implementation.
        type G: Game
index bbed4ea..1114264 100644 (file)
@@ -66,10 +66,10 @@ end
 #
 # Basically just returns `self` encapsulated in a `FlatString`.
 private class LeafSubstrings
-       super IndexedIterator[Text]
+       super IndexedIterator[FlatText]
 
        var leaf: Leaf
-       var str: String is noinit
+       var str: FlatString is noinit
        var avail = true
 
        init do
index ae1b875..32bd967 100644 (file)
--- a/lib/c.nit
+++ b/lib/c.nit
@@ -153,6 +153,43 @@ extern class NativeCByteArray `{ unsigned char* `}
        redef fun +(offset) `{ return recv + offset; `}
 end
 
+# Wrapper around an array of `NativeString` in C (`char**`) with length and destroy state.
+class CNativeStringArray
+       super CArray[NativeString]
+
+       redef type NATIVE: NativeCStringArray
+
+       # Initialize a new NativeCStringArray of `size` elements.
+       init(size: Int) is old_style_init do
+               native_array = new NativeCStringArray(size)
+               super size
+       end
+
+       # Build from an `Array[NativeString]`
+       new from(array: Array[NativeString])
+       do
+               var carray = new CNativeStringArray(array.length)
+               for i in array.length.times do
+                       carray[i] = array[i]
+               end
+               return carray
+       end
+end
+
+# An array of `NativeString` in C (`char**`)
+extern class NativeCStringArray `{ char** `}
+       super NativeCArray
+
+       redef type E: NativeString
+
+       # Initialize a new NativeCStringArray of `size` elements.
+       new(size: Int) `{ return calloc(size, sizeof(char*)); `}
+
+       redef fun [](index) `{ return recv[index]; `}
+       redef fun []=(index, val) `{ recv[index] = val; `}
+       redef fun +(offset) `{ return recv + offset; `}
+end
+
 redef class NativeString
        super NativeCArray
        redef type E: Char
index 6d5729d..befce9c 100644 (file)
@@ -53,14 +53,14 @@ class Counter[E]
        redef fun iterator do return map.iterator
 
        # The number of counted occurrences of `e`
-       redef fun [](e: E): Int
+       redef fun [](e)
        do
                var map = self.map
                if map.has_key(e) then return map[e]
                return 0
        end
 
-       redef fun []=(e: E, value: Int)
+       redef fun []=(e, value)
        do
                sum -= self[e]
                self.map[e] = value
index c6f0b41..f76d41c 100644 (file)
@@ -314,10 +314,9 @@ class CsvReader
                var got_delimiter = false
 
                loop
-                       var i = istream.read_char
-                       var c: Char
+                       var c = istream.read_char
 
-                       if i < 0 then
+                       if c == null then
                                if got_row then
                                        row.add value.to_s
                                        return row
@@ -325,7 +324,6 @@ class CsvReader
                                        return null
                                end
                        end
-                       c = i.ascii
 
                        if c == format.delimiter then
                                if got_delimiter and unescaped == 0 then
@@ -334,11 +332,10 @@ class CsvReader
                                end
                                # Read all bytes until the delimiter.
                                loop
-                                       i = istream.read_char
-                                       assert not_eof: i >= 0 else
+                                       c = istream.read_char
+                                       assert not_eof: c != null else
                                                sys.stderr.write "Unexpected end of file before the end of a delimited value.\n"
                                        end
-                                       c = i.ascii
                                        if c == format.delimiter then break
                                        value.add c
                                end
index 9061e53..85440b4 100644 (file)
@@ -28,9 +28,10 @@ class DummyArray
                _length = l + 1
        end
 
-       redef fun remove(value: Int)
+       redef fun remove(value)
        do
                assert not is_empty
+               if not value isa Int then return
                var l = _length
                if l > 1 then
                        var last = _values[l - 1]
@@ -41,8 +42,9 @@ class DummyArray
                _length = l - 1
        end
 
-       redef fun has(value: Int): Bool
+       redef fun has(value)
        do
+               if not value isa Int then return false
                assert value < _capacity
                var pos = _keys[value]
                if pos < _length then
index c5baa32..f1537e4 100644 (file)
@@ -65,7 +65,7 @@ class StreamCat
                return res
        end
 
-       redef fun read_char: Int
+       redef fun read_char
        do
                assert not eof
                return stream.read_char
index ea516fa..6f7c7d9 100644 (file)
@@ -1016,6 +1016,12 @@ abstract class Comment
 
        # Comment body text.
        fun body: String do return json["body"].to_s
+
+       # Does the comment contain an acknowledgement (+1)
+       fun is_ack: Bool
+       do
+               return body.has("\\+1\\b".to_re) or body.has(":+1:") or body.has(":shipit:")
+       end
 end
 
 # A comment made on a commit.
index 11804ef..0969d86 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module gdk_enums is pkgconfig("gtk+-3.0")
+module gdk_enums is pkgconfig "gtk+-3.0"
 
 in "C Header" `{
        #include <gtk/gtk.h>
 `}
 
-#enum GdkGravity
-#Defines the reference point of a window and the meaning of coordinates passed to gtk_window_move().
-#@https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkGravity
+# enum GdkGravity
+# Defines the reference point of a window and the meaning of coordinates passed to gtk_window_move().
+# See: https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkGravity
 extern class GdkGravity `{GdkGravity`}
-       #The reference point is at the top left corner.
-       new north_west `{ return GDK_GRAVITY_NORTH_WEST; `} 
+       # The reference point is at the top left corner.
+       new north_west `{ return GDK_GRAVITY_NORTH_WEST; `}
 
-       #The reference point is in the middle of the top edge.  
-       new north `{ return GDK_GRAVITY_NORTH; `}       
+       # The reference point is in the middle of the top edge.
+       new north `{ return GDK_GRAVITY_NORTH; `}
 
-       #The reference point is at the top right corner.        
-       new north_east `{ return GDK_GRAVITY_NORTH_EAST; `} 
+       # The reference point is at the top right corner.
+       new north_east `{ return GDK_GRAVITY_NORTH_EAST; `}
 
-       #The reference point is at the middle of the left edge.
-       new west `{ return GDK_GRAVITY_WEST; `}         
+       # The reference point is at the middle of the left edge.
+       new west `{ return GDK_GRAVITY_WEST; `}
 
-       #The reference point is at the center of the window
-       new center `{ return GDK_GRAVITY_CENTER; `}     
+       # The reference point is at the center of the window
+       new center `{ return GDK_GRAVITY_CENTER; `}
 
-       #The reference point is at the middle of the right edge.
-       new east `{ return GDK_GRAVITY_EAST; `}         
+       # The reference point is at the middle of the right edge.
+       new east `{ return GDK_GRAVITY_EAST; `}
 
-       #The reference point is at the lower left corner.
-       new south_west `{ return GDK_GRAVITY_SOUTH_WEST; `} 
+       # The reference point is at the lower left corner.
+       new south_west `{ return GDK_GRAVITY_SOUTH_WEST; `}
 
-       #The reference point is at the middle of the lower edge.
-       new south `{ return GDK_GRAVITY_SOUTH; `} 
+       # The reference point is at the middle of the lower edge.
+       new south `{ return GDK_GRAVITY_SOUTH; `}
 
-       #The reference point is at the lower right corner.
-       new south_east `{ return GDK_GRAVITY_SOUTH_EAST; `} 
+       # The reference point is at the lower right corner.
+       new south_east `{ return GDK_GRAVITY_SOUTH_EAST; `}
 
-       #The reference point is at the top left corner of the window itself, ignoring window manager decorations.       
-       new static `{ return GDK_GRAVITY_STATIC; `} 
+       # The reference point is at the top left corner of the window itself, ignoring window manager decorations.
+       new static `{ return GDK_GRAVITY_STATIC; `}
 end
 
-#enum GdkGWindowEdge
-#Determines a window edge or corner.
-#@https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowEdge
+# enum GdkGWindowEdge
+# Determines a window edge or corner.
+# See: https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowEdge
 extern class GdkWindowEdge `{GdkWindowEdge`}
-       #The top left corner.
-       new north_west `{ return GDK_WINDOW_EDGE_NORTH_WEST; `} 
+       # The top left corner.
+       new north_west `{ return GDK_WINDOW_EDGE_NORTH_WEST; `}
 
-       #The top edge.  
-       new north `{ return GDK_WINDOW_EDGE_NORTH; `}   
+       # The top edge.
+       new north `{ return GDK_WINDOW_EDGE_NORTH; `}
 
-       #The top right corner.  
-       new north_east `{ return GDK_WINDOW_EDGE_NORTH_EAST; `} 
+       # The top right corner.
+       new north_east `{ return GDK_WINDOW_EDGE_NORTH_EAST; `}
 
-       #The left edge.
-       new west `{ return GDK_WINDOW_EDGE_WEST; `}             
+       # The left edge.
+       new west `{ return GDK_WINDOW_EDGE_WEST; `}
 
-       #The right edge.
-       new east `{ return GDK_WINDOW_EDGE_EAST; `}     
+       # The right edge.
+       new east `{ return GDK_WINDOW_EDGE_EAST; `}
 
-       #The lower left corner.
-       new south_west `{ return GDK_WINDOW_EDGE_SOUTH_WEST; `} 
+       # The lower left corner.
+       new south_west `{ return GDK_WINDOW_EDGE_SOUTH_WEST; `}
 
-       #The lower edge.
-       new south `{ return GDK_WINDOW_EDGE_SOUTH; `} 
+       # The lower edge.
+       new south `{ return GDK_WINDOW_EDGE_SOUTH; `}
 
-       #The lower right corner.
-       new south_east `{ return GDK_WINDOW_EDGE_SOUTH_EAST; `} 
+       # The lower right corner.
+       new south_east `{ return GDK_WINDOW_EDGE_SOUTH_EAST; `}
 end
 
index c36c521..2ceb2f4 100644 (file)
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module gtk_assistant is pkgconfig("gtk+-3.0")
+module gtk_assistant is pkgconfig "gtk+-3.0"
 
 import gtk_core
 
@@ -23,115 +23,115 @@ in "C Header" `{
        #include <gtk/gtk.h>
 `}
 
-#A widget used to guide users through multi-step operations
-#@https://developer.gnome.org/gtk3/stable/GtkAssistant.html
+# A widget used to guide users through multi-step operations
+# See: https://developer.gnome.org/gtk3/stable/GtkAssistant.html
 extern class GtkAssistant `{GtkAssistant *`}
        super GtkWindow
 
-       new is extern `{
-               return (GtkAssistant *)gtk_assistant_new( );
+       new `{
+               return (GtkAssistant *)gtk_assistant_new();
        `}
 
-       fun current_page : Int is extern `{
-               return gtk_assistant_get_current_page ( recv );
+       fun current_page: Int `{
+               return gtk_assistant_get_current_page (recv);
        `}
 
-       fun current_page=( page_num : Int ) is extern `{
-               gtk_assistant_set_current_page( recv, page_num);
+       fun current_page=(page_num: Int) `{
+               gtk_assistant_set_current_page(recv, page_num);
        `}
 
-       fun number_pages : Int is extern `{
-               return gtk_assistant_get_n_pages( recv );
+       fun number_pages: Int `{
+               return gtk_assistant_get_n_pages(recv);
        `}
 
-       fun get_page( page_num : Int ) : GtkWidget is extern `{
-               return gtk_assistant_get_nth_page( recv, page_num );
+       fun get_page(page_num: Int): GtkWidget `{
+               return gtk_assistant_get_nth_page(recv, page_num);
        `}
 
-       fun prepend( page : GtkWidget ) : Int is extern `{
-               return gtk_assistant_prepend_page( recv, page );
+       fun prepend(page: GtkWidget): Int `{
+               return gtk_assistant_prepend_page(recv, page);
        `}
 
-       fun append( page : GtkWidget ) : Int is extern `{
-               return gtk_assistant_append_page( recv, page );
+       fun append(page: GtkWidget): Int `{
+               return gtk_assistant_append_page(recv, page);
        `}
 
-       fun insert( page : GtkWidget, position : Int ) : Int is extern `{
-               return gtk_assistant_insert_page( recv, page, position );
+       fun insert(page: GtkWidget, position: Int): Int `{
+               return gtk_assistant_insert_page(recv, page, position);
        `}
 
-       fun remove( page_num : Int ) is extern `{
-               gtk_assistant_remove_page( recv, page_num );
+       fun remove(page_num: Int) `{
+               gtk_assistant_remove_page(recv, page_num);
        `}
 
-       fun get_page_type( page : GtkWidget ) : GtkAssistantPageType is extern `{
-               return gtk_assistant_get_page_type( recv, page );
+       fun get_page_type(page: GtkWidget): GtkAssistantPageType `{
+               return gtk_assistant_get_page_type(recv, page);
        `}
 
-       fun set_page_type( page : GtkWidget, t : GtkAssistantPageType) is extern `{
-               gtk_assistant_set_page_type( recv, page, t );
+       fun set_page_type(page: GtkWidget, t: GtkAssistantPageType) `{
+               gtk_assistant_set_page_type(recv, page, t);
        `}
 
-       fun get_page_title( page : GtkWidget ) : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_assistant_get_page_title( recv, page ) );
+       fun get_page_title(page: GtkWidget): String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_assistant_get_page_title(recv, page));
        `}
 
-       fun set_page_title( page : GtkWidget, title : String) is extern import String.to_cstring `{
-               gtk_assistant_set_page_title( recv, page, String_to_cstring( title ) );
+       fun set_page_title(page: GtkWidget, title: String) import String.to_cstring `{
+               gtk_assistant_set_page_title(recv, page, String_to_cstring(title));
        `}
 
-       fun set_page_complete( page : GtkWidget, is_complete : Bool ) is extern `{
-               gtk_assistant_set_page_complete( recv, page, is_complete );
+       fun set_page_complete(page: GtkWidget, is_complete: Bool) `{
+               gtk_assistant_set_page_complete(recv, page, is_complete);
        `}
 
-       fun get_page_complete( page : GtkWidget ) : Bool is extern `{
-               return gtk_assistant_get_page_complete( recv, page );
+       fun get_page_complete(page: GtkWidget): Bool `{
+               return gtk_assistant_get_page_complete(recv, page);
        `}
 
-       fun remove_action_widget( child : GtkWidget ) is extern `{
-               gtk_assistant_remove_action_widget( recv, child );
+       fun remove_action_widget(child: GtkWidget) `{
+               gtk_assistant_remove_action_widget(recv, child);
        `}
 
-       fun add_action_widget( child : GtkWidget ) is extern `{
-               gtk_assistant_add_action_widget( recv, child );
+       fun add_action_widget(child: GtkWidget) `{
+               gtk_assistant_add_action_widget(recv, child);
        `}
 
-       fun update_buttons_state is extern `{
-               gtk_assistant_update_buttons_state( recv );
+       fun update_buttons_state `{
+               gtk_assistant_update_buttons_state(recv);
        `}
 
-       fun commit is extern `{
-               gtk_assistant_commit( recv );
+       fun commit `{
+               gtk_assistant_commit(recv);
        `}
 
-       fun next_page is extern `{
-               gtk_assistant_next_page( recv );
+       fun next_page `{
+               gtk_assistant_next_page(recv);
        `}
 
-       fun previous_page is extern `{
-               gtk_assistant_previous_page( recv );
+       fun previous_page `{
+               gtk_assistant_previous_page(recv);
        `}
 end
 
-#enum GtkAssistantPageType
-#An enum for determining the page role inside the GtkAssistant. It's used to handle buttons sensitivity and visibility.
-#@https://developer.gnome.org/gtk3/stable/GtkAssistant.html#GtkAssistantPageType
+# enum GtkAssistantPageType
+# An enum for determining the page role inside the GtkAssistant. It's used to handle buttons sensitivity and visibility.
+# See: https://developer.gnome.org/gtk3/stable/GtkAssistant.html#GtkAssistantPageType
 extern class GtkAssistantPageType `{GtkAssistantPageType`}
-       #The page has regular contents. Both the Back and forward buttons will be shown.
+       # The page has regular contents. Both the Back and forward buttons will be shown.
        new content `{ return GTK_ASSISTANT_PAGE_CONTENT; `}
 
-       #The page contains an introduction to the assistant task. Only the Forward button will be shown if there is a next page.
+       # The page contains an introduction to the assistant task. Only the Forward button will be shown if there is a next page.
        new intro `{ return GTK_ASSISTANT_PAGE_INTRO; `}
 
-       #The page lets the user confirm or deny the changes. The Back and Apply buttons will be shown.
+       # The page lets the user confirm or deny the changes. The Back and Apply buttons will be shown.
        new confirm `{ return GTK_ASSISTANT_PAGE_CONFIRM; `}
 
-       #The page informs the user of the changes done. Only the Close button will be shown.
+       # The page informs the user of the changes done. Only the Close button will be shown.
        new summary `{ return GTK_ASSISTANT_PAGE_SUMMARY; `}
 
-       #Used for tasks that take a long time to complete, blocks the assistant until the page is marked as complete. Only the back button will be shown.
+       # Used for tasks that take a long time to complete, blocks the assistant until the page is marked as complete. Only the back button will be shown.
        new progress `{ return GTK_ASSISTANT_PAGE_PROGRESS; `}
 
-       #Used for when other page types are not appropriate. No buttons will be shown, and the application must add its own buttons through gtk_assistant_add_action_widget().
+       # Used for when other page types are not appropriate. No buttons will be shown, and the application must add its own buttons through gtk_assistant_add_action_widget().
        new custom `{ return GTK_ASSISTANT_PAGE_CUSTOM; `}
 end
index 64b7b49..88e373a 100644 (file)
 # limitations under the License.
 
 # Classes and services to use libGTK widgets
-module gtk_core is pkgconfig("gtk+-3.0")
+module gtk_core is
+       pkgconfig "gtk+-3.0"
+       cflags "-Wno-deprecated-declarations"
+end
 
 import gtk_enums
 import gdk_enums
@@ -26,94 +29,95 @@ in "C Header" `{
 `}
 
 `{
-               /* callback user data */
-               typedef struct {
-                       GtkCallable to_call;
-                       nullable_Object user_data;
-               } NitGtkSignal;
-
-               void nit_gtk_callback_func( GtkWidget *widget,
-                                                       gpointer   callback_data ) {
-                       NitGtkSignal *data;
-                       data = (NitGtkSignal*)callback_data;
-                       GtkCallable_signal( data->to_call, widget, data->user_data );
-               }
+       /* callback user data */
+       typedef struct {
+               GtkCallable to_call;
+               nullable_Object user_data;
+       } NitGtkSignal;
+
+       void nit_gtk_callback_func(GtkWidget *widget, gpointer callback_data) {
+               NitGtkSignal *data;
+               data = (NitGtkSignal*)callback_data;
+               GtkCallable_signal(data->to_call, widget, data->user_data);
+       }
 `}
 
-redef interface Object
-       protected fun init_gtk `{ gtk_init( 0, NULL ); `}
-       protected fun run_gtk `{ gtk_main(); `}
-       protected fun quit_gtk `{ gtk_main_quit(); `}
-end
+# Initialize the GTK system
+fun init_gtk `{ gtk_init(0, NULL); `}
+
+# Hand over control to the GTK event loop
+fun run_gtk `{ gtk_main(); `}
+
+# Quit the GTK event loop and clean up the system
+fun quit_gtk `{ gtk_main_quit(); `}
 
 interface GtkCallable
        # return true to stop event processing, false to let it propagate
-       fun signal( sender : GtkWidget, user_data : nullable Object ) is abstract
+       fun signal(sender: GtkWidget, user_data: nullable Object) is abstract
 end
 
 extern class GdkEvent `{GdkEvent *`}
 end
 
-
-#Base class for all widgets
-#@https://developer.gnome.org/gtk3/stable/GtkWidget.html
+# Base class for all widgets
+# See: https://developer.gnome.org/gtk3/stable/GtkWidget.html
 extern class GtkWidget `{GtkWidget *`}
-       fun show_all is extern `{ gtk_widget_show_all( recv ); `}
+       fun show_all `{ gtk_widget_show_all(recv); `}
 
-       fun signal_connect( signal_name : String, to_call : GtkCallable, user_data : nullable Object ) is extern import String.to_cstring, GtkCallable.signal, Object.as not nullable `{
-               NitGtkSignal *data = malloc( sizeof(NitGtkSignal) );
+       fun signal_connect(signal_name: String, to_call: GtkCallable, user_data: nullable Object) import String.to_cstring, GtkCallable.signal, Object.as not nullable `{
+               NitGtkSignal *data = malloc(sizeof(NitGtkSignal));
 
-               GtkCallable_incr_ref( to_call );
-               Object_incr_ref( user_data );
+               GtkCallable_incr_ref(to_call);
+               Object_incr_ref(user_data);
 
                data->to_call = to_call;
                data->user_data = user_data;
 
                /*Use G_CALLBACK() to cast the callback function to a GCallback*/
-               g_signal_connect( recv,
-                                                       String_to_cstring( signal_name ),
-                                                       G_CALLBACK(nit_gtk_callback_func),
-                                                       data );
+               g_signal_connect(recv,
+                                String_to_cstring(signal_name),
+                                G_CALLBACK(nit_gtk_callback_func),
+                                data);
        `}
 
-       redef fun == ( o ) do return o isa GtkWidget and equal_to_gtk_widget( o )
+       redef fun ==(o) do return o isa GtkWidget and equal_to_gtk_widget(o)
 
-       private fun equal_to_gtk_widget( o : GtkWidget ) : Bool `{
+       private fun equal_to_gtk_widget(o: GtkWidget): Bool `{
                return recv == o;
        `}
 
-       fun request_size( width, height : Int ) `{
-               gtk_widget_set_size_request( recv, width, height );
+       fun request_size(width, height: Int) `{
+               gtk_widget_set_size_request(recv, width, height);
        `}
 
-       fun bg_color=( state : GtkStateType, color : GdkRGBA ) is extern `{
-               gtk_widget_override_background_color( recv, state, color);
+       fun bg_color=(state: GtkStateType, color: GdkRGBA) `{
+               gtk_widget_override_background_color(recv, state, color);
        `}
 
-       #with gtk it's possible to set fg_color to all widget : is it correct? is fg color inherited?
-       #GdkColor color;
-       fun fg_color=( state : GtkStateType, color : GdkRGBA ) is extern `{
-               gtk_widget_override_color( recv, state, color);
+       # with gtk it's possible to set fg_color to all widget: is it correct? is fg color inherited?
+       # GdkColor color;
+       fun fg_color=(state: GtkStateType, color: GdkRGBA) `{
+               gtk_widget_override_color(recv, state, color);
        `}
-       
+
        # Sets the sensitivity of a widget. sensitive -> the user can interact with it.
        # Insensitive -> widget "grayed out" and the user can"t interact with them
-       fun sensitive=(sensitive : Bool) is extern `{
+       fun sensitive=(sensitive: Bool) `{
                gtk_widget_set_sensitive(recv, sensitive);
        `}
-       
+
        # return the sensitivity of the widget
-       fun sensitive: Bool is extern `{
+       fun sensitive: Bool `{
                return gtk_widget_get_sensitive(recv);
        `}
-       
+
        # Set the visibility of the widget
-       fun visible=(visible: Bool) is extern `{
+       fun visible=(visible: Bool) `{
                gtk_widget_set_visible(recv, visible);
        `}
 
        # Get the visibility of the widget only
-       fun visible_self: Bool is extern `{
+       fun visible_self: Bool `{
                return gtk_widget_get_visible(recv);
        `}
 
@@ -129,539 +133,578 @@ extern class GtkWidget `{GtkWidget *`}
        fun hide `{ gtk_widget_hide(recv); `}
 end
 
-#Base class for widgets which contain other widgets
-#@https://developer.gnome.org/gtk3/stable/GtkContainer.html
+# Base class for widgets which contain other widgets
+# See: https://developer.gnome.org/gtk3/stable/GtkContainer.html
 extern class GtkContainer `{GtkContainer *`}
        super GtkWidget
 
        # Add a widget to the container
-       fun add( widget : GtkWidget ) is extern `{
-               gtk_container_add( recv, widget );
+       fun add(widget: GtkWidget) `{
+               gtk_container_add(recv, widget);
        `}
        # Remove the widget from the container
-       fun remove_widget( widget : GtkWidget ) is extern `{
-               gtk_container_remove( recv, widget );
+       fun remove_widget(widget: GtkWidget) `{
+               gtk_container_remove(recv, widget);
        `}
 
        # Get the resize mode of the container
-       fun resize_mode : GtkResizeMode is extern `{
-               return gtk_container_get_resize_mode( recv );
+       fun resize_mode: GtkResizeMode `{
+               return gtk_container_get_resize_mode(recv);
        `}
 
        # Set the resize mode of the container
-       fun resize_mode=( resize_mode: GtkResizeMode ) is extern `{
-               gtk_container_set_resize_mode( recv, resize_mode );
+       fun resize_mode=(resize_mode: GtkResizeMode) `{
+               gtk_container_set_resize_mode(recv, resize_mode);
        `}
 
 end
 
-#A container with just one child
-#@https://developer.gnome.org/gtk3/stable/GtkBin.html
+# A container with just one child
+# See: https://developer.gnome.org/gtk3/stable/GtkBin.html
 extern class GtkBin `{GtkBin *`}
        super GtkContainer
 
-       fun child : GtkWidget is extern `{
-               return gtk_bin_get_child( recv );
+       fun child: GtkWidget `{
+               return gtk_bin_get_child(recv);
        `}
 end
 
-#Toplevel which can contain other widgets
-#@https://developer.gnome.org/gtk3/stable/GtkWindow.html
+# Toplevel which can contain other widgets
+# See: https://developer.gnome.org/gtk3/stable/GtkWindow.html
 extern class GtkWindow `{GtkWindow *`}
        super GtkBin
 
-       new ( flag : Int ) is extern `{
-               GtkWindow *win;
+       new (typ: GtkWindowType) `{
+               return (GtkWindow *)gtk_window_new(typ);
+       `}
 
-               win = GTK_WINDOW(gtk_window_new( flag ));
-               g_signal_connect(win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
-               return win;
+       # Connect the "destroy" signal to `quit_gtk`
+       fun connect_destroy_signal_to_quit `{
+               g_signal_connect(recv, "destroy", G_CALLBACK(gtk_main_quit), NULL);
        `}
 
-       fun title=( title : String ) is extern import String.to_cstring `{
-               gtk_window_set_title( recv, String_to_cstring( title ) );
+       fun title=(title: String) import String.to_cstring `{
+               gtk_window_set_title(recv, String_to_cstring(title));
        `}
 
-       #The "destroy" signal is emitted when a widget is destroyed, either by explicitly calling gtk_widget_destroy() or when the widget is unparented. Top-level GtkWindows are also destroyed when the Close window control button is clicked.
-       fun on_close( to_call : GtkCallable, user_data : nullable Object )
+       # The "destroy" signal is emitted when a widget is destroyed, either by explicitly calling gtk_widget_destroy() or when the widget is unparented. Top-level GtkWindows are also destroyed when the Close window control button is clicked.
+       fun on_close(to_call: GtkCallable, user_data: nullable Object)
        do
-               signal_connect( "destroy", to_call, user_data )
+               signal_connect("destroy", to_call, user_data)
        end
 
-       fun resizable : Bool is extern `{
-               return gtk_window_get_resizable( recv );
+       fun resizable: Bool `{
+               return gtk_window_get_resizable(recv);
        `}
 
-       fun resizable=( is_resizable : Bool) is extern `{
-               return gtk_window_set_resizable( recv, is_resizable );
+       fun resizable=(is_resizable: Bool) `{
+               return gtk_window_set_resizable(recv, is_resizable);
        `}
 
-       #Activates the current focused widget within the window.
-       #returns TRUE if a widget got activated.
-       fun activate_focus : Bool is extern `{
-               return gtk_window_activate_focus( recv );
+       # Activates the current focused widget within the window.
+       # returns TRUE if a widget got activated.
+       fun activate_focus: Bool `{
+               return gtk_window_activate_focus(recv);
        `}
 
-       #Sets a window modal or non-modal. Modal windows prevent interaction with other windows in the same application.
-       fun modal=( is_modal : Bool ) is extern `{
-               gtk_window_set_modal( recv, is_modal );
+       # Sets a window modal or non-modal. Modal windows prevent interaction with other windows in the same application.
+       fun modal=(is_modal: Bool) `{
+               gtk_window_set_modal(recv, is_modal);
        `}
 
-       #Windows can't actually be 0x0 in size, they must be at least 1x1
-       #but passing 0 for width and height is OK, resulting in a 1x1 default size.
-       #params width in pixels, or -1 to unset the default width
-       #params height in pixels, or -1 to unset the default height
-       fun default_size( width : Int, height : Int ) is extern `{
-               gtk_window_set_default_size( recv, width, height );
+       # Windows can't actually be 0x0 in size, they must be at least 1x1
+       # but passing 0 for width and height is OK, resulting in a 1x1 default size.
+       # params width in pixels, or -1 to unset the default width
+       # params height in pixels, or -1 to unset the default height
+       fun default_size(width: Int, height: Int) `{
+               gtk_window_set_default_size(recv, width, height);
        `}
 
-       #Activates the default widget for the window
-       #unless the current focused widget has been configured to receive the default action (see gtk_widget_set_receives_default()), in which case the focused widget is activated.
-       fun activate_default : Bool is extern `{
-               return gtk_window_activate_default( recv );
+       # Activates the default widget for the window
+       # unless the current focused widget has been configured to receive the default action (see gtk_widget_set_receives_default()), in which case the focused widget is activated.
+       fun activate_default: Bool `{
+               return gtk_window_activate_default(recv);
        `}
 
-       fun gravity : GdkGravity is extern `{
-               return gtk_window_get_gravity( recv );
+       fun gravity: GdkGravity `{
+               return gtk_window_get_gravity(recv);
        `}
 
-       fun gravity=( window_grav : GdkGravity ) is extern `{
-               gtk_window_set_gravity( recv, window_grav );
+       fun gravity=(window_grav: GdkGravity) `{
+               gtk_window_set_gravity(recv, window_grav);
        `}
 
-#      fun position : GtkWindowPosition is extern `{
-#              return gtk_window_get_position( recv );
+#      fun position: GtkWindowPosition `{
+#              return gtk_window_get_position(recv);
 #      `}
 #
-#      fun position=( window_pos : GtkWindowPosition ) is extern `{
-#              gtk_window_set_position( recv, window_pos );
+#      fun position=(window_pos: GtkWindowPosition) `{
+#              gtk_window_set_position(recv, window_pos);
 #      `}
 
-       fun active : Bool is extern `{
-               return gtk_window_is_active( recv );
+       fun active: Bool `{
+               return gtk_window_is_active(recv);
        `}
 
-       #Returns whether the input focus is within this GtkWindow. For real toplevel windows, this is identical to gtk_window_is_active(), but for embedded windows, like GtkPlug, the results will differ.
-       fun has_toplevel_focus : Bool is extern `{
-               return gtk_window_has_toplevel_focus( recv );
+       # Returns whether the input focus is within this GtkWindow. For real toplevel windows, this is identical to gtk_window_is_active(), but for embedded windows, like GtkPlug, the results will differ.
+       fun has_toplevel_focus: Bool `{
+               return gtk_window_has_toplevel_focus(recv);
        `}
 
-       fun get_focus : GtkWidget is extern `{
-               return gtk_window_get_focus( recv );
+       fun get_focus: GtkWidget `{
+               return gtk_window_get_focus(recv);
        `}
 
-       fun set_focus( widget : GtkWidget ) is extern `{
-               return gtk_window_set_focus( recv, widget );
+       fun set_focus(widget: GtkWidget) `{
+               return gtk_window_set_focus(recv, widget);
        `}
 
-       fun get_default_widget : GtkWidget is extern `{
-               return gtk_window_get_default_widget( recv );
+       fun get_default_widget: GtkWidget `{
+               return gtk_window_get_default_widget(recv);
        `}
 
-       fun set_default_widget( widget : GtkWidget ) is extern `{
-               return gtk_window_set_default( recv, widget );
+       fun set_default_widget(widget: GtkWidget) `{
+               return gtk_window_set_default(recv, widget);
        `}
 
-       fun maximize is extern `{
-               return gtk_window_maximize( recv );
+       fun maximize `{
+               return gtk_window_maximize(recv);
        `}
 
-       fun unmaximize is extern `{
-               return gtk_window_unmaximize( recv );
+       fun unmaximize `{
+               return gtk_window_unmaximize(recv);
        `}
 
-       fun fullscreen is extern `{
-               return gtk_window_fullscreen( recv );
+       fun fullscreen `{
+               return gtk_window_fullscreen(recv);
        `}
 
-       fun unfullscreen is extern `{
-               return gtk_window_unfullscreen( recv );
+       fun unfullscreen `{
+               return gtk_window_unfullscreen(recv);
        `}
 
-       fun keep_above=( setting : Bool ) is extern `{
-               gtk_window_set_keep_above( recv, setting );
+       fun keep_above=(setting: Bool) `{
+               gtk_window_set_keep_above(recv, setting);
        `}
 
-       fun keep_below=( setting : Bool ) is extern `{
-               gtk_window_set_keep_below( recv, setting );
+       fun keep_below=(setting: Bool) `{
+               gtk_window_set_keep_below(recv, setting);
        `}
 end
 
-#A bin with a decorative frame and optional label
-#https://developer.gnome.org/gtk3/stable/GtkFrame.html
+# A bin with a decorative frame and optional label
+# https://developer.gnome.org/gtk3/stable/GtkFrame.html
 extern class GtkFrame `{GtkFrame *`}
        super GtkBin
 
-       new ( lbl : String ) is extern import String.to_cstring`{
-               return (GtkFrame *)gtk_frame_new( String_to_cstring( lbl ) );
+       new (lbl: String) import String.to_cstring `{
+               return (GtkFrame *)gtk_frame_new(String_to_cstring(lbl));
        `}
 
-       fun frame_label : String is extern`{
-               return NativeString_to_s( (char *)gtk_frame_get_label( recv ) );
+       fun frame_label: String `{
+               return NativeString_to_s((char *)gtk_frame_get_label(recv));
        `}
 
-       fun frame_label=( lbl : String ) is extern import String.to_cstring`{
-               gtk_frame_set_label( recv, String_to_cstring( lbl ) );
+       fun frame_label=(lbl: String) import String.to_cstring `{
+               gtk_frame_set_label(recv, String_to_cstring(lbl));
        `}
 
-       fun label_widget : GtkWidget is extern `{
-               return gtk_frame_get_label_widget( recv );
+       fun label_widget: GtkWidget `{
+               return gtk_frame_get_label_widget(recv);
        `}
 
-       fun label_widget=( widget : GtkWidget ) is extern `{
-               gtk_frame_set_label_widget( recv, widget );
+       fun label_widget=(widget: GtkWidget) `{
+               gtk_frame_set_label_widget(recv, widget);
        `}
 
-       fun shadow_type : GtkShadowType is extern `{
-               return gtk_frame_get_shadow_type( recv );
+       fun shadow_type: GtkShadowType `{
+               return gtk_frame_get_shadow_type(recv);
        `}
 
-       fun shadow_type=( stype : GtkShadowType ) is extern `{
-               gtk_frame_set_shadow_type( recv, stype );
+       fun shadow_type=(stype: GtkShadowType) `{
+               gtk_frame_set_shadow_type(recv, stype);
        `}
 
-       #fun label_align : GtkShadowType is extern `{
-       #`}
-
-       fun label_align=( xalign : Float, yalign : Float ) is extern `{
-               gtk_frame_set_label_align( recv, xalign, yalign );
+       fun label_align=(xalign: Float, yalign: Float) `{
+               gtk_frame_set_label_align(recv, xalign, yalign);
        `}
 end
 
-#Pack widgets in a rows and columns
-#@https://developer.gnome.org/gtk3/3.3/GtkGrid.html
+# Pack widgets in a rows and columns
+# See: https://developer.gnome.org/gtk3/3.3/GtkGrid.html
 extern class GtkGrid `{GtkGrid *`}
        super GtkContainer
 
-       # Create a grid with a fixed number of rows and columns
-       new ( rows : Int, columns : Int, homogeneous : Bool ) `{
-               return (GtkGrid*)gtk_grid_new(); // rows, columns, homogeneous );
+       # Create a new grid
+       new `{
+               return (GtkGrid*)gtk_grid_new();
        `}
 
        # Set a widget child inside the grid at a given position
-       fun attach( child : GtkWidget, left, top, width, height : Int ) `{
-               gtk_grid_attach( recv, child, left, top, width, height );
+       fun attach(child: GtkWidget, left, top, width, height: Int) `{
+               gtk_grid_attach(recv, child, left, top, width, height);
        `}
 
        # Get the child of the Grid at the given position
-       fun get_child_at( left : Int, top : Int ): GtkWidget is extern `{
-               return gtk_grid_get_child_at( recv, left, top );
+       fun get_child_at(left: Int, top: Int): GtkWidget `{
+               return gtk_grid_get_child_at(recv, left, top);
        `}
 
        # Insert a row at the specified position
-       fun insert_row( position :Int ) is extern `{
-               gtk_grid_insert_row( recv, position );
+       fun insert_row(position:Int) `{
+               gtk_grid_insert_row(recv, position);
        `}
 
        # Insert a column at the specified position
-       fun insert_column( position : Int ) is extern `{
-               gtk_grid_insert_column( recv, position );
+       fun insert_column(position: Int) `{
+               gtk_grid_insert_column(recv, position);
+       `}
+end
+
+# A widget that can switch orientation
+extern class GtkOrientable `{GtkOrientable *`}
+       super GtkWidget
+
+       # Get the orientation of this widget
+       fun orientation: GtkOrientation `{
+               return gtk_orientable_get_orientation(recv);
+       `}
+
+       # Set the orientation of this widget
+       fun orientation=(orientation: GtkOrientation) `{
+               gtk_orientable_set_orientation(recv, orientation);
        `}
 end
 
 # A container box
 #
-# @https://developer.gnome.org/gtk3/3.4/GtkBox.html
+# See: https://developer.gnome.org/gtk3/3.4/GtkBox.html
 extern class GtkBox `{ GtkBox * `}
        super GtkContainer
+       super GtkOrientable
+
+       # Create a new `GtkBox` with the given `orientation` and `spacing` between its children
+       new (orientation: GtkOrientation, spacing: Int) `{
+               return (GtkBox *)gtk_box_new(orientation, spacing);
+       `}
+
+       # Give the children of `self` equal space in the box?
+       fun homogeneous: Bool `{ return gtk_box_get_homogeneous(recv); `}
+
+       # Give the children of `self` equal space in the box?
+       fun homogeneous=(homogeneous: Bool) `{
+               gtk_box_set_homogeneous(recv, homogeneous);
+       `}
+
+       # Add `child` and pack it at the start of the box
+       fun pack_start(child: GtkWidget, expand, fill: Bool, padding: Int) `{
+               gtk_box_pack_start(recv, child, expand, fill, padding);
+       `}
+
+       # Add `child` and pack it at the end of the box
+       fun pack_end(child: GtkWidget, expand, fill: Bool, padding: Int) `{
+               gtk_box_pack_end(recv, child, expand, fill, padding);
+       `}
+
+       # Set the way `child` is packed in `self`
+       fun set_child_packing(child: GtkWidget, expand, fill: Bool, padding: Int, packing: GtkPackType) `{
+               gtk_box_set_child_packing(recv, child, expand, fill, padding, packing);
+       `}
 end
 
-#The tree interface used by GtkTreeView
-#@https://developer.gnome.org/gtk3/stable/GtkTreeModel.html
+# The tree interface used by GtkTreeView
+# See: https://developer.gnome.org/gtk3/stable/GtkTreeModel.html
 extern class GtkTreeModel `{GtkTreeModel *`}
 end
 
-#An abstract class for laying out GtkCellRenderers
-#@https://developer.gnome.org/gtk3/stable/GtkCellArea.html
+# An abstract class for laying out GtkCellRenderers
+# See: https://developer.gnome.org/gtk3/stable/GtkCellArea.html
 extern class GtkCellArea `{GtkCellArea *`}
 end
 
-#Base class for widgets with alignments and padding
-#@https://developer.gnome.org/gtk3/3.2/GtkMisc.html
+# Base class for widgets with alignments and padding
+# See: https://developer.gnome.org/gtk3/3.2/GtkMisc.html
 extern class GtkMisc `{GtkMisc *`}
        super GtkWidget
 
-       fun alignment : GtkAlignment is abstract
+       fun alignment: GtkAlignment is abstract
 
-       fun alignment=( x : Float, y : Float ) is extern `{
-               gtk_misc_set_alignment( recv, x, y );
+       fun alignment=(x: Float, y: Float) `{
+               gtk_misc_set_alignment(recv, x, y);
        `}
 
-       fun padding : GtkAlignment is abstract
+       fun padding: GtkAlignment is abstract
 
-       fun padding=( x : Float, y : Float ) is extern `{
-               gtk_misc_set_padding( recv, x, y );
+       fun padding=(x: Float, y: Float) `{
+               gtk_misc_set_padding(recv, x, y);
        `}
 
 end
 
-#A single line text entry field
-#@https://developer.gnome.org/gtk3/3.2/GtkEntry.html
+# A single line text entry field
+# See: https://developer.gnome.org/gtk3/3.2/GtkEntry.html
 extern class GtkEntry `{GtkEntry *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkEntry *)gtk_entry_new();
        `}
 
-       fun text : String is extern import NativeString.to_s_with_copy `{
-               return NativeString_to_s_with_copy( (char *)gtk_entry_get_text( recv ) );
+       fun text: String import NativeString.to_s_with_copy `{
+               return NativeString_to_s_with_copy((char *)gtk_entry_get_text(recv));
        `}
 
-       fun text=( value : String) is extern import String.to_cstring`{
-               gtk_entry_set_text( recv, String_to_cstring( value ) );
+       fun text=(value: String) import String.to_cstring `{
+               gtk_entry_set_text(recv, String_to_cstring(value));
        `}
 
        # Is the text visible or is it the invisible char (such as '*')?
-       fun visiblility: Bool is extern `{
-               return gtk_entry_get_visibility( recv );
+       fun visiblility: Bool `{
+               return gtk_entry_get_visibility(recv);
        `}
 
        # Set the text visiblility
        # If false, will use the invisible char (such as '*')
-       fun visibility=( is_visible : Bool) is extern `{
-               gtk_entry_set_visibility( recv, is_visible );
+       fun visibility=(is_visible: Bool) `{
+               gtk_entry_set_visibility(recv, is_visible);
        `}
 
-       fun max_length : Int is extern `{
-               return gtk_entry_get_max_length( recv );
+       fun max_length: Int `{
+               return gtk_entry_get_max_length(recv);
        `}
 
-       fun max_length=( max : Int) is extern `{
-               gtk_entry_set_max_length( recv, max );
+       fun max_length=(max: Int) `{
+               gtk_entry_set_max_length(recv, max);
        `}
 end
 
-#Base class for widgets which visualize an adjustment
-#@https://developer.gnome.org/gtk3/3.2/GtkRange.html
+# Base class for widgets which visualize an adjustment
+# See: https://developer.gnome.org/gtk3/3.2/GtkRange.html
 extern class GtkRange `{GtkRange *`}
        super GtkWidget
 
-       #Gets the current position of the fill level indicator.
-       fun fill_level : Float is extern `{
-               return gtk_range_get_fill_level( recv );
+       # Gets the current position of the fill level indicator.
+       fun fill_level: Float `{
+               return gtk_range_get_fill_level(recv);
        `}
 
-       fun fill_level=( level : Float ) is extern `{
-               gtk_range_set_fill_level( recv, level );
+       fun fill_level=(level: Float) `{
+               gtk_range_set_fill_level(recv, level);
        `}
 
-       #Gets whether the range is restricted to the fill level.
-       fun restricted_to_fill_level : Bool is extern `{
-               return gtk_range_get_restrict_to_fill_level( recv );
+       # Gets whether the range is restricted to the fill level.
+       fun restricted_to_fill_level: Bool `{
+               return gtk_range_get_restrict_to_fill_level(recv);
        `}
 
-       fun restricted_to_fill_level=( restricted : Bool ) is extern `{
-               gtk_range_set_restrict_to_fill_level( recv, restricted );
+       fun restricted_to_fill_level=(restricted: Bool) `{
+               gtk_range_set_restrict_to_fill_level(recv, restricted);
        `}
 
-       #Gets whether the range displays the fill level graphically.
-       fun show_fill_level : Bool is extern `{
-               return gtk_range_get_show_fill_level( recv );
+       # Gets whether the range displays the fill level graphically.
+       fun show_fill_level: Bool `{
+               return gtk_range_get_show_fill_level(recv);
        `}
 
-       fun show_fill_level=( is_displayed : Bool ) is extern `{
-               gtk_range_set_show_fill_level( recv, is_displayed );
+       fun show_fill_level=(is_displayed: Bool) `{
+               gtk_range_set_show_fill_level(recv, is_displayed);
        `}
 
-       fun adjustment : GtkAdjustment is extern `{
-               return gtk_range_get_adjustment( recv );
+       fun adjustment: GtkAdjustment `{
+               return gtk_range_get_adjustment(recv);
        `}
 
-       fun adjustment=( value : GtkAdjustment ) is extern `{
-               gtk_range_set_adjustment( recv, value );
+       fun adjustment=(value: GtkAdjustment) `{
+               gtk_range_set_adjustment(recv, value);
        `}
 
-       fun inverted : Bool is extern `{
-               return gtk_range_get_inverted( recv );
+       fun inverted: Bool `{
+               return gtk_range_get_inverted(recv);
        `}
 
-       fun inverted=( setting : Bool ) is extern `{
-               gtk_range_set_inverted( recv, setting );
+       fun inverted=(setting: Bool) `{
+               gtk_range_set_inverted(recv, setting);
        `}
 
-       fun value : Float is extern `{
-               return gtk_range_get_value( recv );
+       fun value: Float `{
+               return gtk_range_get_value(recv);
        `}
 
-       fun value=( val : Float ) is extern `{
-               gtk_range_set_value( recv, val );
+       fun value=(val: Float) `{
+               gtk_range_set_value(recv, val);
        `}
 
-       fun set_increments( step : Float, page : Float ) is extern `{
-               gtk_range_set_increments( recv, step, page );
+       fun set_increments(step: Float, page: Float) `{
+               gtk_range_set_increments(recv, step, page);
        `}
 
-       fun set_range( min : Float, max : Float ) is extern `{
-               gtk_range_set_range( recv, min, max );
+       fun set_range(min: Float, max: Float) `{
+               gtk_range_set_range(recv, min, max);
        `}
 
-       fun round_digits : Int is extern `{
-               return gtk_range_get_round_digits( recv );
+       fun round_digits: Int `{
+               return gtk_range_get_round_digits(recv);
        `}
 
-       fun round_digits=( nb : Int ) is extern `{
-               gtk_range_set_round_digits( recv, nb );
+       fun round_digits=(nb: Int) `{
+               gtk_range_set_round_digits(recv, nb);
        `}
 
-       fun size_fixed : Bool is extern `{
-               return gtk_range_get_slider_size_fixed( recv );
+       fun size_fixed: Bool `{
+               return gtk_range_get_slider_size_fixed(recv);
        `}
 
-       fun size_fixed=( is_fixed : Bool ) is extern `{
-               return gtk_range_set_slider_size_fixed( recv, is_fixed );
+       fun size_fixed=(is_fixed: Bool) `{
+               return gtk_range_set_slider_size_fixed(recv, is_fixed);
        `}
 
-       fun flippable : Bool is extern `{
-               return gtk_range_get_flippable( recv );
+       fun flippable: Bool `{
+               return gtk_range_get_flippable(recv);
        `}
 
-       fun min_size=( is_flippable : Bool ) is extern `{
-               return gtk_range_set_flippable( recv, is_flippable );
+       fun min_size=(is_flippable: Bool) `{
+               return gtk_range_set_flippable(recv, is_flippable);
        `}
 
-       fun min_slider_size : Int is extern `{
-               return gtk_range_get_min_slider_size( recv );
+       fun min_slider_size: Int `{
+               return gtk_range_get_min_slider_size(recv);
        `}
 
-       fun min_slider_size=( size : Int ) is extern `{
-               return gtk_range_set_min_slider_size( recv, size );
+       fun min_slider_size=(size: Int) `{
+               return gtk_range_set_min_slider_size(recv, size);
        `}
 end
 
-#A slider widget for selecting a value from a range
-#@https://developer.gnome.org/gtk3/3.2/GtkScale.html
+# A slider widget for selecting a value from a range
+# See: https://developer.gnome.org/gtk3/3.2/GtkScale.html
 extern class GtkScale `{GtkScale *`}
        super GtkRange
 
-       new ( orientation : GtkOrientation, adjustment : GtkAdjustment ) is extern `{
-               return (GtkScale *)gtk_scale_new( orientation, adjustment );
+       new (orientation: GtkOrientation, adjustment: GtkAdjustment) `{
+               return (GtkScale *)gtk_scale_new(orientation, adjustment);
        `}
 
-       new with_range ( orientation : GtkOrientation, min : Float, max : Float, step : Float ) is extern `{
-               return (GtkScale *)gtk_scale_new_with_range( orientation, min, max, step );
+       new with_range (orientation: GtkOrientation, min: Float, max: Float, step: Float) `{
+               return (GtkScale *)gtk_scale_new_with_range(orientation, min, max, step);
        `}
 
-       fun digits : Int is extern `{
-               return gtk_scale_get_digits( recv );
+       fun digits: Int `{
+               return gtk_scale_get_digits(recv);
        `}
 
-       fun digits=( nb_digits : Int ) is extern `{
-               gtk_scale_set_digits( recv, nb_digits );
+       fun digits=(nb_digits: Int) `{
+               gtk_scale_set_digits(recv, nb_digits);
        `}
 
-       fun draw_value : Bool is extern `{
-               return gtk_scale_get_draw_value( recv );
+       fun draw_value: Bool `{
+               return gtk_scale_get_draw_value(recv);
        `}
 
-       fun draw_value=( is_displayed : Bool ) is extern `{
-               gtk_scale_set_draw_value( recv, is_displayed );
+       fun draw_value=(is_displayed: Bool) `{
+               gtk_scale_set_draw_value(recv, is_displayed);
        `}
 
-       fun value_position : GtkPositionType is extern `{
-               return gtk_scale_get_value_pos( recv );
+       fun value_position: GtkPositionType `{
+               return gtk_scale_get_value_pos(recv);
        `}
 
-       fun value_position=( pos : GtkPositionType ) is extern `{
-               gtk_scale_set_value_pos( recv, pos );
+       fun value_position=(pos: GtkPositionType) `{
+               gtk_scale_set_value_pos(recv, pos);
        `}
 
-       fun has_origin : Bool is extern `{
-               return gtk_scale_get_has_origin( recv );
+       fun has_origin: Bool `{
+               return gtk_scale_get_has_origin(recv);
        `}
 
-       fun has_origin=( orig : Bool ) is extern `{
-               gtk_scale_set_has_origin( recv, orig );
+       fun has_origin=(orig: Bool) `{
+               gtk_scale_set_has_origin(recv, orig);
        `}
 
-       fun add_mark( value : Float, position : GtkPositionType, markup : String ) is extern import String.to_cstring`{
-               gtk_scale_add_mark( recv, value, position, String_to_cstring( markup ) );
+       fun add_mark(value: Float, position: GtkPositionType, markup: String)
+       import String.to_cstring `{
+               gtk_scale_add_mark(recv, value, position, String_to_cstring(markup));
        `}
 
-       #Removes any marks that have been added with gtk_scale_add_mark().
-       fun clear_marks is extern `{
-               gtk_scale_clear_marks( recv );
+       # Removes any marks that have been added with gtk_scale_add_mark().
+       fun clear_marks `{
+               gtk_scale_clear_marks(recv);
        `}
-
-       #get layout
-       #get layout offsets
-
 end
 
-#A scrollbar
-#@https://developer.gnome.org/gtk3/3.2/GtkScrollbar.html
+# A scrollbar
+# See: https://developer.gnome.org/gtk3/3.2/GtkScrollbar.html
 extern class GtkScrollbar `{GtkScrollbar *`}
        super GtkRange
 
-               new ( orientation : GtkOrientation, adjustment : GtkAdjustment ) is extern `{
-               return (GtkScrollbar *)gtk_scrollbar_new( orientation, adjustment );
+               new (orientation: GtkOrientation, adjustment: GtkAdjustment) `{
+               return (GtkScrollbar *)gtk_scrollbar_new(orientation, adjustment);
        `}
 end
 
-#A widget that displays a small to medium amount of text
-#@https://developer.gnome.org/gtk3/3.2/GtkLabel.html
+# A widget that displays a small to medium amount of text
+# See: https://developer.gnome.org/gtk3/3.2/GtkLabel.html
 extern class GtkLabel `{GtkLabel *`}
        super GtkMisc
 
        # Create a GtkLabel with text
-       new ( text : String ) is extern import String.to_cstring `{
-               return (GtkLabel*)gtk_label_new( String_to_cstring( text ) );
+       new (text: String) import String.to_cstring `{
+               return (GtkLabel*)gtk_label_new(String_to_cstring(text));
        `}
 
        # Set the text of the label
-       fun text=( text : String ) import String.to_cstring `{
-               gtk_label_set_text( recv, String_to_cstring( text ) );
+       fun text=(text: String) import String.to_cstring `{
+               gtk_label_set_text(recv, String_to_cstring(text));
        `}
 
        # Returns the text of the label
-       fun text : String import NativeString.to_s `{
-               return NativeString_to_s( (char*)gtk_label_get_text( recv ) );
+       fun text: String import NativeString.to_s `{
+               return NativeString_to_s((char*)gtk_label_get_text(recv));
        `}
 
        # Sets the angle of rotation for the label.
        # An angle of 90 reads from from bottom to top, an angle of 270, from top to bottom.
-       fun angle=( degre : Float ) `{
-               gtk_label_set_angle( recv, degre );
+       fun angle=(degre: Float) `{
+               gtk_label_set_angle(recv, degre);
        `}
 
        # Returns the angle of rotation for the label.
-       fun angle : Float `{
-               return gtk_label_get_angle( recv );
+       fun angle: Float `{
+               return gtk_label_get_angle(recv);
        `}
 
 end
 
-#A widget displaying an image
-#@https://developer.gnome.org/gtk3/3.2/GtkImage.html
+# A widget displaying an image
+# See: https://developer.gnome.org/gtk3/3.2/GtkImage.html
 extern class GtkImage `{GtkImage *`}
        super GtkMisc
 
        # Create a GtkImage
-       new is extern `{
-               return (GtkImage*)gtk_image_new( );
+       new `{
+               return (GtkImage*)gtk_image_new();
        `}
 
        # Create a GtkImage with text
-       new file( filename : String ) is extern import String.to_cstring `{
-               return (GtkImage*)gtk_image_new_from_file( String_to_cstring( filename ) );
+       new file(filename: String) import String.to_cstring `{
+               return (GtkImage*)gtk_image_new_from_file(String_to_cstring(filename));
        `}
 
-       fun pixel_size : Int is extern `{
-               return gtk_image_get_pixel_size( recv );
+       fun pixel_size: Int `{
+               return gtk_image_get_pixel_size(recv);
        `}
 
-       fun pixel_size=( size : Int) is extern `{
-               gtk_image_set_pixel_size( recv, size );
+       fun pixel_size=(size: Int) `{
+               gtk_image_set_pixel_size(recv, size);
        `}
 
-       fun clear is extern `{
-               gtk_image_clear( recv );
+       fun clear `{
+               gtk_image_clear(recv);
        `}
 end
 
-#enum GtkImageType
-#Describes the image data representation used by a GtkImage.
-#@https://developer.gnome.org/gtk3/3.2/GtkImage.html#GtkImageType
+# enum GtkImageType
+# Describes the image data representation used by a GtkImage.
+# See: https://developer.gnome.org/gtk3/3.2/GtkImage.html#GtkImageType
 extern class GtkImageType `{GtkImageType`}
        # There is no image displayed by the widget.
        new empty `{ return GTK_IMAGE_EMPTY; `}
@@ -685,343 +728,330 @@ extern class GtkImageType `{GtkImageType`}
        new gicon `{ return GTK_IMAGE_GICON; `}
 end
 
-#Displays an arrow
-#@https://developer.gnome.org/gtk3/3.2/GtkArrow.html
+# Displays an arrow
+# See: https://developer.gnome.org/gtk3/3.2/GtkArrow.html
 extern class GtkArrow `{GtkArrow *`}
        super GtkMisc
 
-       new ( arrow_type : GtkArrowType, shadow_type : GtkShadowType ) is extern `{
-               return (GtkArrow *)gtk_arrow_new( arrow_type, shadow_type );
+       new (arrow_type: GtkArrowType, shadow_type: GtkShadowType) `{
+               return (GtkArrow *)gtk_arrow_new(arrow_type, shadow_type);
        `}
 
-       fun set( arrow_type : GtkArrowType, shadow_type : GtkShadowType ) is extern `{
-               gtk_arrow_set( recv, arrow_type, shadow_type );
+       fun set(arrow_type: GtkArrowType, shadow_type: GtkShadowType) `{
+               gtk_arrow_set(recv, arrow_type, shadow_type);
        `}
 end
 
-#A widget that emits a signal when clicked on
-#@https://developer.gnome.org/gtk3/stable/GtkButton.html
+# A widget that emits a signal when clicked on
+# See: https://developer.gnome.org/gtk3/stable/GtkButton.html
 extern class GtkButton `{GtkButton *`}
        super GtkBin
 
-       new is extern `{
-               return (GtkButton *)gtk_button_new(  );
+       new `{
+               return (GtkButton *)gtk_button_new();
        `}
 
-       #Create a GtkButton with text
-       new with_label( text : String ) is extern import String.to_cstring `{
-               return (GtkButton *)gtk_button_new_with_label( String_to_cstring( text ) );
+       # Create a GtkButton with text
+       new with_label(text: String) import String.to_cstring `{
+               return (GtkButton *)gtk_button_new_with_label(String_to_cstring(text));
        `}
 
-       new from_stock( stock_id : String ) is extern import String.to_cstring `{
-               return (GtkButton *)gtk_button_new_from_stock( String_to_cstring( stock_id ) );
+       new from_stock(stock_id: String) import String.to_cstring `{
+               return (GtkButton *)gtk_button_new_from_stock(String_to_cstring(stock_id));
        `}
 
-       fun text : String is extern `{
-               return NativeString_to_s( (char *)gtk_button_get_label( recv ) );
+       fun text: String `{
+               return NativeString_to_s((char *)gtk_button_get_label(recv));
        `}
 
-       fun text=( value : String ) is extern import String.to_cstring`{
-               gtk_button_set_label( recv, String_to_cstring( value ) );
+       fun text=(value: String) import String.to_cstring `{
+               gtk_button_set_label(recv, String_to_cstring(value));
        `}
 
-       fun on_click( to_call : GtkCallable, user_data : nullable Object ) do
-                       signal_connect( "clicked", to_call, user_data )
+       fun on_click(to_call: GtkCallable, user_data: nullable Object) do
+                       signal_connect("clicked", to_call, user_data)
        end
 
 end
 
-#A button which pops up a scale
-#@https://developer.gnome.org/gtk3/stable/GtkScaleButton.html
+# A button which pops up a scale
+# See: https://developer.gnome.org/gtk3/stable/GtkScaleButton.html
 extern class GtkScaleButton `{GtkScaleButton *`}
        super GtkButton
 
-       #const gchar **icons
-       new( size: GtkIconSize, min: Float, max: Float, step: Float ) is extern `{
-               return (GtkScaleButton *)gtk_scale_button_new( size, min, max, step, (const char **)0 );
+       # const gchar **icons
+       new(size: GtkIconSize, min: Float, max: Float, step: Float) `{
+               return (GtkScaleButton *)gtk_scale_button_new(size, min, max, step, (const char **)0);
        `}
 end
 
-#Create buttons bound to a URL
-#@https://developer.gnome.org/gtk3/stable/GtkLinkButton.html
+# Create buttons bound to a URL
+# See: https://developer.gnome.org/gtk3/stable/GtkLinkButton.html
 extern class GtkLinkButton `{GtkLinkButton *`}
        super GtkButton
 
-       new( uri: String ) is extern import String.to_cstring `{
-               return (GtkLinkButton *)gtk_link_button_new( String_to_cstring(uri) );
+       new(uri: String) import String.to_cstring `{
+               return (GtkLinkButton *)gtk_link_button_new(String_to_cstring(uri));
        `}
 end
 
-#A container which can hide its child
-#https://developer.gnome.org/gtk3/stable/GtkExpander.html
+# A container which can hide its child
+# https://developer.gnome.org/gtk3/stable/GtkExpander.html
 extern class GtkExpander `{GtkExpander *`}
        super GtkBin
 
-       new( lbl : String) is extern import String.to_cstring`{
-               return (GtkExpander *)gtk_expander_new( String_to_cstring( lbl ) );
+       new(lbl: String) import String.to_cstring `{
+               return (GtkExpander *)gtk_expander_new(String_to_cstring(lbl));
        `}
 
-       new with_mnemonic( lbl : String) is extern import String.to_cstring`{
-               return (GtkExpander *)gtk_expander_new_with_mnemonic(String_to_cstring( lbl ));
+       new with_mnemonic(lbl: String) import String.to_cstring `{
+               return (GtkExpander *)gtk_expander_new_with_mnemonic(String_to_cstring(lbl));
        `}
 
-       fun expanded : Bool is extern `{
-               return gtk_expander_get_expanded( recv );
+       fun expanded: Bool `{
+               return gtk_expander_get_expanded(recv);
        `}
 
-       fun expanded=( is_expanded : Bool ) is extern `{
-               gtk_expander_set_expanded( recv, is_expanded );
+       fun expanded=(is_expanded: Bool) `{
+               gtk_expander_set_expanded(recv, is_expanded);
        `}
 
-       fun spacing : Int is extern `{
-               return gtk_expander_get_spacing( recv );
+       fun spacing: Int `{
+               return gtk_expander_get_spacing(recv);
        `}
 
-       fun spacing=( pixels : Int ) is extern `{
-               gtk_expander_set_spacing( recv, pixels );
+       fun spacing=(pixels: Int) `{
+               gtk_expander_set_spacing(recv, pixels);
        `}
 
-       fun label_text : String is extern `{
-               return NativeString_to_s( (char *)gtk_expander_get_label( recv ) );
+       fun label_text: String `{
+               return NativeString_to_s((char *)gtk_expander_get_label(recv));
        `}
 
-       fun label_text=( lbl : String ) is extern import String.to_cstring`{
-               gtk_expander_set_label( recv, String_to_cstring( lbl ) );
+       fun label_text=(lbl: String) import String.to_cstring `{
+               gtk_expander_set_label(recv, String_to_cstring(lbl));
        `}
 
-       fun use_underline : Bool is extern `{
-               return gtk_expander_get_use_underline( recv );
+       fun use_underline: Bool `{
+               return gtk_expander_get_use_underline(recv);
        `}
 
-       fun use_underline=( used : Bool) is extern `{
-               gtk_expander_set_use_underline( recv, used );
+       fun use_underline=(used: Bool) `{
+               gtk_expander_set_use_underline(recv, used);
        `}
 
-       fun use_markup : Bool is extern `{
-               return gtk_expander_get_use_markup( recv );
+       fun use_markup: Bool `{
+               return gtk_expander_get_use_markup(recv);
        `}
 
-       fun use_markup=( used : Bool) is extern `{
-                gtk_expander_set_use_markup( recv, used );
+       fun use_markup=(used: Bool) `{
+                gtk_expander_set_use_markup(recv, used);
        `}
 
-       fun label_widget : GtkWidget is extern `{
-               return gtk_expander_get_label_widget( recv );
+       fun label_widget: GtkWidget `{
+               return gtk_expander_get_label_widget(recv);
        `}
 
-       fun label_widget=( widget : GtkWidget ) is extern `{
-               gtk_expander_set_label_widget( recv, widget );
+       fun label_widget=(widget: GtkWidget) `{
+               gtk_expander_set_label_widget(recv, widget);
        `}
 
-       fun label_fill : Bool is extern `{
-               return gtk_expander_get_label_fill( recv );
+       fun label_fill: Bool `{
+               return gtk_expander_get_label_fill(recv);
        `}
 
-       fun label_fill=( fill : Bool ) is extern `{
-               gtk_expander_set_label_fill( recv, fill );
+       fun label_fill=(fill: Bool) `{
+               gtk_expander_set_label_fill(recv, fill);
        `}
 
-       fun resize_toplevel : Bool is extern `{
-               return gtk_expander_get_resize_toplevel( recv );
+       fun resize_toplevel: Bool `{
+               return gtk_expander_get_resize_toplevel(recv);
        `}
 
-       fun resize_toplevel=( resize : Bool ) is extern `{
-               gtk_expander_set_resize_toplevel( recv, resize );
+       fun resize_toplevel=(resize: Bool) `{
+               gtk_expander_set_resize_toplevel(recv, resize);
        `}
 
 end
 
-#An abstract class for laying out GtkCellRenderers
-#@https://developer.gnome.org/gtk3/stable/GtkCellArea.html
+# An abstract class for laying out GtkCellRenderers
+# See: https://developer.gnome.org/gtk3/stable/GtkCellArea.html
 extern class GtkComboBox `{GtkComboBox *`}
        super GtkBin
 
-       new is extern `{
-               return (GtkComboBox *)gtk_combo_box_new( );
+       new `{
+               return (GtkComboBox *)gtk_combo_box_new();
        `}
 
-       new with_entry is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_entry( );
+       new with_entry `{
+               return (GtkComboBox *)gtk_combo_box_new_with_entry();
        `}
 
-       new with_model( model : GtkTreeModel ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_model( model );
+       new with_model(model: GtkTreeModel) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_model(model);
        `}
 
-       new with_model_and_entry( model : GtkTreeModel ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_model_and_entry( model );
+       new with_model_and_entry(model: GtkTreeModel) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_model_and_entry(model);
        `}
 
-       new with_area( area : GtkCellArea ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_area( area );
+       new with_area(area: GtkCellArea) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_area(area);
        `}
 
-       new with_area_and_entry( area : GtkCellArea ) is extern `{
-               return (GtkComboBox *)gtk_combo_box_new_with_area_and_entry( area );
+       new with_area_and_entry(area: GtkCellArea) `{
+               return (GtkComboBox *)gtk_combo_box_new_with_area_and_entry(area);
        `}
 
-       fun wrap_width : Int is extern `{
-               return gtk_combo_box_get_wrap_width( recv );
+       fun wrap_width: Int `{
+               return gtk_combo_box_get_wrap_width(recv);
        `}
 
-       fun wrap_width=( width : Int ) is extern `{
-               gtk_combo_box_set_wrap_width( recv, width );
+       fun wrap_width=(width: Int) `{
+               gtk_combo_box_set_wrap_width(recv, width);
        `}
 
-       fun row_span_col : Int is extern `{
-               return gtk_combo_box_get_row_span_column( recv );
+       fun row_span_col: Int `{
+               return gtk_combo_box_get_row_span_column(recv);
        `}
 
-       fun row_span_col=( row_span : Int ) is extern `{
-               gtk_combo_box_set_row_span_column( recv, row_span );
+       fun row_span_col=(row_span: Int) `{
+               gtk_combo_box_set_row_span_column(recv, row_span);
        `}
 
-       fun col_span_col : Int is extern `{
-               return gtk_combo_box_get_column_span_column( recv );
+       fun col_span_col: Int `{
+               return gtk_combo_box_get_column_span_column(recv);
        `}
 
-       fun col_span_col=( col_span : Int ) is extern `{
-               gtk_combo_box_set_column_span_column( recv, col_span );
+       fun col_span_col=(col_span: Int) `{
+               gtk_combo_box_set_column_span_column(recv, col_span);
        `}
 
-       fun active_item : Int is extern `{
-               return gtk_combo_box_get_active( recv );
+       fun active_item: Int `{
+               return gtk_combo_box_get_active(recv);
        `}
 
-       fun active_item=( active : Int ) is extern `{
-               gtk_combo_box_set_active( recv, active );
+       fun active_item=(active: Int) `{
+               gtk_combo_box_set_active(recv, active);
        `}
 
-       #fun active_iter : GtkTreeIter is extern `{
-       #`}
-       #
-       #fun active_iter=( active : Bool ) is extern `{
-       #`}
-
-       fun column_id : Int is extern `{
-               return gtk_combo_box_get_id_column( recv );
+       fun column_id: Int `{
+               return gtk_combo_box_get_id_column(recv);
        `}
 
-       fun column_id=( id_column : Int ) is extern `{
-               gtk_combo_box_set_id_column( recv, id_column );
+       fun column_id=(id_column: Int) `{
+               gtk_combo_box_set_id_column(recv, id_column);
        `}
 
-       fun active_id : String is extern `{
-               return NativeString_to_s( (char *)gtk_combo_box_get_active_id( recv ) );
+       fun active_id: String `{
+               return NativeString_to_s((char *)gtk_combo_box_get_active_id(recv));
        `}
 
-       fun active_id=( id_active : String ) is extern import String.to_cstring`{
-               gtk_combo_box_set_active_id( recv, String_to_cstring( id_active ) );
+       fun active_id=(id_active: String) import String.to_cstring `{
+               gtk_combo_box_set_active_id(recv, String_to_cstring(id_active));
        `}
 
-       fun model : GtkTreeModel is extern `{
-               return gtk_combo_box_get_model( recv );
+       fun model: GtkTreeModel `{
+               return gtk_combo_box_get_model(recv);
        `}
 
-       fun model=( model : GtkTreeModel ) is extern `{
-               gtk_combo_box_set_model( recv, model );
+       fun model=(model: GtkTreeModel) `{
+               gtk_combo_box_set_model(recv, model);
        `}
 
-       fun popup is extern `{
-               gtk_combo_box_popup( recv );
+       fun popup `{
+               gtk_combo_box_popup(recv);
        `}
 
-       fun popdown is extern `{
-               gtk_combo_box_popdown( recv );
+       fun popdown `{
+               gtk_combo_box_popdown(recv);
        `}
 
-       fun title : String is extern`{
-               return NativeString_to_s( (char *)gtk_combo_box_get_title( recv ) );
+       fun title: String `{
+               return NativeString_to_s((char *)gtk_combo_box_get_title(recv));
        `}
 
-       fun title=( t : String ) is extern import String.to_cstring `{
-               gtk_combo_box_set_title( recv, String_to_cstring( t ) );
+       fun title=(t: String) import String.to_cstring `{
+               gtk_combo_box_set_title(recv, String_to_cstring(t));
        `}
 
-       fun has_entry : Bool is extern `{
-               return gtk_combo_box_get_has_entry( recv );
+       fun has_entry: Bool `{
+               return gtk_combo_box_get_has_entry(recv);
        `}
 
-       fun with_fixed : Bool is extern `{
-               return gtk_combo_box_get_popup_fixed_width( recv );
+       fun with_fixed: Bool `{
+               return gtk_combo_box_get_popup_fixed_width(recv);
        `}
 
-       fun with_fixed=( fixed : Bool ) is extern `{
-               gtk_combo_box_set_popup_fixed_width( recv, fixed );
+       fun with_fixed=(fixed: Bool) `{
+               gtk_combo_box_set_popup_fixed_width(recv, fixed);
        `}
 end
 
-#Show a spinner animation
-#@https://developer.gnome.org/gtk3/3.2/GtkSpinner.html
+# Show a spinner animation
+# See: https://developer.gnome.org/gtk3/3.2/GtkSpinner.html
 extern class GtkSpinner `{GtkSpinner *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkSpinner *)gtk_spinner_new();
        `}
 
-       fun start is extern `{
-               return gtk_spinner_start( recv );
+       fun start `{
+               return gtk_spinner_start(recv);
        `}
 
-       fun stop is extern `{
-               return gtk_spinner_stop( recv );
+       fun stop `{
+               return gtk_spinner_stop(recv);
        `}
 end
 
-#A "light switch" style toggle
-#@https://developer.gnome.org/gtk3/3.2/GtkSwitch.html
+# A "light switch" style toggle
+# See: https://developer.gnome.org/gtk3/3.2/GtkSwitch.html
 extern class GtkSwitch `{GtkSwitch *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkSwitch *)gtk_switch_new();
        `}
 
-       fun active : Bool is extern `{
-               return gtk_switch_get_active( recv );
+       fun active: Bool `{
+               return gtk_switch_get_active(recv);
        `}
 
-       fun active=( is_active : Bool ) is extern `{
-               return gtk_switch_set_active( recv, is_active );
+       fun active=(is_active: Bool) `{
+               return gtk_switch_set_active(recv, is_active);
        `}
 end
 
-
-#A widget which controls the alignment and size of its child
-#https://developer.gnome.org/gtk3/stable/GtkAlignment.html
+# A widget which controls the alignment and size of its child
+# https://developer.gnome.org/gtk3/stable/GtkAlignment.html
 extern class GtkAlignment `{GtkAlignment *`}
        super GtkBin
 
-       new ( xalign : Float, yalign : Float, xscale : Float, yscale : Float ) is extern `{
-               return (GtkAlignment *)gtk_alignment_new( xalign, yalign, xscale, yscale );
+       new (xalign: Float, yalign: Float, xscale: Float, yscale: Float) `{
+               return (GtkAlignment *)gtk_alignment_new(xalign, yalign, xscale, yscale);
        `}
 
-       fun set ( xalign : Float, yalign : Float, xscale : Float, yscale : Float ) is extern `{
-               gtk_alignment_set( recv, xalign, yalign, xscale, yscale );
+       fun set (xalign: Float, yalign: Float, xscale: Float, yscale: Float) `{
+               gtk_alignment_set(recv, xalign, yalign, xscale, yscale);
        `}
 
-       #get_padding
-       #set_padding
 end
 
-#A representation of an adjustable bounded value
-#@https://developer.gnome.org/gtk3/stable/GtkAdjustment.html#GtkAdjustment.description
+# A representation of an adjustable bounded value
+# See: https://developer.gnome.org/gtk3/stable/GtkAdjustment.html#GtkAdjustment.description
 extern class GtkAdjustment `{GtkAdjustment *`}
-
 end
 
 extern class GdkColor `{GdkColor*`}
-       new is extern `{
-               GdkColor * col = malloc(sizeof(GdkColor));
-               /*gdk_color_parse( "red", recv );*/
-               gdk_color_parse( "red", col);
-               return col;
+       new (color_name: String) import String.to_cstring `{
+               GdkColor *color = malloc(sizeof(GdkColor));
+               gdk_color_parse(String_to_cstring(color_name), color);
+               return color;
        `}
 end
 
 extern class GdkRGBA `{GdkRGBA*`}
-       new is extern `{
-       `}
 end
 
index 079eb71..f97ce3a 100644 (file)
@@ -23,299 +23,315 @@ in "C Header" `{
        #include <gtk/gtk.h>
 `}
 
-#Create popup windows
-#@https://developer.gnome.org/gtk3/stable/GtkDialog.html
+# Create popup windows
+# See: https://developer.gnome.org/gtk3/stable/GtkDialog.html
 extern class GtkDialog `{GtkDialog *`}
        super GtkWindow
 
-       new is extern `{
-               return (GtkDialog *)gtk_dialog_new( );
+       new `{
+               return (GtkDialog *)gtk_dialog_new();
        `}
 
-       new with_buttons( title : String, parent : GtkWindow, flags : GtkDialogFlags) is extern import String.to_cstring`{
-               return (GtkDialog *)gtk_dialog_new_with_buttons( String_to_cstring( title ), parent, flags, "", NULL );
+       new with_buttons(title: String, parent: GtkWindow, flags: GtkDialogFlags)
+       import String.to_cstring `{
+               return (GtkDialog *)gtk_dialog_new_with_buttons(
+                       String_to_cstring(title), parent, flags, "", NULL);
        `}
 
-       fun run is extern `{
-               gtk_dialog_run( recv );
+       fun run `{
+               gtk_dialog_run(recv);
        `}
-
 end
 
-#Display information about an application
-#@https://developer.gnome.org/gtk3/stable/GtkAboutDialog.html
+# Display information about an application
+# See: https://developer.gnome.org/gtk3/stable/GtkAboutDialog.html
 extern class GtkAboutDialog `{GtkAboutDialog *`}
        super GtkDialog
 
-       new is extern `{
-               return (GtkAboutDialog *)gtk_about_dialog_new( );
+       new `{
+               return (GtkAboutDialog *)gtk_about_dialog_new();
        `}
 
-       fun program_name : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_program_name( recv ) );
+       fun program_name: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_program_name(recv));
        `}
 
-       fun program_name=( name : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_program_name( recv, String_to_cstring( name ) );
+       fun program_name=(name: String) import String.to_cstring `{
+               gtk_about_dialog_set_program_name(recv, String_to_cstring(name));
        `}
 
-       fun version : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_version( recv ) );
+       fun version: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_version(recv));
        `}
 
-       fun version=( v : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_version( recv, String_to_cstring( v ) );
+       fun version=(v: String) import String.to_cstring `{
+               gtk_about_dialog_set_version(recv, String_to_cstring(v));
        `}
 
-       fun copyright : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_copyright( recv ) );
+       fun copyright: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_copyright(recv));
        `}
 
-       fun copyright=( c : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_copyright( recv, String_to_cstring( c ) );
+       fun copyright=(c: String) import String.to_cstring `{
+               gtk_about_dialog_set_copyright(recv, String_to_cstring(c));
        `}
 
-       fun comments : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_comments( recv ) );
+       fun comments: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_comments(recv));
        `}
 
-       fun comments=( com : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_comments( recv, String_to_cstring( com ) );
+       fun comments=(com: String) import String.to_cstring `{
+               gtk_about_dialog_set_comments(recv, String_to_cstring(com));
        `}
 
-       fun license : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_license( recv ) );
+       fun license: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_license(recv));
        `}
 
-       fun license=( li : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_license( recv, String_to_cstring( li ) );
+       fun license=(li: String) import String.to_cstring `{
+               gtk_about_dialog_set_license(recv, String_to_cstring(li));
        `}
 
-       #license_type
+       # license_type
 
-       fun website : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_about_dialog_get_website( recv ) );
+       fun website: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_about_dialog_get_website(recv));
        `}
 
-       fun website=( link : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_website( recv, String_to_cstring( link ) );
+       fun website=(link: String) import String.to_cstring `{
+               gtk_about_dialog_set_website(recv, String_to_cstring(link));
        `}
 
-       fun website_label : String import NativeString.to_s `{
-               return NativeString_to_s( (char *) gtk_about_dialog_get_website_label( recv ) );
+       fun website_label: String import NativeString.to_s `{
+               return NativeString_to_s((char *) gtk_about_dialog_get_website_label(recv));
        `}
 
-       fun website_label=( link_label : String ) is extern import String.to_cstring`{
-               gtk_about_dialog_set_website_label( recv, String_to_cstring( link_label ) );
+       fun website_label=(link_label: String) import String.to_cstring `{
+               gtk_about_dialog_set_website_label(recv, String_to_cstring(link_label));
        `}
 
-       #TODO
-       #fun authors : String is extern`{
-       #               return NativeString_to_s( gtk_about_dialog_get_authors( recv ) );
-       #`}
+       # TODO
+       # fun authors: String`{
+       #               return NativeString_to_s(gtk_about_dialog_get_authors(recv));
+       # `}
 
-       #TODO
-       #fun authors=( authors_list : String ) is extern import String.to_cstring`{
-       #       gtk_about_dialog_set_authors( recv, String_to_cstring( authors_list ) );
-       #`}
+       # TODO
+       # fun authors=(authors_list: String) import String.to_cstring`{
+       #       gtk_about_dialog_set_authors(recv, String_to_cstring(authors_list));
+       # `}
 
-       fun show_about_dialog(parent: GtkWindow, params: String) import String.to_cstring `{
+       fun show_about_dialog(parent: GtkWindow, params: String)
+       import String.to_cstring `{
                gtk_show_about_dialog(parent, String_to_cstring(params), NULL);
        `}
 end
 
-#An application chooser dialog
-#@https://developer.gnome.org/gtk3/stable/GtkAppChooserDialog.html
+# An application chooser dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkAppChooserDialog.html
 extern class GtkAppChooserDialog `{GtkAppChooserDialog *`}
        super GtkDialog
 
-       #TODO - GFile
-       #new ( parent : GtkWindow, flags : GtkDialogFlags, file : GFile ) is extern `{
-       #       return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new( parent, flags, file );
-       #`}
+       # TODO - GFile
+       # new (parent: GtkWindow, flags: GtkDialogFlags, file: GFile) `{
+       #       return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new(parent, flags, file);
+       # `}
 
-       new for_content_type ( parent : GtkWindow, flags : GtkDialogFlags, content_type : String ) is extern  import String.to_cstring `{
-               return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new_for_content_type( parent, flags,                                                                                                                                                                                       String_to_cstring( content_type ) );
+       new for_content_type (parent: GtkWindow, flags: GtkDialogFlags, content_type: String)
+       import String.to_cstring `{
+               return (GtkAppChooserDialog *)gtk_app_chooser_dialog_new_for_content_type(
+                       parent, flags, String_to_cstring(content_type));
        `}
 
-       fun widget : GtkWidget is extern `{ return gtk_app_chooser_dialog_get_widget( recv ); `}
+       fun widget: GtkWidget `{ return gtk_app_chooser_dialog_get_widget(recv); `}
 
-       fun heading : String import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_app_chooser_dialog_get_heading( recv ) );
+       fun heading: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_app_chooser_dialog_get_heading(recv));
        `}
 
-       fun heading=( text : String ) is extern import String.to_cstring `{
-               gtk_app_chooser_dialog_set_heading( recv, String_to_cstring( text ) );
+       fun heading=(text: String) import String.to_cstring `{
+               gtk_app_chooser_dialog_set_heading(recv, String_to_cstring(text));
        `}
 
 end
 
-#A dialog for choosing colors
-#@https://developer.gnome.org/gtk3/stable/GtkColorChooserDialog.html
+# A dialog for choosing colors
+# See: https://developer.gnome.org/gtk3/stable/GtkColorChooserDialog.html
 extern class GtkColorChooserDialog `{GtkColorChooserDialog *`}
        super GtkDialog
 
-       new ( title : String, parent : GtkWindow ) is extern import String.to_cstring `{
-               return (GtkColorChooserDialog *)gtk_color_chooser_dialog_new( String_to_cstring( title ), parent );
+       new (title: String, parent: GtkWindow) import String.to_cstring `{
+               return (GtkColorChooserDialog *)gtk_color_chooser_dialog_new(
+                       String_to_cstring(title), parent);
        `}
 end
 
-#A file chooser dialog, suitable for "File/Open" or "File/Save" commands
-#@https://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html
+# A file chooser dialog, suitable for "File/Open" or "File/Save" commands
+# See: https://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html
 extern class GtkFileChooserDialog `{GtkFileChooserDialog *`}
        super GtkDialog
 
-       new ( title : String, parent : GtkWindow, action : GtkFileChooserAction ) is extern import String.to_cstring `{
-               return (GtkFileChooserDialog *)gtk_file_chooser_dialog_new( String_to_cstring( title ), parent, action, "", NULL );
+       new (title: String, parent: GtkWindow, action: GtkFileChooserAction)
+       import String.to_cstring `{
+               return (GtkFileChooserDialog *)gtk_file_chooser_dialog_new(
+                       String_to_cstring(title), parent, action, "", NULL);
        `}
 end
 
-#enum GtkFileChooserAction
-#Describes whether a GtkFileChooser is being used to open existing files or to save to a possibly new file.
-#@https://developer.gnome.org/gtk3/stable/GtkFileChooser.html#GtkFileChooserAction
+# enum GtkFileChooserAction
+#
+# Describes whether a GtkFileChooser is being used to open existing files or to save to a possibly new file.
+# See: https://developer.gnome.org/gtk3/stable/GtkFileChooser.html#GtkFileChooserAction
 extern class GtkFileChooserAction `{GtkFileChooserAction`}
-       #Indicates open mode. The file chooser will only let the user pick an existing file.
+       # Open file mode
+       #
+       # The file chooser will only let the user pick an existing file.
        new open `{ return GTK_FILE_CHOOSER_ACTION_OPEN; `}
 
-       #Indicates save mode. The file chooser will let the user pick an existing file, or type in a new filename.
+       # Save file mode
+       #
+       # The file chooser will let the user pick an existing file, or type in a new filename.
        new save `{ return GTK_FILE_CHOOSER_ACTION_SAVE; `}
 
-       #Indicates an Open mode for selecting folders. The file chooser will let the user pick an existing folder.
+       # Select folder mode
+       #
+       # The file chooser will let the user pick an existing folder.
        new select_folder `{ return GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; `}
 
-       #Indicates a mode for creating a new folder. The file chooser will let the user name an existing or new folder.
+       # Create a new folder mode
+       #
+       # The file chooser will let the user name an existing or new folder.
        new create_folder `{ return GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER; `}
 end
 
-#A dialog for selecting fonts
-#@https://developer.gnome.org/gtk3/stable/GtkFontChooserDialog.html
+# A dialog for selecting fonts
+# See: https://developer.gnome.org/gtk3/stable/GtkFontChooserDialog.html
 extern class GtkFontChooserDialog `{GtkFontChooserDialog *`}
        super GtkDialog
 
-       new ( title : String, parent : GtkWindow ) is extern `{
-               return (GtkFontChooserDialog *)gtk_font_chooser_dialog_new( String_to_cstring( title ), parent );
+       new (title: String, parent: GtkWindow) `{
+               return (GtkFontChooserDialog *)gtk_font_chooser_dialog_new(String_to_cstring(title), parent);
        `}
 end
 
-#A convenient message window
-#@https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html
+# A convenient message window
+# See: https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html
 extern class GtkMessageDialog `{GtkMessageDialog *`}
        super GtkDialog
 
-       new ( parent : GtkWindow, flags : GtkDialogFlags, msg_type : GtkMessageType, btn_type : GtkButtonsType, format : String ) is extern import String.to_cstring `{
-               return (GtkMessageDialog *)gtk_message_dialog_new( parent, flags, msg_type, btn_type, String_to_cstring( format ), NULL );
+       new (parent: GtkWindow, flags: GtkDialogFlags, msg_type: GtkMessageType, btn_type: GtkButtonsType, format: String) import String.to_cstring `{
+               return (GtkMessageDialog *)gtk_message_dialog_new(parent, flags, msg_type, btn_type, String_to_cstring(format), NULL);
        `}
 end
 
-#enum GtkButtonsType
-#Prebuilt sets of buttons for the dialog. If none of these choices are appropriate, simply use GTK_BUTTONS_NONE then call gtk_dialog_add_buttons().
-#@https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkButtonsType
+# enum GtkButtonsType
+# Prebuilt sets of buttons for the dialog. If none of these choices are appropriate, simply use GTK_BUTTONS_NONE then call gtk_dialog_add_buttons().
+# See: https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkButtonsType
 extern class GtkButtonsType `{GtkButtonsType`}
-       #No buttons at all
+       # No buttons at all
        new none `{ return GTK_BUTTONS_NONE; `}
 
-       #An OK button.
+       # An OK button.
        new ok `{ return GTK_BUTTONS_OK; `}
 
-       #A Close button.
+       # A Close button.
        new close `{ return GTK_BUTTONS_CLOSE; `}
 
-       #A Cancel button.
+       # A Cancel button.
        new cancel `{ return GTK_BUTTONS_CANCEL; `}
 
-       #Yes and No buttons.
+       # Yes and No buttons.
        new yes_no `{ return GTK_BUTTONS_YES_NO; `}
 
-       #OK and Cancel buttons.
+       # OK and Cancel buttons.
        new ok_cancel `{ return GTK_BUTTONS_OK_CANCEL; `}
 end
 
-#enum GtkMessageType
-#The type of message being displayed in the dialog.
-#@https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkMessageType
+# enum GtkMessageType
+# The type of message being displayed in the dialog.
+# See: https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkMessageType
 extern class GtkMessageType `{GtkMessageType`}
-       #Informational message
+       # Informational message
        new info `{ return GTK_MESSAGE_INFO; `}
 
-       #Non-fatal warning message.
+       # Non-fatal warning message.
        new warning `{ return GTK_MESSAGE_WARNING; `}
 
-       #Question requiring a choice.
+       # Question requiring a choice.
        new question `{ return GTK_MESSAGE_QUESTION; `}
 
-       #Fatal error message.
+       # Fatal error message.
        new error `{ return GTK_MESSAGE_ERROR; `}
 
-       #None of the above, doesn't get an icon.
+       # None of the above, doesn't get an icon.
        new other `{ return GTK_MESSAGE_OTHER; `}
 end
 
-#A page setup dialog
-#@https://developer.gnome.org/gtk3/stable/GtkPageSetupUnixDialog.html
-#extern class GtkPageSetupUnixDialog `{GtkPageSetupUnixDialog *`}
+# A page setup dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkPageSetupUnixDialog.html
+# extern class GtkPageSetupUnixDialog `{GtkPageSetupUnixDialog *`}
 #      super GtkDialog
 #
-#end
+# end
 
-#A print dialog
-#@https://developer.gnome.org/gtk3/stable/GtkPrintUnixDialog.html
-#extern class GtkPrintUnixDialog `{GtkPrintUnixDialog *`}
+# A print dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkPrintUnixDialog.html
+# extern class GtkPrintUnixDialog `{GtkPrintUnixDialog *`}
 #      super GtkDialog
 #
-#end
+# end
 
-#Displays recently used files in a dialog
-#@https://developer.gnome.org/gtk3/stable/GtkRecentChooserDialog.html
+# Displays recently used files in a dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkRecentChooserDialog.html
 extern class GtkRecentChooserDialog `{GtkRecentChooserDialog *`}
        super GtkDialog
 
 end
 
 
-#enum GtkDialogFlags
-#Flags used to influence dialog construction.
-#@https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkDialogFlags
+# enum GtkDialogFlags
+# Flags used to influence dialog construction.
+# See: https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkDialogFlags
 extern class GtkDialogFlags `{GtkDialogFlags`}
-       #Make the constructed dialog modal.
+       # Make the constructed dialog modal.
        new modal `{ return GTK_DIALOG_MODAL; `}
 
-       #Destroy the dialog when its parent is destroyed.
+       # Destroy the dialog when its parent is destroyed.
        new destroy_with_parent `{ return GTK_DIALOG_DESTROY_WITH_PARENT; `}
 end
 
-#enum GtkResponseType
-#Predefined values for use as response ids in gtk_dialog_add_button().
-#@https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkResponseType
+# enum GtkResponseType
+# Predefined values for use as response ids in gtk_dialog_add_button().
+# See: https://developer.gnome.org/gtk3/stable/GtkDialog.html#GtkResponseType
 extern class GtkResponseType `{GtkResponseType`}
-       #Returned if an action widget has no response id, or if the dialog gets programmatically hidden or destroyed.
+       # Returned if an action widget has no response id, or if the dialog gets programmatically hidden or destroyed.
        new none `{ return GTK_RESPONSE_NONE; `}
 
-       #Generic response id, not used by GTK+ dialogs.
+       # Generic response id, not used by GTK+ dialogs.
        new reject `{ return GTK_RESPONSE_REJECT; `}
 
-       #Generic response id, not used by GTK+ dialogs
+       # Generic response id, not used by GTK+ dialogs
        new accept `{ return GTK_RESPONSE_ACCEPT; `}
 
-       #Returned if the dialog is deleted
+       # Returned if the dialog is deleted
        new delete_event `{ return GTK_RESPONSE_DELETE_EVENT; `}
-       #Returned by OK buttons in GTK+ dialogs.
+       # Returned by OK buttons in GTK+ dialogs.
        new ok `{ return GTK_RESPONSE_OK; `}
 
-       #Returned by Cancel buttons in GTK+ dialogs.
+       # Returned by Cancel buttons in GTK+ dialogs.
        new cancel `{ return GTK_RESPONSE_CANCEL; `}
 
-       #Returned by OK Close in GTK+ dialogs.
+       # Returned by OK Close in GTK+ dialogs.
        new close `{ return GTK_RESPONSE_CLOSE; `}
 
-       #Returned by OK Yes in GTK+ dialogs.
+       # Returned by OK Yes in GTK+ dialogs.
        new yes `{ return GTK_RESPONSE_YES; `}
 
-       #Returned by OK No in GTK+ dialogs.
+       # Returned by OK No in GTK+ dialogs.
        new no `{ return GTK_RESPONSE_NO; `}
 
-       #Returned by OK Apply in GTK+ dialogs.
+       # Returned by OK Apply in GTK+ dialogs.
        new apply `{ return GTK_RESPONSE_APPLY; `}
 
-       #Returned by OK Help in GTK+ dialogs.
+       # Returned by OK Help in GTK+ dialogs.
        new help `{ return GTK_RESPONSE_HELP; `}
 end
index 05d5ace..2a98464 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module gtk_widgets_ext is pkgconfig("gtk+-3.0")
+module gtk_widgets_ext is pkgconfig "gtk+-3.0"
 
 import gtk_core
 
-#Displays a calendar and allows the user to select a date
-#@https://developer.gnome.org/gtk3/3.2/GtkCalendar.html
+# Displays a calendar and allows the user to select a date
+# See: https://developer.gnome.org/gtk3/3.2/GtkCalendar.html
 extern class GtkCalendar `{GtkCalendar *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkCalendar *)gtk_calendar_new();
        `}
 
-       fun month=( month : Int, year : Int ) is extern `{
-               gtk_calendar_select_month( recv, month, year );
+       fun month=(month: Int, year: Int) `{
+               gtk_calendar_select_month(recv, month, year);
        `}
 
-       fun day=( day : Int ) is extern `{
-               gtk_calendar_select_day( recv, day );
+       fun day=(day: Int) `{
+               gtk_calendar_select_day(recv, day);
        `}
 
-       fun mark_day( day : Int ) is extern `{
-               gtk_calendar_mark_day( recv, day );
+       fun mark_day(day: Int) `{
+               gtk_calendar_mark_day(recv, day);
        `}
 
-       fun unmark_day( day : Int ) is extern `{
-               gtk_calendar_unmark_day( recv, day );
+       fun unmark_day(day: Int) `{
+               gtk_calendar_unmark_day(recv, day);
        `}
 
-       fun is_marked( day : Int ): Bool is extern `{
-               return gtk_calendar_get_day_is_marked( recv, day );
+       fun is_marked(day: Int): Bool `{
+               return gtk_calendar_get_day_is_marked(recv, day);
        `}
 
-   fun clear_marks is extern `{
-               gtk_calendar_clear_marks( recv );
+   fun clear_marks `{
+               gtk_calendar_clear_marks(recv);
        `}
 
-       fun display_options : GtkCalendarDisplayOptions is extern `{
-               return gtk_calendar_get_display_options( recv );
+       fun display_options: GtkCalendarDisplayOptions `{
+               return gtk_calendar_get_display_options(recv);
        `}
 
 
-       fun display_options=( options : GtkCalendarDisplayOptions) is extern `{
-               gtk_calendar_set_display_options( recv, options );
+       fun display_options=(options: GtkCalendarDisplayOptions) `{
+               gtk_calendar_set_display_options(recv, options);
        `}
 
-       #date en nit...
+       # date en nit...
        fun date: String is abstract
 end
 
-#enum GtkCalendarDisplayOptions
-#@https://developer.gnome.org/gtk3/3.2/GtkCalendar.html#GtkCalendarDisplayOptions
+# enum GtkCalendarDisplayOptions
+# See: https://developer.gnome.org/gtk3/3.2/GtkCalendar.html#GtkCalendarDisplayOptions
 extern class GtkCalendarDisplayOptions `{GtkCalendarDisplayOptions`}
        new show_heading `{ return GTK_CALENDAR_SHOW_HEADING; `}
        new show_day_names `{ return GTK_CALENDAR_SHOW_DAY_NAMES; `}
@@ -75,68 +75,68 @@ extern class GtkCalendarDisplayOptions `{GtkCalendarDisplayOptions`}
        new show_details `{ return GTK_CALENDAR_SHOW_DETAILS; `}
 end
 
-#A separator widget
-#@https://developer.gnome.org/gtk3/stable/GtkSeparator.html
+# A separator widget
+# See: https://developer.gnome.org/gtk3/stable/GtkSeparator.html
 extern class GtkSeparator `{GtkSeparator *`}
        super GtkWidget
 
-       new ( orientation : GtkOrientation ) is extern `{
-                return (GtkSeparator *)gtk_separator_new( orientation );
+       new (orientation: GtkOrientation) `{
+                return (GtkSeparator *)gtk_separator_new(orientation);
        `}
 
 end
 
-#A widget which indicates progress visually
-#@https://developer.gnome.org/gtk3/3.2/GtkProgressBar.html
+# A widget which indicates progress visually
+# See: https://developer.gnome.org/gtk3/3.2/GtkProgressBar.html
 extern class GtkProgressBar `{GtkProgressBar *`}
        super GtkWidget
 
-       new is extern `{
+       new `{
                 return (GtkProgressBar *)gtk_progress_bar_new();
        `}
 
-       fun pulse is extern `{
-               gtk_progress_bar_pulse( recv );
+       fun pulse `{
+               gtk_progress_bar_pulse(recv);
        `}
 
-       fun pulse_step : Float is extern `{
-               return gtk_progress_bar_get_pulse_step( recv );
+       fun pulse_step: Float `{
+               return gtk_progress_bar_get_pulse_step(recv);
        `}
 
-       fun pulse_step=( step : Float ) is extern `{
-               gtk_progress_bar_set_pulse_step( recv, step);
+       fun pulse_step=(step: Float) `{
+               gtk_progress_bar_set_pulse_step(recv, step);
        `}
 
-       fun fraction : Float is extern `{
-               return gtk_progress_bar_get_fraction( recv );
+       fun fraction: Float `{
+               return gtk_progress_bar_get_fraction(recv);
        `}
 
-       fun fraction=( fraction : Float) is extern `{
-               gtk_progress_bar_set_fraction( recv, fraction );
+       fun fraction=(fraction: Float) `{
+               gtk_progress_bar_set_fraction(recv, fraction);
        `}
 
-       fun inverted : Bool is extern `{
-               return gtk_progress_bar_get_inverted( recv );
+       fun inverted: Bool `{
+               return gtk_progress_bar_get_inverted(recv);
        `}
 
-       fun inverted=( is_inverted : Bool) is extern `{
-               gtk_progress_bar_set_inverted( recv, is_inverted );
+       fun inverted=(is_inverted: Bool) `{
+               gtk_progress_bar_set_inverted(recv, is_inverted);
        `}
 
-       fun show_text : Bool is extern `{
-               return gtk_progress_bar_get_show_text( recv );
+       fun show_text: Bool `{
+               return gtk_progress_bar_get_show_text(recv);
        `}
 
-       fun show_text=( show : Bool) is extern `{
-               gtk_progress_bar_set_show_text( recv, show );
+       fun show_text=(show: Bool) `{
+               gtk_progress_bar_set_show_text(recv, show);
        `}
 
-       fun text : String is extern import NativeString.to_s `{
-               return NativeString_to_s( (char *)gtk_progress_bar_get_text( recv ) );
+       fun text: String import NativeString.to_s `{
+               return NativeString_to_s((char *)gtk_progress_bar_get_text(recv));
        `}
 
-       fun text=( value : String) is extern import String.to_cstring`{
-               gtk_progress_bar_set_text( recv, String_to_cstring( value ) );
+       fun text=(value: String) import String.to_cstring `{
+               gtk_progress_bar_set_text(recv, String_to_cstring(value));
        `}
 
        fun ellipsize is abstract
@@ -145,116 +145,104 @@ end
 
 extern class GtkColorSelectionDialog
        super GtkWidget
-       new ( title : String, parent : GtkWindow ) is extern  import String.to_cstring `{
-                return gtk_color_chooser_dialog_new( String_to_cstring( title ), parent );
+       new (title: String, parent: GtkWindow)  import String.to_cstring `{
+                return gtk_color_chooser_dialog_new(String_to_cstring(title), parent);
        `}
 
-       #fun color_selection :  is extern `{
-       #       return gtk_color_selection_dialog_get_color_selection( GTK_COLOR_SELECTION_DIALOG( recv ) );
-       #`}
+       # fun color_selection:  `{
+       #       return gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(recv));
+       # `}
 
-       #fun color : Float is extern `{
-       #       return gtk_color_selection_dialog_get_color_selection( GTK_COLOR_SELECTION_DIALOG( recv ) );
-       #`}
+       # fun color: Float `{
+       #       return gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(recv));
+       # `}
 end
 
-#Retrieve an integer or floating-point number from the user
-#@https://developer.gnome.org/gtk3/3.2/GtkSpinButton.html
+# Retrieve an integer or floating-point number from the user
+# See: https://developer.gnome.org/gtk3/3.2/GtkSpinButton.html
 extern class GtkSpinButton `{GtkSpinButton *`}
        super GtkEntry
 
-       new ( adjustment : GtkAdjustment, climb_rate : Float, digits : Int )is extern `{
-               return (GtkSpinButton *)gtk_spin_button_new( adjustment, climb_rate, digits );
+       new (adjustment: GtkAdjustment, climb_rate: Float, digits: Int)is extern `{
+               return (GtkSpinButton *)gtk_spin_button_new(adjustment, climb_rate, digits);
        `}
 
-       new with_range( min : Float, max : Float, step : Float )is extern `{
-               return (GtkSpinButton *)gtk_spin_button_new_with_range( min, max, step );
+       new with_range(min: Float, max: Float, step: Float)is extern `{
+               return (GtkSpinButton *)gtk_spin_button_new_with_range(min, max, step);
        `}
 
-       fun configure ( adjustment : GtkAdjustment, climb_rate : Float, digits : Int ) is extern `{
-               gtk_spin_button_configure( recv, adjustment, climb_rate, digits );
+       fun configure (adjustment: GtkAdjustment, climb_rate: Float, digits: Int) `{
+               gtk_spin_button_configure(recv, adjustment, climb_rate, digits);
        `}
 
-       fun adjustment : GtkAdjustment is extern `{
-               return gtk_spin_button_get_adjustment( recv );
+       fun adjustment: GtkAdjustment `{
+               return gtk_spin_button_get_adjustment(recv);
        `}
 
-       fun adjustment=( value : GtkAdjustment ) is extern `{
-               gtk_spin_button_set_adjustment( recv, value );
+       fun adjustment=(value: GtkAdjustment) `{
+               gtk_spin_button_set_adjustment(recv, value);
        `}
 
-       fun digits : Int is extern `{
-               return gtk_spin_button_get_digits( recv );
+       fun digits: Int `{
+               return gtk_spin_button_get_digits(recv);
        `}
 
-       fun digits=( nb_digits : Int ) is extern `{
-               gtk_spin_button_set_digits( recv, nb_digits );
+       fun digits=(nb_digits: Int) `{
+               gtk_spin_button_set_digits(recv, nb_digits);
        `}
 
-       fun value : Float is extern `{
-               return gtk_spin_button_get_value( recv );
+       fun value: Float `{
+               return gtk_spin_button_get_value(recv);
        `}
 
-       fun val=( val : Float ) is extern `{
-               gtk_spin_button_set_value( recv, val );
+       fun val=(val: Float) `{
+               gtk_spin_button_set_value(recv, val);
        `}
 
-       fun spin( direction : GtkSpinType, increment : Float ) is extern`{
-               gtk_spin_button_spin( recv, direction, increment );
+       fun spin(direction: GtkSpinType, increment: Float)`{
+               gtk_spin_button_spin(recv, direction, increment);
        `}
 end
 
-#enum GtkSpinType
-#The values of the GtkSpinType enumeration are used to specify the change to make in gtk_spin_button_spin().
-#@https://developer.gnome.org/gtk3/stable/GtkSpinButton.html#GtkSpinType
+# enum GtkSpinType
+# The values of the GtkSpinType enumeration are used to specify the change to make in gtk_spin_button_spin().
+# See: https://developer.gnome.org/gtk3/stable/GtkSpinButton.html#GtkSpinType
 extern class GtkSpinType `{GtkSpinType`}
-       #Increment by the adjustments step increment.
+       # Increment by the adjustments step increment.
        new step_forward `{ return GTK_SPIN_STEP_FORWARD; `}
 
-       #Decrement by the adjustments step increment.
+       # Decrement by the adjustments step increment.
        new step_backward `{ return GTK_SPIN_STEP_BACKWARD; `}
 
-       #Increment by the adjustments page increment.
+       # Increment by the adjustments page increment.
        new page_forward `{ return GTK_SPIN_PAGE_FORWARD; `}
 
-       #Decrement by the adjustments page increment.
+       # Decrement by the adjustments page increment.
        new page_backward `{ return GTK_SPIN_PAGE_BACKWARD; `}
 
-       #Go to the adjustments lower bound.
+       # Go to the adjustments lower bound.
        new lower_bound `{ return GTK_SPIN_HOME; `}
 
-       #Go to the adjustments upper bound.
+       # Go to the adjustments upper bound.
        new upper_bound `{ return GTK_SPIN_END; `}
 
-       #Change by a specified amount.
+       # Change by a specified amount.
        new user_defined `{ return GTK_SPIN_USER_DEFINED; `}
 end
 
-#A widget to unlock or lock privileged operations
-#@https://developer.gnome.org/gtk3/stable/GtkLockButton.html
+# A widget to unlock or lock privileged operations
+# See: https://developer.gnome.org/gtk3/stable/GtkLockButton.html
 extern class GtkLockButton
        super GtkButton
 end
 
-#A button to launch a color selection dialog
-#@https://developer.gnome.org/gtk3/stable/GtkColorButton.html
+# A button to launch a color selection dialog
+# See: https://developer.gnome.org/gtk3/stable/GtkColorButton.html
 extern class GtkColorButton `{GtkColorButton *`}
        super GtkButton
 
-       new is extern `{
-               return (GtkColorButton *)gtk_color_button_new(  );
-       `}
-
-       fun color=( col : GdkColor ) is extern `{
-
-               /* deprecated
-               GdkColor *c = malloc(sizeof(GdkColor));
-               c->pixel = 50;
-               c->red = 50;
-               c->green = 50;
-               c->blue = 50;
-
-               gtk_color_button_set_color( (GtkColorButton*)recv, c );*/
+       new `{
+               return (GtkColorButton *)gtk_color_button_new();
        `}
 end
 
index bf082c7..db45724 100644 (file)
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module v3_4 is pkgconfig("gtk+-3.0")
+module v3_4 is pkgconfig "gtk+-3.0"
 
 import gtk_widgets_ext
 import gtk_dialogs
index c424996..ec2de93 100644 (file)
 # limitations under the License.
 
 # GTK+ services added at version 3.6
-module v3_6 is pkgconfig("gtk+-3.0")
+module v3_6 is pkgconfig "gtk+-3.0"
 
 import v3_4
 
-#An entry which shows a search icon
-#@https://developer.gnome.org/gtk3/stable/GtkSearchEntry.html
+# An entry which shows a search icon
+# See: https://developer.gnome.org/gtk3/stable/GtkSearchEntry.html
 extern class GtkSearchEntry `{GtkSearchEntry *`}
        super GtkEntry
 
-       new is extern `{
-               return (GtkSearchEntry *)gtk_search_entry_new( );       
+       new `{
+               return (GtkSearchEntry *)gtk_search_entry_new();
        `}
 end
+
+redef extern class GtkEntry
+       # Purpose of this text field
+       #
+       # Can be used by on-screen keyboards and other input methods to adjust their behaviour.
+       fun input_purpose: GtkInputPurpose `{
+               return gtk_entry_get_input_purpose(recv);
+       `}
+
+       # Input purpose, tweaks the behavior of this widget
+       #
+       # Can be used by on-screen keyboards and other input methods to adjust their behaviour.
+       fun input_purpose=(purpose: GtkInputPurpose) `{
+               gtk_entry_set_input_purpose(recv, purpose);
+       `}
+end
+
+# Describe the purpose of an input widget
+extern class GtkInputPurpose `{ GtkInputPurpose `}
+       # Allow any character
+       new free_form `{ return GTK_INPUT_PURPOSE_FREE_FORM; `}
+
+       # Allow only alphabetic characters
+       new alpha `{ return GTK_INPUT_PURPOSE_ALPHA; `}
+
+       # Allow only digits
+       new digits `{ return GTK_INPUT_PURPOSE_DIGITS; `}
+
+       # Edited field expects numbers
+       new number `{ return GTK_INPUT_PURPOSE_NUMBER; `}
+
+       # Edited field expects phone number
+       new phone `{ return GTK_INPUT_PURPOSE_PHONE; `}
+
+       # Edited field expects URL
+       new url `{ return GTK_INPUT_PURPOSE_URL; `}
+
+       # Edited field expects email address
+       new email `{ return GTK_INPUT_PURPOSE_EMAIL; `}
+
+       # Edited field expects the name of a person
+       new name `{ return GTK_INPUT_PURPOSE_NAME; `}
+
+       # Like `free_form`, but characters are hidden
+       new password `{ return GTK_INPUT_PURPOSE_PASSWORD; `}
+
+       # Like `digits`, but characters are hidden
+       new pin `{ return GTK_INPUT_PURPOSE_PIN; `}
+end
index 540db18..16b4167 100644 (file)
@@ -21,7 +21,7 @@ import v3_6
 
 redef class GtkWidget
        # Get the visibility of the widget, check if it's parents are visible too
-       fun visible: Bool is extern `{
+       fun visible: Bool `{
                return gtk_widget_is_visible(recv);
        `}
 end
diff --git a/lib/io/io.nit b/lib/io/io.nit
deleted file mode 100644 (file)
index c48b171..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# This file is free software, which comes along with NIT. This software is
-# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE. You can modify it is you want, provided this header
-# is kept unaltered, and a notification of the changes is added.
-# You are allowed to redistribute it and sell it, alone or is a part of
-# another product.
-
-# Additional services for streams.
-module io
-
-import push_back_reader
diff --git a/lib/io/push_back_reader.nit b/lib/io/push_back_reader.nit
deleted file mode 100644 (file)
index 2fa2d19..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# This file is free software, which comes along with NIT. This software is
-# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE. You can modify it is you want, provided this header
-# is kept unaltered, and a notification of the changes is added.
-# You are allowed to redistribute it and sell it, alone or is a part of
-# another product.
-
-# Input stream that permits to push bytes back to the stream.
-module io::push_back_reader
-
-# Input stream that permits to push bytes back to the stream.
-class PushBackReader
-       super Reader
-
-       # Push the specified byte back to the stream.
-       #
-       # The specified byte is usually the last read byte that is not
-       # “unread” already.
-       fun unread_char(c: Char) is abstract
-
-       # Push the specified string back to the stream.
-       #
-       # The specified string is usually the last read string that is not
-       # “unread” already.
-       fun unread(s: String) do
-               for c in s.chars.reverse_iterator do unread_char(c)
-       end
-end
-
-# Decorates an input stream to permit to push bytes back to the input stream.
-class PushBackDecorator
-       super PushBackReader
-
-       # The parent stream.
-       var parent: Reader
-
-       # The stack of the pushed-back bytes.
-       #
-       # Bytes are in the reverse order they will reappear in the stream.
-       # `unread` pushes bytes after already pushed-back bytes.
-       #
-       # TODO: With optimized bulk array copy operations, a reversed stack (like in
-       # OpenJDK) would be more efficient.
-       private var buf: Sequence[Char] = new Array[Char]
-
-       redef fun read_char: Int do
-               if buf.length <= 0 then return parent.read_char
-               return buf.pop.ascii
-       end
-
-       redef fun read(i: Int): String do
-               if i <= 0 then return ""
-               if buf.length <= 0 then return parent.read(i)
-               var s = new FlatBuffer.with_capacity(i)
-
-               loop
-                       s.chars.push(buf.pop)
-                       i -= 1
-                       if i <= 0 then
-                               return s.to_s
-                       else if buf.length <= 0 then
-                               s.append(parent.read(i))
-                               return s.to_s
-                       end
-               end
-       end
-
-       redef fun read_all: String do
-               if buf.length <= 0 then return parent.read_all
-               var s = new FlatBuffer
-
-               loop
-                       s.chars.push(buf.pop)
-                       if buf.length <= 0 then
-                               s.append(parent.read_all)
-                               return s.to_s
-                       end
-               end
-       end
-
-       redef fun append_line_to(s: Buffer) do
-               if buf.length > 0 then
-                       var c: Char
-
-                       loop
-                               c = buf.pop
-                               s.chars.push(c)
-                               if c == '\n' then return
-                               if buf.length <= 0 then break
-                       end
-               end
-               parent.append_line_to(s)
-       end
-
-       redef fun eof: Bool do return buf.length <= 0 and parent.eof
-
-       redef fun close do
-               buf.clear
-               parent.close
-       end
-
-       redef fun unread_char(c: Char) do buf.push(c)
-
-       redef fun unread(s: String) do
-               for c in s.chars.reverse_iterator do buf.push(c)
-       end
-end
diff --git a/lib/io/test_push_back_reader.nit b/lib/io/test_push_back_reader.nit
deleted file mode 100644 (file)
index 1498ccf..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# This file is free software, which comes along with NIT. This software is
-# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE. You can modify it is you want, provided this header
-# is kept unaltered, and a notification of the changes is added.
-# You are allowed to redistribute it and sell it, alone or is a part of
-# another product.
-
-# Test suites for module `push_back_reader`
-module test_push_back_reader is test_suite
-
-import test_suite
-import io::push_back_reader
-
-class TestPushBackDecorator
-       super TestSuite
-
-       private fun sample: PushBackDecorator do
-               return new PushBackDecorator(new StringReader("""
-abcd
-
-efg
-"""))
-       end
-
-       fun test_read_char do
-               var subject = sample
-
-               assert 'a' == subject.read_char.ascii
-       end
-
-       fun test_read_char_eof do
-               var subject = new PushBackDecorator(new StringReader(""))
-
-               assert -1 == subject.read_char
-       end
-
-       fun test_unread_read_char do
-               var subject = sample
-
-               subject.unread_char('z')
-               assert 'z' == subject.read_char.ascii
-               assert 'a' == subject.read_char.ascii
-       end
-
-       fun test_read_partial do
-               var subject = sample
-
-               assert "abcd" == subject.read(4)
-       end
-
-       fun test_read_too_much do
-               var subject = sample
-               var exp = """
-abcd
-
-efg
-"""
-               assert exp == subject.read(100)
-       end
-
-       fun test_unread_read do
-               var subject = sample
-
-               subject.unread("a")
-               assert "aab" == subject.read(3)
-       end
-
-       fun test_unread_read_mixed do
-               var subject = sample
-
-               subject.unread("a")
-               assert "aab" == subject.read(3)
-       end
-
-       fun test_read_all do
-               var subject = sample
-               var exp = """
-abcd
-
-efg
-"""
-               assert exp == subject.read_all
-       end
-
-       fun test_unread_read_all do
-               var subject = sample
-               var exp = """
-fooabcd
-
-efg
-"""
-               subject.unread("foo")
-               assert exp == subject.read_all
-       end
-
-       fun test_read_line do
-               var subject = sample
-
-               assert "abcd" == subject.read_line
-               assert "" == subject.read_line
-       end
-
-       fun test_unread_read_line do
-               var subject = sample
-
-               subject.unread("a\nb")
-               assert "a" == subject.read_line
-               assert "babcd" == subject.read_line
-       end
-
-       fun test_eof do
-               var subject = sample
-
-               assert not subject.eof
-               subject.read_all
-               assert subject.eof
-       end
-
-       fun test_eof_empty do
-               var subject = new PushBackDecorator(new StringReader(""))
-
-               assert subject.eof
-       end
-
-       fun test_close do
-               var subject = sample
-
-               subject.close
-               assert subject.eof
-       end
-
-       fun test_unread_close do
-               var subject = sample
-
-               subject.unread("foo")
-               subject.close
-               assert subject.eof
-       end
-
-       fun test_unread_char_order do
-               var subject = sample
-
-               subject.unread_char('z')
-               subject.unread_char('y')
-               assert "yzab" == subject.read(4)
-       end
-
-       fun test_unread_order do
-               var subject = sample
-
-               subject.unread("bar")
-               subject.unread("foo")
-               assert "foobarab" == subject.read(8)
-       end
-end
index 12dbc7c..1107973 100644 (file)
@@ -56,6 +56,34 @@ interface Jsonable
        #
        # SEE: `to_json`
        fun append_json(buffer: Buffer) do buffer.append(to_json)
+
+       # Pretty print JSON string.
+       #
+       # ~~~
+       # var obj = new JsonObject
+       # obj["foo"] = 1
+       # obj["bar"] = true
+       # var arr = new JsonArray
+       # arr.add 2
+       # arr.add false
+       # arr.add "baz"
+       # obj["baz"] = arr
+       # var res = obj.to_pretty_json
+       # var exp = """{
+       #       "foo": 1,
+       #       "bar": true,
+       #       "baz": [2, false, "baz"]
+       # }\n"""
+       # assert res == exp
+       # ~~~
+       fun to_pretty_json: String do
+               var res = new FlatBuffer
+               pretty_json_visit(res, 0)
+               res.add '\n'
+               return res.write_to_string
+       end
+
+       private fun pretty_json_visit(buffer: FlatBuffer, indent: Int) is abstract
 end
 
 redef class Text
@@ -96,8 +124,10 @@ redef class Text
 
        # Encode `self` in JSON.
        #
-       #     assert "\t\"http://example.com\"\r\n\0\\".to_json ==
-       #               "\"\\t\\\"http:\\/\\/example.com\\\"\\r\\n\\u0000\\\\\""
+       # ~~~
+       # assert "\t\"http://example.com\"\r\n\0\\".to_json ==
+       #     "\"\\t\\\"http:\\/\\/example.com\\\"\\r\\n\\u0000\\\\\""
+       # ~~~
        redef fun to_json do return to_json_by_append
 
        # Parse `self` as JSON.
@@ -225,6 +255,29 @@ interface JsonMapRead[K: String, V: nullable Jsonable]
        #     assert obj.to_json == "\{\"baz\":null\}"
        redef fun to_json do return to_json_by_append
 
+       redef fun pretty_json_visit(buffer, indent) do
+               buffer.append "\{\n"
+               indent += 1
+               var i = 0
+               for k, v in self do
+                       buffer.append "\t" * indent
+                       buffer.append "\"{k}\": "
+                       if v isa JsonObject or v isa JsonArray then
+                               v.pretty_json_visit(buffer, indent)
+                       else
+                               buffer.append v.to_json
+                       end
+                       if i < length - 1 then
+                               buffer.append ","
+                       end
+                       buffer.append "\n"
+                       i += 1
+               end
+               indent -= 1
+               buffer.append "\t" * indent
+               buffer.append "\}"
+       end
+
        private fun append_json_entry(iterator: MapIterator[String, nullable Jsonable],
                        buffer: Buffer) do
                buffer.append iterator.key.to_json
@@ -269,6 +322,21 @@ class JsonSequenceRead[E: nullable Jsonable]
        #     assert arr.to_json =="[]"
        redef fun to_json do return to_json_by_append
 
+       redef fun pretty_json_visit(buffer, indent) do
+               buffer.append "\["
+               var i = 0
+               for v in self do
+                       if v isa JsonObject or v isa JsonArray then
+                               v.pretty_json_visit(buffer, indent)
+                       else
+                               buffer.append v.to_json
+                       end
+                       if i < length - 1 then buffer.append ", "
+                       i += 1
+               end
+               buffer.append "\]"
+       end
+
        private fun append_json_entry(iterator: Iterator[nullable Jsonable],
                        buffer: Buffer) do
                buffer.append_json_of(iterator.item)
@@ -287,13 +355,15 @@ redef class JsonParseError
 
        # Get the JSON representation of `self`.
        #
-       #     var err = new JsonParseError("foo", new Position(1, 2, 3, 4, 5, 6))
-       #     assert err.to_json == "\{\"error\":\"JsonParseError\"," +
-       #               "\"position\":\{" +
-       #                       "\"pos_start\":1,\"pos_end\":2," +
-       #                       "\"line_start\":3,\"line_end\":4," +
-       #                       "\"col_start\":5,\"col_end\":6" +
-       #               "\},\"message\":\"foo\"\}"
+       # ~~~
+       # var err = new JsonParseError("foo", new Position(1, 2, 3, 4, 5, 6))
+       # assert err.to_json == "\{\"error\":\"JsonParseError\"," +
+       #               "\"position\":\{" +
+       #                       "\"pos_start\":1,\"pos_end\":2," +
+       #                       "\"line_start\":3,\"line_end\":4," +
+       #                       "\"col_start\":5,\"col_end\":6" +
+       #               "\},\"message\":\"foo\"\}"
+       # ~~~
        redef fun to_json do
                return "\{\"error\":\"JsonParseError\"," +
                                "\"position\":{position.to_json}," +
@@ -306,12 +376,14 @@ redef class Position
 
        # Get the JSON representation of `self`.
        #
-       #     var pos = new Position(1, 2, 3, 4, 5, 6)
-       #     assert pos.to_json == "\{" +
-       #                       "\"pos_start\":1,\"pos_end\":2," +
-       #                       "\"line_start\":3,\"line_end\":4," +
-       #                       "\"col_start\":5,\"col_end\":6" +
-       #               "\}"
+       # ~~~
+       # var pos = new Position(1, 2, 3, 4, 5, 6)
+       # assert pos.to_json == "\{" +
+       #                       "\"pos_start\":1,\"pos_end\":2," +
+       #                       "\"line_start\":3,\"line_end\":4," +
+       #                       "\"col_start\":5,\"col_end\":6" +
+       #               "\}"
+       # ~~~
        redef fun to_json do
                return "\{\"pos_start\":{pos_start},\"pos_end\":{pos_end}," +
                                "\"line_start\":{line_start},\"line_end\":{line_end}," +
index e8c76b4..b9667db 100644 (file)
@@ -42,7 +42,7 @@ class JsonSerializer
 
        redef fun serialize_reference(object)
        do
-               if refs_map.keys.has(object) then
+               if refs_map.has_key(object) then
                        # if already serialized, add local reference
                        var id = ref_id_for(object)
                        stream.write "\{\"__kind\": \"ref\", \"__id\": {id}\}"
@@ -53,12 +53,12 @@ class JsonSerializer
        end
 
        # Map of references to already serialized objects.
-       var refs_map = new HashMap[Serializable,Int]
+       private var refs_map = new StrictHashMap[Serializable,Int]
 
        # Get the internal serialized reference for this `object`.
        private fun ref_id_for(object: Serializable): Int
        do
-               if refs_map.keys.has(object) then
+               if refs_map.has_key(object) then
                        return refs_map[object]
                else
                        var id = refs_map.length
@@ -81,8 +81,8 @@ class JsonDeserializer
        # Depth-first path in the serialized object tree.
        var path = new Array[JsonObject]
 
-       # Map of refenrences to already deserialized objects.
-       var id_to_object = new HashMap[Int, Object]
+       # Map of references to already deserialized objects.
+       private var id_to_object = new StrictHashMap[Int, Object]
 
        # Last encountered object reference id.
        #
@@ -111,7 +111,7 @@ class JsonDeserializer
        redef fun notify_of_creation(new_object)
        do
                var id = just_opened_id
-               assert id != null
+               if id == null then return # Register `new_object` only once
                id_to_object[id] = new_object
        end
 
@@ -128,7 +128,7 @@ class JsonDeserializer
                                var id = object["__id"]
                                assert id isa Int
 
-                               assert id_to_object.keys.has(id)
+                               assert id_to_object.has_key(id)
                                return id_to_object[id]
                        end
 
@@ -142,7 +142,7 @@ class JsonDeserializer
                                var class_name = object["__class"]
                                assert class_name isa String
 
-                               assert not id_to_object.keys.has(id) else print "Error: Object with id '{id}' is deserialized twice."
+                               assert not id_to_object.has_key(id) else print "Error: Object with id '{id}' of {class_name} is deserialized twice."
 
                                # advance on path
                                path.push object
@@ -219,49 +219,46 @@ redef class NativeString
        redef fun serialize_to_json(v) do to_s.serialize_to_json(v)
 end
 
-redef class Array[E]
-       redef fun serialize_to_json(v)
+redef class Collection[E]
+       # Utility to serialize a normal Json array
+       private fun serialize_to_pure_json(v: JsonSerializer)
        do
-               if class_name == "Array[nullable Serializable]" then
-                       # Using class_name to the the exact type
-                       # We do not want Array[Int] or anything else here
                        v.stream.write "["
                        var is_first = true
                        for e in self do
                                if is_first then
                                        is_first = false
-                               else v.stream.write(", ")
+                               else v.stream.write ", "
 
                                if not v.try_to_serialize(e) then
                                        v.warn("element of type {e.class_name} is not serializable.")
                                end
                        end
                        v.stream.write "]"
-               else
-                       # Register as pseudo object
-                       var id = v.ref_id_for(self)
-                       v.stream.write "\{\"__kind\": \"obj\", \"__id\": {id}, \"__class\": \"{class_name}\""
-                       v.stream.write """, "__length": {{{length}}}, "__items": ["""
-                       var is_first = true
-                       for e in self do
-                               if is_first then
-                                       is_first = false
-                               else v.stream.write(", ")
+       end
+end
 
-                               if not v.try_to_serialize(e) then
-                                       v.warn("element of type {e.class_name} is not serializable.")
-                               end
-                       end
-                       v.stream.write "]"
-                       v.stream.write "\}"
-               end
+redef class SimpleCollection[E]
+       redef fun serialize_to_json(v)
+       do
+               # Register as pseudo object
+               var id = v.ref_id_for(self)
+               v.stream.write """{"__kind": "obj", "__id": """
+               v.stream.write id.to_s
+               v.stream.write """, "__class": """"
+               v.stream.write class_name
+               v.stream.write """", "__length": """
+               v.stream.write length.to_s
+               v.stream.write """, "__items": """
+               serialize_to_pure_json v
+               v.stream.write "\}"
        end
 
-       # Instanciate a new `Array` from its serialized representation.
-       init from_deserializer(v: Deserializer)
+       redef init from_deserializer(v: Deserializer)
        do
                if v isa JsonDeserializer then
                        v.notify_of_creation self
+                       init
 
                        var length = v.deserialize_attribute("__length").as(Int)
                        var arr = v.path.last["__items"].as(SequenceRead[nullable Object])
@@ -272,3 +269,112 @@ redef class Array[E]
                end
        end
 end
+
+redef class Array[E]
+       redef fun serialize_to_json(v)
+       do
+               if class_name == "Array[nullable Serializable]" then
+                       # Using class_name to get the exact type,
+                       # we do not want Array[Int] or anything else here.
+
+                       serialize_to_pure_json v
+               else super
+       end
+end
+
+redef class Map[K, V]
+       redef fun serialize_to_json(v)
+       do
+               # Register as pseudo object
+               var id = v.ref_id_for(self)
+
+               v.stream.write """{"__kind": "obj", "__id": """
+               v.stream.write id.to_s
+               v.stream.write """, "__class": """"
+               v.stream.write class_name
+               v.stream.write """", "__length": """
+               v.stream.write length.to_s
+               v.stream.write """, "__keys": """
+
+               keys.serialize_to_pure_json v
+
+               v.stream.write """, "__values": """
+               values.serialize_to_pure_json v
+               v.stream.write "\}"
+       end
+
+       # Instantiate a new `Array` from its serialized representation.
+       redef init from_deserializer(v: Deserializer)
+       do
+               init
+
+               if v isa JsonDeserializer then
+                       v.notify_of_creation self
+
+                       var length = v.deserialize_attribute("__length").as(Int)
+                       var keys = v.path.last["__keys"].as(SequenceRead[nullable Object])
+                       var values = v.path.last["__values"].as(SequenceRead[nullable Object])
+                       for i in length.times do
+                               var key = v.convert_object(keys[i])
+                               var value = v.convert_object(values[i])
+                               self[key] = value
+                       end
+               end
+       end
+end
+
+# Maps instances to a value, uses `is_same_instance`
+#
+# Warning: This class does not implement all the services from `Map`.
+private class StrictHashMap[K, V]
+       super Map[K, V]
+
+       # private
+       var map = new HashMap[K, Array[Couple[K, V]]]
+
+       redef var length = 0
+
+       redef fun is_empty do return length == 0
+
+       # private
+       fun node_at(key: K): nullable Couple[K, V]
+       do
+               if not map.keys.has(key) then return null
+
+               var arr = map[key]
+               for couple in arr do
+                       if couple.first.is_same_serialized(key) then
+                               return couple
+                       end
+               end
+
+               return null
+       end
+
+       redef fun [](key)
+       do
+               var node = node_at(key)
+               assert node != null
+               return node.second
+       end
+
+       redef fun []=(key, value)
+       do
+               var node = node_at(key)
+               if node != null then
+                       node.second = value
+                       return
+               end
+
+               var arr
+               if not map.keys.has(key) then
+                       arr = new Array[Couple[K, V]]
+                       map[key] = arr
+               else arr = map[key]
+
+               arr.add new Couple[K, V](key, value)
+               self.length += 1
+       end
+
+       redef fun has_key(key) do return node_at(key) != null
+end
similarity index 93%
rename from lib/linux/linux_data_store.nit
rename to lib/linux/data_store.nit
index 4393f4a..5743d82 100644 (file)
@@ -14,7 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-module linux_data_store
+# `app::data_store` implementation on GNU/Linux
+module data_store
 
 import app::data_store
 private import xdg_basedir
@@ -51,7 +52,7 @@ private class LinuxStore
                # Open DB connection
                db = new Sqlite3DB.open(db_path)
                if not db.is_open then
-                       app.log_error "Data store unavaible, cannot load/save data. (at '{db_path}' with '{db.error or else "unknown"}')"
+                       print_error "Data store unavaible, cannot load/save data. (at '{db_path}' with '{db.error or else "unknown"}')"
                        return null
                end
 
index b106d62..2fecee8 100644 (file)
@@ -18,4 +18,4 @@
 module linux
 
 import app
-private import linux_data_store
+private import data_store
diff --git a/lib/linux/ui.nit b/lib/linux/ui.nit
new file mode 100644 (file)
index 0000000..4f67eed
--- /dev/null
@@ -0,0 +1,139 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Implementation of the app.nit UI module for GNU/Linux
+module ui
+
+import app::ui
+import gtk
+
+import data_store
+
+redef class App
+       redef fun setup do init_gtk
+
+       # On GNU/Linux, we go through all the callbacks once,
+       # there is no complex life-cycle.
+       redef fun run
+       do
+               app.on_create
+               app.on_restore_state
+               app.on_start
+               app.on_resume
+
+               var window = window
+               window.native.show_all
+               run_gtk
+
+               app.on_pause
+               app.on_stop
+               app.on_save_state
+               app.on_destroy
+       end
+
+       # Spacing between GTK controls, default at 2
+       var control_spacing = 2 is writable
+end
+
+redef class Control
+       super GtkCallable
+       super Finalizable
+
+       # The GTK element used to implement `self`
+       fun native: NATIVE is abstract
+
+       # Type of `native`
+       type NATIVE: GtkWidget
+
+       redef fun finalize
+       do
+               var native = native
+               if not native.address_is_null then native.destroy
+       end
+end
+
+redef class CompositeControl
+       redef type NATIVE: GtkContainer
+
+       redef fun add(item)
+       do
+               super
+               native.add item.native
+       end
+end
+
+redef class Window
+       redef type NATIVE: GtkWindow
+       redef var native do
+               var win = new GtkWindow(new GtkWindowType.toplevel)
+               win.connect_destroy_signal_to_quit
+               return win
+       end
+end
+
+redef class View
+       redef fun enabled do return native.sensitive
+       redef fun enabled=(enabled) do native.sensitive = enabled or else true
+end
+
+redef class Layout
+       redef type NATIVE: GtkBox
+end
+
+redef class HorizontalLayout
+       redef var native = new GtkBox(new GtkOrientation.horizontal, app.control_spacing)
+
+       redef fun add(item)
+       do
+               super
+               native.homogeneous = true
+               native.set_child_packing(item.native, true, true, 0, new GtkPackType.start)
+       end
+end
+
+redef class VerticalLayout
+       redef var native = new GtkBox(new GtkOrientation.vertical, app.control_spacing)
+
+       redef fun add(item)
+       do
+               super
+
+               # FIXME abstract the use either homogeneous or weight to balance views size in a layout
+               native.homogeneous = true
+               native.set_child_packing(item.native, true, true, 0, new GtkPackType.start)
+       end
+end
+
+redef class Button
+       redef type NATIVE: GtkButton
+       redef var native = new GtkButton
+
+       redef fun text do return native.text
+       redef fun text=(value) do native.text = (value or else "").to_s
+
+       redef fun signal(sender, data) do notify_observers new ButtonPressEvent(self)
+
+       init do native.signal_connect("clicked", self, null)
+end
+
+redef class TextInput
+       redef type NATIVE: GtkEntry
+       redef var native = new GtkEntry
+
+       redef fun text do return native.text
+       redef fun text=(value) do
+               if value == null then value = ""
+               native.text = value.to_s
+       end
+end
index 10dbcc6..7b7d319 100644 (file)
@@ -244,7 +244,7 @@ class MarkdownProcessor
        #
        # Markdown allows link refs to be defined over two lines:
        #
-       #       [id]: http://example.com/longish/path/to/resource/here
+       #       [id]: http://example.com/longish/path/to/resource/here
        #               "Optional Title Here"
        #
        private var last_link_ref: nullable LinkRef = null
@@ -2000,7 +2000,7 @@ abstract class TokenLinkOrImage
                                comment = lr.title
                        end
                else
-               var tid = name.write_to_string.replace("\n", " ").to_lower
+                       var tid = name.write_to_string.replace("\n", " ").to_lower
                        if v.processor.link_refs.has_key(tid) then
                                var lr = v.processor.link_refs[tid]
                                link = lr.link
index f0d1892..d46b5e4 100644 (file)
@@ -42,7 +42,7 @@ redef class App
        do
                var asset = try_loading_asset( id )
                if asset == null then # error
-                       log_error( "asset <{id}> could not be loaded." )
+                       print_error "asset <{id}> could not be loaded."
                        abort
                else
                        return asset
@@ -57,7 +57,7 @@ redef class App
                if asset isa Image then
                        return asset
                else
-                       log_error( "asset <{id}> is not an image." )
+                       print_error "asset <{id}> is not an image."
                        abort
                end
        end
index 4d6ddfa..da2e33d 100644 (file)
@@ -20,7 +20,7 @@
 # In order to reproduce executions, the behavior of the application must be deterministic
 # for a given sequence of inputs.
 # The main source of differences in executions is caused by the `rand` function,
-# Set the environment variable `MNIT_SRAND` to a value to force srand to be initialized with this value.
+# Set the environment variable `NIT_SRAND` to a value to force srand to be initialized with this value.
 #
 # The input event file is made of event descriptions, one event by line.
 #
@@ -75,13 +75,6 @@ redef class App
 
        redef fun setup
        do
-               var env = "MNIT_SRAND".environ
-               if env != "" then
-                       srand_from(env.to_i)
-               else
-                       srand_from(0)
-               end
-
                var input = "MNIT_READ_INPUT".environ
                if input != "" then
                        injected_input_stream = new FileReader.open(input)
index 91bc359..b0a8ee0 100644 (file)
@@ -87,7 +87,7 @@ redef class App
        do
                super
                display = new NullDisplay
-               window_created
+               on_create
        end
 
        # Force the printing of blit operations
index 440187a..45d15c1 100644 (file)
@@ -36,7 +36,20 @@ redef class App
 
                super
 
-               window_created
+               on_create
+               on_restore_state
+               on_start
+               on_resume
+       end
+
+       redef fun run
+       do
+               super
+
+               on_pause
+               on_save_state
+               on_stop
+               on_destroy
        end
 
        redef fun generate_input
index 6749d30..393b77d 100644 (file)
@@ -33,7 +33,7 @@ redef class App
        do
                var path = "{assets_dir}/{id}"
                if not path.file_exists then
-                       log_error( "asset <{id}> does not exists." )
+                       print_error "asset <{id}> does not exists."
                        exit(1)
                        abort
                else
diff --git a/lib/mongodb/mongodb.nit b/lib/mongodb/mongodb.nit
new file mode 100644 (file)
index 0000000..4a0718f
--- /dev/null
@@ -0,0 +1,659 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# MongoDB Nit Driver.
+#
+# This is actually a wrapper around the [MongoDB C Driver](http://api.mongodb.org/c/1.1.4/index.html).
+#
+# Usage:
+#
+# ~~~
+# # Opens the connexion with the Mongo server.
+# var client = new MongoClient("mongodb://localhost:27017/")
+#
+# # Retrieve a collection.
+# var col = client.database("test").collection("test")
+#
+# # Insert a document in the collection.
+# var doc = new JsonObject
+# doc["foo"] = 10
+# doc["bar"] = "bar"
+# doc["baz"] = new JsonArray
+# assert col.insert(doc)
+#
+# # Retrieve a document from the collection.
+# var query = new JsonObject
+# query["foo"] = 10
+# var res = col.find(query)
+# assert res["bar"] == "bar"
+# ~~~
+#
+# TODO Get last Object_ID
+module mongodb
+
+import json
+private import native_mongodb
+
+in "C header" `{
+       #include <mongoc.h>
+`}
+
+# Everything inside MongoDB is manipulated as BSON Objects.
+#
+# See:
+# * [Binary JSON spec](http://bsonspec.org/)
+# * [Libbson](http://api.mongodb.org/libbson/1.1.4/)#
+private class BSON
+       super Finalizable
+
+       # Native instance pointer.
+       var native: NativeBSON
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       var is_alive = true
+
+       # Returns a new BSON object initialized from the content of `json`.
+       #
+       # ~~~
+       # intrude import mongodb
+       # var obj = new JsonObject
+       # obj["age"] = 10
+       # obj["name"] = "Rick"
+       # obj["ELS"] = new JsonArray
+       # var bson = new BSON.from_json(obj)
+       # assert bson.to_s == """{ "age" : 10, "name" : "Rick", "ELS" : [  ] }"""
+       # ~~~
+       init from_json(json: JsonObject) do
+               init(new NativeBSON.from_json_string(json.to_json.to_cstring))
+       end
+
+       # Returns a new BSON object parsed from `json_string`.
+       #
+       # If `json_string` is not a valid JSON string, this initializer returns NULL.
+       #
+       # ~~~
+       # intrude import mongodb
+       # var str = """{ "age" : 10, "name" : "Rick", "ELS" : [  ] }"""
+       # var bson = new BSON.from_json_string(str)
+       # assert bson.to_s == str
+       # ~~~
+       init from_json_string(json_string: String) do
+               init(new NativeBSON.from_json_string(json_string.to_cstring))
+       end
+
+       redef fun to_s do
+               assert is_alive
+               var ns = native.to_native_string
+               var res = ns.to_s_with_copy
+               ns.free # manual free of gc allocated NativeString
+               return res
+       end
+
+       # Returns a new JsonObject from `self`.
+       #
+       # ~~~
+       # intrude import mongodb
+       # var str = """{ "age" : 10, "name" : "Rick", "ELS" : [  ] }"""
+       # var bson = new BSON.from_json_string(str)
+       # var json = bson.to_json
+       # assert json["age"] == 10
+       # assert json["name"] == "Rick"
+       # assert json["ELS"].as(JsonArray).is_empty
+       # ~~~
+       fun to_json: JsonObject do
+               assert is_alive
+               return to_s.parse_json.as(JsonObject)
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
+
+redef class JsonObject
+       # Inits `self` from a BSON object.
+       private init from_bson(bson: BSON) do recover_with(bson.to_json)
+
+       # Returns a new BSON object from `self`.
+       private fun to_bson: BSON do return new BSON.from_json(self)
+end
+
+# An error returned by the mongoc client.
+#
+# Within the client, if a method returns `false` or `null` it's more likely that
+# an error occured during the execution.
+#
+# See `MongoClient::last_error`.
+class MongoError
+
+       private var native: BSONError
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       # Logical domain within a library that created the error.
+       fun domain: Int do
+               assert is_alive
+               return native.domain
+       end
+
+       # Domain specific error code.
+       fun code: Int do
+               assert is_alive
+               return native.code
+       end
+
+       # Human readable error message.
+       fun message: String do
+               assert is_alive
+               var ns = native.message
+               var res = ns.to_s_with_copy
+               ns.free
+               return res
+       end
+
+       redef fun to_s do return "{message} (code: {code})"
+end
+
+# The MongoClient is used to connect to the mongo server and send queries.
+#
+# Usage:
+#
+# ~~~
+# var uri = "mongodb://localhost:27017/"
+# var client = new MongoClient(uri)
+# assert client.server_uri == uri
+# ~~~
+class MongoClient
+       super Finalizable
+
+       # Server URI.
+       var server_uri: String
+
+       private var native: NativeMongoClient is noinit
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       init do
+               native = new NativeMongoClient(server_uri.to_cstring)
+       end
+
+       # Gets server data.
+       #
+       # Returns `null` if an error occured. See `last_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # assert client.server_status["process"] == "mongod"
+       # ~~~
+       fun server_status: nullable JsonObject do
+               assert is_alive
+               var nbson = native.server_status
+               if nbson == null then return null
+               var bson = new BSON(nbson)
+               var res = new JsonObject.from_bson(bson)
+               return res
+       end
+
+       # Lists available database names.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # db.collection("test").insert(new JsonObject)
+       # assert client.database_names.has("test")
+       # ~~~
+       fun database_names: Array[String] do
+               assert is_alive
+               var res = new Array[String]
+               var nas = native.database_names
+               var i = 0
+               var name = nas[i]
+               while not name.address_is_null do
+                       res.add name.to_s_with_copy
+                       name.free
+                       i += 1
+                       name = nas[i]
+               end
+               return res
+       end
+
+       # Loads or creates a database from its `name`.
+       #
+       # Database are automatically created on the MongoDB server upon insertion of
+       # the first document into a collection.
+       # There is no need to create a database manually.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # assert client.database("test").name == "test"
+       # ~~~
+       fun database(name: String): MongoDb do
+               assert is_alive
+               return new MongoDb(self, name)
+       end
+
+       # Close the connexion and destroy the instance.
+       #
+       # The reference should not be used beyond this point!
+       fun close do
+               assert is_alive
+               finalize
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+
+       # Last error raised by mongoc.
+       fun last_error: nullable MongoError do
+               var last_error = sys.last_mongoc_error
+               if last_error == null then return null
+               return new MongoError(last_error)
+       end
+end
+
+# A MongoDb database.
+#
+# Database are automatically created on the MongoDB server upon insertion of the
+# first document into a collection.
+# There is no need to create a database manually.
+class MongoDb
+       super Finalizable
+
+       # `MongoClient` used to load this database.
+       var client: MongoClient
+
+       # The database name.
+       var name: String
+
+       private var native: NativeMongoDb is noinit
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       init do
+               native = new NativeMongoDb(client.native, name.to_cstring)
+       end
+
+       # Lists available collection names.
+       #
+       # Returns `null` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # db.collection("test").insert(new JsonObject)
+       # assert db.collection_names.has("test")
+       # ~~~
+       fun collection_names: Array[String] do
+               assert is_alive
+               var res = new Array[String]
+               var nas = native.collection_names
+               var i = 0
+               var name = nas[i]
+               while not name.address_is_null do
+                       res.add name.to_s_with_copy
+                       name.free
+                       i += 1
+                       name = nas[i]
+               end
+               return res
+       end
+
+       # Loads or creates a collection by its `name`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # var col = db.collection("test")
+       # assert col.name == "test"
+       # ~~~
+       fun collection(name: String): MongoCollection do
+               assert is_alive
+               return new MongoCollection(self, name)
+       end
+
+       # Checks if a collection named `name` exists.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var db = client.database("test")
+       # assert not db.has_collection("qwerty")
+       # ~~~
+       fun has_collection(name: String): Bool do
+               assert is_alive
+               # TODO handle error
+               return native.has_collection(name.to_cstring)
+       end
+
+       # Drop `self`, returns false if an error occured.
+       fun drop: Bool do
+               assert is_alive
+               return native.drop
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
+
+# A Mongo collection.
+#
+# Collections are automatically created on the MongoDB server upon insertion of
+# the first document.
+# There is no need to create a database manually.
+class MongoCollection
+       super Finalizable
+
+       # Database that collection belongs to.
+       var database: MongoDb
+
+       # Name of this collection.
+       var name: String
+
+       private var native: NativeMongoCollection is noinit
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       # Loads a collection.
+       #
+       # Call `MongoDb::collection` instead.
+       init do
+               native = new NativeMongoCollection(
+                       database.client.native,
+                       database.name.to_cstring,
+                       name.to_cstring)
+       end
+
+       # Inserts a new document in the collection.
+       #
+       # If no _id element is found in document, then a new one be generated locally
+       # and added to the document.
+       #
+       # Returns `false` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var doc = new JsonObject
+       # doc["foo"] = 10
+       # doc["bar"] = "bar"
+       # doc["baz"] = new JsonArray
+       # assert col.insert(doc)
+       # ~~~
+       fun insert(doc: JsonObject): Bool do
+               assert is_alive
+               return native.insert(doc.to_bson.native)
+       end
+
+       # Inserts multiple documents in the collection.
+       #
+       # See `insert`.
+       fun insert_all(docs: Collection[JsonObject]): Bool do
+               assert is_alive
+               var res = true
+               for doc in docs do res = insert(doc) and res
+               return res
+       end
+
+       # Saves a new document in the collection.
+       #
+       # If the document has an `_id` field it will be updated.
+       # Otherwise it will be inserted.
+       #
+       # Returns `false` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var doc = new JsonObject
+       # doc["foo"] = 10
+       # doc["bar"] = "bar"
+       # doc["baz"] = new JsonArray
+       # assert col.save(doc) # will be inserted
+       # ~~~
+       fun save(doc: JsonObject): Bool do
+               assert is_alive
+               return native.save(doc.to_bson.native)
+       end
+
+       # Removes the first document that matches `selector`.
+       #
+       # Returns `false` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var sel = new JsonObject
+       # sel["foo"] = 10
+       # assert col.remove(sel)
+       # ~~~
+       fun remove(selector: JsonObject): Bool do
+               assert is_alive
+               return native.remove(selector.to_bson.native)
+       end
+
+       # Removes all the document that match `selector`.
+       #
+       # See `remove`.
+       fun remove_all(selector: JsonObject): Bool do
+               assert is_alive
+               return native.remove_all(selector.to_bson.native)
+       end
+
+       # Updates a document already existing in the collection.
+       #
+       # No upsert is done, see `save` instead.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var sel = new JsonObject
+       # sel["foo"] = 10
+       # var upd = new JsonObject
+       # upd["bar"] = "BAR"
+       # assert col.update(sel, upd)
+       # ~~~
+       fun update(selector: JsonObject, update: JsonObject): Bool do
+               assert is_alive
+               return native.update(
+                       selector.to_bson.native,
+                       update.to_bson.native)
+       end
+
+       # Updates all documents matching the `selector`.
+       #
+       # See `update`.
+       fun update_all(selector: JsonObject, update: JsonObject): Bool do
+               return native.update_all(
+                       selector.to_bson.native,
+                       update.to_bson.native)
+       end
+
+       # Counts the document matching `query`.
+       #
+       # Returns `-1` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var query = new JsonObject
+       # query["foo"] = 10
+       # assert col.count(query) > 0
+       # ~~~
+       fun count(query: JsonObject): Int do
+               assert is_alive
+               return native.count(query.to_bson.native)
+       end
+
+       # Finds the first document that matches `query`.
+       #
+       # Returns `null` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var query = new JsonObject
+       # query["foo"] = 10
+       # var doc = col.find(query)
+       # print doc or else "nullllllllllllllllll"
+       # print doc.to_json
+       # assert doc["foo"] == 10
+       # ~~~
+       fun find(query: JsonObject): nullable JsonObject do
+               assert is_alive
+               var c = native.find(query.to_bson.native)
+               if c == null then return null
+               var cursor = new MongoCursor(c)
+               if cursor.is_ok then
+                       cursor.next
+                       return cursor.item
+               end
+               return null
+       end
+
+       # Finds all the documents matching the `query`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # var query = new JsonObject
+       # query["foo"] = 10
+       # assert col.find_all(query).length > 0
+       # ~~~
+       fun find_all(query: JsonObject): Array[JsonObject] do
+               assert is_alive
+               var res = new Array[JsonObject]
+               var c = native.find(query.to_bson.native)
+               if c == null then return res
+               var cursor = new MongoCursor(c)
+               for item in cursor do res.add item
+               return res
+       end
+
+       # Retrieves statistics about the collection.
+       #
+       # Returns `null` if an error occured. See `Sys::last_mongoc_error`.
+       #
+       # ~~~
+       # var client = new MongoClient("mongodb://localhost:27017/")
+       # var col = client.database("test").collection("test")
+       # assert col.stats["ns"] == "test.test"
+       # ~~~
+       fun stats: nullable JsonObject do
+               assert is_alive
+               var bson = native.stats
+               if bson == null then return null
+               return new JsonObject.from_bson(new BSON(bson))
+       end
+
+       # Drops `self`, returns false if an error occured.
+       fun drop: Bool do
+               assert is_alive
+               return native.drop
+       end
+
+       # Moves `self` to another `database`.
+       #
+       # The database will also be updated internally so it is safe to continue using
+       # this collection after the move.
+       # Additional operations will occur on moved collection.
+       fun move(database: MongoDb): Bool do
+               assert is_alive
+               self.database = database
+               return native.rename(database.name.to_cstring, name.to_cstring)
+       end
+
+       # Renames `self`.
+       #
+       # The name of the collection will also be updated internally so it is safe
+       # to continue using this collection after the rename.
+       # Additional operations will occur on renamed collection.
+       fun rename(name: String): Bool do
+               assert is_alive
+               self.name = name
+               return native.rename(database.name.to_cstring, name.to_cstring)
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
+
+# A MongoDB query cursor.
+#
+# It wraps up the wire protocol negotation required to initiate a query and
+# retreive an unknown number of documents.
+class MongoCursor
+       super Finalizable
+       super Iterator[JsonObject]
+
+       private var native: NativeMongoCursor
+
+       # Is the native instance valid?
+       #
+       # This is set to false if the `native` is destroyed.
+       private var is_alive = true
+
+       init do next
+
+       redef fun is_ok do
+               assert is_alive
+               return native.more
+       end
+
+       redef fun next do
+               assert is_alive
+               native.next
+       end
+
+       redef fun item do
+               assert is_alive
+               return new JsonObject.from_bson(new BSON(native.current))
+       end
+
+       redef fun finalize do
+               if is_alive then
+                       native.destroy
+                       is_alive = false
+               end
+       end
+end
diff --git a/lib/mongodb/native_mongodb.nit b/lib/mongodb/native_mongodb.nit
new file mode 100644 (file)
index 0000000..6608bc1
--- /dev/null
@@ -0,0 +1,492 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Native wrapper for the MongoDB C Driver
+#
+# See [mongoc](http://api.mongodb.org/c/1.1.4/index.html).
+module native_mongodb is pkgconfig "libmongoc-1.0"
+
+import c
+
+in "C header" `{
+       #include <mongoc.h>
+`}
+
+# Wrapper for `bson_t`.
+#
+# All data manipulated by `mongoc` are BSON formated.
+#
+# The `bson_t` structure represents a BSON document.
+# This structure manages the underlying BSON encoded buffer.
+# For mutable documents, it can append new data to the document.
+#
+# See [`bson_t`](http://api.mongodb.org/libbson/current/bson_t.html).
+extern class NativeBSON `{ bson_t * `}
+
+       # Wrapper for `bson_new()`.
+       #
+       # The `bson_new()` function shall create a new `bson_t` structure on the heap.
+       # It should be freed with `bson_destroy()` when it is no longer in use.
+       new `{ return bson_new(); `}
+
+       # Wrapper for `bson_new_from_json()`.
+       #
+       # The `bson_new_from_json()` function allocates and initialize a new `bson_t`
+       # by parsing the JSON found in `data`.
+       # Only a single JSON object may exist in data or an error will be set and
+       # `NULL` returned.
+       new from_json_string(data: NativeString) import set_mongoc_error `{
+               bson_error_t error;
+               bson_t *bson;
+               bson = bson_new_from_json(data, -1, &error);
+               if(!bson) {
+                       NativeBSON_set_mongoc_error(recv, &error);
+                       return NULL;
+               }
+               return bson;
+       `}
+
+       # Wrapper for `bson_as_json()`.
+       #
+       # The `bson_as_json()` function shall encode bson as a JSON encoded UTF-8 string.
+       # The caller is responsible for freeing the resulting UTF-8 encoded string
+       # by calling `bson_free()` with the result.
+       fun to_native_string: NativeString `{ return bson_as_json(recv, NULL); `}
+
+       # Wrapper for `bson_destroy()`.
+       #
+       # The `bson_destroy()` function shall free an allocated `bson_t` structure.
+       # This function should always be called when you are done with a `bson_t`
+       # unless otherwise specified.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ bson_destroy(recv); `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `bson_error_t`.
+#
+# The `bson_error_t` structure is used to encapsulate information about an error.
+#
+# See [`bson_error_t`](http://api.mongodb.org/libbson/current/bson_error_t.html).
+extern class BSONError `{ bson_error_t * `}
+
+       # Wrapper for `error.domain`.
+       #
+       # The `error.domain` field contains the logical domain within a library that
+       # created the error.
+       fun domain: Int `{ return recv->domain; `}
+
+       # Wrapper for `error.code`.
+       #
+       # The `error.code` field contains the domain specific error code.
+       fun code: Int `{ return recv->code; `}
+
+       # Wrapper for `error.message`.
+       #
+       # The `error.message` field contains a human printable error message.
+       fun message: NativeString `{ return recv->message; `}
+end
+
+redef class Sys
+       # Last error raised by `monogdb::MongoClient`.
+       #
+       # See `MongoClient::last_error`.
+       var last_mongoc_error: nullable BSONError = null
+end
+
+# Wrapper for `char**`.
+#
+# Used to handle array of NativeString returned by MongoDB.
+redef class NativeCStringArray
+       # Frees `self`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ free(recv); `}
+end
+
+# Wrapper for `mongoc_client_t`.
+#
+# `mongoc_client_t` is an opaque type that provides access to a MongoDB node,
+# replica-set, or sharded-cluster.
+# It maintains management of underlying sockets and routing to individual nodes.
+#
+# See [`mongoc_client_t`](http://api.mongodb.org/c/current/mongoc_client_t.html).
+extern class NativeMongoClient `{ mongoc_client_t * `}
+
+       # Wrapper for `mongoc_client_new()`.
+       #
+       # Creates a new `mongoc_client_t` using the `uri` string provided.
+       new(uri: NativeString) `{
+               mongoc_init();
+               return mongoc_client_new(uri);
+       `}
+
+       # Wrapper for `mongoc_client_get_server_status()`.
+       #
+       # Queries the server for the current server status.
+       # Returns `null` if an error occured.
+       fun server_status: nullable NativeBSON import set_mongoc_error, NativeBSON.as nullable `{
+               bson_error_t error;
+               bson_t *reply = bson_new();
+               if(!mongoc_client_get_server_status(recv, NULL, reply, &error)){
+                       NativeMongoClient_set_mongoc_error(recv, &error);
+                       return null_NativeBSON();
+               }
+               return NativeBSON_as_nullable(reply);
+       `}
+
+       # Wrapper for `mongoc_client_get_database_names()`.
+       #
+       # This function queries the MongoDB server for a list of known databases.
+       # Returns `null` if an error occured.
+       fun database_names: nullable NativeCStringArray
+               import set_mongoc_error, NativeCStringArray, NativeCStringArray.as nullable `{
+               bson_error_t error;
+               char **strv;
+               if(strv = mongoc_client_get_database_names(recv, &error)) {
+                       return NativeCStringArray_as_nullable(strv);
+               }
+               NativeMongoClient_set_mongoc_error(recv, &error);
+               return null_NativeCStringArray();
+       `}
+
+       # Wrapper for `mongoc_client_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{
+               mongoc_client_destroy(recv);
+               mongoc_cleanup();
+       `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `mongoc_database_t`.
+#
+# `mongoc_database_t` provides access to a MongoDB database.
+# This handle is useful for actions a particular database object.
+# It is not a container for `mongoc_collection_t` structures.
+#
+# See [`mongoc_database_t`](http://api.mongodb.org/c/current/mongoc_database_t.html).
+extern class NativeMongoDb `{ mongoc_database_t * `}
+
+       # Wrapper for `mongoc_client_get_database()`.
+       #
+       # Get a newly allocated `mongoc_database_t` for the database named name.
+       #
+       # Database are automatically created on the MongoDB server upon insertion of
+       # the first document into a collection.
+       # There is no need to create a database manually.
+       new(client: NativeMongoClient, db_name: NativeString) `{
+               return mongoc_client_get_database(client, db_name);
+       `}
+
+       # Wrapper for `mongoc_database_get_collection_names()`.
+       #
+       # Fetches a `NULL` terminated array of `NULL-byte` terminated `char*` strings
+       # containing the names of all of the collections in database.
+       fun collection_names: nullable NativeCStringArray
+               import set_mongoc_error, NativeCStringArray, NativeCStringArray.as nullable `{
+               bson_error_t error;
+               char **strv;
+               if(strv = mongoc_database_get_collection_names(recv, &error)) {
+                       return NativeCStringArray_as_nullable(strv);
+               }
+               NativeMongoDb_set_mongoc_error(recv, &error);
+               return null_NativeCStringArray();
+       `}
+
+       # Wrapper for `mongoc_database_get_collection()`.
+       #
+       # Allocates a new `mongoc_collection_t` structure for the collection named
+       # `name` in database.
+       fun collection(name: NativeString): NativeMongoCollection `{
+               return mongoc_database_get_collection(recv, name);
+       `}
+
+       # Wrapper for `mongoc_database_has_collection()`.
+       #
+       # This function checks to see if a collection exists on the MongoDB server
+       # within database.
+       fun has_collection(name: NativeString): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_database_has_collection(recv, name, &error)) {
+                       NativeMongoDb_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_database_drop()`.
+       #
+       # This function attempts to drop a database on the MongoDB server.
+       fun drop: Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_database_drop(recv, &error)) {
+                       NativeMongoDb_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_database_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ mongoc_database_destroy(recv); `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `mongoc_collection_t`.
+#
+# `mongoc_collection_t` provides access to a MongoDB collection.
+# This handle is useful for actions for most CRUD operations,
+# I.e. insert, update, delete, find, etc.
+#
+# It is an error to call `mongoc_collection_destroy()` on a collection that has
+# operations pending.
+# It is required that you release `mongoc_cursor_t` structures before calling
+# `mongoc_collection_destroy()`.
+#
+# See [`mongoc_collection_t`](http://api.mongodb.org/c/current/mongoc_collection_t.html).
+extern class NativeMongoCollection `{ mongoc_collection_t * `}
+
+       # Wrapper for `mongoc_client_get_collection()`.
+       #
+       # Get a newly allocated `mongoc_collection_t` for the collection named
+       # `collection` in the database named `db`.
+       #
+       # Collections are automatically created on the MongoDB server upon insertion
+       # of the first document.
+       # There is no need to create a collection manually.
+       new(client: NativeMongoClient, db, collection: NativeString) `{
+               return mongoc_client_get_collection(client, db, collection);
+       `}
+
+       # Wrapper for `mongoc_collection_insert()`.
+       #
+       # This function shall insert `document` into the collection.
+       # If no `_id` element is found in document, then a `bson_oid_t` will be
+       # generated locally and added to the document.
+       #
+       # You can retrieve a generated `_id` from `mongoc_collection_get_last_error()`.
+       fun insert(doc: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_insert(recv, MONGOC_INSERT_NONE, doc, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_save()`.
+       #
+       # This function shall save a document into the collection.
+       # If the document has an `_id` field it will be updated.
+       # Otherwise it will be inserted.
+       fun save(document: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_save(recv, document, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_remove(MONGOC_REMOVE_SINGLE_REMOVE)`.
+       #
+       # This function shall remove the first document in the collection that matches
+       # `selector`.
+       # The bson selector is not validated, simply passed along as appropriate to the server.
+       fun remove(selector: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_remove(recv, MONGOC_REMOVE_SINGLE_REMOVE, selector, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_remove(MONGOC_REMOVE_NONE)`.
+       #
+       # This function shall remove documents in the collection that match `selector`.
+       fun remove_all(selector: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_remove(recv, MONGOC_REMOVE_NONE, selector, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_update(MONGOC_UPDATE_NONE)`.
+       #
+       # This function shall update the first document in the collection that
+       # matches `selector`.
+       fun update(selector, update: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_update(recv, MONGOC_UPDATE_NONE, selector, update, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_update(MONGOC_UPDATE_MULTI_UPDATE)`.
+       #
+       # This function shall update documents in the collection that match `selector`.
+       fun update_all(selector, update: NativeBSON): Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_update(recv, MONGOC_UPDATE_MULTI_UPDATE, selector, update, NULL, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_count()`.
+       #
+       # This function shall execute a count `query` on the underlying collection.
+       fun count(query: NativeBSON): Int import set_mongoc_error `{
+               bson_error_t error;
+               int64_t count = mongoc_collection_count(recv, MONGOC_QUERY_NONE, query, 0, 0, NULL, &error);
+               if(count < 0) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return -1;
+               }
+               return count;
+       `}
+
+       # Wrapper for `mongoc_collection_find()`.
+       #
+       # This function shall execute a `query` on the underlying collection.
+       #
+       # If no options are necessary, `query` can simply contain a query such as `{a:1}`.
+       #
+       # If you would like to specify options such as a sort order,
+       # the query must be placed inside of `{"$query": {}}`.
+       fun find(query: NativeBSON): nullable NativeMongoCursor import
+               NativeMongoCursor.as nullable, set_mongoc_error `{
+               bson_error_t error;
+               mongoc_cursor_t *cursor;
+               cursor = mongoc_collection_find(recv, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
+
+               if (mongoc_cursor_error(cursor, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return null_NativeMongoCursor();
+               }
+
+               return NativeMongoCursor_as_nullable(cursor);
+       `}
+
+       # Wrapper for `mongoc_collection_stats()`.
+       #
+       # This function is a helper to retrieve statistics about the collection.
+       fun stats: nullable NativeBSON import set_mongoc_error, NativeBSON.as nullable `{
+               bson_error_t error;
+               bson_t *reply = bson_new();
+               if(!mongoc_collection_stats(recv, NULL, reply, &error)){
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return null_NativeBSON();
+               }
+               return NativeBSON_as_nullable(reply);
+       `}
+
+       # Wrapper for `mongoc_collection_drop()`.
+       #
+       # This function requests that the `collection` be dropped,
+       # including all indexes associated with the collection.
+       fun drop: Bool import set_mongoc_error `{
+               bson_error_t error;
+               if(!mongoc_collection_drop(recv, &error)) {
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_rename()`.
+       #
+       # This function is a helper to rename an existing collection on a MongoDB server.
+       # The name of the collection will also be updated internally so it is safe
+       # to continue using this collection after the rename.
+       # Additional operations will occur on renamed collection.
+       fun rename(new_database, new_name: NativeString): Bool `{
+               bson_error_t error;
+               if(!mongoc_collection_rename(recv, new_database, new_name, false, &error)){
+                       NativeMongoCollection_set_mongoc_error(recv, &error);
+                       return false;
+               }
+               return true;
+       `}
+
+       # Wrapper for `mongoc_collection_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ mongoc_collection_destroy(recv); `}
+
+       # Utility method to set `Sys.last_mongoc_error`.
+       fun set_mongoc_error(err: BSONError) do sys.last_mongoc_error = err
+end
+
+# Wrapper for `mongoc_cursor_t`.
+#
+# `mongoc_cursor_t` provides access to a MongoDB query cursor.
+# It wraps up the wire protocol negotation required to initiate a query and
+# retreive an unknown number of documents.
+#
+# Cursors are lazy, meaning that no network traffic occurs until the first call
+# to mongoc_cursor_next().
+#
+# At that point we can:
+# * Retreive more records with repeated calls to `mongoc_cursor_next()`.
+# * Test for more records with `mongoc_cursor_more()`.
+# * Retrieve the document under the cursor with `mongoc_cursor_current()`.
+#
+# See [`mongoc_cursor_t`](http://api.mongodb.org/c/current/mongoc_cursor_t.html).
+extern class NativeMongoCursor `{ mongoc_cursor_t* `}
+
+       # Wrapper for `mongoc_cursor_current()`.
+       #
+       # Fetches the cursors current document or NULL if there has been an error.
+       fun current: NativeBSON `{ return (bson_t*) mongoc_cursor_current(recv); `}
+
+       # Wrapper for `mongoc_cursor_next()`.
+       #
+       # This function shall iterate the underlying cursor, setting `current` to the next
+       # document.
+       #
+       # This function is a blocking function.
+       fun next: Bool `{
+               const bson_t *doc;
+               return mongoc_cursor_next(recv, &doc);
+       `}
+
+       # Wrapper for `mongoc_cursor_more()`.
+       #
+       # This function shall indicate if there is more data to be read from the cursor.
+       fun more: Bool `{ return mongoc_cursor_more(recv); `}
+
+       # Wrapper for `mongoc_cursor_destroy()`.
+       #
+       # This instance should not be used beyond this point!
+       fun destroy `{ mongoc_cursor_destroy(recv); `}
+end
index 39063f2..2ffa800 100644 (file)
@@ -133,7 +133,7 @@ abstract class NeoNodeCollection
                for node in self do remove_node(node)
        end
 
-       redef fun remove(node: NeoNode) do
+       redef fun remove(node) do
                for n in self do
                        if node == n then
                                remove_node(n)
@@ -142,7 +142,7 @@ abstract class NeoNodeCollection
                end
        end
 
-       redef fun remove_all(node: NeoNode) do
+       redef fun remove_all(node) do
                for n in self do
                        if node == n then remove_node(n)
                end
index f95e5e3..a84802d 100644 (file)
@@ -254,17 +254,21 @@ class XophonLexer
                        locator.column_number += 1
                end
 
-               last_char = input.read_char
-               if last_char < 0 then
+               var s = input.read_byte
+               if s == null then
+                       last_char = -1
                        return
                end
+               last_char = s
 
                # XML 1.0 end-of-line handling
                # Note: Regardless the XML version, any EOL defined by the
                # recommandation MUST be reported as a single LINE FEED.
                if was_cr and last_char == '\n'.ascii then
                        # EOL already reported. => Skip this byte.
-                       last_char = input.read_char
+                       s = input.read_byte
+                       if s == null then s = -1
+                       last_char = s
                end
                was_cr = last_char == '\r'.ascii
                if was_cr then
index 31f98f0..6e5ce12 100644 (file)
@@ -63,7 +63,7 @@ interface Serializer
        fun serialize_attribute(name: String, value: nullable Object)
        do
                if not try_to_serialize(value) then
-                       warn("argument {value.class_name}::{name} is not serializable.")
+                       warn("argument {name} of type {value.class_name} is not serializable.")
                end
        end
 
@@ -134,6 +134,18 @@ interface Serializable
        # The subclass change the default behavior, which will accept references,
        # to force to always serialize copies of `self`.
        private fun serialize_to_or_delay(v: Serializer) do v.serialize_reference(self)
+
+       # Create an instance of this class from the `deserializer`
+       #
+       # This constructor is refined by subclasses to correctly build their instances.
+       init from_deserializer(deserializer: Deserializer) do end
+end
+
+redef interface Object
+       # Is `self` the same as `other` in a serialization context?
+       #
+       # Used to determine if an object has already been serialized.
+       fun is_same_serialized(other: nullable Object): Bool do return is_same_instance(other)
 end
 
 # Instances of this class are not delayed and instead serialized immediately
@@ -150,4 +162,5 @@ redef class Int super DirectSerializable end
 redef class Float super DirectSerializable end
 redef class NativeString super DirectSerializable end
 redef class String super DirectSerializable end
-redef class Array[E] super Serializable end
+redef class SimpleCollection[E] super Serializable end
+redef class Map[K, V] super Serializable end
index 681e239..b3cb2f9 100644 (file)
@@ -147,6 +147,12 @@ class TCPStream
                socket.write(msg.to_s)
        end
 
+       redef fun write_byte(value)
+       do
+               if closed then return
+               socket.write_byte value
+       end
+
        fun write_ln(msg: Text)
        do
                if end_reached then return
index 8758cdf..a574485 100644 (file)
@@ -132,6 +132,11 @@ extern class NativeSocket `{ int* `}
                return write(*recv, (char*)String_to_cstring(buffer), String_length(buffer));
        `}
 
+       # Write `value` as a single byte
+       fun write_byte(value: Int): Int `{
+               return write(*recv, &value, 1);
+       `}
+
        fun read: String import NativeString.to_s_with_length `{
                static char c[1024];
                int n = read(*recv, c, 1024);
diff --git a/lib/standard/bytes.nit b/lib/standard/bytes.nit
new file mode 100644 (file)
index 0000000..b300298
--- /dev/null
@@ -0,0 +1,168 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Services for byte streams and arrays
+module bytes
+
+import kernel
+import collection::array
+intrude import string
+
+# A buffer containing Byte-manipulation facilities
+#
+# Uses Copy-On-Write when persisted
+#
+# TODO: Change the bound to Byte when available in stdlib and bootstrap
+class Bytes
+       super AbstractArray[Int]
+
+       # A NativeString being a char*, it can be used as underlying representation here.
+       private var items: NativeString
+
+       # Number of bytes in the array
+       redef var length: Int
+
+       # Capacity of the array
+       private var capacity: Int
+
+       # Has this buffer been persisted (to_s'd)?
+       #
+       # Used for Copy-On-Write
+       private var persisted = false
+
+       #     var b = new Bytes.empty
+       #     assert b.to_s == ""
+       init empty do
+               var ns = new NativeString(0)
+               init(ns, 0, 0)
+       end
+
+       init with_capacity(cap: Int) do
+               var ns = new NativeString(cap)
+               init(ns, 0, cap)
+       end
+
+       redef fun is_empty do return length != 0
+
+       #     var b = new Bytes.empty
+       #     b.add 101
+       #     assert b[0] == 101
+       redef fun [](i: Int): Int do
+               assert i >= 0
+               assert i < length
+               return items[i].ascii
+       end
+
+       #     var b = new Bytes.with_capacity(1)
+       #     b[0] = 101
+       #     assert b.to_s == "e"
+       redef fun []=(i: Int, v: Int) do
+               if persisted then regen
+               assert i >= 0
+               assert i <= length
+               if i == length then add(v)
+               items[i] = v.ascii
+       end
+
+       #     var b = new Bytes.empty
+       #     b.add 101
+       #     assert b.to_s == "e"
+       redef fun add(c: Int) do
+               if persisted then regen
+               if length >= capacity then
+                       enlarge(length)
+               end
+               items[length] = c.ascii
+               length += 1
+       end
+
+       #     var b = new Bytes.empty
+       #     b.append([104, 101, 108, 108, 111])
+       #     assert b.to_s == "hello"
+       redef fun append(arr: Collection[Int]) do
+               if arr isa Bytes then
+                       append_ns(arr.items, arr.length)
+               else
+                       for i in arr do add i
+               end
+       end
+
+       redef fun clear do length = 0
+
+       # Regenerates the buffer, necessary when it was persisted
+       private fun regen do
+               var nns = new NativeString(capacity)
+               items.copy_to(nns, length, 0, 0)
+               persisted = false
+       end
+
+       # Appends the `ln` first bytes of `ns` to self
+       fun append_ns(ns: NativeString, ln: Int) do
+               if persisted then regen
+               var nlen = length + ln
+               if nlen > capacity then enlarge(nlen)
+               ns.copy_to(items, ln, 0, length)
+               length += ln
+       end
+
+       # Appends `ln` bytes from `ns` starting at index `from` to self
+       fun append_ns_from(ns: NativeString, ln, from: Int) do
+               if persisted then regen
+               var nlen = length + ln
+               if nlen > capacity then enlarge(nlen)
+               ns.copy_to(items, ln, from, length)
+               length += ln
+       end
+
+       redef fun enlarge(sz) do
+               if capacity >= sz then return
+               persisted = false
+               while capacity < sz do capacity = capacity * 2 + 2
+               var ns = new NativeString(capacity)
+               items.copy_to(ns, length, 0, 0)
+               items = ns
+       end
+
+       redef fun to_s do
+               persisted = true
+               return new FlatString.with_infos(items, length, 0, length -1)
+       end
+
+       redef fun iterator do return new BytesIterator.with_buffer(self)
+end
+
+private class BytesIterator
+       super IndexedIterator[Int]
+
+       var tgt: NativeString
+
+       redef var index: Int
+
+       var max: Int
+
+       init with_buffer(b: Bytes) do init(b.items, 0, b.length - 1)
+
+       redef fun is_ok do return index < max
+
+       redef fun next do index += 1
+
+       redef fun item do return tgt[index].ascii
+end
+
+redef class NativeString
+       fun to_bytes: Bytes do
+               var len = cstring_length
+               return new Bytes(self, len, len)
+       end
+end
index 2f7e454..0dec265 100644 (file)
@@ -92,7 +92,7 @@ interface Collection[E]
        #     assert [1,2,3].has(9)    == false
        #     assert [1..5[.has(2)     == true
        #     assert [1..5[.has(9)     == false
-       fun has(item: E): Bool
+       fun has(item: nullable Object): Bool
        do
                for i in self do if i == item then return true
                return false
@@ -109,7 +109,7 @@ interface Collection[E]
        #     assert [3..3[.has_only(1)          == true # empty collection
        #
        # ENSURE `is_empty implies result == true`
-       fun has_only(item: E): Bool
+       fun has_only(item: nullable Object): Bool
        do
                for i in self do if i != item then return false
                return true
@@ -119,7 +119,7 @@ interface Collection[E]
        # Comparisons are done with ==
        #
        #     assert [10,20,10].count(10)         == 2
-       fun count(item: E): Int
+       fun count(item: nullable Object): Int
        do
                var nb = 0
                for i in self do if i == item then nb += 1
@@ -147,7 +147,7 @@ interface Collection[E]
        #
        # Note that the default implementation is general and correct for any lawful Collections.
        # It is memory-efficient but relies on `has` so may be CPU-inefficient for some kind of collections.
-       fun has_all(other: Collection[E]): Bool
+       fun has_all(other: Collection[nullable Object]): Bool
        do
                for x in other do if not has(x) then return false
                return true
@@ -171,7 +171,7 @@ interface Collection[E]
        #
        # Note that the default implementation is general and correct for any lawful Collections.
        # It is memory-efficient but relies on `count` so may be CPU-inefficient for some kind of collections.
-       fun has_exactly(other: Collection[E]): Bool
+       fun has_exactly(other: Collection[nullable Object]): Bool
        do
                if length != other.length then return false
                for e in self do if self.count(e) != other.count(e) then return false
@@ -267,19 +267,19 @@ interface RemovableCollection[E]
        # ENSURE `is_empty`
        fun clear is abstract
 
-       # Remove an occucence of `item`
+       # Remove an occurrence of `item`
        #
        #     var a = [1,2,3,1,2,3]
        #     a.remove 2
        #     assert a == [1,3,1,2,3]
-       fun remove(item: E) is abstract
+       fun remove(item: nullable Object) is abstract
 
-       # Remove all occurences of `item`
+       # Remove all occurrences of `item`
        #
        #     var a = [1,2,3,1,2,3]
        #     a.remove_all 2
        #     assert a == [1,3,1,3]
-       fun remove_all(item: E) do while has(item) do remove(item)
+       fun remove_all(item: nullable Object) do while has(item) do remove(item)
 end
 
 # Items can be added to these collections.
@@ -345,7 +345,7 @@ interface Set[E]
        # Equality is defined on set and means that each set contains the same elements
        redef fun ==(other)
        do
-               if not other isa Set[Object] then return false
+               if not other isa Set[nullable Object] then return false
                if other.length != length then return false
                return has_all(other)
        end
@@ -396,7 +396,7 @@ interface MapRead[K, V]
        #
        # If the key is not in the map, `provide_default_value` is called (that aborts by default)
        # See `get_or_null` and `get_or_default` for safe variations.
-       fun [](key: K): V is abstract
+       fun [](key: nullable Object): V is abstract
 
        # Get the item at `key` or null if `key` is not in the map.
        #
@@ -406,7 +406,7 @@ interface MapRead[K, V]
        #     assert x.get_or_null("five") == null
        #
        # Note: use `has_key` and `[]` if you need the distinction between a key associated with null, and no key.
-       fun get_or_null(key: K): nullable V
+       fun get_or_null(key: nullable Object): nullable V
        do
                if has_key(key) then return self[key]
                return null
@@ -419,7 +419,7 @@ interface MapRead[K, V]
        #     assert x.get_or_default("four", 40) == 4
        #     assert x.get_or_default("five", 50) == 50
        #
-       fun get_or_default(key: K, default: V): V
+       fun get_or_default(key: nullable Object, default: V): V
        do
                if has_key(key) then return self[key]
                return default
@@ -433,7 +433,7 @@ interface MapRead[K, V]
        #     assert x.has_key("five") == false
        #
        # By default it is a synonymous to `keys.has` but could be redefined with a direct implementation.
-       fun has_key(key: K): Bool do return self.keys.has(key)
+       fun has_key(key: nullable Object): Bool do return self.keys.has(key)
 
        # Get a new iterator on the map.
        fun iterator: MapIterator[K, V] is abstract
@@ -481,7 +481,7 @@ interface MapRead[K, V]
        #
        # Note: the value is returned *as is*, implementations may want to store the value in the map before returning it
        # @toimplement
-       protected fun provide_default_value(key: K): V do abort
+       protected fun provide_default_value(key: nullable Object): V do abort
 
        # Does `self` and `other` have the same keys associated with the same values?
        #
@@ -716,7 +716,7 @@ interface SequenceRead[E]
        #     var a = [10,20,30,10,20,30]
        #     assert a.index_of(20)   == 1
        #     assert a.index_of(40)   == -1
-       fun index_of(item: E): Int do return index_of_from(item, 0)
+       fun index_of(item: nullable Object): Int do return index_of_from(item, 0)
 
        # The index of the last occurrence of `item`.
        # Return -1 if `item` is not found.
@@ -725,7 +725,7 @@ interface SequenceRead[E]
        #     var a = [10,20,30,10,20,30]
        #     assert a.last_index_of(20)   == 4
        #     assert a.last_index_of(40)   == -1
-       fun last_index_of(item: E): Int do return last_index_of_from(item, length-1)
+       fun last_index_of(item: nullable Object): Int do return last_index_of_from(item, length-1)
 
        # The index of the first occurrence of `item`, starting from pos.
        # Return -1 if `item` is not found.
@@ -735,7 +735,7 @@ interface SequenceRead[E]
        #     assert a.index_of_from(20, 3)   == 4
        #     assert a.index_of_from(20, 4)   == 4
        #     assert a.index_of_from(20, 5)   == -1
-       fun index_of_from(item: E, pos: Int): Int
+       fun index_of_from(item: nullable Object, pos: Int): Int
        do
                var p = 0
                var i = iterator
@@ -755,7 +755,7 @@ interface SequenceRead[E]
        #     assert a.last_index_of_from(20, 2)   == 1
        #     assert a.last_index_of_from(20, 1)   == 1
        #     assert a.last_index_of_from(20, 0)   == -1
-       fun last_index_of_from(item: E, pos: Int): Int
+       fun last_index_of_from(item: nullable Object, pos: Int): Int
        do
                var res = -1
                var p = 0
@@ -1005,7 +1005,7 @@ interface CoupleMap[K, V]
 
        # Return the couple of the corresponding key
        # Return null if the key is no associated element
-       protected fun couple_at(key: K): nullable Couple[K, V] is abstract
+       protected fun couple_at(key: nullable Object): nullable Couple[K, V] is abstract
 
        # Return a new iteralot on all couples
        # Used to provide `iterator` and others
index cdb5242..b3ec382 100644 (file)
@@ -63,9 +63,9 @@ abstract class AbstractArrayRead[E]
 
        redef fun index_of(item) do return index_of_from(item, 0)
 
-       redef fun last_index_of(item: E): Int do return last_index_of_from(item, length-1)
+       redef fun last_index_of(item) do return last_index_of_from(item, length-1)
 
-       redef fun index_of_from(item: E, pos: Int): Int
+       redef fun index_of_from(item, pos)
        do
                var i = pos
                var len = length
@@ -78,7 +78,7 @@ abstract class AbstractArrayRead[E]
                return -1
        end
 
-       redef fun last_index_of_from(item: E, pos: Int): Int
+       redef fun last_index_of_from(item, pos)
        do
                var i = pos
                while i >= 0 do
index e5ff507..961e560 100644 (file)
@@ -32,13 +32,13 @@ private abstract class HashCollection[K]
        var last_item: nullable N = null # Last added item (same)
 
        # The last key accessed (used for cache)
-       var last_accessed_key: nullable K = null
+       var last_accessed_key: nullable Object = null
 
        # The last node accessed (used for cache)
        var last_accessed_node: nullable N = null
 
        # Return the index of the key k
-       fun index_at(k: K): Int
+       fun index_at(k: nullable Object): Int
        do
                if k == null then return 0
 
@@ -48,7 +48,7 @@ private abstract class HashCollection[K]
        end
 
        # Return the node associated with the key
-       fun node_at(k: K): nullable N
+       fun node_at(k: nullable Object): nullable N
        do
                # cache: `is` is used instead of `==` because it is a faster filter (even if not exact)
                if k.is_same_instance(_last_accessed_key) then return _last_accessed_node
@@ -60,7 +60,7 @@ private abstract class HashCollection[K]
        end
 
        # Return the node associated with the key (but with the index already known)
-       fun node_at_idx(i: Int, k: K): nullable N
+       fun node_at_idx(i: Int, k: nullable Object): nullable N
        do
                var c = _array[i]
                while c != null do
@@ -109,7 +109,7 @@ private abstract class HashCollection[K]
        end
 
        # Remove the node assosiated with the key
-       fun remove_node(k: K)
+       fun remove_node(k: nullable Object)
        do
                var i = index_at(k)
                var node = node_at_idx(i, k)
index da68294..5ed0531 100644 (file)
@@ -30,7 +30,7 @@ class Range[E: Discrete]
        #     assert [1..10].has(5)
        #     assert [1..10].has(10)
        #     assert not [1..10[.has(10)
-       redef fun has(item) do return item >= first and item <= last
+       redef fun has(item) do return item isa Comparable and item >= first and item <= last
 
        #     assert [1..1].has_only(1)
        #     assert not [1..10].has_only(1)
@@ -49,6 +49,15 @@ class Range[E: Discrete]
 
        redef fun iterator do return new IteratorRange[E](self)
 
+       # Gets an iterator starting at the end and going backwards
+       #
+       #     var reviter = [1..4].reverse_iterator
+       #     assert reviter.to_a == [4,3,2,1]
+       #
+       #     reviter = [1..4[.reverse_iterator
+       #     assert reviter.to_a == [3,2,1]
+       fun reverse_iterator: Iterator[E] do return new ReverseIteratorRange[E](self)
+
        #     assert [1..10].length             == 10
        #     assert [1..10[.length             == 9
        #     assert [1..1].length              == 1
@@ -120,22 +129,38 @@ class Range[E: Discrete]
        end
 end
 
+# Iterator on ranges.
 private class IteratorRange[E: Discrete]
-       # Iterator on ranges.
        super Iterator[E]
        var range: Range[E]
        redef var item is noinit
 
        redef fun is_ok do return _item < _range.after
-       
+
        redef fun next do _item = _item.successor(1)
-       
+
        init
        do
                _item = _range.first
        end
 end
 
+# Reverse iterator on ranges.
+private class ReverseIteratorRange[E: Discrete]
+       super Iterator[E]
+       var range: Range[E]
+       redef var item is noinit
+
+       redef fun is_ok do return _item >= _range.first
+
+       redef fun next do _item = _item.predecessor(1)
+
+       init
+       do
+               _item = _range.last
+       end
+end
+
 redef class Int
        # Returns the range from 0 to `self-1`, is used to do:
        #
index 12c9c86..f4c6baa 100644 (file)
@@ -115,7 +115,7 @@ class DisjointSet[E]
        #     s.add(1)
        #     assert s.has(1)
        #     assert not s.has(2)
-       redef fun has(e: E): Bool
+       redef fun has(e)
        do
                return nodes.has_key(e)
        end
index 2f6ae46..0abe7f3 100644 (file)
@@ -60,3 +60,11 @@ redef class NativeString
        private fun get_environ: NativeString is extern "string_NativeString_NativeString_get_environ_0"
        private fun setenv( v : NativeString ) is extern "string_NativeString_NativeString_setenv_1"
 end
+
+redef class Sys
+       redef init
+       do
+               var x = "NIT_SRAND".environ
+               if x != "" then srand_from(x.to_i)
+       end
+end
index 8cd2f70..cb29312 100644 (file)
@@ -99,6 +99,8 @@ class ProcessReader
 
        redef fun read_char do return stream_in.read_char
 
+       redef fun read_byte do return stream_in.read_byte
+
        redef fun eof do return stream_in.eof
 
        redef fun pipeflags do return 2
index bb87a6f..5324f01 100644 (file)
@@ -193,6 +193,26 @@ class FileWriter
                end
        end
 
+       redef fun write_byte(value)
+       do
+               if last_error != null then return
+               if not _is_writable then
+                       last_error = new IOError("Cannot write to non-writable stream")
+                       return
+               end
+               if _file.address_is_null then
+                       last_error = new IOError("Writing on a null stream")
+                       _is_writable = false
+                       return
+               end
+
+               var err = _file.write_byte(value)
+               if err != 1 then
+                       # Big problem
+                       last_error = new IOError("Problem writing a byte: {err}")
+               end
+       end
+
        redef fun close
        do
                super
@@ -1090,6 +1110,10 @@ end
 private extern class NativeFile `{ FILE* `}
        fun io_read(buf: NativeString, len: Int): Int is extern "file_NativeFile_NativeFile_io_read_2"
        fun io_write(buf: NativeString, len: Int): Int is extern "file_NativeFile_NativeFile_io_write_2"
+       fun write_byte(value: Int): Int `{
+               unsigned char b = (unsigned char)value;
+               return fwrite(&b, 1, 1, recv);
+       `}
        fun io_close: Int is extern "file_NativeFile_NativeFile_io_close_0"
        fun file_stat: NativeFileStat is extern "file_NativeFile_NativeFile_file_stat_0"
        fun fileno: Int `{ return fileno(recv); `}
@@ -1214,10 +1238,19 @@ do
        sys.stdout.write("\n")
 end
 
+# Print `object` on the error output (`stderr` or a log system)
+fun print_error(object: Object)
+do
+       sys.stderr.write object.to_s
+       sys.stderr.write "\n"
+end
+
 # Read a character from the standard input (`stdin`).
 fun getc: Char
 do
-       return sys.stdin.read_char.ascii
+       var c = sys.stdin.read_char
+       if c == null then return '\1'
+       return c
 end
 
 # Read a line from the standard input (`stdin`).
index 3f32a62..85386b4 100644 (file)
@@ -63,7 +63,7 @@ interface Object
 
        # Have `self` and `other` the same value?
        #
-       # The exact meaning of "same value" is let to the subclasses.
+       # The exact meaning of "same value" is left to the subclasses.
        # Implicitly, the default implementation, is `is_same_instance`
        fun ==(other: nullable Object): Bool do return self.is_same_instance(other)
 
@@ -85,7 +85,7 @@ interface Object
        # Display class name on stdout (debug only).
        # This method MUST not be used by programs, it is here for debugging
        # only and can be removed without any notice
-       fun output_class_name is intern 
+       fun output_class_name is intern
 
        # The hash code of the object.
        # Assuming that a == b -> a.hash == b.hash
@@ -223,11 +223,11 @@ end
 # Something that can be cloned
 #
 # This interface introduces the `clone` method used to duplicate an instance
-# Its specific semantic is let to the subclasses.
+# Its specific semantic is left to the subclasses.
 interface Cloneable
        # Duplicate `self`
        #
-       # The specific semantic of this method is let to the subclasses;
+       # The specific semantic of this method is left to the subclasses;
        # Especially, if (and how) attributes are cloned (depth vs. shallow).
        #
        # As a rule of thumb, the principle of least astonishment should
index 2b55dca..9e1744f 100644 (file)
@@ -241,6 +241,11 @@ end
 redef class Collection[ E ]
        # Return a random element form the collection
        # There must be at least one element in the collection
+       #
+       # ~~~
+       # var x = [1,2,3].rand
+       # assert x == 1 or x == 2 or x == 3
+       # ~~~
        fun rand: E
        do
                if is_empty then abort
@@ -252,6 +257,19 @@ redef class Collection[ E ]
                end
                abort
        end
+
+       # Return a new array made of elements in a random order.
+       #
+       # ~~~
+       # var a = [1,2,1].to_shuffle
+       # assert a == [1,1,2] or a == [1,2,1] or a == [2,1,1]
+       # ~~~
+       fun to_shuffle: Array[E]
+       do
+               var res = self.to_a
+               res.shuffle
+               return res
+       end
 end
 
 redef class SequenceRead[E]
@@ -263,6 +281,36 @@ redef class SequenceRead[E]
        end
 end
 
+redef class AbstractArray[E]
+       # Reorder randomly the elements in self.
+       #
+       # ~~~
+       # var a = new Array[Int]
+       #
+       # a.shuffle
+       # assert a.is_empty
+       #
+       # a.add 1
+       # a.shuffle
+       # assert a == [1]
+       #
+       # a.add 2
+       # a.shuffle
+       # assert a == [1,2] or a == [2,1]
+       # ~~~
+       #
+       # ENSURE self.shuffle.has_exactly(old(self))
+       fun shuffle
+       do
+               for i in [0..length[ do
+                       var j = i + (length-i).rand
+                       var tmp = self[i]
+                       self[i] = self[j]
+                       self[j] = tmp
+               end
+       end
+end
+
 redef class Sys
        init
        do
index 644e3dc..5ac6ee2 100644 (file)
@@ -157,6 +157,27 @@ private class Concat
                        return new Concat(left, r + s)
                end
        end
+
+       redef fun copy_to_native(dest, n, src_offset, dest_offset) do
+               var remlen = n
+               var subs = new RopeSubstrings.from(self, src_offset)
+               var st = src_offset - subs.pos
+               var off = dest_offset
+               while n > 0 do
+                       var it = subs.item
+                       if n > it.length then
+                               var cplen = it.length - st
+                               it.items.copy_to(dest, cplen, st, off)
+                               off += cplen
+                               n -= cplen
+                       else
+                               it.items.copy_to(dest, n, st, off)
+                               n = 0
+                       end
+                       subs.next
+                       st = 0
+               end
+       end
 end
 
 # Mutable `Rope`, optimized for concatenation operations
@@ -204,7 +225,7 @@ class RopeBuffer
        # mutable native string (`ns`)
        private var buf_size: Int is noinit
 
-       redef fun substrings: Iterator[String] do return new RopeBufSubstringIterator(self)
+       redef fun substrings do return new RopeBufSubstringIterator(self)
 
        # Builds an empty `RopeBuffer`
        init do
@@ -648,12 +669,12 @@ private class ReverseRopeSubstrings
 end
 
 private class RopeBufSubstringIterator
-       super Iterator[String]
+       super Iterator[FlatText]
 
        # Iterator on the substrings of the building string
-       var iter: Iterator[String]
+       var iter: Iterator[FlatText]
        # Makes a String out of the buffered part of the Ropebuffer
-       var nsstr: String
+       var nsstr: FlatString
        # Did we attain the buffered part ?
        var nsstr_done = false
 
@@ -682,7 +703,7 @@ end
 
 # Substrings of a Rope (i.e. Postfix iterator on leaves)
 private class RopeSubstrings
-       super IndexedIterator[String]
+       super IndexedIterator[FlatString]
 
        # Visit Stack
        var iter: RopeIterPiece is noinit
@@ -692,7 +713,7 @@ private class RopeSubstrings
        var max: Int is noinit
 
        # Current leaf
-       var str: String is noinit
+       var str: FlatString is noinit
 
        init(root: RopeString) is old_style_init do
                var r = new RopeIterPiece(root, true, false, null)
@@ -704,7 +725,7 @@ private class RopeSubstrings
                                rnod = rnod.left
                                r = new RopeIterPiece(rnod, true, false, r)
                        else
-                               str = rnod
+                               str = rnod.as(FlatString)
                                r.rdone = true
                                iter = r
                                break
@@ -729,7 +750,7 @@ private class RopeSubstrings
                                        r = new RopeIterPiece(rnod, true, false, r)
                                end
                        else
-                               str = rnod
+                               str = rnod.as(FlatString)
                                r.rdone = true
                                iter = r
                                self.pos = pos - off
@@ -753,7 +774,7 @@ private class RopeSubstrings
                        if not rnod isa Concat then
                                it.ldone = true
                                it.rdone = true
-                               str = rnod
+                               str = rnod.as(FlatString)
                                iter = it.as(not null)
                                break
                        end
index a487d98..a4ec83a 100644 (file)
@@ -32,3 +32,4 @@ import queue
 import numeric
 import error
 import re
+import bytes
index e0d3a67..7c4e606 100644 (file)
@@ -42,8 +42,11 @@ end
 # A `Stream` that can be read from
 abstract class Reader
        super Stream
-       # Read a character. Return its ASCII value, -1 on EOF or timeout
-       fun read_char: Int is abstract
+       # Reads a character. Returns `null` on EOF or timeout
+       fun read_char: nullable Char is abstract
+
+       # Reads a byte. Returns `null` on EOF or timeout
+       fun read_byte: nullable Int is abstract
 
        # Read at most i bytes
        fun read(i: Int): String
@@ -52,8 +55,8 @@ abstract class Reader
                var s = new FlatBuffer.with_capacity(i)
                while i > 0 and not eof do
                        var c = read_char
-                       if c >= 0 then
-                               s.add(c.ascii)
+                       if c != null then
+                               s.add(c)
                                i -= 1
                        end
                end
@@ -164,7 +167,7 @@ abstract class Reader
                var s = new FlatBuffer
                while not eof do
                        var c = read_char
-                       if c >= 0 then s.add(c.ascii)
+                       if c != null then s.add(c)
                end
                return s.to_s
        end
@@ -207,12 +210,11 @@ abstract class Reader
                if last_error != null then return
                loop
                        var x = read_char
-                       if x == -1 then
+                       if x == null then
                                if eof then return
                        else
-                               var c = x.ascii
-                               s.chars.push(c)
-                               if c == '\n' then return
+                               s.chars.push(x)
+                               if x == '\n' then return
                        end
                end
        end
@@ -241,14 +243,13 @@ abstract class Reader
        do
                var buf = new FlatBuffer
                var c = read_nonwhitespace
-               if c > 0 then
-                       buf.add(c.ascii)
+               if c != null then
+                       buf.add(c)
                        while not eof do
                                c = read_char
-                               if c < 0 then break
-                               var a = c.ascii
-                               if a.is_whitespace then break
-                               buf.add(a)
+                               if c == null then break
+                               if c.is_whitespace then break
+                               buf.add(c)
                        end
                end
                var res = buf.to_s
@@ -258,25 +259,25 @@ abstract class Reader
        # Skip whitespace characters (if any) then return the following non-whitespace character.
        #
        # Returns the code point of the character.
-       # Return -1 on end of file or error.
+       # Returns `null` on end of file or error.
        #
        # In fact, this method works like `read_char` except it skips whitespace.
        #
        # ~~~
        # var w = new StringReader(" \nab\tc")
-       # assert w.read_nonwhitespace == 'a'.ascii
-       # assert w.read_nonwhitespace == 'b'.ascii
-       # assert w.read_nonwhitespace == 'c'.ascii
-       # assert w.read_nonwhitespace == -1
+       # assert w.read_nonwhitespace == 'a'
+       # assert w.read_nonwhitespace == 'b'
+       # assert w.read_nonwhitespace == 'c'
+       # assert w.read_nonwhitespace == null
        # ~~~
        #
        # `Char::is_whitespace` determines what is a whitespace.
-       fun read_nonwhitespace: Int
+       fun read_nonwhitespace: nullable Char
        do
-               var c = -1
+               var c: nullable Char = null
                while not eof do
                        c = read_char
-                       if c < 0 or not c.ascii.is_whitespace then break
+                       if c == null or not c.is_whitespace then break
                end
                return c
        end
@@ -344,6 +345,9 @@ abstract class Writer
        # write a string
        fun write(s: Text) is abstract
 
+       # Write a single byte
+       fun write_byte(value: Int) is abstract
+
        # Can the stream be used to write
        fun is_writable: Bool is abstract
 end
@@ -382,14 +386,54 @@ abstract class BufferedReader
        super Reader
        redef fun read_char
        do
-               if last_error != null then return -1
+               if last_error != null then return null
+               if eof then
+                       last_error = new IOError("Stream has reached eof")
+                       return null
+               end
+               var c = _buffer[_buffer_pos]
+               _buffer_pos += 1
+               return c
+       end
+
+       redef fun read_byte
+       do
+               if last_error != null then return null
                if eof then
                        last_error = new IOError("Stream has reached eof")
-                       return -1
+                       return null
                end
-               var c = _buffer.chars[_buffer_pos]
+               var c = _buffer[_buffer_pos].ascii
                _buffer_pos += 1
-               return c.ascii
+               return c
+       end
+
+       # Peeks up to `n` bytes in the buffer, returns an empty string on EOF
+       #
+       # The operation does not consume the buffer
+       #
+       # ~~~nitish
+       #       var x = new FileReader("File.txt")
+       #       assert x.peek(5) == x.read(5)
+       # ~~~
+       fun peek(i: Int): String do
+               if eof then return ""
+               var b = new FlatBuffer.with_capacity(i)
+               while i > 0 and not eof do
+                       b.add _buffer[_buffer_pos]
+                       _buffer_pos += 1
+                       i -= 1
+               end
+               var nbuflen = b.length + (_buffer.length - _buffer_pos)
+               var nbuf = new FlatBuffer.with_capacity(nbuflen)
+               nbuf.append(b)
+               while _buffer_pos < _buffer.length do
+                       nbuf.add(_buffer[_buffer_pos])
+                       _buffer_pos += 1
+               end
+               _buffer_pos = 0
+               _buffer = nbuf
+               return b.to_s
        end
 
        redef fun read(i)
@@ -431,11 +475,11 @@ abstract class BufferedReader
                loop
                        # First phase: look for a '\n'
                        var i = _buffer_pos
-                       while i < _buffer.length and _buffer.chars[i] != '\n' do i += 1
+                       while i < _buffer.length and _buffer[i] != '\n' do i += 1
 
                        var eol
                        if i < _buffer.length then
-                               assert _buffer.chars[i] == '\n'
+                               assert _buffer[i] == '\n'
                                i += 1
                                eol = true
                        else
@@ -450,7 +494,7 @@ abstract class BufferedReader
                                # Copy from the buffer to the string
                                var j = _buffer_pos
                                while j < i do
-                                       s.add(_buffer.chars[j])
+                                       s.add(_buffer[j])
                                        j += 1
                                end
                                _buffer_pos = i
@@ -539,12 +583,23 @@ class StringReader
 
        redef fun read_char do
                if cursor < source.length then
-                       var c = source[cursor].ascii
+                       var c = source[cursor]
 
                        cursor += 1
                        return c
                else
-                       return -1
+                       return null
+               end
+       end
+
+       redef fun read_byte do
+               if cursor < source.length then
+                       var c = source[cursor]
+
+                       cursor += 1
+                       return c.ascii
+               else
+                       return null
                end
        end
 
index cd2698c..2344659 100644 (file)
@@ -60,7 +60,7 @@ abstract class Text
        fun substring(from: Int, count: Int): SELFTYPE is abstract
 
        # Iterates on the substrings of self if any
-       fun substrings: Iterator[Text] is abstract
+       fun substrings: Iterator[FlatText] is abstract
 
        # Is the current Text empty (== "")
        #
@@ -345,7 +345,7 @@ abstract class Text
                end
                return true
        end
-                       
+
        # Removes the whitespaces at the beginning of self
        #
        #     assert " \n\thello \n\t".l_trim == "hello \n\t"
@@ -849,6 +849,60 @@ abstract class Text
                return hash_cache.as(not null)
        end
 
+       # Gives the formatted string back as a Nit string with `args` in place
+       #
+       #    assert "This %1 is a %2.".format("String", "formatted String") == "This String is a formatted String."
+       #    assert "\\%1 This string".format("String") == "\\%1 This string"
+       fun format(args: Object...): String do
+               var s = new Array[Text]
+               var curr_st = 0
+               var i = 0
+               while i < length do
+                       # Skip escaped characters
+                       if self[i] == '\\' then
+                               i += 1
+                       # In case of format
+                       else if self[i] == '%' then
+                               var fmt_st = i
+                               i += 1
+                               var ciph_st = i
+                               while i < length and self[i].is_numeric do
+                                       i += 1
+                               end
+                               i -= 1
+                               var fmt_end = i
+                               var ciph_len = fmt_end - ciph_st + 1
+                               s.push substring(curr_st, fmt_st - curr_st)
+                               s.push args[substring(ciph_st, ciph_len).to_i - 1].to_s
+                               curr_st = i + 1
+                       end
+                       i += 1
+               end
+               s.push substring(curr_st, length - curr_st)
+               return s.to_s
+       end
+
+       # Copies `n` bytes from `self` at `src_offset` into `dest` starting at `dest_offset`
+       #
+       # Basically a high-level synonym of NativeString::copy_to
+       #
+       # REQUIRE: `n` must be large enough to contain `len` bytes
+       #
+       #       var ns = new NativeString(8)
+       #       "Text is String".copy_to_native(ns, 8, 2, 0)
+       #       assert ns.to_s_with_length(8) == "xt is St"
+       #
+       fun copy_to_native(dest: NativeString, n, src_offset, dest_offset: Int) do
+               var mypos = src_offset
+               var itspos = dest_offset
+               while n > 0 do
+                       dest[itspos] = self.chars[mypos]
+                       itspos += 1
+                       mypos += 1
+                       n -= 1
+               end
+       end
+
 end
 
 # All kinds of array-based text representations.
@@ -893,6 +947,10 @@ abstract class FlatText
        end
 
        redef fun flatten do return self
+
+       redef fun copy_to_native(dest, n, src_offset, dest_offset) do
+               items.copy_to(dest, n, src_offset, dest_offset)
+       end
 end
 
 # Abstract class for the SequenceRead compatible
@@ -953,7 +1011,7 @@ abstract class String
        #     assert "helloworld".insert_at(" ", 5)     == "hello world"
        fun insert_at(s: String, pos: Int): SELFTYPE is abstract
 
-       redef fun substrings: Iterator[String] is abstract
+       redef fun substrings is abstract
 
        # Returns a reversed version of self
        #
@@ -972,7 +1030,7 @@ abstract class String
        #     assert "Hello World!".to_lower     == "hello world!"
        fun to_lower : SELFTYPE is abstract
 
-       # Takes a camel case `self` and converts it to snake case 
+       # Takes a camel case `self` and converts it to snake case
        #
        #     assert "randomMethodId".to_snake_case == "random_method_id"
        #
@@ -1022,11 +1080,11 @@ abstract class String
                                prev_is_upper = false
                        end
                end
-               
+
                return new_str.to_s
        end
 
-       # Takes a snake case `self` and converts it to camel case 
+       # Takes a snake case `self` and converts it to camel case
        #
        #     assert "random_method_id".to_camel_case == "randomMethodId"
        #
index 6b6b91c..610ec2e 100644 (file)
@@ -64,7 +64,7 @@ class BinTreeMap[K: Comparable, E]
        #     assert not tree.has_key(0)
        #     assert tree.has_key(2)
        #     assert not tree.has_key(6)
-       redef fun has_key(key: K): Bool do
+       redef fun has_key(key) do
                if is_empty then return false
                var res = search_down(root.as(not null), key)
                if res != null then
@@ -85,7 +85,7 @@ class BinTreeMap[K: Comparable, E]
        #     assert tree[1] == "n1"
        #     assert tree.has_key(1)
        #     assert tree[2] == "n2"
-       redef fun [](key: K): E do
+       redef fun [](key) do
                assert not_empty: not is_empty
                if cache_node != null and cache_node.key == key then return cache_node.value
                var res = search_down(root.as(not null), key)
@@ -94,7 +94,8 @@ class BinTreeMap[K: Comparable, E]
        end
 
        # Search `key` in `from` and its children nodes.
-       protected fun search_down(from: N, key: K): nullable N do
+       protected fun search_down(from: N, key: nullable Object): nullable N do
+               if not key isa Comparable then return null
                var cmp = key <=> from.key
                if cmp == 0 then return from
                if from.left != null and cmp < 0 then
index 7e4d329..a22c5b2 100644 (file)
@@ -150,8 +150,13 @@ class WebsocketConnection
        private fun unpad_message do
                var fin = false
                while not fin do
-                       var fst_char = client.read_char
-                       var snd_char = client.read_char
+                       var fst_byte = client.read_byte
+                       var snd_byte = client.read_byte
+                       if fst_byte == null or snd_byte == null then
+                               last_error = new IOError("Error: bad frame")
+                               client.close
+                               return
+                       end
                        # First byte in msg is formatted this way :
                        # |(fin - 1bit)|(RSV1 - 1bit)|(RSV2 - 1bit)|(RSV3 - 1bit)|(opcode - 4bits)
                        # fin = Flag indicating if current frame is the last one
@@ -165,9 +170,9 @@ class WebsocketConnection
                        #       %x9 denotes a ping
                        #       %xA denotes a pong
                        #       %xB-F are reserved for further control frames
-                       var fin_flag = fst_char.bin_and(128)
+                       var fin_flag = fst_byte.bin_and(128)
                        if fin_flag != 0 then fin = true
-                       var opcode = fst_char.bin_and(15)
+                       var opcode = fst_byte.bin_and(15)
                        if opcode == 9 then
                                _buffer.add(138.ascii)
                                _buffer.add('\0')
@@ -183,20 +188,30 @@ class WebsocketConnection
                        # |(mask - 1bit)|(payload length - 7 bits)
                        # As specified, if the payload length is 126 or 127
                        # The next 16 or 64 bits contain an extended payload length
-                       var mask_flag = snd_char.bin_and(128)
-                       var len = snd_char.bin_and(127)
+                       var mask_flag = snd_byte.bin_and(128)
+                       var len = snd_byte.bin_and(127)
                        var payload_ext_len = 0
                        if len == 126 then
-                               payload_ext_len = client.read_char.lshift(8)
-                               payload_ext_len += client.read_char
+                               var tmp = client.read(2)
+                               if tmp.length != 2 then
+                                       last_error = new IOError("Error: received interrupted frame")
+                                       client.close
+                                       return
+                               end
+                               payload_ext_len = tmp[1].ascii + tmp[0].ascii.lshift(8)
                        else if len == 127 then
                                # 64 bits for length are not supported,
                                # only the last 32 will be interpreted as a Nit Integer
-                               for i in [0..4[ do client.read_char
-                               payload_ext_len = client.read_char.lshift(24)
-                               payload_ext_len += client.read_char.lshift(16)
-                               payload_ext_len += client.read_char.lshift(8)
-                               payload_ext_len += client.read_char
+                               var tmp = client.read(8)
+                               if tmp.length != 8 then
+                                       last_error = new IOError("Error: received interrupted frame")
+                                       client.close
+                                       return
+                               end
+                               for pos in [0 .. tmp.length[ do
+                                       var i = tmp[pos].ascii
+                                       payload_ext_len += i.lshift(8 * (7 - pos))
+                               end
                        end
                        if mask_flag != 0 then
                                if payload_ext_len != 0 then
index 18a579a..9c3ede7 100644 (file)
@@ -131,31 +131,31 @@ hi def link NITFFIDelimiters              Keyword
 " FFI Python
 syntax include @FFIPython syntax/python.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"Python"/ nextgroup=NITFFIBlockPython skipwhite
+syn match NITFFILanguage       /\c"Python"\ze.*`{/ nextgroup=NITFFIBlockPython skipwhite
 syn region NITFFIBlockPython matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIPython
 
 " FFI Java
 syntax include @FFIJava syntax/java.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"Java\(\| inner\)"/ nextgroup=NITFFIBlockJava skipwhite
+syn match NITFFILanguage       /\c"Java\(\| inner\)"\ze.*`{/ nextgroup=NITFFIBlockJava skipwhite
 syn region NITFFIBlockJava matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIJava
 
 " FFI C++
 syntax include @FFICpp syntax/cpp.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"C++\(\| header\| body\)"/ nextgroup=NITFFIBlockCpp skipwhite
+syn match NITFFILanguage       /\c"C++\(\| header\| body\)"\ze.*`{/ nextgroup=NITFFIBlockCpp skipwhite
 syn region NITFFIBlockCpp matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFICpp
 
 " FFI Objective-C
 syntax include @FFIObjC syntax/objc.vim
 unlet b:current_syntax
-syn match NITFFILanguage       /\c"ObjC\(\| Header\| Body\)"/ nextgroup=NITFFIBlockObjC skipwhite
+syn match NITFFILanguage       /\c"ObjC\(\| Header\| Body\)"\ze.*`{/ nextgroup=NITFFIBlockObjC skipwhite
 syn region NITFFIBlockObjC matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIObjC
 
 " FFI C (the last one is the default)
 syntax include @FFIC syntax/c.vim
 unlet b:current_syntax
-syn match NITFFILanguage               /\c"C\(\| header\| body\)"/     nextgroup=NITFFIBlockC skipwhite
+syn match NITFFILanguage               /\c"C\(\| header\| body\)"\ze.*`{/      nextgroup=NITFFIBlockC skipwhite
 syn region NITFFIBlockC matchgroup=NITFFI start='`{' matchgroup=NITFFI end='`}' keepend fold contains=@FFIC
 
 hi def link NITFFILanguage             Define
index 41a10b4..e47f3aa 100644 (file)
@@ -197,6 +197,20 @@ article.nospace {
        border-left: 2px solid #0d8921;
 }
 
+
+.pull-right .dropdown-toggle {
+       padding: 0 5px;
+}
+
+/* Hide the "..." link */
+
+article .dropdown, article .dropdown {
+       visibility: hidden;
+}
+article:hover .dropdown, article:target .dropdown {
+       visibility: visible;
+}
+
 /*
  * Page parts
  */
@@ -273,20 +287,6 @@ article.nospace {
        margin-left: 30px;
 }
 
-.source-link {
-       display: none;
-       float: right;
-       margin-top: 10px;
-}
-
-.source-link a {
-       color: #0d8921;
-}
-
-article:hover .source-link, article:target .source-link {
-       display: block;
-}
-
 /*
  * Code Highlighting
  */
index 679272d..cd1c616 100644 (file)
@@ -1,7 +1,5 @@
 /*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
index 4a4ca86..b93a495 100644 (file)
Binary files a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.eot and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.eot differ
index e3e2dc7..94fb549 100644 (file)
 <font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
 <font-face units-per-em="1200" ascent="960" descent="-240" />
 <missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
 <glyph unicode=" " />
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
 <glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
 <glyph unicode="&#x2009;" horiz-adv-x="260" />
 <glyph unicode="&#x200a;" horiz-adv-x="72" />
 <glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
 <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
 </font>
 </defs></svg> 
\ No newline at end of file
index 67fa00b..1413fc6 100644 (file)
Binary files a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.ttf and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.ttf differ
index 8c54182..9e61285 100644 (file)
Binary files a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff differ
diff --git a/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100644 (file)
index 0000000..64539b5
Binary files /dev/null and b/share/nitdoc/vendors/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ
index 850ba56..c8f82e5 100644 (file)
@@ -1,7 +1,7 @@
 /*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */
-
-+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed.bs.alert").remove()}var c=a(this),d=c.attr("data-target");d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));var e=a(d);b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close.bs.alert"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.one(a.support.transition.end,f).emulateTransitionEnd(150):f()};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){b=="loadingText"?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");c.prop("type")=="radio"&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f=typeof c=="object"&&c;e||d.data("bs.button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();if(b>this.$items.length-1||b<0)return;return this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){if(this.sliding)return;return this.slide("next")},b.prototype.prev=function(){if(this.sliding)return;return this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});this.$element.trigger(j);if(j.isDefaultPrevented())return;return this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(d.css("transition-duration").slice(0,-1)*1e3)):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),typeof c=="object"&&c),g=typeof c=="string"?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),typeof c=="number"?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),c.data()),g=c.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=c.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){function e(d){a(b).remove(),a(c).each(function(){var b=f(a(this)),c={relatedTarget:this};if(!b.hasClass("open"))return;b.trigger(d=a.Event("hide.bs.dropdown",c));if(d.isDefaultPrevented())return;b.removeClass("open").trigger("hidden.bs.dropdown",c)})}function f(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}"use strict";var b=".dropdown-backdrop",c="[data-toggle=dropdown]",d=function(b){a(b).on("click.bs.dropdown",this.toggle)};d.prototype.toggle=function(b){var c=a(this);if(c.is(".disabled, :disabled"))return;var d=f(c),g=d.hasClass("open");e();if(!g){"ontouchstart"in document.documentElement&&!d.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",e);var h={relatedTarget:this};d.trigger(b=a.Event("show.bs.dropdown",h));if(b.isDefaultPrevented())return;d.toggleClass("open").trigger("shown.bs.dropdown",h),c.focus()}return!1},d.prototype.keydown=function(b){if(!/(38|40|27)/.test(b.keyCode))return;var d=a(this);b.preventDefault(),b.stopPropagation();if(d.is(".disabled, :disabled"))return;var e=f(d),g=e.hasClass("open");if(!g||g&&b.keyCode==27)return b.which==27&&e.find(c).focus(),d.click();var h=" li:not(.divider):visible a",i=e.find("[role=menu]"+h+", [role=listbox]"+h);if(!i.length)return;var j=i.index(i.filter(":focus"));b.keyCode==38&&j>0&&j--,b.keyCode==40&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),e=c.data("bs.dropdown");e||c.data("bs.dropdown",e=new d(this)),typeof b=="string"&&e[b].call(c)})},a.fn.dropdown.Constructor=d,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",c,d.prototype.toggle).on("keydown.bs.dropdown.data-api",c+", [role=menu], [role=listbox]",d.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d);if(this.isShown||d.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)})},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]!==a.target&&!this.$element.has(a.target).length&&this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){a.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){if(a.target!==a.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),typeof c=="object"&&c);f||e.data("bs.modal",f=new b(this,g)),typeof c=="string"?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);var e=this.options.trigger.split(" ");for(var f=e.length;f--;){var g=e[f];if(g=="click")this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if(g!="manual"){var h=g=="hover"?"mouseenter":"focusin",i=g=="hover"?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(c.timeout),c.hoverState="in";if(!c.options.delay||!c.options.delay.show)return c.show();c.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(c.timeout),c.hoverState="out";if(!c.options.delay||!c.options.delay.hide)return c.hide();c.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);if(b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e=typeof this.options.placement=="function"?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n=this.options.container=="body"?window.innerWidth:k.outerWidth(),o=this.options.container=="body"?window.innerHeight:k.outerHeight(),p=this.options.container=="body"?0:k.offset().left;e=e=="bottom"&&h.top+h.height+j-m>o?"top":e=="top"&&h.top-m-j<0?"bottom":e=="right"&&h.right+i>n?"left":e=="left"&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;c=="top"&&k!=g&&(d=!0,b.top=b.top+g-k);if(/bottom|top/.test(c)){var l=0;b.left<0&&(l=b.left*-2,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function e(){b.hoverState!="in"&&c.detach(),b.$element.trigger("hidden.bs."+b.type)}var b=this,c=this.tip(),d=a.Event("hide.bs."+this.type);this.$element.trigger(d);if(d.isDefaultPrevented())return;return c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?c.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),this.hoverState=null,this},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},typeof b.getBoundingClientRect=="function"?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return a=="bottom"?{top:b.top+b.height,left:b.left+b.width/2-c/2}:a=="top"?{top:b.top-d,left:b.left+b.width/2-c/2}:a=="left"?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f=typeof c=="object"&&c;if(!e&&c=="destroy")return;e||d.data("bs.tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?typeof c=="string"?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||(typeof b.content=="function"?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f=typeof c=="object"&&c;if(!e&&c=="destroy")return;e||d.data("bs.popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});b.trigger(f);if(f.isDefaultPrevented())return;var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})},b.prototype.activate=function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g).emulateTransitionEnd(150):g(),e.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;this.affixed=="top"&&(e.top+=d),typeof f!="object"&&(h=g=f),typeof g=="function"&&(g=f.top(this.$element)),typeof h=="function"&&(h=f.bottom(this.$element));var i=this.unpin!=null&&d+this.unpin<=e.top?!1:h!=null&&e.top+this.$element.height()>=c-h?"bottom":g!=null&&d<=g?"top":!1;if(this.affixed===i)return;this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k);if(k.isDefaultPrevented())return;this.affixed=i,this.unpin=i=="bottom"?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),i=="bottom"&&this.$element.offset({top:c-h-this.$element.height()})};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f=typeof c=="object"&&c;e||d.data("bs.affix",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(this.transitioning||this.$element.hasClass("in"))return;var b=a.Event("show.bs.collapse");this.$element.trigger(b);if(b.isDefaultPrevented())return;var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])},b.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass("in"))return;var b=a.Event("hide.bs.collapse");this.$element.trigger(b);if(b.isDefaultPrevented())return;var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};if(!a.support.transition)return d.call(this);this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350)},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),typeof c=="object"&&c);!e&&f.toggle&&c=="show"&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":c.data(),i=c.attr("data-parent"),j=i&&a(i);if(!g||!g.transitioning)j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(c).addClass("collapsed"),c[f.hasClass("in")?"addClass":"removeClass"]("collapsed");f.collapse(h)})}(jQuery),+function(a){function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}"use strict",b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this,d=this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);if(f&&a<=d[0])return f!=(g=e[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f=typeof c=="object"&&c;e||d.data("bs.scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(a.style[c]!==undefined)return{end:b[c]};return!1}"use strict",a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery)
\ No newline at end of file
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
+var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
index 99c8763..7dafd2f 100644 (file)
@@ -244,7 +244,9 @@ redef class AIfExpr
                _n_kwif = new TKwif
                _n_expr = condition
                _n_expr.parent = self
+               _n_kwthen = new TKwthen
                _n_then = new ABlockExpr.make
+               _n_kwelse = new TKwelse
                _n_else = new ABlockExpr.make
                self.mtype = mtype
                self.is_typed = true
index 932f03d..df2ddd8 100644 (file)
@@ -47,33 +47,37 @@ class CCompilationUnit
        # files to compile TODO check is appropriate
        var files = new Array[String]
 
-       fun add_local_function( efc : CFunction )
+       # Add `c_function` as a `static` function local to this unit
+       fun add_local_function(c_function: CFunction)
        do
-               body_decl.add "static {efc.signature};\n"
+               body_decl.add "static {c_function.signature};\n"
                body_impl.add "\n"
-               body_impl.add efc.to_writer
+               body_impl.add c_function.to_writer
        end
 
-       fun add_exported_function( efc : CFunction )
+       # Add `c_function` as a public function to this unit
+       fun add_exported_function(c_function: CFunction)
        do
-               header_decl.add( "{efc.signature};\n" )
-               body_impl.add( "\n" )
-               body_impl.add( efc.to_writer )
+               header_decl.add "{c_function.signature};\n"
+               body_impl.add "\n"
+               body_impl.add c_function.to_writer
        end
 
-       fun compile_header_core( stream : Writer )
+       # Write the core of the header to `stream`
+       fun compile_header_core(stream: Writer)
        do
-               header_c_base.write_to( stream )
-               header_custom.write_to( stream )
-               header_c_types.write_to( stream )
-               header_decl.write_to( stream )
+               header_c_base.write_to stream
+               header_custom.write_to stream
+               header_c_types.write_to stream
+               header_decl.write_to stream
        end
 
-       fun compile_body_core( stream : Writer )
+       # Write the core of the body to `stream`
+       fun compile_body_core(stream: Writer)
        do
-               body_decl.write_to( stream )
-               body_custom.write_to( stream )
-               body_impl.write_to( stream )
+               body_decl.write_to stream
+               body_custom.write_to stream
+               body_impl.write_to stream
        end
 end
 
similarity index 63%
rename from src/compiler/compiler_ffi.nit
rename to src/compiler/compiler_ffi/compiler_ffi.nit
index 42423f9..8b8f9de 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# FFI support for the compilers
+# Full FFI support for the compiler
 module compiler_ffi
 
-intrude import abstract_compiler
-intrude import ffi
+intrude import light
 import nitni
 
 redef class MModule
        private var foreign_callbacks = new ForeignCallbackSet
-       var nitni_ccu: nullable CCompilationUnit = null
-
-       private fun nmodule(v: AbstractCompilerVisitor): nullable AModule
-       do
-               return v.compiler.modelbuilder.mmodule2node(self)
-       end
 
        redef fun finalize_ffi(compiler: AbstractCompiler)
        do
                if not uses_ffi then return
 
-               var v = compiler.new_visitor
-               var n = nmodule(v)
-               if n == null then return
-               n.ensure_compile_ffi_wrapper
-               finalize_ffi_wrapper(v.compiler.modelbuilder.compile_dir, v.compiler.mainmodule)
-               for file in ffi_files do v.compiler.extern_bodies.add(file)
-
-               ensure_compile_nitni_base(v)
-
-               nitni_ccu.header_c_types.add("#include \"{c_name}._ffi.h\"\n")
-               nitni_ccu.header_c_types.add """
-extern void nitni_global_ref_incr(void*);
-extern void nitni_global_ref_decr(void*);
-"""
-
-               var cflags = self.cflags[""].join(" ")
-               nitni_ccu.write_as_nitni(self, v.compiler.modelbuilder.compile_dir)
-
-               for file in nitni_ccu.files do
-                       var f = new ExternCFile(file, cflags)
-                       f.pkgconfigs.add_all pkgconfigs
-                       v.compiler.extern_bodies.add(f)
-               end
+               super
 
-               # reset FFI things so the next compilation job, if any, starts with a clean context
-               # FIXME clean and rationalize this
-               nitni_ccu = null
-               compiled_ffi_methods.clear
-               ffi_ccu = null
-               ffi_files.clear
                compiled_callbacks.clear
                #Do not reset `foreign_callbacks` and `ffi_callbacks` because they are computed in previous phases
        end
 
-       private fun ensure_compile_nitni_base(v: AbstractCompilerVisitor)
-       do
-               if nitni_ccu != null then return
-
-               nitni_ccu = new CCompilationUnit
-       end
-
-       redef fun collect_linker_libs
-       do
-               if not self.ldflags.keys.has("") then return null
-               return self.ldflags[""]
-       end
-
        private var compiled_callbacks = new Array[NitniCallback]
 
        # Returns true if callbacks has yet to be generated and register it as being generated
@@ -93,23 +45,12 @@ extern void nitni_global_ref_decr(void*);
 end
 
 redef class AMethPropdef
-       private fun compile_ffi_support_to_c(v: AbstractCompilerVisitor)
+       redef fun compile_ffi_support_to_c(v)
        do
+               super
+
                var mmodule = mpropdef.mclassdef.mmodule
                var mainmodule = v.compiler.mainmodule
-               var amodule = v.compiler.modelbuilder.mmodule2node(mmodule)
-               var mclass_type = mpropdef.mclassdef.bound_mtype
-
-               # Declare as extern
-               var csignature = mpropdef.mproperty.build_csignature(mclass_type, mmodule, "___impl", long_signature, internal_call_context)
-               v.declare_once("{csignature};")
-
-               # FFI part
-               amodule.ensure_compile_ffi_wrapper
-               compile_ffi_method(mmodule)
-
-               # nitni - Compile missing callbacks
-               mmodule.ensure_compile_nitni_base(v)
                var ccu = mmodule.nitni_ccu.as(not null)
 
                for mtype in foreign_callbacks.types do
@@ -137,178 +78,71 @@ redef class AMethPropdef
                # manage nitni callback set
                mmodule.foreign_callbacks.join(foreign_callbacks)
        end
+end
 
-       redef fun compile_externmeth_to_c(v, mpropdef, arguments)
+redef class MExplicitCall
+       private fun compile_extern_callback(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
        do
-               # if using the old native interface fallback on previous implementation
-               if n_extern_code_block == null then return super
+               var mproperty = mproperty
+               assert mproperty isa MMethod
 
-               var mmodule = mpropdef.mclassdef.mmodule
-               mmodule.uses_ffi = true
+               # In nitni files, declare internal function as extern
+               var full_friendly_csignature = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
+               ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
-               var mclass_type = mpropdef.mclassdef.bound_mtype
+               if not compile_implementation_too then return
 
-               # Outgoing code in compiler
-               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
-               var recv_var: nullable RuntimeVariable = null
-               var return_mtype = mpropdef.msignature.return_mtype
-               if return_mtype != null then
-                       return_mtype = return_mtype.anchor_to(mmodule, mclass_type)
-                       recv_var = v.new_var(return_mtype)
-               end
+               # Internally, implement internal function
+               var nitni_visitor = v.compiler.new_visitor
+               nitni_visitor.frame = v.frame
+               var msignature = mproperty.lookup_first_definition(v.compiler.mainmodule, recv_mtype).msignature
+               var csignature_blind = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
 
-               v.adapt_signature(mpropdef, arguments)
-               v.unbox_signature_extern(mpropdef, arguments)
-
-               var arguments_for_c = new Array[String]
-               for a in [0..arguments.length[ do
-                       var arg = arguments[a]
-                       var param_mtype: MType
-                       if a == 0 then
-                               param_mtype = mpropdef.mclassdef.mclass.mclass_type
-                       else param_mtype = mpropdef.msignature.mparameters[a-1].mtype
-
-                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
-
-                       if param_mtype.is_cprimitive then
-                               arguments_for_c.add(arg.name)
-                       else
-                               v.add("struct nitni_instance* var_for_c_{a};")
-                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
-                               v.add("var_for_c_{a}->value = {arg.name};")
-                               arguments_for_c.add("var_for_c_{a}")
-                       end
-               end
+               nitni_visitor.add_decl("/* nitni callback for {mproperty.full_name} */")
+               nitni_visitor.add_decl("{csignature_blind} \{")
 
-               if recv_var == null then
-                       v.add("{externname}({arguments_for_c.join(", ")});")
+               var vars = new Array[RuntimeVariable]
+               var mtype: MType = recv_mtype
+               var recv_var = null
+               if mproperty.is_init then
+                       var recv_mtype = recv_mtype
+                       recv_var = nitni_visitor.init_instance_or_extern(recv_mtype)
+                       nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
+                       nitni_visitor.add("recv = {recv_var};")
                else
-                       assert return_mtype != null
-                       if return_mtype.is_cprimitive then
-                               v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
-                       else
-                               v.add("struct nitni_instance* ret_var;")
-                               v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
-                               v.add("{recv_var} = ret_var->value;")
-                       end
-                       recv_var = v.box_extern(recv_var, return_mtype)
-                       v.ret(recv_var)
+                       mtype = mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
+                       recv_var = nitni_visitor.var_from_c("recv", mtype)
+                       recv_var = nitni_visitor.box_extern(recv_var, mtype)
                end
 
-               compile_ffi_support_to_c(v)
-               return true
-       end
-
-       redef fun compile_externinit_to_c(v, mpropdef, arguments)
-       do
-               # if using the old native interface fallback on previous implementation
-               if n_extern_code_block == null then return super
-
-               var mmodule = mpropdef.mclassdef.mmodule
-               mmodule.uses_ffi = true
-
-               var mclass_type = mpropdef.mclassdef.bound_mtype
-
-               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
-               var return_mtype = arguments.first.mtype
-               var recv_var = v.new_var(return_mtype)
-
-               v.adapt_signature(mpropdef, arguments)
-               v.unbox_signature_extern(mpropdef, arguments)
-
-               arguments.shift
-
-               var arguments_for_c = new Array[String]
-               for a in [0..arguments.length[ do
-                       var arg = arguments[a]
-                       var param_mtype: MType
-                       param_mtype = mpropdef.msignature.mparameters[a].mtype
-                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
-
-                       if param_mtype.is_cprimitive then
-                               arguments_for_c.add(arg.name)
-                       else
-                               v.add("struct nitni_instance* var_for_c_{a};")
-                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
-                               v.add("var_for_c_{a}->value = {arg.name};")
-                               arguments_for_c.add("var_for_c_{a}")
-                       end
-               end
+               vars.add(recv_var)
 
-               if return_mtype.is_cprimitive then
-                       v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
-               else
-                       v.add("struct nitni_instance* ret_var;")
-                       v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
-                       v.add("{recv_var} = ret_var->value;")
+               for p in msignature.mparameters do
+                       var arg_mtype = p.mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
+                       var arg = nitni_visitor.var_from_c(p.name, arg_mtype)
+                       arg = nitni_visitor.box_extern(arg, arg_mtype)
+                       vars.add(arg)
                end
-               recv_var = v.box_extern(recv_var, return_mtype)
-               v.ret(recv_var)
 
-               compile_ffi_support_to_c(v)
-               return true
-       end
-end
-
-redef class CCompilationUnit
-       fun write_as_nitni(mmodule: MModule, compdir: String)
-       do
-               var base_name = "{mmodule.c_name}._nitni"
-
-               var h_file = "{base_name}.h"
-               write_header_to_file( mmodule, "{compdir}/{h_file}", new Array[String],
-                       "{mmodule.c_name.to_s.to_upper}_NITG_NITNI_H")
-
-               var c_file = "{base_name}.c"
-               write_body_to_file( mmodule, "{compdir}/{c_file}", ["\"{h_file}\""] )
-
-               files.add( "{compdir}/{c_file}" )
-       end
-end
-
-redef class AbstractCompiler
-       # Cache to avoid multiple compilation of NULL values
-       # see FIXME in `MNullableType#compile_extern_helper_functions`
-       private var compiled_null_types = new Array[MNullableType]
-end
+               var ret_var = nitni_visitor.send(mproperty, vars)
 
-redef class AbstractCompilerVisitor
-       # Create a `RuntimeVariable` for this C variable originating from C user code
-       private fun var_from_c(name: String, mtype: MType): RuntimeVariable
-       do
-               if mtype.is_cprimitive then
-                       return new RuntimeVariable(name, mtype, mtype)
-               else
-                       return new RuntimeVariable("{name}->value", mtype, mtype)
+               var return_mtype = msignature.return_mtype
+               if mproperty.is_init then
+                       if recv_mtype.mclass.kind != extern_kind then ret_var = recv_var
+                       return_mtype = recv_mtype
                end
-       end
-
-       # Return a `RuntimeVarible` to C user code
-       private fun ret_to_c(src: RuntimeVariable, mtype: MType)
-       do
-               if mtype.is_cprimitive then
-                       add("return {src};")
-               else
-                       add("struct nitni_instance* ret_for_c;")
-                       add("ret_for_c = nit_alloc(sizeof(struct nitni_instance));")
-                       add("ret_for_c->value = {src};")
-                       add("return ret_for_c;")
+               if return_mtype != null then
+                       assert ret_var != null
+                       return_mtype = return_mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
+                       ret_var = nitni_visitor.autobox(ret_var, return_mtype)
+                       ret_var = nitni_visitor.unbox_extern(ret_var, return_mtype)
+                       nitni_visitor.ret_to_c(ret_var, return_mtype)
                end
+               nitni_visitor.add("\}")
        end
 end
 
 redef class MType
-       private fun compile_extern_type(v: AbstractCompilerVisitor, ccu: CCompilationUnit)
-       do
-               assert not is_cprimitive
-
-               # define friendly type
-               ccu.header_c_types.add("#ifndef NIT_TYPE_{cname}\n")
-               ccu.header_c_types.add("#define NIT_TYPE_{cname} 1\n")
-               ccu.header_c_types.add("typedef struct nitni_instance *{cname};\n")
-               ccu.header_c_types.add("#endif\n")
-       end
-
        private fun compile_extern_helper_functions(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
        do
                # actually, we do not need to do anything when using the bohem garbage collector
@@ -362,68 +196,6 @@ redef class MNullableType
        end
 end
 
-redef class MExplicitCall
-       private fun compile_extern_callback(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
-       do
-               var mproperty = mproperty
-               assert mproperty isa MMethod
-
-               # In nitni files, declare internal function as extern
-               var full_friendly_csignature = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
-               ccu.header_decl.add("extern {full_friendly_csignature};\n")
-
-               if not compile_implementation_too then return
-
-               # Internally, implement internal function
-               var nitni_visitor = v.compiler.new_visitor
-               nitni_visitor.frame = v.frame
-               var msignature = mproperty.lookup_first_definition(v.compiler.mainmodule, recv_mtype).msignature
-               var csignature_blind = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
-
-               nitni_visitor.add_decl("/* nitni callback for {mproperty.full_name} */")
-               nitni_visitor.add_decl("{csignature_blind} \{")
-
-               var vars = new Array[RuntimeVariable]
-               var mtype: MType = recv_mtype
-               var recv_var = null
-               if mproperty.is_init then
-                       var recv_mtype = recv_mtype
-                       recv_var = nitni_visitor.init_instance_or_extern(recv_mtype)
-                       nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
-                       nitni_visitor.add("recv = {recv_var};")
-               else
-                       mtype = mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
-                       recv_var = nitni_visitor.var_from_c("recv", mtype)
-                       recv_var = nitni_visitor.box_extern(recv_var, mtype)
-               end
-
-               vars.add(recv_var)
-
-               for p in msignature.mparameters do
-                       var arg_mtype = p.mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
-                       var arg = nitni_visitor.var_from_c(p.name, arg_mtype)
-                       arg = nitni_visitor.box_extern(arg, arg_mtype)
-                       vars.add(arg)
-               end
-
-               var ret_var = nitni_visitor.send(mproperty, vars)
-
-               var return_mtype = msignature.return_mtype
-               if mproperty.is_init then
-                       if recv_mtype.mclass.kind != extern_kind then ret_var = recv_var
-                       return_mtype = recv_mtype
-               end
-               if return_mtype != null then
-                       assert ret_var != null
-                       return_mtype = return_mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
-                       ret_var = nitni_visitor.autobox(ret_var, return_mtype)
-                       ret_var = nitni_visitor.unbox_extern(ret_var, return_mtype)
-                       nitni_visitor.ret_to_c(ret_var, return_mtype)
-               end
-               nitni_visitor.add("\}")
-       end
-end
-
 redef class MExplicitSuper
        private fun compile_extern_callback(v: AbstractCompilerVisitor, ccu: CCompilationUnit, compile_implementation_too: Bool)
        do
diff --git a/src/compiler/compiler_ffi/light.nit b/src/compiler/compiler_ffi/light.nit
new file mode 100644 (file)
index 0000000..dbe819a
--- /dev/null
@@ -0,0 +1,281 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013-2015 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Light FFI support for the compiler
+module light
+
+intrude import abstract_compiler
+intrude import ffi::light_ffi
+
+redef class MModule
+       # `CCompilationUnit` used for nitni signatures and code specific to the compiler
+       var nitni_ccu: nullable CCompilationUnit = null
+
+       private fun nmodule(v: AbstractCompilerVisitor): nullable AModule
+       do
+               return v.compiler.modelbuilder.mmodule2node(self)
+       end
+
+       redef fun finalize_ffi(compiler: AbstractCompiler)
+       do
+               if not uses_ffi then return
+
+               var v = compiler.new_visitor
+               var n = nmodule(v)
+               if n == null then return
+               n.ensure_compile_ffi_wrapper
+               finalize_ffi_wrapper(v.compiler.modelbuilder.compile_dir, v.compiler.mainmodule)
+               for file in ffi_files do v.compiler.extern_bodies.add(file)
+
+               ensure_compile_nitni_base(v)
+
+               nitni_ccu.header_c_types.add("#include \"{c_name}._ffi.h\"\n")
+               nitni_ccu.header_c_types.add """
+extern void nitni_global_ref_incr(void*);
+extern void nitni_global_ref_decr(void*);
+"""
+
+               var cflags = self.cflags[""].join(" ")
+               nitni_ccu.write_as_nitni(self, v.compiler.modelbuilder.compile_dir)
+
+               for file in nitni_ccu.files do
+                       var f = new ExternCFile(file, cflags)
+                       f.pkgconfigs.add_all pkgconfigs
+                       v.compiler.extern_bodies.add(f)
+               end
+
+               # reset FFI things so the next compilation job, if any, starts with a clean context
+               # FIXME clean and rationalize this
+               nitni_ccu = null
+               compiled_ffi_methods.clear
+               ffi_ccu = null
+               ffi_files.clear
+       end
+
+       private fun ensure_compile_nitni_base(v: AbstractCompilerVisitor)
+       do
+               if nitni_ccu != null then return
+
+               nitni_ccu = new CCompilationUnit
+       end
+
+       redef fun collect_linker_libs
+       do
+               if not self.ldflags.keys.has("") then return null
+               return self.ldflags[""]
+       end
+end
+
+redef class AMethPropdef
+       private fun compile_ffi_support_to_c(v: AbstractCompilerVisitor)
+       do
+               var mmodule = mpropdef.mclassdef.mmodule
+               var amodule = v.compiler.modelbuilder.mmodule2node(mmodule)
+               var mclass_type = mpropdef.mclassdef.bound_mtype
+
+               # Declare as extern
+               var csignature = mpropdef.mproperty.build_csignature(mclass_type, mmodule, "___impl", long_signature, internal_call_context)
+               v.declare_once("{csignature};")
+
+               # FFI part
+               amodule.ensure_compile_ffi_wrapper
+               compile_ffi_method(mmodule)
+
+               # nitni - Compile missing callbacks
+               mmodule.ensure_compile_nitni_base(v)
+       end
+
+       # Should we compile the extern method `self`?
+       #
+       # Returns false when restricting to the light FFI on methods using callbacks.
+       fun accept_externmeth: Bool do return true
+
+       redef fun compile_externmeth_to_c(v, mpropdef, arguments)
+       do
+               # if using the old native interface fallback on previous implementation
+               if n_extern_code_block == null then return super
+
+               if not accept_externmeth then return false
+
+               var mmodule = mpropdef.mclassdef.mmodule
+               mmodule.uses_ffi = true
+
+               var mclass_type = mpropdef.mclassdef.bound_mtype
+
+               # Outgoing code in compiler
+               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
+               var recv_var: nullable RuntimeVariable = null
+               var return_mtype = mpropdef.msignature.return_mtype
+               if return_mtype != null then
+                       return_mtype = return_mtype.anchor_to(mmodule, mclass_type)
+                       recv_var = v.new_var(return_mtype)
+               end
+
+               v.adapt_signature(mpropdef, arguments)
+               v.unbox_signature_extern(mpropdef, arguments)
+
+               var arguments_for_c = new Array[String]
+               for a in [0..arguments.length[ do
+                       var arg = arguments[a]
+                       var param_mtype: MType
+                       if a == 0 then
+                               param_mtype = mpropdef.mclassdef.mclass.mclass_type
+                       else param_mtype = mpropdef.msignature.mparameters[a-1].mtype
+
+                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
+
+                       if param_mtype.is_cprimitive then
+                               arguments_for_c.add(arg.name)
+                       else
+                               v.add("struct nitni_instance* var_for_c_{a};")
+                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
+                               v.add("var_for_c_{a}->value = {arg.name};")
+                               arguments_for_c.add("var_for_c_{a}")
+                       end
+               end
+
+               if recv_var == null then
+                       v.add("{externname}({arguments_for_c.join(", ")});")
+               else
+                       assert return_mtype != null
+                       if return_mtype.is_cprimitive then
+                               v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
+                       else
+                               v.add("struct nitni_instance* ret_var;")
+                               v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
+                               v.add("{recv_var} = ret_var->value;")
+                       end
+                       recv_var = v.box_extern(recv_var, return_mtype)
+                       v.ret(recv_var)
+               end
+
+               compile_ffi_support_to_c(v)
+               return true
+       end
+
+       redef fun compile_externinit_to_c(v, mpropdef, arguments)
+       do
+               # if using the old native interface fallback on previous implementation
+               if n_extern_code_block == null then return super
+
+               if not accept_externmeth then return false
+
+               var mmodule = mpropdef.mclassdef.mmodule
+               mmodule.uses_ffi = true
+
+               var mclass_type = mpropdef.mclassdef.bound_mtype
+
+               var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)
+               var return_mtype = arguments.first.mtype
+               var recv_var = v.new_var(return_mtype)
+
+               v.adapt_signature(mpropdef, arguments)
+               v.unbox_signature_extern(mpropdef, arguments)
+
+               arguments.shift
+
+               var arguments_for_c = new Array[String]
+               for a in [0..arguments.length[ do
+                       var arg = arguments[a]
+                       var param_mtype: MType
+                       param_mtype = mpropdef.msignature.mparameters[a].mtype
+                       param_mtype = param_mtype.anchor_to(mmodule, mclass_type)
+
+                       if param_mtype.is_cprimitive then
+                               arguments_for_c.add(arg.name)
+                       else
+                               v.add("struct nitni_instance* var_for_c_{a};")
+                               v.add("var_for_c_{a} = nit_alloc(sizeof(struct nitni_instance));")
+                               v.add("var_for_c_{a}->value = {arg.name};")
+                               arguments_for_c.add("var_for_c_{a}")
+                       end
+               end
+
+               if return_mtype.is_cprimitive then
+                       v.add("{recv_var} = {externname}({arguments_for_c.join(", ")});")
+               else
+                       v.add("struct nitni_instance* ret_var;")
+                       v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
+                       v.add("{recv_var} = ret_var->value;")
+               end
+               recv_var = v.box_extern(recv_var, return_mtype)
+               v.ret(recv_var)
+
+               compile_ffi_support_to_c(v)
+               return true
+       end
+end
+
+redef class CCompilationUnit
+       # Compile a `_nitni` files, used to implement nitni features for the compiler
+       fun write_as_nitni(mmodule: MModule, compdir: String)
+       do
+               var base_name = "{mmodule.c_name}._nitni"
+
+               var h_file = "{base_name}.h"
+               write_header_to_file( mmodule, "{compdir}/{h_file}", new Array[String],
+                       "{mmodule.c_name.to_s.to_upper}_NITG_NITNI_H")
+
+               var c_file = "{base_name}.c"
+               write_body_to_file( mmodule, "{compdir}/{c_file}", ["\"{h_file}\""] )
+
+               files.add( "{compdir}/{c_file}" )
+       end
+end
+
+redef class AbstractCompiler
+       # Cache to avoid multiple compilation of NULL values
+       # see FIXME in `MNullableType#compile_extern_helper_functions`
+       private var compiled_null_types = new Array[MNullableType]
+end
+
+redef class AbstractCompilerVisitor
+       # Create a `RuntimeVariable` for this C variable originating from C user code
+       private fun var_from_c(name: String, mtype: MType): RuntimeVariable
+       do
+               if mtype.is_cprimitive then
+                       return new RuntimeVariable(name, mtype, mtype)
+               else
+                       return new RuntimeVariable("{name}->value", mtype, mtype)
+               end
+       end
+
+       # Return a `RuntimeVarible` to C user code
+       private fun ret_to_c(src: RuntimeVariable, mtype: MType)
+       do
+               if mtype.is_cprimitive then
+                       add("return {src};")
+               else
+                       add("struct nitni_instance* ret_for_c;")
+                       add("ret_for_c = nit_alloc(sizeof(struct nitni_instance));")
+                       add("ret_for_c->value = {src};")
+                       add("return ret_for_c;")
+               end
+       end
+end
+
+redef class MType
+       private fun compile_extern_type(v: AbstractCompilerVisitor, ccu: CCompilationUnit)
+       do
+               assert not is_cprimitive
+
+               # define friendly type
+               ccu.header_c_types.add("#ifndef NIT_TYPE_{cname}\n")
+               ccu.header_c_types.add("#define NIT_TYPE_{cname} 1\n")
+               ccu.header_c_types.add("typedef struct nitni_instance *{cname};\n")
+               ccu.header_c_types.add("#endif\n")
+       end
+end
diff --git a/src/compiler/compiler_ffi/light_only.nit b/src/compiler/compiler_ffi/light_only.nit
new file mode 100644 (file)
index 0000000..3fc162d
--- /dev/null
@@ -0,0 +1,26 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Compiler support for the light FFI only, detects unsupported usage of callbacks
+module light_only
+
+import light
+
+redef class MClassType
+       redef fun cname_normal_class do return "void*"
+end
+
+redef class AMethPropdef
+       redef fun accept_externmeth do return n_extern_calls == null
+end
index 34e7be4..3e7fbcb 100644 (file)
@@ -1436,13 +1436,14 @@ class SeparateCompilerVisitor
                if compiler.modelbuilder.toolcontext.opt_invocation_metrics.value then add("count_invoke_by_tables++;")
 
                assert arguments.length == mmethod.intro.msignature.arity + 1 else debug("Invalid arity for {mmethod}. {arguments.length} arguments given.")
-               var recv = arguments.first
 
                var res0 = before_send(mmethod, arguments)
 
                var runtime_function = mmethod.intro.virtual_runtime_function
                var msignature = runtime_function.called_signature
 
+               adapt_signature(mmethod.intro, arguments)
+
                var res: nullable RuntimeVariable
                var ret = msignature.return_mtype
                if ret == null then
@@ -1451,18 +1452,7 @@ class SeparateCompilerVisitor
                        res = self.new_var(ret)
                end
 
-               var ss = new FlatBuffer
-
-               ss.append("{recv}")
-               for i in [0..msignature.arity[ do
-                       var a = arguments[i+1]
-                       var t = msignature.mparameters[i].mtype
-                       if i == msignature.vararg_rank then
-                               t = arguments[i+1].mcasttype
-                       end
-                       a = self.autobox(a, t)
-                       ss.append(", {a}")
-               end
+               var ss = arguments.join(", ")
 
                var const_color = mentity.const_color
                var ress
index b8b2c0a..6f7d1e8 100644 (file)
@@ -273,7 +273,7 @@ class SeparateErasureCompiler
                        #Build BOX
                        self.provide_declaration("BOX_{c_name}", "val* BOX_{c_name}({mtype.ctype_extern});")
                        v.add_decl("/* allocate {mtype} */")
-                       v.add_decl("val* BOX_{mtype.c_name}({mtype.ctype} value) \{")
+                       v.add_decl("val* BOX_{mtype.c_name}({mtype.ctype_extern} value) \{")
                        v.add("struct instance_{c_name}*res = nit_alloc(sizeof(struct instance_{c_name}));")
                        v.require_declaration("class_{c_name}")
                        v.add("res->class = &class_{c_name};")
index 0a011e8..07b7c99 100644 (file)
@@ -126,4 +126,6 @@ class GraphArticle
 
        # Dot script of the graph.
        var dot: Text
+
+       redef var is_empty = false
 end
index 23da906..5bfbfb1 100644 (file)
@@ -41,12 +41,14 @@ end
 redef class MModulePage
        redef fun build_inh_list(v, doc) do
                var section = new ImportationListSection(mentity)
+               var group = new PanelGroup("List")
                var imports = self.imports.to_a
                v.name_sorter.sort(imports)
-               section.add_child new HierarchyListArticle(mentity, "Imports", imports)
+               group.add_child new HierarchyListArticle(mentity, "Imports", imports)
                var clients = self.clients.to_a
                v.name_sorter.sort(clients)
-               section.add_child new HierarchyListArticle(mentity, "Clients", clients)
+               group.add_child new HierarchyListArticle(mentity, "Clients", clients)
+               section.add_child group
                section.parent = root.children.first
                root.children.first.children.insert(section, 1)
        end
@@ -55,18 +57,20 @@ end
 redef class MClassPage
        redef fun build_inh_list(v, doc) do
                var section = new InheritanceListSection(mentity)
+               var group = new PanelGroup("List")
                var parents = self.parents.to_a
                v.name_sorter.sort(parents)
-               section.add_child new HierarchyListArticle(mentity, "Parents", parents)
+               group.add_child new HierarchyListArticle(mentity, "Parents", parents)
                var ancestors = self.ancestors.to_a
                v.name_sorter.sort(ancestors)
-               section.add_child new HierarchyListArticle(mentity, "Ancestors", ancestors)
+               group.add_child new HierarchyListArticle(mentity, "Ancestors", ancestors)
                var children = self.children.to_a
                v.name_sorter.sort(children)
-               section.add_child new HierarchyListArticle(mentity, "Children", children)
+               group.add_child new HierarchyListArticle(mentity, "Children", children)
                var descendants = self.descendants.to_a
                v.name_sorter.sort(descendants)
-               section.add_child new HierarchyListArticle(mentity, "Descendants", descendants)
+               group.add_child new HierarchyListArticle(mentity, "Descendants", descendants)
+               section.add_child group
                section.parent = root.children.first
                root.children.first.children.insert(section, 1)
        end
@@ -74,13 +78,13 @@ end
 
 # FIXME diff hack
 class ImportationListSection
-       super DocSection
+       super TabbedGroup
        super MEntityComposite
 end
 
 # FIXME diff hack
 class InheritanceListSection
-       super DocSection
+       super TabbedGroup
        super MEntityComposite
 end
 
index 3ee3379..156a650 100644 (file)
@@ -192,14 +192,7 @@ redef class DocPage
        # Build top menu template if any.
        fun init_topmenu(v: RenderHTMLPhase, doc: DocModel) do
                topmenu = new DocTopMenu
-               var brand = v.ctx.opt_custom_brand.value
-               if brand != null then
-                       var tpl = new Template
-                       tpl.add "<span class='navbar-brand'>"
-                       tpl.add brand
-                       tpl.add "</span>"
-                       topmenu.brand = tpl
-               end
+               topmenu.brand = v.ctx.opt_custom_brand.value
                var title = "Overview"
                if v.ctx.opt_custom_title.value != null then
                        title = v.ctx.opt_custom_title.value.to_s
@@ -543,14 +536,6 @@ redef class DefinitionArticle
                        if mentity isa MModule then
                                html_source_link = v.html_source_link(mentity.location)
                        end
-               else if mentity isa MClass then
-                       var title = new Template
-                       title.add mentity.html_icon
-                       title.add mentity.html_link
-                       html_title = title
-                       html_subtitle = mentity.html_namespace
-                       toc_title = mentity.html_name
-                       is_no_body = true
                else if mentity isa MClassDef then
                        var title = new Template
                        title.add "in "
index 3e71df2..72df73c 100644 (file)
@@ -80,6 +80,7 @@ private class QuickSearchTable
 
        redef fun provide_default_value(key) do
                var v = new QuickSearchResultList
+               assert key isa String
                self[key] = v
                return v
        end
index afd8e55..54f7c18 100644 (file)
@@ -54,28 +54,42 @@ redef class DefinitionArticle
 
        # TODO this should move to MEntity?
        private fun build_mmodule_list(v: IntroRedefListPhase, doc: DocModel, mmodule: MModule) do
+               var section = new IntrosRedefsSection(mentity)
+               var group = new PanelGroup("List")
                var intros = mmodule.intro_mclassdefs(v.ctx.min_visibility).to_a
                doc.mainmodule.linearize_mclassdefs(intros)
-               add_child new IntrosRedefsListArticle(mentity, "Introduces", intros)
+               group.add_child new IntrosRedefsListArticle(mentity, "Introduces", intros)
                var redefs = mmodule.redef_mclassdefs(v.ctx.min_visibility).to_a
                doc.mainmodule.linearize_mclassdefs(redefs)
-               add_child new IntrosRedefsListArticle(mentity, "Redefines", redefs)
+               group.add_child new IntrosRedefsListArticle(mentity, "Redefines", redefs)
+               section.add_child group
+               add_child(section)
        end
 
        # TODO this should move to MEntity?
        private fun build_mclassdef_list(v: IntroRedefListPhase, doc: DocModel, mclassdef: MClassDef) do
+               var section = new IntrosRedefsSection(mentity)
+               var group = new PanelGroup("List")
                var intros = mclassdef.collect_intro_mpropdefs(v.ctx.min_visibility).to_a
                # FIXME avoid diff changes
                # v.ctx.mainmodule.linearize_mpropdefs(intros)
-               add_child new IntrosRedefsListArticle(mentity, "Introduces", intros)
+               group.add_child new IntrosRedefsListArticle(mentity, "Introduces", intros)
                var redefs = mclassdef.collect_redef_mpropdefs(v.ctx.min_visibility).to_a
                # FIXME avoid diff changes
                # v.ctx.mainmodule.linearize_mpropdefs(redefs)
-               add_child new IntrosRedefsListArticle(mentity, "Redefines", redefs)
+               group.add_child new IntrosRedefsListArticle(mentity, "Redefines", redefs)
+               section.add_child group
+               add_child(section)
        end
 
 end
 
+# Section that contains the intros and redefs lists.
+class IntrosRedefsSection
+       super TabbedGroup
+       super MEntitySection
+end
+
 # An article that displays a list of introduced / refined mentities.
 #
 # FIXME diff hack
index 1c6b432..507a0a4 100644 (file)
@@ -16,6 +16,7 @@
 module doc_structure
 
 import doc_concerns
+import modelize
 
 # StructurePhase populates the DocPage content with section and article.
 #
@@ -123,7 +124,7 @@ redef class MModulePage
                                var mclasses = mclasses_for_mmodule(mentity).to_a
                                v.name_sorter.sort(mclasses)
                                for mclass in mclasses do
-                                       var article = new DefinitionArticle(mclass)
+                                       var article = new DefinitionListArticle(mclass)
                                        var mclassdefs = mclassdefs_for(mclass).to_a
                                        if not mclassdefs.has(mclass.intro) then
                                                article.add_child(new DefinitionArticle(mclass.intro))
@@ -177,6 +178,12 @@ redef class MClassPage
                mentity.intro_mmodule.mgroup.mproject.booster_rank = 0
                mentity.intro_mmodule.mgroup.booster_rank = 0
                mentity.intro_mmodule.booster_rank = 0
+               var constructors = new ConstructorsSection(mentity)
+               var minit = mentity.root_init
+               if minit != null then
+                       constructors.add_child new DefinitionArticle(minit)
+               end
+               section.add_child constructors
                section.add_child new ConcernsArticle(mentity, concerns)
                for mentity in concerns do
                        var ssection = new ConcernSection(mentity)
@@ -187,7 +194,12 @@ redef class MClassPage
                                        v.name_sorter.sort(group)
                                        for mprop in group do
                                                for mpropdef in mpropdefs_for(mprop, mentity) do
-                                                       ssection.add_child new DefinitionArticle(mpropdef)
+                                                       if mpropdef isa MMethodDef and mpropdef.mproperty.is_init then
+                                                               if mpropdef == minit then continue
+                                                               constructors.add_child new DefinitionArticle(mpropdef)
+                                                       else
+                                                               ssection.add_child new DefinitionArticle(mpropdef)
+                                                       end
                                                end
                                        end
                                end
@@ -266,6 +278,21 @@ redef class MPropertyPage
        end
 end
 
+# A group of sections that can be displayed together in a tab.
+#
+# Display the first child and hide less relevant data in other panels.
+class TabbedGroup
+       super DocSection
+end
+
+# A group of sections that can be displayed together in a tab panel.
+class PanelGroup
+       super DocSection
+
+       # The title of this group.
+       var group_title: String
+end
+
 # A DocComposite element about a MEntity.
 class MEntityComposite
        super DocComposite
@@ -274,6 +301,11 @@ class MEntityComposite
        var mentity: MEntity
 end
 
+# A list of constructors.
+class ConstructorsSection
+       super MEntitySection
+end
+
 # A Section about a Concern.
 #
 # Those sections are used to build the page summary.
@@ -314,6 +346,12 @@ class ConcernsArticle
        var concerns: ConcernsTree
 end
 
+# An article that displaus a list of definition belonging to a MEntity.
+class DefinitionListArticle
+       super TabbedGroup
+       super MEntityArticle
+end
+
 # An article that display the definition text of a MEntity.
 class DefinitionArticle
        super MEntityArticle
index 221162b..630d28e 100644 (file)
@@ -36,6 +36,120 @@ class DocHTMLLabel
        end
 end
 
+# A component that display tabbed data.
+class DocTabs
+       super BSComponent
+
+       # HTML id of this component.
+       var html_id: String
+
+       # Text displayed on the tabs dropdown button.
+       var drop_text: String
+
+       # Panels to display in this tab group.
+       var panels = new Array[DocTabPanel]
+
+       # Droplist containing links to panels.
+       #
+       # Can also be used to add external links.
+       var drop_list: DocTabsDrop is lazy do return new DocTabsDrop(html_id, drop_text)
+
+       # Adds a new `panel` to that tab.
+       #
+       # You should always use this instead of `panels.add` because it also set the
+       # `drop_list` entry.
+       fun add_panel(panel: DocTabPanel) do
+               drop_list.add_li panel.render_tab
+               panels.add panel
+       end
+
+       redef fun rendering do
+               if panels.is_empty then return
+               panels.first.is_active = true
+               add "<div role=\"tabpanel\">"
+               if drop_list.items.length > 1 then add drop_list
+               add " <div class=\"tab-content\">"
+               for panel in panels do
+                       add panel
+               end
+               add " </div>"
+               add "</div>"
+       end
+end
+
+# A list of tab regrouped in a dropdown
+class DocTabsDrop
+       super UnorderedList
+
+       # HTML id used by the tabs group.
+       var html_id: String
+
+       # Title to display in the tab item.
+       var html_title: String
+
+       redef fun rendering do
+               add """<ul id="{{{html_id}}}-tabs" class="nav pull-right" role="tablist">"""
+               add """ <li role="presentation" class="dropdown pull-right">"""
+               add """  <a href="#" id="{{{html_id}}}-drop" class="dropdown-toggle"
+                         data-toggle="dropdown" aria-controls="{{{html_id}}}-contents"
+                         aria-expanded="false">"""
+        add html_title
+               add """ <span class="glyphicon glyphicon-menu-hamburger"></span>"""
+               add """ </a>"""
+               add """ <ul class="dropdown-menu" role="menu"
+                        aria-labelledby="{{{html_id}}}-drop" id="{{{html_id}}}-contents">"""
+               for item in items do add item
+               add "  </ul>"
+        add " </li>"
+        add "</ul>"
+       end
+end
+
+# A panel that goes in a DocTabs.
+class DocTabPanel
+       super BSComponent
+
+       # HTML id of this panel.
+       var html_id: String
+
+       # Title of this panel as displayed in the tab label.
+       var tab_title: String
+
+       # HTML content of this panel.
+       var html_content: Writable is writable
+
+       # Is this panel visible by default?
+       var is_active = false
+
+       redef fun rendering do
+               var active = ""
+               if is_active then active = "active in"
+               add "<div role=\"tabpanel\" class=\"tab-pane fade {active}\""
+               add "  id=\"{html_id}\" aria-labelledby=\"{html_id}-tab\">"
+               add html_content
+               add "</div>"
+       end
+
+       private fun render_tab: DocTabItem do return new DocTabItem(tab_title, html_id)
+end
+
+# A ListItem that goes in a DocTabsDrop.
+private class DocTabItem
+       super ListItem
+
+       # Panel id to trigger when the link is clicked.
+       var target_id: String
+
+       redef fun rendering do
+               add "<li{render_css_classes}>"
+               add " <a role=\"tab\" data-toggle=\"tab\" aria-expanded=\"false\" tabindex=\"-1\""
+               add "   id=\"{target_id}-tab\" href=\"#{target_id}\" aria-controls=\"{target_id}\">"
+               add text
+               add " </a>"
+               add "</li>"
+       end
+end
+
 # A HTML tag attribute
 #  `<tag attr="value">`
 #
index c112e25..cd6974c 100644 (file)
@@ -462,22 +462,50 @@ redef class MMethodDef
 
        # FIXME annotation should be handled in their own way
        redef fun html_modifiers do
+               if mproperty.is_init then
+                       var res = new Array[String]
+                       if mproperty.visibility != public_visibility then
+                               res.add mproperty.visibility.to_s
+                       end
+                       return res
+               end
                var res = super
                if is_abstract then
                        res.add "abstract"
                else if is_intern then
                        res.add "intern"
                end
+               res.add "fun"
+               return res
+       end
+
+       redef fun html_declaration do
                if mproperty.is_init then
-                       res.add "init"
-               else
-                       res.add "fun"
+                       var tpl = new Template
+                       tpl.add "<span>"
+                       tpl.add html_modifiers.join(" ")
+                       tpl.add " "
+                       tpl.add html_link
+                       tpl.add html_signature
+                       tpl.add "</span>"
+                       return tpl
                end
-               return res
+               return super
+       end
+
+       redef fun html_short_signature do
+               if mproperty.is_root_init and new_msignature != null then
+                       return new_msignature.html_short_signature
+               end
+               return msignature.html_short_signature
        end
 
-       redef fun html_short_signature do return msignature.html_short_signature
-       redef fun html_signature do return msignature.html_signature
+       redef fun html_signature do
+               if mproperty.is_root_init and new_msignature != null then
+                       return new_msignature.html_signature
+               end
+               return msignature.html_signature
+       end
 end
 
 redef class MVirtualTypeProp
index 7ffcdb0..ed680f0 100644 (file)
@@ -316,6 +316,15 @@ redef class DocComposite
                end
                lst.add_li new ListItem(content)
        end
+
+       # ID used in HTML tab labels.
+       #
+       # We sanitize it for Boostrap JS panels that do not like ":" and "." in ids.
+       var html_tab_id: String is lazy do
+               var id = html_id.replace(":", "")
+               id = id.replace(".", "")
+               return "{id}-tab"
+       end
 end
 
 redef class DocSection
@@ -345,6 +354,24 @@ redef class DocArticle
        end
 end
 
+redef class TabbedGroup
+       redef fun render_body do
+               var tabs = new DocTabs("{html_id}.tabs", "")
+               for child in children do
+                       if child.is_hidden then continue
+                       tabs.add_panel new DocTabPanel(child.html_tab_id, child.toc_title, child)
+               end
+               addn tabs
+       end
+end
+
+redef class PanelGroup
+       redef var html_id is lazy do return "group:{group_title.to_lower.to_snake_case}"
+       redef var html_title = null
+       redef var toc_title is lazy do return group_title
+       redef var is_toc_hidden = true
+end
+
 redef class HomeArticle
        redef var html_id = "article:home"
        redef var html_title = "Overview"
@@ -417,6 +444,13 @@ redef class MEntitySection
        redef var html_subtitle is lazy do return mentity.html_declaration
 end
 
+redef class ConstructorsSection
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.constructors"
+       redef var html_title = "Constructors"
+       redef var html_subtitle = null
+       redef fun is_toc_hidden do return is_empty
+end
+
 redef class ConcernSection
        redef var html_id is lazy do return "concern:{mentity.nitdoc_id}"
        redef var html_title is lazy do return "in {mentity.nitdoc_name}"
@@ -442,20 +476,21 @@ redef class IntroArticle
        # Link to source to display if any.
        var html_source_link: nullable Writable is noinit, writable
 
-       redef fun render_title do
+       redef fun render_body do
+               var tabs = new DocTabs("{html_id}.tabs", "")
+               var comment = mentity.html_comment
+               if comment != null then
+                       tabs.add_panel new DocTabPanel("{html_tab_id}-comment", "Comment", comment)
+               end
+               for child in children do
+                       if child.is_hidden then continue
+                       tabs.add_panel new DocTabPanel(child.html_tab_id, child.toc_title, child)
+               end
                var lnk = html_source_link
                if lnk != null then
-                       add "<div class='source-link'>"
-                       add lnk
-                       addn "</div>"
+                       tabs.drop_list.items.add new ListItem(lnk)
                end
-               super
-       end
-
-       redef fun render_body do
-               var comment = mentity.html_comment
-               if comment != null then addn comment
-               super
+               addn tabs
        end
 end
 
@@ -466,6 +501,20 @@ redef class ConcernsArticle
        redef fun render_body do add concerns.html_list
 end
 
+redef class DefinitionListArticle
+       redef var html_id is lazy do return "article:{mentity.nitdoc_id}.definition-list"
+
+       redef var html_title is lazy do
+               var title = new Template
+               title.add mentity.html_icon
+               title.add mentity.html_link
+               return title
+       end
+
+       redef var html_subtitle is lazy do return mentity.html_namespace
+       redef var toc_title is lazy do return mentity.html_name
+end
+
 redef class DefinitionArticle
        redef var html_id is lazy do return "article:{mentity.nitdoc_id}.definition"
        redef var html_title is lazy do return mentity.html_name
@@ -485,17 +534,8 @@ redef class DefinitionArticle
        # Link to source to display if any.
        var html_source_link: nullable Writable is noinit, writable
 
-       redef fun render_title do
-               var lnk = html_source_link
-               if lnk != null then
-                       add "<div class='source-link'>"
-                       add lnk
-                       addn "</div>"
-               end
-               super
-       end
-
        redef fun render_body do
+               var tabs = new DocTabs("{html_id}.tabs", "")
                if not is_no_body then
                        var comment
                        if is_short_comment then
@@ -503,9 +543,19 @@ redef class DefinitionArticle
                        else
                                comment = mentity.html_comment
                        end
-                       if comment != null then addn comment
+                       if comment != null then
+                               tabs.add_panel new DocTabPanel("{html_tab_id}-comment", "Comment", comment)
+                       end
                end
-               super
+               for child in children do
+                       if child.is_hidden then continue
+                       tabs.add_panel new DocTabPanel(child.html_tab_id, child.toc_title, child)
+               end
+               var lnk = html_source_link
+               if lnk != null then
+                       tabs.drop_list.items.add new ListItem(lnk)
+               end
+               addn tabs
        end
 end
 
@@ -513,7 +563,7 @@ redef class HierarchyListArticle
        redef var html_id is lazy do return "article:{list_title}_{mentity.nitdoc_id}.hierarchy"
        redef var html_title is lazy do return list_title
        redef fun is_empty do return mentities.is_empty
-       redef fun is_toc_hidden do return mentities.is_empty
+       redef var is_toc_hidden = true
 
        redef fun render_body do
                var lst = new UnorderedList
@@ -525,8 +575,16 @@ redef class HierarchyListArticle
        end
 end
 
-redef class IntrosRedefsListArticle
+redef class IntrosRedefsSection
        redef var html_id is lazy do return "article:{mentity.nitdoc_id}.intros_redefs"
+       redef var toc_title do return "Intros / Redefs"
+       redef var html_title = null
+       redef var html_subtitle = null
+       redef var is_toc_hidden = true
+end
+
+redef class IntrosRedefsListArticle
+       redef var html_id is lazy do return "article:{list_title}_{mentity.nitdoc_id}.intros_redefs"
        redef var html_title is lazy do return list_title
        redef fun is_hidden do return mentities.is_empty
        redef var is_toc_hidden = true
index 495d4e6..e09a80f 100644 (file)
 module c
 
 import ffi_base
+import light_c
 
-redef class FFILanguageAssignationPhase
-       var c_language: FFILanguage = new CLanguage(self)
-end
-
-class CLanguage
-       super FFILanguage
-
-       redef fun identify_language(n) do return n.is_c
-
-       redef fun compile_module_block(block, ecc, mmodule)
-       do
-               if block.is_c_header then
-                       ecc.header_custom.add block.location.as_line_pragma
-                       ecc.header_custom.add "\n"
-                       ecc.header_custom.add block.code
-               else if block.is_c_body then
-                       ecc.body_impl.add block.location.as_line_pragma
-                       ecc.body_impl.add "\n"
-                       ecc.body_impl.add block.code
-               end
-       end
-
-       redef fun compile_extern_method(block, m, ecc, mmodule)
-       do
-               var fc = new ExternCFunction(m, mmodule)
-               fc.decls.add( block.location.as_line_pragma )
-               fc.exprs.add( block.code )
-               ecc.add_exported_function( fc )
-       end
-
-       redef fun compile_extern_class(block, m, ecc, mmodule) do end
-
-       redef fun get_ftype(block, m) do return new ForeignCType(block.code)
-
+redef class CLanguage
        redef fun compile_callback(callback, mmodule, mainmodule, ecc)
        do
                callback.compile_callback_to_c(mainmodule, ecc)
        end
 end
 
-redef class AExternCodeBlock
-       fun is_c: Bool do return language_name == null or
-               language_name_lowered == "c" or language_name_lowered.has_prefix( "c " )
-
-       fun is_c_body: Bool do return language_name == null or
-               language_name_lowered == "c" or language_name_lowered ==  "c body"
-
-       fun is_c_header: Bool do return language_name_lowered == "c header"
-end
-
-redef class Location
-       fun as_line_pragma: String do return "#line {line_start-1} \"{file.filename}\"\n"
-end
-
-redef class MModule
-       # FIXME make nullable the key of `cflags`, `ldflags` and `cppflags` when
-       # supported by the bootstrap
-
-       # Custom options for the C compiler (CFLAGS)
-       var cflags = new MultiHashMap[String, String]
-
-       # Custom options for the C linker (LDFLAGS)
-       var ldflags = new MultiHashMap[String, String]
-
-       # Additional libraries needed for the compilation
-       # Will be used with pkg-config
-       var pkgconfigs = new Array[String]
-end
-
-class ForeignCType
-       super ForeignType
-
-       redef var ctype: String
-end
-
 redef class NitniCallback
        fun compile_callback_to_c(mmodule: MModule, ffi_ccu: CCompilationUnit) do end
 end
 
-redef class Object
-       # Context when calling user C code from generated code
-       fun to_c_call_context: ToCCallContext do return once new ToCCallContext
-
-       # Context when calling generated code from user C code
-       fun from_c_call_context: FromCCallContext do return once new FromCCallContext
-end
-
 redef class MExplicitCall
        redef fun compile_callback_to_c(mmodule, ffi_ccu)
        do
@@ -116,41 +41,3 @@ redef class MExplicitCall
                ffi_ccu.body_decl.add("#define {friendly_cname} {full_cname}\n")
        end
 end
-
-# Context when calling user C code from generated code
-class ToCCallContext
-       super CallContext
-
-       # TODO: private init because singleton instance (see `to_c_call_context`)
-
-       redef fun name_mtype(mtype)
-       do
-               if mtype isa MClassType and mtype.mclass.kind == extern_kind then return "void *"
-               return mtype.cname
-       end
-end
-
-# Context when calling generated code from user C code
-class FromCCallContext
-       super CallContext
-
-       # TODO: private init because singleton instance (see `from_c_call_context`)
-
-       redef fun name_mtype(mtype) do return mtype.cname
-end
-
-class ExternCFunction
-       super CFunction
-
-       var method: AMethPropdef
-
-       init (method: AMethPropdef, mmodule: MModule)
-       do
-               self.method = method
-
-               var recv_mtype = method.mpropdef.mclassdef.bound_mtype
-               var csignature = method.mpropdef.mproperty.build_csignature(recv_mtype, mmodule, "___impl", long_signature, from_c_call_context)
-
-               super( csignature )
-       end
-end
index 6b53008..c0e826b 100644 (file)
@@ -17,7 +17,8 @@
 # Manages all extern classes and their associated foreign type.
 module extern_classes
 
-import ffi_base
+import light_ffi_base
+import modelize
 
 redef class ToolContext
        var extern_classes_typing_phase_ast: Phase = new ExternClassesTypingPhaseAst(self, [ffi_language_assignation_phase, modelize_class_phase])
index 93acf66..e58d32a 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# FFI concers common between the compilers and the interpreter.
-# Offers services to compile modules using foreign code. Mainly allows
-# to wrap foreign code in Nit methods.
+# Full FFI support, independent of the compiler
+#
+# The full FFI support all the features of the light FFI and more:
+#
+# * More foreign languages: **C++, Java and Objective-C**.
+# * **Callbacks** to Nit from foreign codes.
+#   The callbacks are declared in Nit using the `import` annotation on extern methods.
+#   They are then generated on demand for the target foreign language.
+# * **Static Nit types** in C for precise typing and static typing errors in C.
+# * **Propagating public code blocks** at the module level (C Header).
+#   This allows to use extern classes in foreign code in other modules
+#   without having to import the related headers.
+#   This is optional in C as it is easy to find the correct importation.
+#   However it is important in Java and other complex FFIs.
+# * **Reference pinning** of Nit objects from foreign code.
+#   This ensure that objects referenced from foreign code are not liberated by the GC.
+# * FFI **annotations**:
+#   * `cflags`, `ldflags` and `cppflags` pass arguments to the C and C++
+# compilers and linker.
+#   * `pkgconfig` calls the `pkg-config` program to get the arguments
+# to pass to the C copiler and linker.
+#   * `extra_java_files` adds Java source file to the compilation chain.
 module ffi
 
 import modelbuilder
@@ -33,19 +52,11 @@ import cpp
 import java
 import extra_java_files
 import objc
+intrude import light_ffi
 
 redef class MModule
-       # Does this module uses the FFI?
-       var uses_ffi: Bool = false
-
-       # C compilation unit for the FFI files
-       private var ffi_ccu: nullable CCompilationUnit = null
-
-       # Foreign language used in this AModule
-       private var present_languages = new HashSet[FFILanguage]
-
        # Complete the compilation of the FFI code
-       fun finalize_ffi_wrapper(compdir: String, mainmodule: MModule)
+       redef fun finalize_ffi_wrapper(compdir, mainmodule)
        do
                for language in ffi_callbacks.keys do
                        for callback in ffi_callbacks[language] do
@@ -60,82 +71,10 @@ redef class MModule
                        if mod.uses_ffi then ffi_ccu.header_custom.add("#include \"{mod.c_name}._ffi.h\"\n")
                end
 
-               var cflags = self.cflags[""].join(" ")
-
-               ffi_ccu.write_as_impl(self, compdir)
-               for filename in ffi_ccu.files do
-                       var f = new ExternCFile(filename, cflags)
-                       f.pkgconfigs.add_all pkgconfigs
-                       ffi_files.add(f)
-               end
-       end
-
-       # Avoid the compile a ffi propdef more than once
-       # See `AMethPropdef::compile_ffi_method`
-       # FIXME find a better way
-       private var compiled_ffi_methods = new HashSet[AMethPropdef]
-end
-
-redef class AModule
-
-       # Ensures all of the general foreign code of the module has been analyzed.
-       # Manages header blocks, extern class types and foreign dependancies between modules
-       fun ensure_compile_ffi_wrapper
-       do
-               var mmodule = mmodule
-               if mmodule == null or mmodule.ffi_ccu != null then return
-
-               # ready extern code compiler
-               var ffi_ccu = new CCompilationUnit
-               mmodule.ffi_ccu = ffi_ccu
-
-               # generate code
-               for block in n_extern_code_blocks do
-                       var language = block.language
-                       assert language != null
-                       mmodule.present_languages.add(language)
-                       language.compile_module_block(block, ffi_ccu, mmodule)
-               end
-
-               ffi_ccu.header_c_base.add( "#include \"{mmodule.c_name}._nitni.h\"\n" )
-
-               ffi_ccu.body_decl.add("#ifdef ANDROID\n")
-               ffi_ccu.body_decl.add(" #include <android/log.h>\n")
-               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) (void)__android_log_print(ANDROID_LOG_WARN, \"Nit\", __VA_ARGS__)\n")
-               ffi_ccu.body_decl.add("#else\n")
-               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) fprintf(stderr, __VA_ARGS__)\n")
-               ffi_ccu.body_decl.add("#endif\n")
-
-               for nclassdef in n_classdefs do
-                       # Does it declares an extern type?
-                       if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
-                               mmodule.uses_ffi = true
-                               var language = nclassdef.n_extern_code_block.language
-                               assert language != null
-                               mmodule.present_languages.add(language)
-                               nclassdef.n_extern_code_block.language.compile_extern_class(
-                                       nclassdef.n_extern_code_block.as(not null), nclassdef, ffi_ccu, mmodule)
-                       end
-               end
+               super
        end
 end
 
-redef class AMethPropdef
-       # Compile the necessary wrapper around this extern method or constructor
-       fun compile_ffi_method(mmodule: MModule)
-       do
-               assert n_extern_code_block != null
-
-               if mmodule.compiled_ffi_methods.has(self) then return
-               mmodule.compiled_ffi_methods.add self
-
-               var language = n_extern_code_block.language
-               assert language != null
-               mmodule.present_languages.add(language)
-               n_extern_code_block.language.compile_extern_method(
-                       n_extern_code_block.as(not null), self, mmodule.ffi_ccu.as(not null), mmodule)
-       end
-end
 
 redef class VerifyNitniCallbacksPhase
        redef fun process_npropdef(npropdef)
index b8a8103..77a982d 100644 (file)
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Tools and utilities for language targetted FFI implementations
+# Tools and utilities for implement FFI with different languages
 module ffi_base
 
 import c_tools
@@ -22,184 +22,17 @@ import parser
 import modelbuilder
 import nitni
 
-redef class ToolContext
-       var ffi_language_assignation_phase: Phase = new FFILanguageAssignationPhase(self, null)
-end
-
-class FFILanguageAssignationPhase
-       super Phase
-
-       # All supported languages
-       var languages = new Array[FFILanguage]
-
-       redef fun process_nmodule(nmodule)
-       do
-               for block in nmodule.n_extern_code_blocks do
-                       verify_foreign_code_on_node( block )
-               end
-       end
-
-       redef fun process_npropdef(npropdef)
-       do
-               if npropdef isa AMethPropdef then
-                       var code_block = npropdef.n_extern_code_block
-                       if code_block != null then
-                               verify_foreign_code_on_node( code_block )
-                       end
-               end
-       end
-
-       redef fun process_nclassdef(nclassdef)
-       do
-               if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
-                       verify_foreign_code_on_node( nclassdef.n_extern_code_block.as(not null) )
-               end
-       end
-
-       private fun verify_foreign_code_on_node(n: AExternCodeBlock)
-       do
-               var found = false
-               for v in languages do
-                       var identified = v.identify_language(n)
-                       if identified then
-                               if found and identified then
-                                       toolcontext.error(n.location, "FFI Error: two languages identified as possible handlers.")
-                               end
-                               n.language = v
-                               found = true
-                       end
-               end
-
-               if not found then toolcontext.error(n.location, "FFI Error: unsupported language.")
-       end
-end
+import light_ffi_base
 
 redef class MModule
-       var ffi_files = new Array[ExternFile]
-
        # Callbacks used by this module, classified by language
        var ffi_callbacks = new HashMap[FFILanguage, Set[NitniCallback]]
 end
 
-redef class AExternCodeBlock
-       fun language_name: nullable String do
-               if n_in_language == null then return null
-               return n_in_language.n_string.without_quotes
-       end
-       fun language_name_lowered: nullable String do
-               if language_name == null then return null
-               return language_name.to_lower
-       end
-
-       fun code: String do return n_extern_code_segment.without_guard
-
-       var language: nullable FFILanguage = null
-end
-
 # Visitor for a specific languages. Works kinda like a `Phase` and is executed
 # by a `Phase`.
-class FFILanguage
-       var ffi_language_assignation_phase: FFILanguageAssignationPhase
-
-       init
-       do
-               ffi_language_assignation_phase.languages.add(self)
-       end
-
-       # Is this `block` written in this language?
-       fun identify_language(block: AExternCodeBlock ): Bool is abstract
-
-       # Generate wrapper code for this module/header code block
-       fun compile_module_block(block: AExternCodeBlock, ecc: CCompilationUnit, mmodule: MModule) is abstract
-
-       # Generate wrapper code for this extern method
-       fun compile_extern_method(block: AExternCodeBlock, m: AMethPropdef,
-               ecc: CCompilationUnit, nmodule: MModule) is abstract
-
-       # Generate wrapper code for this extern class
-       fun compile_extern_class(block: AExternCodeBlock, m: AClassdef,
-               ecc: CCompilationUnit, mmodule: MModule) is abstract
-
-       # Get the foreign type of this extern class definition
-       fun get_ftype(block: AExternCodeBlock, m: AClassdef): ForeignType is abstract
-
+redef class FFILanguage
        # Generate the code to offer this callback if foreign code
        fun compile_callback(callback: NitniCallback, mmodule: MModule,
                mainmmodule: MModule, ecc: CCompilationUnit) is abstract
-
-       # Complete compilation of generated code
-       fun compile_to_files(mmodule: MModule, directory: String) do end
-end
-
-redef class TString
-       # Returns the content of this node without both of the surrounding "
-       fun without_quotes: String
-       do
-               assert text.length >= 2
-               return text.substring(1, text.length-2)
-       end
-end
-
-redef class TExternCodeSegment
-       # Returns the content of this node without the surrounding `{ and `}
-       fun without_guard: String
-       do
-               assert text.length >= 4
-               return text.substring(2, text.length-4)
-       end
-end
-
-redef class CCompilationUnit
-       fun write_as_impl(mmodule: MModule, compdir: String)
-       do
-               var base_name = "{mmodule.c_name}._ffi"
-
-               var h_file = "{base_name}.h"
-               var guard = "{mmodule.c_name.to_upper}_NIT_H"
-               write_header_to_file(mmodule, "{compdir}/{h_file}", new Array[String], guard)
-
-               var c_file = "{base_name}.c"
-               write_body_to_file(mmodule, "{compdir}/{c_file}", ["<stdlib.h>", "<stdio.h>", "\"{h_file}\""])
-
-               files.add( "{compdir}/{c_file}" )
-       end
-
-       fun write_header_to_file(mmodule: MModule, file: String, includes: Array[String], guard: String)
-       do
-               var stream = new FileWriter.open( file )
-
-               # header comments
-               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
-
-               stream.write( module_info )
-
-               stream.write( "#ifndef {guard}\n" )
-               stream.write( "#define {guard}\n\n" )
-
-               for incl in includes do stream.write( "#include {incl}\n" )
-
-               compile_header_core( stream )
-
-               # header file guard close
-               stream.write( "#endif\n" )
-               stream.close
-       end
-
-       fun write_body_to_file(mmodule: MModule, file: String, includes: Array[String])
-       do
-               var stream = new FileWriter.open(file)
-
-               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
-
-               stream.write( module_info )
-               for incl in includes do stream.write( "#include {incl}\n" )
-
-               compile_body_core( stream )
-
-               stream.close
-       end
-end
-
-class ForeignType
-       fun ctype: String do return "void*"
 end
index 830e68c..ae37d9d 100644 (file)
@@ -424,7 +424,7 @@ redef class MExplicitCall
                var csignature = mproperty.build_c_implementation_signature(recv_mtype, mmodule, "___indirect", long_signature, from_java_call_context)
                var cf = new CFunction("JNIEXPORT {csignature}")
                cf.exprs.add "\t{mproperty.build_ccall(recv_mtype, mainmodule, null, long_signature, from_java_call_context, null)}\n"
-               ccu.add_local_function cf
+               ccu.add_non_static_local_function cf
 
                # In Java, declare the extern method as a private static local method
                var java_signature = mproperty.build_csignature(recv_mtype, mainmodule, null, short_signature, java_call_context)
@@ -651,3 +651,17 @@ end
 private fun java_call_context: JavaCallContext do return new JavaCallContext
 private fun to_java_call_context: ToJavaCallContext do return new ToJavaCallContext
 private fun from_java_call_context: FromJavaCallContext do return new FromJavaCallContext
+
+redef class CCompilationUnit
+       # Similar to `add_local_function` but not `static`
+       #
+       # Used when the signature contains a visibility attribute.
+       private fun add_non_static_local_function(c_function: CFunction)
+       do
+               body_decl.add c_function.signature
+               body_decl.add ";\n"
+
+               body_impl.add "\n"
+               body_impl.add c_function.to_writer
+       end
+end
diff --git a/src/ffi/light_c.nit b/src/ffi/light_c.nit
new file mode 100644 (file)
index 0000000..86ec651
--- /dev/null
@@ -0,0 +1,138 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2012-2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Support for nesting C code within a Nit program using its FFI
+module light_c
+
+import modelize::modelize_property
+
+import light_ffi_base
+
+redef class FFILanguageAssignationPhase
+       var c_language: FFILanguage = new CLanguage(self)
+end
+
+class CLanguage
+       super FFILanguage
+
+       redef fun identify_language(n) do return n.is_c
+
+       redef fun compile_module_block(block, ecc, mmodule)
+       do
+               if block.is_c_header then
+                       ecc.header_custom.add block.location.as_line_pragma
+                       ecc.header_custom.add "\n"
+                       ecc.header_custom.add block.code
+               else if block.is_c_body then
+                       ecc.body_impl.add block.location.as_line_pragma
+                       ecc.body_impl.add "\n"
+                       ecc.body_impl.add block.code
+               end
+       end
+
+       redef fun compile_extern_method(block, m, ecc, mmodule)
+       do
+               var fc = new ExternCFunction(m, mmodule)
+               fc.decls.add( block.location.as_line_pragma )
+               fc.exprs.add( block.code )
+               ecc.add_exported_function( fc )
+       end
+
+       redef fun compile_extern_class(block, m, ecc, mmodule) do end
+
+       redef fun get_ftype(block, m) do return new ForeignCType(block.code)
+end
+
+redef class AExternCodeBlock
+       fun is_c: Bool do return language_name == null or
+               language_name_lowered == "c" or language_name_lowered.has_prefix( "c " )
+
+       fun is_c_body: Bool do return language_name == null or
+               language_name_lowered == "c" or language_name_lowered ==  "c body"
+
+       fun is_c_header: Bool do return language_name_lowered == "c header"
+end
+
+redef class Location
+       fun as_line_pragma: String do return "#line {line_start-1} \"{file.filename}\"\n"
+end
+
+redef class MModule
+       # FIXME make nullable the key of `cflags`, `ldflags` and `cppflags` when
+       # supported by the bootstrap
+
+       # Custom options for the C compiler (CFLAGS)
+       var cflags = new MultiHashMap[String, String]
+
+       # Custom options for the C linker (LDFLAGS)
+       var ldflags = new MultiHashMap[String, String]
+
+       # Additional libraries needed for the compilation
+       # Will be used with pkg-config
+       var pkgconfigs = new Array[String]
+end
+
+class ForeignCType
+       super ForeignType
+
+       redef var ctype: String
+end
+
+redef class Object
+       # Context when calling user C code from generated code
+       fun to_c_call_context: ToCCallContext do return once new ToCCallContext
+
+       # Context when calling generated code from user C code
+       fun from_c_call_context: FromCCallContext do return once new FromCCallContext
+end
+
+# Context when calling user C code from generated code
+class ToCCallContext
+       super CallContext
+
+       # TODO: private init because singleton instance (see `to_c_call_context`)
+
+       redef fun name_mtype(mtype)
+       do
+               if mtype isa MClassType and mtype.mclass.kind == extern_kind then return "void *"
+               return mtype.cname
+       end
+end
+
+# Context when calling generated code from user C code
+class FromCCallContext
+       super CallContext
+
+       # TODO: private init because singleton instance (see `from_c_call_context`)
+
+       redef fun name_mtype(mtype) do return mtype.cname
+end
+
+class ExternCFunction
+       super CFunction
+
+       var method: AMethPropdef
+
+       init (method: AMethPropdef, mmodule: MModule)
+       do
+               self.method = method
+
+               var recv_mtype = method.mpropdef.mclassdef.bound_mtype
+               var csignature = method.mpropdef.mproperty.build_csignature(recv_mtype, mmodule, "___impl", long_signature, from_c_call_context)
+
+               super( csignature )
+       end
+end
diff --git a/src/ffi/light_ffi.nit b/src/ffi/light_ffi.nit
new file mode 100644 (file)
index 0000000..2245a92
--- /dev/null
@@ -0,0 +1,131 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2013 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Light FFI support, independent of the compiler
+#
+# The light FFI offers only basic FFI features:
+#
+# * **Extern methods** implemented in C, nested within the Nit code.
+#   The body of these method is copied directly to the generated C files for compilation.
+#   Also supports extern `new` factories.
+# * Module level **C code blocks**, both "C Body" (the default) and "C Header".
+#   They will be copied to the beginning of the generated C files.
+# * Automatic transformation of Nit **primitive types** from/to their equivalent in C.
+# * **Extern classes** to create a Nit class around a C pointer.
+#   Allows to specify the equivalent C type of the Nit extern class.
+#
+# These limited features should be easy to implement in new/alternative engines
+# to quickly achieve a bootstrap. For this reason, core features of the Nit
+# standard library should be limited to use the light FFI.
+module light_ffi
+
+import modelbuilder
+
+import nitni::nitni_utilities
+
+intrude import light_ffi_base
+import extern_classes
+import light_c
+
+redef class MModule
+       # Does this module uses the FFI?
+       var uses_ffi: Bool = false
+
+       # C compilation unit for the FFI files
+       private var ffi_ccu: nullable CCompilationUnit = null
+
+       # Foreign language used in this AModule
+       private var present_languages = new HashSet[FFILanguage]
+
+       # Complete the compilation of the FFI code
+       fun finalize_ffi_wrapper(compdir: String, mainmodule: MModule)
+       do
+               var cflags = self.cflags[""].join(" ")
+
+               ffi_ccu.write_as_impl(self, compdir)
+               for filename in ffi_ccu.files do
+                       var f = new ExternCFile(filename, cflags)
+                       f.pkgconfigs.add_all pkgconfigs
+                       ffi_files.add(f)
+               end
+       end
+
+       # Avoid the compile a ffi propdef more than once
+       # See `AMethPropdef::compile_ffi_method`
+       # FIXME find a better way
+       private var compiled_ffi_methods = new HashSet[AMethPropdef]
+end
+
+redef class AModule
+
+       # Ensures all of the general foreign code of the module has been analyzed.
+       # Manages header blocks, extern class types and foreign dependancies between modules
+       fun ensure_compile_ffi_wrapper
+       do
+               var mmodule = mmodule
+               if mmodule == null or mmodule.ffi_ccu != null then return
+
+               # ready extern code compiler
+               var ffi_ccu = new CCompilationUnit
+               mmodule.ffi_ccu = ffi_ccu
+
+               # generate code
+               for block in n_extern_code_blocks do
+                       var language = block.language
+                       assert language != null
+                       mmodule.present_languages.add(language)
+                       language.compile_module_block(block, ffi_ccu, mmodule)
+               end
+
+               ffi_ccu.header_c_base.add( "#include \"{mmodule.c_name}._nitni.h\"\n" )
+
+               ffi_ccu.body_decl.add("#ifdef ANDROID\n")
+               ffi_ccu.body_decl.add(" #include <android/log.h>\n")
+               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) (void)__android_log_print(ANDROID_LOG_WARN, \"Nit\", __VA_ARGS__)\n")
+               ffi_ccu.body_decl.add("#else\n")
+               ffi_ccu.body_decl.add(" #define PRINT_ERROR(...) fprintf(stderr, __VA_ARGS__)\n")
+               ffi_ccu.body_decl.add("#endif\n")
+
+               for nclassdef in n_classdefs do
+                       # Does it declares an extern type?
+                       if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
+                               mmodule.uses_ffi = true
+                               var language = nclassdef.n_extern_code_block.language
+                               assert language != null
+                               mmodule.present_languages.add(language)
+                               nclassdef.n_extern_code_block.language.compile_extern_class(
+                                       nclassdef.n_extern_code_block.as(not null), nclassdef, ffi_ccu, mmodule)
+                       end
+               end
+       end
+end
+
+redef class AMethPropdef
+       # Compile the necessary wrapper around this extern method or constructor
+       fun compile_ffi_method(mmodule: MModule)
+       do
+               assert n_extern_code_block != null
+
+               if mmodule.compiled_ffi_methods.has(self) then return
+               mmodule.compiled_ffi_methods.add self
+
+               var language = n_extern_code_block.language
+               assert language != null
+               mmodule.present_languages.add(language)
+               n_extern_code_block.language.compile_extern_method(
+                       n_extern_code_block.as(not null), self, mmodule.ffi_ccu.as(not null), mmodule)
+       end
+end
diff --git a/src/ffi/light_ffi_base.nit b/src/ffi/light_ffi_base.nit
new file mode 100644 (file)
index 0000000..6791e5c
--- /dev/null
@@ -0,0 +1,214 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2012 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Tools and utilities for implement FFI with different languages
+module light_ffi_base
+
+import c_tools
+import parser
+import modelbuilder
+import nitni::nitni_utilities
+
+redef class ToolContext
+       # Phase that assign a `FFILanguage` to all `AExternCodeBlock`
+       var ffi_language_assignation_phase: Phase = new FFILanguageAssignationPhase(self, null)
+end
+
+# Phase that assign a `FFILanguage` to all `AExternCodeBlock`
+#
+# It will also report errors when using an unknown foreign langages.
+class FFILanguageAssignationPhase
+       super Phase
+
+       # All supported languages
+       var languages = new Array[FFILanguage]
+
+       redef fun process_nmodule(nmodule)
+       do
+               for block in nmodule.n_extern_code_blocks do
+                       verify_foreign_code_on_node( block )
+               end
+       end
+
+       redef fun process_npropdef(npropdef)
+       do
+               if npropdef isa AMethPropdef then
+                       var code_block = npropdef.n_extern_code_block
+                       if code_block != null then
+                               verify_foreign_code_on_node( code_block )
+                       end
+               end
+       end
+
+       redef fun process_nclassdef(nclassdef)
+       do
+               if nclassdef isa AStdClassdef and nclassdef.n_extern_code_block != null then
+                       verify_foreign_code_on_node( nclassdef.n_extern_code_block.as(not null) )
+               end
+       end
+
+       private fun verify_foreign_code_on_node(n: AExternCodeBlock)
+       do
+               var found = false
+               for v in languages do
+                       var identified = v.identify_language(n)
+                       if identified then
+                               if found and identified then
+                                       toolcontext.error(n.location, "FFI Error: two languages identified as possible handlers.")
+                               end
+                               n.language = v
+                               found = true
+                       end
+               end
+
+               if not found then toolcontext.error(n.location, "FFI Error: unsupported language.")
+       end
+end
+
+redef class MModule
+       # All FFI files linked to this module
+       var ffi_files = new Array[ExternFile]
+end
+
+redef class AExternCodeBlock
+       # User entered name for the language of this block
+       fun language_name: nullable String do
+               if n_in_language == null then return null
+               return n_in_language.n_string.without_quotes
+       end
+
+       # `language_name`, in lower case
+       protected fun language_name_lowered: nullable String do
+               if language_name == null then return null
+               return language_name.to_lower
+       end
+
+       # User entered foreign code in the block
+       fun code: String do return n_extern_code_segment.without_guard
+
+       # `FFILanguage` assigned to this block
+       var language: nullable FFILanguage = null
+end
+
+# Visitor for a specific languages. Works kinda like a `Phase` and is executed
+# by a `Phase`.
+class FFILanguage
+       # `FFILanguageAssignationPhase` assigning `self` to `AExternCodeBlock`s
+       var ffi_language_assignation_phase: FFILanguageAssignationPhase
+
+       init
+       do
+               ffi_language_assignation_phase.languages.add(self)
+       end
+
+       # Is this `block` written in this language?
+       fun identify_language(block: AExternCodeBlock ): Bool is abstract
+
+       # Generate wrapper code for this module/header code block
+       fun compile_module_block(block: AExternCodeBlock, ecc: CCompilationUnit, mmodule: MModule) is abstract
+
+       # Generate wrapper code for this extern method
+       fun compile_extern_method(block: AExternCodeBlock, m: AMethPropdef,
+               ecc: CCompilationUnit, nmodule: MModule) is abstract
+
+       # Generate wrapper code for this extern class
+       fun compile_extern_class(block: AExternCodeBlock, m: AClassdef,
+               ecc: CCompilationUnit, mmodule: MModule) is abstract
+
+       # Get the foreign type of this extern class definition
+       fun get_ftype(block: AExternCodeBlock, m: AClassdef): ForeignType is abstract
+
+       # Complete compilation of generated code
+       fun compile_to_files(mmodule: MModule, directory: String) do end
+end
+
+redef class TString
+       # Returns the content of this node without both of the surrounding "
+       fun without_quotes: String
+       do
+               assert text.length >= 2
+               return text.substring(1, text.length-2)
+       end
+end
+
+redef class TExternCodeSegment
+       # Returns the content of this node without the surrounding `{ and `}
+       fun without_guard: String
+       do
+               assert text.length >= 4
+               return text.substring(2, text.length-4)
+       end
+end
+
+redef class CCompilationUnit
+       # Compile as `_ffi` files which contains the implementation of extern methods
+       fun write_as_impl(mmodule: MModule, compdir: String)
+       do
+               var base_name = "{mmodule.c_name}._ffi"
+
+               var h_file = "{base_name}.h"
+               var guard = "{mmodule.c_name.to_upper}_NIT_H"
+               write_header_to_file(mmodule, "{compdir}/{h_file}", new Array[String], guard)
+
+               var c_file = "{base_name}.c"
+               write_body_to_file(mmodule, "{compdir}/{c_file}", ["<stdlib.h>", "<stdio.h>", "\"{h_file}\""])
+
+               files.add( "{compdir}/{c_file}" )
+       end
+
+       # Write the header part to `file` including all `includes` using the `guard`
+       fun write_header_to_file(mmodule: MModule, file: String, includes: Array[String], guard: String)
+       do
+               var stream = new FileWriter.open( file )
+
+               # header comments
+               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
+
+               stream.write( module_info )
+
+               stream.write( "#ifndef {guard}\n" )
+               stream.write( "#define {guard}\n\n" )
+
+               for incl in includes do stream.write( "#include {incl}\n" )
+
+               compile_header_core( stream )
+
+               # header file guard close
+               stream.write( "#endif\n" )
+               stream.close
+       end
+
+       # Write the body part to `file` including all `includes`
+       fun write_body_to_file(mmodule: MModule, file: String, includes: Array[String])
+       do
+               var stream = new FileWriter.open(file)
+
+               var module_info = "/*\n\tExtern implementation of Nit module {mmodule.name}\n*/\n"
+
+               stream.write( module_info )
+               for incl in includes do stream.write( "#include {incl}\n" )
+
+               compile_body_core( stream )
+
+               stream.close
+       end
+end
+
+# Foreign equivalent types of extern classes
+class ForeignType
+       # C type of `self`, by default it is `void*`
+       fun ctype: String do return "void*"
+end
index f068dc1..60bcdf9 100644 (file)
@@ -108,6 +108,19 @@ private class StringFinder
                if e isa AAnnotation then return
                super
        end
+
+       # Adds a String to the list of strings of the module
+       #
+       # The string needs to be pre-formatted to C standards (escape_to_c)
+       fun add_string(s: String, loc: Location) do
+               var locstr = "{amodule.mmodule.mgroup.name}::{amodule.mmodule.name} {loc.line_start}--{loc.column_start}:{loc.column_end}"
+               if not strings.has_key(s) then
+                       var po = new PObject([locstr], s, "")
+                       strings[s] = po
+               else
+                       strings[s].locations.push locstr
+               end
+       end
 end
 
 redef class ANode
@@ -119,15 +132,35 @@ redef class AStringExpr
        redef fun accept_string_finder(v) do
                var str = value.as(not null).escape_to_c
                var parse = v.toolcontext.parse_expr("\"{str}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").unescape_nit")
-               var loc = location
-               var locstr = "{v.amodule.mmodule.mgroup.name}::{v.amodule.mmodule.name} {loc.line_start}--{loc.column_start}:{loc.column_end}"
-               if not v.strings.has_key(str) then
-                       var po = new PObject([locstr], str, "")
-                       v.strings[str] = po
-               else
-                       v.strings[str].locations.push locstr
-               end
                replace_with(parse)
+               v.add_string(str, location)
+       end
+end
+
+redef class ASuperstringExpr
+
+       redef fun accept_string_finder(v) do
+               var fmt = ""
+               var exprs = new Array[AExpr]
+               for i in n_exprs do
+                       if i isa AStringFormExpr then
+                               fmt += i.value.as(not null)
+                       else
+                               fmt += "%"
+                               exprs.push i
+                               fmt += exprs.length.to_s
+                       end
+               end
+               fmt = fmt.escape_to_c
+               v.add_string(fmt, location)
+               var parse = v.toolcontext.parse_expr("\"{fmt}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").unescape_nit.format()")
+               if not parse isa ACallExpr then
+                       v.toolcontext.error(location, "Fatal error in i18n annotation, the parsed superstring could not be generated properly")
+                       return
+               end
+               var parse_exprs = parse.n_args.n_exprs
+               parse_exprs.add_all exprs
+               replace_with parse
        end
 end
 
index 976d532..90924f2 100644 (file)
@@ -99,14 +99,12 @@ private class SerializationPhasePreModel
        # Add a constructor to the automated nclassdef
        fun generate_deserialization_init(nclassdef: AStdClassdef)
        do
-               # Do not generate constructors for abstract classes
-               if nclassdef.n_classkind isa AAbstractClasskind then return
-
                var npropdefs = nclassdef.n_propdefs
 
                var code = new Array[String]
-               code.add "init from_deserializer(v: Deserializer)"
+               code.add "redef init from_deserializer(v: Deserializer)"
                code.add "do"
+               code.add "      super"
                code.add "      v.notify_of_creation self"
 
                for attribute in npropdefs do if attribute isa AAttrPropdef then
@@ -122,7 +120,7 @@ private class SerializationPhasePreModel
 
                        code.add ""
                        code.add "\tvar {name} = v.deserialize_attribute(\"{name}\")"
-                       code.add "\tassert {name} isa {type_name} else print \"Unsupported type for attribute '{name}', got '\{{name}.class_name\}' (ex {type_name})\""
+                       code.add "\tassert {name} isa {type_name} else print \"Unsupported type for `\{class_name\}::{name}`, got '\{{name}.class_name\}'; expected {type_name}\""
                        code.add "\tself.{name} = {name}"
                end
 
index cc12d01..885d794 100644 (file)
@@ -40,6 +40,12 @@ redef class AModule
        do
                var v = new SimpleMiscVisitor(toolcontext)
                v.enter_visit(self)
+
+               var t = location.file.first_token
+               while t != null do
+                       t.accept_simple_misc_token(v)
+                       t = t.next_token
+               end
        end
 end
 
@@ -73,6 +79,12 @@ redef class ANode
        private fun after_simple_misc(v: SimpleMiscVisitor) do end
 end
 
+redef class Token
+       private fun accept_simple_misc_token(v: SimpleMiscVisitor)
+       do
+       end
+end
+
 redef class ASignature
        redef fun after_simple_misc(v)
        do
@@ -168,3 +180,25 @@ redef class AOnceExpr
                v.once_count = v.once_count - 1
        end
 end
+
+redef class TSemi
+       redef fun accept_simple_misc_token(v)
+       do
+               var n = next_token
+               var p = prev_token
+               if
+                       n == null or
+                       n isa TEol or
+                       n isa EOF or
+                       n isa TComment or
+                       p == null or
+                       p isa TEol or
+                       p isa EOF or
+                       p isa TComment or
+                       p isa TSemi
+               then
+                       v.warning(self, "semi", "Warning: superfluous `;`.")
+                       return
+               end
+       end
+end
index b65511d..1a27697 100644 (file)
@@ -74,6 +74,67 @@ class Location
        # End of this location on `line_end`
        var column_end: Int
 
+       # Builds a location instance from its string representation.
+       #
+       # Examples:
+       #
+       # ~~~
+       # var loc = new Location.from_string("location.nit:82,2--105,8")
+       # assert loc.to_s == "location.nit:82,2--105,8"
+       #
+       # loc = new Location.from_string("location.nit")
+       # assert loc.to_s == "location.nit"
+       #
+       # loc = new Location.from_string("location.nit:82,2")
+       # assert loc.to_s == "location.nit:82,2--0,0"
+       #
+       # loc = new Location.from_string("location.nit:82--105")
+       # assert loc.to_s == "location.nit:82,0--105,0"
+       #
+       # loc = new Location.from_string("location.nit:82,2--105")
+       # assert loc.to_s == "location.nit:82,2--105,0"
+       #
+       # loc = new Location.from_string("location.nit:82--105,8")
+       # assert loc.to_s == "location.nit:82,0--105,8"
+       # ~~~
+       init from_string(string: String) do
+               self.line_start = 0
+               self.line_end = 0
+               self.column_start = 0
+               self.column_end = 0
+               # parses the location string and init position vars
+               var parts = string.split_with(":")
+               var filename = parts.shift
+               self.file = new SourceFile(filename, new FileReader.open(filename))
+               # split position
+               if parts.is_empty then return
+               var pos = parts.first.split_with("--")
+               # split start position
+               if pos.first.has(",") then
+                       var pos1 = pos.first.split_with(",")
+                       self.line_start = pos1[0].to_i
+                       if pos1.length > 1 then
+                               self.column_start = pos1[1].to_i
+                       end
+               else
+                       self.line_start = pos.first.to_i
+               end
+               # split end position
+               if pos.length <= 1 then return
+               if pos[1].has(",") then
+                       var pos2 = pos[1].split_with(",")
+                       if pos2.length > 1 then
+                               self.line_end = pos2[0].to_i
+                               self.column_end = pos2[1].to_i
+                       else
+                               self.line_end = self.line_start
+                               self.column_end = pos2[0].to_i
+                       end
+               else
+                       self.line_end = pos[1].to_i
+               end
+       end
+
        # The index in the start character in the source
        fun pstart: Int do return file.line_starts[line_start-1] + column_start-1
 
index 092acad..66d5e9f 100644 (file)
@@ -182,7 +182,7 @@ redef class ModelBuilder
                var initializers = new Array[MProperty]
                for npropdef in nclassdef.n_propdefs do
                        if npropdef isa AMethPropdef then
-                               if npropdef.mpropdef == null then return # Skip broken attribute
+                               if npropdef.mpropdef == null then return # Skip broken method
                                var at = npropdef.get_single_annotation("autoinit", self)
                                if at == null then continue # Skip non tagged init
 
@@ -203,25 +203,26 @@ redef class ModelBuilder
                                npropdef.mpropdef.mproperty.is_autoinit = true
                        end
                        if npropdef isa AAttrPropdef then
-                               if npropdef.mpropdef == null then return # Skip broken attribute
+                               var mreadpropdef = npropdef.mreadpropdef
+                               if mreadpropdef == null or mreadpropdef.msignature == null then return # Skip broken attribute
                                if npropdef.noinit then continue # Skip noinit attribute
                                var atautoinit = npropdef.get_single_annotation("autoinit", self)
                                if atautoinit != null then
                                        # For autoinit attributes, call the reader to force
                                        # the lazy initialization of the attribute.
-                                       initializers.add(npropdef.mreadpropdef.mproperty)
-                                       npropdef.mreadpropdef.mproperty.is_autoinit = true
+                                       initializers.add(mreadpropdef.mproperty)
+                                       mreadpropdef.mproperty.is_autoinit = true
                                        continue
                                end
                                if npropdef.has_value then continue
-                               var paramname = npropdef.mpropdef.mproperty.name.substring_from(1)
-                               var ret_type = npropdef.mpropdef.static_mtype
+                               var paramname = mreadpropdef.mproperty.name
+                               var ret_type = mreadpropdef.msignature.return_mtype
                                if ret_type == null then return
                                var mparameter = new MParameter(paramname, ret_type, false, ret_type isa MNullableType)
                                mparameters.add(mparameter)
                                var msetter = npropdef.mwritepropdef
                                if msetter == null then
-                                       # No setter, it is a old-style attribute, so just add it
+                                       # No setter, it is a readonly attribute, so just add it
                                        initializers.add(npropdef.mpropdef.mproperty)
                                        npropdef.mpropdef.mproperty.is_autoinit = true
                                else
index f0e2911..5e28695 100644 (file)
@@ -869,21 +869,7 @@ class NeoModel
 
        # Get a `Location` from its string representation.
        private fun to_location(loc: String): Location do
-               #TODO filepath
-               var parts = loc.split_with(":")
-               var file = new SourceFile.from_string(parts[0], "")
-               if parts.length == 1 then
-                       return new Location(file, 0, 0, 0, 0)
-               end
-               var pos = parts[1].split_with("--")
-               var pos1 = pos[0].split_with(",")
-               var pos2 = pos[1].split_with(",")
-               var line_s = pos1[0].to_i
-               var line_e = pos2[0].to_i
-               var column_s = pos1[1].to_i
-               var column_e = 0
-               if pos2.length == 2 then pos2[1].to_i
-               return new Location(file, line_s, line_e, column_s, column_e)
+               return new Location.from_string(loc)
        end
 
        # Get a `MVisibility` from its string representation.
index bf12e9d..18a0f1f 100644 (file)
@@ -23,6 +23,8 @@ import transform
 import rapid_type_analysis
 import compiler::separate_erasure_compiler
 
+import compiler::compiler_ffi::light_only
+
 redef class ToolContext
        redef fun process_options(args)
        do
index 616d4ea..a1f49a7 100644 (file)
@@ -98,7 +98,7 @@ redef class MClassType
                        assert ctype != null
                        return ctype
                end
-               return mangled_cname
+               return cname_normal_class
        end
 
        redef fun cname_blind do
@@ -112,6 +112,9 @@ redef class MClassType
                return "struct nitni_instance *"
        end
 
+       # Name of this type in C for normal classes (not extern and not primitive)
+       protected fun cname_normal_class: String do return mangled_cname
+
        redef fun mangled_cname do return mclass.name
 
        redef fun is_cprimitive do return mclass.kind == extern_kind or
index 14fd19c..43a1600 100644 (file)
@@ -1146,7 +1146,7 @@ redef class TAt
     end
 end
 
-redef class TClassid
+redef class TSemi
     redef fun parser_index: Int
     do
        return 95
@@ -1158,7 +1158,7 @@ redef class TClassid
     end
 end
 
-redef class TId
+redef class TClassid
     redef fun parser_index: Int
     do
        return 96
@@ -1170,7 +1170,7 @@ redef class TId
     end
 end
 
-redef class TAttrid
+redef class TId
     redef fun parser_index: Int
     do
        return 97
@@ -1182,7 +1182,7 @@ redef class TAttrid
     end
 end
 
-redef class TNumber
+redef class TAttrid
     redef fun parser_index: Int
     do
        return 98
@@ -1194,7 +1194,7 @@ redef class TNumber
     end
 end
 
-redef class THexNumber
+redef class TNumber
     redef fun parser_index: Int
     do
        return 99
@@ -1206,7 +1206,7 @@ redef class THexNumber
     end
 end
 
-redef class TFloat
+redef class THexNumber
     redef fun parser_index: Int
     do
        return 100
@@ -1218,7 +1218,7 @@ redef class TFloat
     end
 end
 
-redef class TString
+redef class TFloat
     redef fun parser_index: Int
     do
        return 101
@@ -1230,7 +1230,7 @@ redef class TString
     end
 end
 
-redef class TStartString
+redef class TString
     redef fun parser_index: Int
     do
        return 102
@@ -1242,7 +1242,7 @@ redef class TStartString
     end
 end
 
-redef class TMidString
+redef class TStartString
     redef fun parser_index: Int
     do
        return 103
@@ -1254,7 +1254,7 @@ redef class TMidString
     end
 end
 
-redef class TEndString
+redef class TMidString
     redef fun parser_index: Int
     do
        return 104
@@ -1266,7 +1266,7 @@ redef class TEndString
     end
 end
 
-redef class TChar
+redef class TEndString
     redef fun parser_index: Int
     do
        return 105
@@ -1278,7 +1278,7 @@ redef class TChar
     end
 end
 
-redef class TBadString
+redef class TChar
     redef fun parser_index: Int
     do
        return 106
@@ -1290,7 +1290,7 @@ redef class TBadString
     end
 end
 
-redef class TBadChar
+redef class TBadString
     redef fun parser_index: Int
     do
        return 107
@@ -1302,7 +1302,7 @@ redef class TBadChar
     end
 end
 
-redef class TExternCodeSegment
+redef class TBadChar
     redef fun parser_index: Int
     do
        return 108
@@ -1314,11 +1314,23 @@ redef class TExternCodeSegment
     end
 end
 
+redef class TExternCodeSegment
+    redef fun parser_index: Int
+    do
+       return 109
+    end
+
+    init init_tk(loc: Location)
+    do
+               _location = loc
+    end
+end
+
 
 redef class EOF
     redef fun parser_index: Int
     do
-       return 109
+       return 110
     end
 end
 
@@ -1611,45 +1623,48 @@ redef class Lexer
                        return new TAt.init_tk(location)
                end
                if accept_token == 96 then
-                       return new TClassid.init_tk(location)
+                       return new TSemi.init_tk(location)
                end
                if accept_token == 97 then
-                       return new TId.init_tk(location)
+                       return new TClassid.init_tk(location)
                end
                if accept_token == 98 then
-                       return new TAttrid.init_tk(location)
+                       return new TId.init_tk(location)
                end
                if accept_token == 99 then
-                       return new TNumber.init_tk(location)
+                       return new TAttrid.init_tk(location)
                end
                if accept_token == 100 then
-                       return new THexNumber.init_tk(location)
+                       return new TNumber.init_tk(location)
                end
                if accept_token == 101 then
-                       return new TFloat.init_tk(location)
+                       return new THexNumber.init_tk(location)
                end
                if accept_token == 102 then
-                       return new TString.init_tk(location)
+                       return new TFloat.init_tk(location)
                end
                if accept_token == 103 then
-                       return new TStartString.init_tk(location)
+                       return new TString.init_tk(location)
                end
                if accept_token == 104 then
-                       return new TMidString.init_tk(location)
+                       return new TStartString.init_tk(location)
                end
                if accept_token == 105 then
-                       return new TEndString.init_tk(location)
+                       return new TMidString.init_tk(location)
                end
                if accept_token == 106 then
-                       return new TChar.init_tk(location)
+                       return new TEndString.init_tk(location)
                end
                if accept_token == 107 then
-                       return new TBadString.init_tk(location)
+                       return new TChar.init_tk(location)
                end
                if accept_token == 108 then
-                       return new TBadChar.init_tk(location)
+                       return new TBadString.init_tk(location)
                end
                if accept_token == 109 then
+                       return new TBadChar.init_tk(location)
+               end
+               if accept_token == 110 then
                        return new TExternCodeSegment.init_tk(location)
                end
                abort # unknown token index `accept_token`
index 4436571..eb80d5f 100644 (file)
@@ -191,6 +191,7 @@ gg = '>>';
 starship = '<=>';
 bang='!';
 at='@';
+semi=';';
 
 classid = uppercase letter*;
 id = lowercase letter*;
@@ -224,11 +225,11 @@ module
        = moduledecl? [imports]:import* [extern_bodies]:extern_code_body* [classdefs]:topdef* implicit_main_class {-> New module(moduledecl, [imports.import], [extern_bodies.extern_code_block], [classdefs.classdef,implicit_main_class.classdef])};
 
 moduledecl
-       = [doc]:no redef visibility kwmodule no module_name annotation_withend [n2]:n1 {-> New moduledecl(doc.doc, redef.kwredef, visibility, kwmodule, module_name, annotation_withend.annotations)};
+       = [doc]:nd redef visibility kwmodule no module_name annotation_withend [n2]:n1 {-> New moduledecl(doc.doc, redef.kwredef, visibility, kwmodule, module_name, annotation_withend.annotations)};
 
 import
-       = {std} [doc]:no redef visibility kwimport no module_name annotation_withend [n2]:n1 {-> New import.std(visibility, kwimport, module_name, annotation_withend.annotations)}
-       | {no} [doc]:no redef visibility kwimport no kwend [n2]:n1 {-> New import.no(visibility, kwimport, kwend)}
+       = {std} [doc]:nd redef visibility kwimport no module_name annotation_withend [n2]:n1 {-> New import.std(visibility, kwimport, module_name, annotation_withend.annotations)}
+       | {no} [doc]:nd redef visibility kwimport no kwend [n2]:n1 {-> New import.no(visibility, kwimport, kwend)}
        ;
 
 topdef {-> classdef}
@@ -241,13 +242,16 @@ implicit_main_class {-> classdef?}
        | {null} n? {-> Null}
        ;
 implicit_main_meth {-> propdef}
-       = [doc]:no stmts {-> New propdef.main_meth(Null, stmts.expr)}
-       | {n} [doc]:no stmtsn {-> New propdef.main_meth(Null, stmtsn.expr)}
+       = [doc]:nd stmts {-> New propdef.main_meth(Null, stmts.expr)}
+       | {n} [doc]:nd stmtsn {-> New propdef.main_meth(Null, stmtsn.expr)}
        ;
 
 /* CLASSES *******************************************************************/
 classdef
-       = [doc]:no redef visibility classkind no qclassid formaldefs extern_code_block? propdefs kwend {-> New classdef.std(doc.doc, redef.kwredef, visibility, classkind, qclassid.classid, [formaldefs.formaldef], extern_code_block, [propdefs.propdef], kwend)};
+       = [doc]:nd redef visibility classkind no qclassid extern_code_block? propdefs kwend {-> New classdef.std(doc.doc, redef.kwredef, visibility, classkind, qclassid.classid, Null, [], Null, extern_code_block, [propdefs.propdef], kwend)}
+       | {for} [doc]:nd redef visibility classkind no qclassid obra [n2]:no formaldefs cbra extern_code_block? propdefs kwend {-> New classdef.std(doc.doc, redef.kwredef, visibility, classkind, qclassid.classid, obra, [formaldefs.formaldef], cbra, extern_code_block, [propdefs.propdef], kwend)}
+       ;
+
 redef {-> kwredef?}
        = kwredef? {-> kwredef};
 classkind
@@ -259,49 +263,49 @@ classkind
        ;
 
 formaldefs {-> formaldef*}
-       = obra no formaldef formaldefs_tail* [n2]:no cbra {-> [formaldef, formaldefs_tail.formaldef]}
-       | {null} {-> []}
+       = formaldef formaldefs_tail* {-> [formaldef, formaldefs_tail.formaldef]}
+       | {empty} {->[]}
        ;
 formaldefs_tail {-> formaldef}
        = comma no formaldef {-> formaldef};
 formaldef
-       = classid annotations? typing_o {-> New formaldef(classid, typing_o.type, annotations)};
+       = classid annotations? typing_o no {-> New formaldef(classid, typing_o.type, annotations)};
 
 superclass {-> propdef}
-       = {super} [doc]:no redef visibility kwsuper [n2]:no type annotation_withend {-> New propdef.super(doc.doc, redef.kwredef, visibility, kwsuper, type, annotation_withend.annotations)}
+       = {super} [doc]:nd redef visibility kwsuper [n2]:no type annotation_withend {-> New propdef.super(doc.doc, redef.kwredef, visibility, kwsuper, type, annotation_withend.annotations)}
        ;
 
 propdefs {-> propdef*}
        = propdefn+ no {-> [propdefn.propdef]}
        | {super} superclass {-> [superclass.propdef]}
-       | {empty} no {-> []}
+       | {empty} nd {-> []}
        ;
 propdefn {-> propdef}
        = propdef n1 {-> propdef.propdef}
        ;
 propdef~toplevel {-> propdef}
-       = {meth} [doc]:no redef visibility kwmeth qmethid signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
-       | {nobody} [doc]:no redef visibility kwmeth qmethid signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_withend_nonull.annotations, Null, Null, Null)}
-!toplevel| {intern_new} [doc]:no redef visibility kwnew qmethid? signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_withend_nonull.annotations, Null, Null, Null)}
-!toplevel| {new} [doc]:no redef visibility kwnew qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
-       | {extern_implicit} [doc]:no redef visibility kwmeth qmethid signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_noend.annotations, extern_calls, extern_code_block, Null)}
-!toplevel| {var3} [doc]:no redef visibility kwvar id typing_o annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, annotation_withend.annotations, Null)}
-!toplevel| {var4} [doc]:no redef visibility kwvar id typing_o assign [n2]:no expr annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, expr.expr, annotation_withend.annotations, Null)}
-!toplevel| {var5} [doc]:no redef visibility kwvar id typing_o annotation_noend? kwdo stmtso kwend? {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, annotation_noend.annotations, stmtso.expr)}
-!toplevel| {init} [doc]:no redef visibility kwinit qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, kwinit, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
-!toplevel| {type} [doc]:no redef visibility kwtype classid typing annotation_withend {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type, annotation_withend.annotations)}
-!toplevel| {extern_init_implicit} [doc]:no redef visibility kwnew qmethid? signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, extern_calls, extern_code_block, Null)}
+       = {meth} [doc]:nd redef visibility kwmeth qmethid signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, kwdo, stmtso.expr, kwend_o.kwend)}
+       | {nobody} [doc]:nd redef visibility kwmeth qmethid signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_withend_nonull.annotations, Null, Null, Null, Null, Null)}
+!toplevel| {intern_new} [doc]:nd redef visibility kwnew qmethid? signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_withend_nonull.annotations, Null, Null, Null, Null, Null)}
+!toplevel| {new} [doc]:nd redef visibility kwnew qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, Null, Null, kwdo, stmtso.expr, kwend_o.kwend)}
+       | {extern_implicit} [doc]:nd redef visibility kwmeth qmethid signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, qmethid.methid, signature.signature, annotation_noend.annotations, extern_calls, extern_code_block, Null, Null, Null)}
+!toplevel| {var3} [doc]:nd redef visibility kwvar id typing_o annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, Null, annotation_withend.annotations, Null, Null, Null)}
+!toplevel| {var4} [doc]:nd redef visibility kwvar id typing_o assign [n2]:no expr annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, assign, expr.expr, annotation_withend.annotations, Null, Null, Null)}
+!toplevel| {var5} [doc]:nd redef visibility kwvar id typing_o annotation_noend? kwdo stmtso kwend? {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, Null, annotation_noend.annotations, kwdo, stmtso.expr, kwend)}
+!toplevel| {init} [doc]:nd redef visibility kwinit qmethid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, kwinit, Null, qmethid.methid, signature, annotation_noend.annotations, Null, Null, kwdo, stmtso.expr, kwend_o.kwend)}
+!toplevel| {type} [doc]:nd redef visibility kwtype classid typing annotation_withend {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type, annotation_withend.annotations)}
+!toplevel| {extern_init_implicit} [doc]:nd redef visibility kwnew qmethid? signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, qmethid.methid, signature, annotation_noend.annotations, extern_calls, extern_code_block, Null, Null, Null)}
 !toplevel| {annot} line_annotation_forclass {-> line_annotation_forclass.propdef}
 !toplevel| {super} superclass {-> superclass.propdef}
        ;
 annotation_withend~nonull {-> annotations?}
-       = {oneliner} kwis many_annotations {-> many_annotations.annotations}
-       | {more} kwis n1 line_annotations kwend {-> line_annotations.annotations}
+       = {oneliner} kwis annotation_list {-> New annotations(kwis, Null, Null, [annotation_list.annotation], Null, Null)}
+       | {more} kwis n1 line_annotation+ kwend {-> New annotations(kwis, Null, Null, [line_annotation.annotation], Null, kwend) }
 !nonull        | {null} {-> Null}
        ;
 annotation_noend {-> annotations}
-       = {oneliner} kwis many_annotations {-> many_annotations.annotations}
-       | {more} kwis n1 line_annotations {-> line_annotations.annotations}
+       = {oneliner} kwis annotation_list {-> New annotations(kwis, Null, Null, [annotation_list.annotation], Null, Null)}
+       | {more} kwis n1 line_annotation+ {-> New annotations(kwis, Null, Null, [line_annotation.annotation], Null, Null) }
        ;
 
 visibility
@@ -393,8 +397,8 @@ extern_code_body {-> extern_code_block} = no extern_code_block {-> extern_code_b
 
 /* TYPES *********************************************************************/
 type~nobra~nopar {-> type}
-       = {simple} kwnullable? classid annotations_o~nopar {-> New type(kwnullable, classid, [], annotations_o~nopar.annotations)}
-!nobra | {generic} kwnullable? classid obra no types [n2]:no cbra annotations_o~nopar {-> New type(kwnullable, classid, [types.type], annotations_o~nopar.annotations)}
+       = {simple} kwnullable? classid annotations_o~nopar {-> New type(kwnullable, classid, Null, [], Null, annotations_o~nopar.annotations)}
+!nobra | {generic} kwnullable? classid obra no types [n2]:no cbra annotations_o~nopar {-> New type(kwnullable, classid, obra, [types.type], cbra, annotations_o~nopar.annotations)}
        ;
 types {-> type*} 
        = type types_tail* {-> [type, types_tail.type]};
@@ -477,14 +481,15 @@ do~withelse {-> expr}
        ;
 
 if~withelse {-> expr}
-       = {onelineelse} kwif no expr [n2]:no kwthen stmt_withelse kwelse stmtso~withelse {-> New expr.if(kwif, expr, stmt_withelse.expr, stmtso~withelse.expr)}
-!withelse      | {oneline} kwif no expr [n2]:no kwthen stmt {-> New expr.if(kwif, expr, stmt.expr, Null)}
-!withelse      | {block} kwif no expr [n2]:no kwthen [n3]:n stmtsn elsepartblock {-> New expr.if(kwif, expr, stmtsn.expr, elsepartblock.expr)}
-!withelse      | {emptyblock} kwif no expr [n2]:no kwthen [n3]:n? elsepartblock {-> New expr.if(kwif, expr, Null, elsepartblock.expr)}
+       = {onelineelse} kwif no expr [n2]:no kwthen stmt_withelse kwelse stmtso~withelse {-> New expr.if(kwif, expr, kwthen, stmt_withelse.expr, kwelse, stmtso~withelse.expr)}
+!withelse      | {oneline} kwif no expr [n2]:no kwthen stmt {-> New expr.if(kwif, expr, kwthen, stmt.expr, Null, Null)}
+!withelse      | {block} kwif no expr [n2]:no kwthen [n3]:n stmtsn kwelse stmtso {-> New expr.if(kwif, expr, kwthen, stmtsn.expr, kwelse, stmtso.expr)}
+!withelse      | {emptyblock} kwif no expr [n2]:no kwthen [n3]:n? kwelse stmtso {-> New expr.if(kwif, expr, kwthen, Null, kwelse, stmtso.expr)}
+!withelse      | {blocknoelse} kwif no expr [n2]:no kwthen [n3]:n stmtsn endblock {-> New expr.if(kwif, expr, kwthen, stmtsn.expr, Null, endblock.expr)}
+!withelse      | {emptyblocknoelse} kwif no expr [n2]:no kwthen [n3]:n? endblock {-> New expr.if(kwif, expr, kwthen, Null, Null, endblock.expr)}
        ;
-elsepartblock {-> expr?}
-       = {else} kwelse stmtso {-> stmtso.expr}
-       | {empty} kwend {-> New expr.block([], kwend)}
+endblock {-> expr}
+       = {empty} kwend {-> New expr.block([], kwend)}
        ;
 
 loop~withelse {-> expr}
@@ -498,8 +503,8 @@ while~withelse {-> expr}
        ;
 
 for~withelse {-> expr}
-       = kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso_withend label {-> New expr.for(kwfor, [ids.id], expr, kwdo, stmtso_withend.expr, label)}
-       | {nolabel} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso~withelse {-> New expr.for(kwfor, [ids.id], expr, kwdo, stmtso~withelse.expr, Null)}
+       = kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso_withend label {-> New expr.for(kwfor, [ids.id], kwin, expr, kwdo, stmtso_withend.expr, label)}
+       | {nolabel} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo stmtso~withelse {-> New expr.for(kwfor, [ids.id], kwin, expr, kwdo, stmtso~withelse.expr, Null)}
        ;
 
 with~withelse {-> expr}
@@ -513,8 +518,8 @@ withexpr {-> expr}
        ;
 
 assert~withelse {-> expr}
-       = {else} kwassert assertid? expr kwelse stmtso~withelse {-> New expr.assert(kwassert, assertid.id, expr, stmtso~withelse.expr)}
-!withelse| {noelse} kwassert assertid? expr {-> New expr.assert(kwassert, assertid.id, expr, Null)}
+       = {else} kwassert assertid? expr kwelse stmtso~withelse {-> New expr.assert(kwassert, assertid.id, expr, kwelse, stmtso~withelse.expr)}
+!withelse| {noelse} kwassert assertid? expr {-> New expr.assert(kwassert, assertid.id, expr, Null, Null)}
        ;
 assertid {-> id}
        = id column {-> id};
@@ -635,8 +640,8 @@ expr_single~nopar~nobra {-> expr}
        | {superstring} superstring  {-> superstring.expr}
 !nopar | {par} expr_par {-> expr_par.expr}
 // !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
-!nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
-!nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
+!nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, dotdot, expr2.expr, cbra, annotations_o.annotations)}
+!nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, dotdot, expr2.expr, cbra, annotations_o.annotations)}
 !nobra!nopar   | {array} obra no array_items typing_o cbra annotations_o {-> New expr.array(obra, [array_items.expr], typing_o.type, cbra, annotations_o.annotations)}
        ;
 
@@ -661,8 +666,8 @@ array_items_tail {-> expr}
        ;
 array_item {-> expr}
        = expr no {-> expr}
-       | {for} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo [block]:array_item {-> New expr.for(kwfor, [ids.id], expr, kwdo, block.expr, Null)}
-       | {if} kwif [n1]:no expr [n2]:no kwthen [n3]:no [then]:array_item {-> New expr.if(kwif, expr, then.expr, Null)}
+       | {for} kwfor no [ids]:idlist [n2]:no kwin [n3]:no expr [n4]:no kwdo [block]:array_item {-> New expr.for(kwfor, [ids.id], kwin, expr, kwdo, block.expr, Null)}
+       | {if} kwif [n1]:no expr [n2]:no kwthen [n3]:no [then]:array_item {-> New expr.if(kwif, expr, kwthen, then.expr, Null, Null)}
        ;
 
 superstring {-> expr} 
@@ -685,8 +690,8 @@ superstring_end {-> expr}
 /* ANNOTATIONS *******************************************************************/
 
 annotations~nopar {-> annotations}
-       = {one} at one_annotation~nopar {-> New annotations(at, Null, [one_annotation~nopar.annotation], Null)}
-       | {many} at opar no annotation_list [n2]:no cpar {-> New annotations(at, opar, [annotation_list.annotation], cpar)}
+       = {one} at one_annotation~nopar {-> New annotations(Null, at, Null, [one_annotation~nopar.annotation], Null, Null)}
+       | {many} at opar no annotation_list [n2]:no cpar {-> New annotations(Null, at, opar, [annotation_list.annotation], cpar, Null)}
        ;
 annotations_o~nopar {-> annotations?}
        = annotations~nopar {-> annotations~nopar.annotations}
@@ -699,10 +704,6 @@ one_annotation~nopar {-> annotation}
 !nopar | {args} redef visibility atid opar no at_args [n2]:no cpar annotations_o~nopar {-> New annotation(Null, redef.kwredef, visibility, atid, opar, [at_args.expr], cpar, annotations_o~nopar.annotations)}
        ;
 
-many_annotations {-> annotations}
-       = {many} annotation_list {-> New annotations(Null, Null, [annotation_list.annotation], Null)}
-       ;
-
 annotation_list {-> annotation*}
        = {many} one_annotation_list annotations_tail* {-> [one_annotation_list.annotation, annotations_tail.annotation] }
        ;
@@ -722,18 +723,15 @@ annotations_tail {-> annotation}
        = comma no one_annotation_list {-> one_annotation_list.annotation}
        ;
 
-line_annotations {-> annotations}
-       = line_annotation+ {-> New annotations(Null, Null, [line_annotation.annotation], Null) }
-       ;
 line_annotation {-> annotation}
-       = [doc]:no redef visibility atid annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [], Null, annotations)}
-       | {args} [doc]:no redef visibility atid opar no at_args cpar annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, opar, [at_args.expr], cpar, annotations)}
-       | {nopar} [doc]:no redef visibility atid at_args_nopar n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [at_args_nopar.expr], Null, Null)}
+       = [doc]:nd redef visibility atid annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [], Null, annotations)}
+       | {args} [doc]:nd redef visibility atid opar no at_args cpar annotations? n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, opar, [at_args.expr], cpar, annotations)}
+       | {nopar} [doc]:nd redef visibility atid at_args_nopar n1 {-> New annotation(doc.doc, redef.kwredef, visibility, atid.atid, Null, [at_args_nopar.expr], Null, Null)}
        ;
 line_annotation_forclass {-> propdef}
-       = [doc]:no atid_forclass annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [], Null, annotations)}
-       | {args} [doc]:no atid_forclass opar no at_args cpar annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, opar, [at_args.expr], cpar, annotations)}
-       | {nopar} [doc]:no atid_forclass at_args_nopar {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [at_args_nopar.expr], Null, Null)}
+       = [doc]:nd atid_forclass annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [], Null, annotations)}
+       | {args} [doc]:nd atid_forclass opar no at_args cpar annotations? {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, opar, [at_args.expr], cpar, annotations)}
+       | {nopar} [doc]:nd atid_forclass at_args_nopar {-> New propdef.annot(doc.doc, Null, Null, atid_forclass.atid, Null, [at_args_nopar.expr], Null, Null)}
        ;
 
 at_args~nopar {-> expr* }
@@ -826,19 +824,32 @@ kwend_o {-> kwend?}
        = kwend? {-> kwend}
        ;
 
-n1     = {a} comment | {b} eol;
-n {-> doc?}
-       = {a} n2? comment+ {-> New doc([comment])}
-       | {b} n2 {-> Null}
+/* A single hard break */
+n1     = {a} comment | {b} eol | {c} semi;
+
+/* A mandatory hard break, returns the last comment */
+n~nosemi {-> doc?}
+       = {a} n2* comment+ {-> New doc([comment])}
+       | {b} n2+ {-> Null}
+!nosemi | {c} n2* comment* semi n? {-> n.doc }
        ;
-no {-> doc?}
+
+/* An optional hard break, returns the last comment.
+ * Used mainly to introduce optional documentation */
+nd {-> doc?}
        = {empty} {-> Null}
        | n {-> n.doc}
        ;
 
+/* An optional soft break.
+ * Used when a unambiguous line break or comment could be inserted/ */
+no
+       = {empty}
+       | n_nosemi
+       ;
+
 n2
-       = {a} n2? comment+ eol+
-       | {b} eol+
+       = {a} comment* eol
        ;
 
 /*****************************************************************************/
@@ -861,7 +872,7 @@ visibility
        | {intrude} kwintrude
        ;
 
-classdef= {std} doc? kwredef? visibility classkind [id]:classid? [formaldefs]:formaldef* extern_code_block? [propdefs]:propdef* kwend
+classdef= {std} doc? kwredef? visibility classkind [id]:classid? obra? [formaldefs]:formaldef* cbra? extern_code_block? [propdefs]:propdef* kwend
        | {top} [propdefs]:propdef*
        | {main} [propdefs]:propdef*
        ;
@@ -875,10 +886,10 @@ classkind
 formaldef = [id]:classid type? annotations?;
 
 
-propdef = {attr} doc? kwredef? visibility kwvar [id2]:id type? expr? annotations? [block]:expr?
+propdef = {attr} doc? kwredef? visibility kwvar [id2]:id type? assign? expr? annotations? kwdo? [block]:expr? kwend?
        | {main_meth} kwredef? [block]:expr?
        | {type} doc? kwredef? visibility kwtype [id]:classid type annotations?
-       | {meth} doc? kwredef? visibility kwmeth? kwinit? kwnew? methid? signature annotations? extern_calls? extern_code_block? [block]:expr?
+       | {meth} doc? kwredef? visibility kwmeth? kwinit? kwnew? methid? signature annotations? extern_calls? extern_code_block? kwdo? [block]:expr? kwend?
        | {super} doc? kwredef? visibility kwsuper type annotations?
        | {annot} doc? kwredef? visibility? atid opar? [args]:expr* cpar? annotations?
        ;
@@ -914,7 +925,7 @@ signature = opar? [params]:param* cpar? type?;
 param  = id type? dotdotdot? annotations?
        ;
 
-type   = kwnullable? [id]:classid [types]:type* annotations?;
+type   = kwnullable? [id]:classid obra? [types]:type* cbra? annotations?;
 
 label = kwlabel id?;
 
@@ -925,13 +936,13 @@ expr      = {block} expr* kwend?
        | {abort} kwabort
        | {continue} kwcontinue? label?
        | {do} kwdo [block]:expr? label?
-       | {if} kwif expr [then]:expr? [else]:expr? 
+       | {if} kwif expr kwthen [then]:expr? kwelse? [else]:expr?
        | {ifexpr} kwif expr kwthen [then]:expr kwelse [else]:expr
        | {while} kwwhile expr kwdo [block]:expr? label?
        | {loop} kwloop [block]:expr? label?
-       | {for} kwfor [ids]:id* expr kwdo [block]:expr? label?
+       | {for} kwfor [ids]:id* kwin expr kwdo [block]:expr? label?
        | {with} kwwith expr kwdo [block]:expr? label?
-       | {assert} kwassert id? expr [else]:expr?
+       | {assert} kwassert id? expr kwelse? [else]:expr?
        | {once} kwonce expr 
        | {send} expr 
        | {binop} expr [expr2]:expr 
@@ -978,8 +989,8 @@ expr        = {block} expr* kwend?
        | {var_assign} id assign [value]:expr 
        | {var_reassign} id assign_op [value]:expr 
        | {range} expr [expr2]:expr annotations?
-       | {crange} obra expr [expr2]:expr cbra annotations?
-       | {orange} obra expr [expr2]:expr [cbra]:obra annotations?
+       | {crange} obra expr dotdot [expr2]:expr cbra annotations?
+       | {orange} obra expr dotdot [expr2]:expr [cbra]:obra annotations?
        | {array} obra [exprs]:expr* type? cbra annotations?
        | {self} kwself annotations?
        | {implicit_self} 
@@ -1045,7 +1056,7 @@ qualified = id* classid? ;
 
 doc = comment+;
 
-annotations = at? opar? [items]:annotation* cpar?;
+annotations = kwis? at? opar? [items]:annotation* cpar? kwend?;
 
 annotation = doc? kwredef? visibility? atid opar? [args]:expr* cpar? annotations?;
 
index 6d39748..a815804 100644 (file)
@@ -38,26 +38,26 @@ redef class Parser
                        new ReduceAction24(5),
                        new ReduceAction26(6),
                        new ReduceAction27(6),
+                       new ReduceAction28(6),
+                       new ReduceAction29(6),
                        new ReduceAction22(7),
-                       new ReduceAction29(7),
-                       new ReduceAction30(8),
-                       new ReduceAction31(8),
+                       new ReduceAction31(7),
                        new ReduceAction32(8),
                        new ReduceAction33(8),
                        new ReduceAction34(8),
-                       new ReduceAction35(9),
-                       new ReduceAction36(9),
+                       new ReduceAction35(8),
+                       new ReduceAction36(8),
                        new ReduceAction37(9),
-                       new ReduceAction38(10),
-                       new ReduceAction39(11),
-                       new ReduceAction40(11),
-                       new ReduceAction41(12),
-                       new ReduceAction42(13),
-                       new ReduceAction43(13),
+                       new ReduceAction38(9),
+                       new ReduceAction39(9),
+                       new ReduceAction40(10),
+                       new ReduceAction41(11),
+                       new ReduceAction42(11),
+                       new ReduceAction43(12),
                        new ReduceAction44(13),
-                       new ReduceAction45(14),
-                       new ReduceAction46(15),
-                       new ReduceAction47(15),
+                       new ReduceAction45(13),
+                       new ReduceAction46(13),
+                       new ReduceAction47(14),
                        new ReduceAction48(15),
                        new ReduceAction49(15),
                        new ReduceAction50(15),
@@ -83,19 +83,19 @@ redef class Parser
                        new ReduceAction70(15),
                        new ReduceAction71(15),
                        new ReduceAction72(15),
-                       new ReduceAction72(15),
-                       new ReduceAction74(16),
-                       new ReduceAction75(16),
+                       new ReduceAction73(15),
+                       new ReduceAction74(15),
+                       new ReduceAction74(15),
+                       new ReduceAction76(16),
+                       new ReduceAction77(16),
                        new ReduceAction22(16),
-                       new ReduceAction74(17),
-                       new ReduceAction78(17),
-                       new ReduceAction79(18),
-                       new ReduceAction80(18),
+                       new ReduceAction76(17),
+                       new ReduceAction80(17),
                        new ReduceAction81(18),
                        new ReduceAction82(18),
                        new ReduceAction83(18),
-                       new ReduceAction84(19),
-                       new ReduceAction85(19),
+                       new ReduceAction84(18),
+                       new ReduceAction85(18),
                        new ReduceAction86(19),
                        new ReduceAction87(19),
                        new ReduceAction88(19),
@@ -117,124 +117,124 @@ redef class Parser
                        new ReduceAction104(19),
                        new ReduceAction105(19),
                        new ReduceAction106(19),
-                       new ReduceAction107(20),
-                       new ReduceAction108(20),
+                       new ReduceAction107(19),
+                       new ReduceAction108(19),
                        new ReduceAction109(20),
                        new ReduceAction110(20),
-                       new ReduceAction111(21),
-                       new ReduceAction112(21),
-                       new ReduceAction37(21),
-                       new ReduceAction114(22),
-                       new ReduceAction115(23),
-                       new ReduceAction116(23),
+                       new ReduceAction111(20),
+                       new ReduceAction112(20),
+                       new ReduceAction113(21),
+                       new ReduceAction114(21),
+                       new ReduceAction39(21),
+                       new ReduceAction116(22),
                        new ReduceAction117(23),
                        new ReduceAction118(23),
                        new ReduceAction119(23),
-                       new ReduceAction120(24),
-                       new ReduceAction121(24),
+                       new ReduceAction120(23),
+                       new ReduceAction121(23),
+                       new ReduceAction122(24),
+                       new ReduceAction123(24),
                        new ReduceAction22(24),
-                       new ReduceAction123(25),
-                       new ReduceAction124(26),
-                       new ReduceAction124(26),
+                       new ReduceAction125(25),
+                       new ReduceAction126(26),
                        new ReduceAction126(26),
-                       new ReduceAction127(27),
-                       new ReduceAction128(27),
+                       new ReduceAction128(26),
                        new ReduceAction129(27),
-                       new ReduceAction130(28),
-                       new ReduceAction131(28),
+                       new ReduceAction130(27),
+                       new ReduceAction131(27),
                        new ReduceAction132(28),
                        new ReduceAction133(28),
                        new ReduceAction134(28),
                        new ReduceAction135(28),
+                       new ReduceAction136(28),
+                       new ReduceAction137(28),
                        new ReduceAction22(29),
-                       new ReduceAction137(29),
-                       new ReduceAction138(30),
-                       new ReduceAction139(31),
-                       new ReduceAction140(31),
-                       new ReduceAction141(32),
+                       new ReduceAction139(29),
+                       new ReduceAction140(30),
+                       new ReduceAction141(31),
+                       new ReduceAction142(31),
+                       new ReduceAction143(32),
                        new ReduceAction22(32),
-                       new ReduceAction143(33),
-                       new ReduceAction144(34),
-                       new ReduceAction145(34),
+                       new ReduceAction145(33),
                        new ReduceAction146(34),
                        new ReduceAction147(34),
-                       new ReduceAction148(35),
-                       new ReduceAction149(35),
-                       new ReduceAction150(36),
-                       new ReduceAction150(37),
-                       new ReduceAction150(38),
+                       new ReduceAction148(34),
+                       new ReduceAction149(34),
+                       new ReduceAction150(35),
+                       new ReduceAction151(35),
+                       new ReduceAction152(36),
+                       new ReduceAction152(37),
+                       new ReduceAction152(38),
                        new ReduceAction22(38),
-                       new ReduceAction154(39),
-                       new ReduceAction155(39),
                        new ReduceAction156(39),
                        new ReduceAction157(39),
-                       new ReduceAction158(40),
-                       new ReduceAction159(40),
-                       new ReduceAction160(41),
-                       new ReduceAction161(41),
-                       new ReduceAction162(42),
-                       new ReduceAction163(42),
-                       new ReduceAction154(43),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction167(44),
-                       new ReduceAction168(44),
+                       new ReduceAction158(39),
+                       new ReduceAction159(39),
+                       new ReduceAction160(40),
+                       new ReduceAction161(40),
+                       new ReduceAction162(41),
+                       new ReduceAction163(41),
+                       new ReduceAction164(42),
+                       new ReduceAction165(42),
+                       new ReduceAction156(43),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
                        new ReduceAction169(44),
                        new ReduceAction170(44),
                        new ReduceAction171(44),
                        new ReduceAction172(44),
                        new ReduceAction173(44),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction157(44),
-                       new ReduceAction181(44),
-                       new ReduceAction182(44),
+                       new ReduceAction174(44),
+                       new ReduceAction175(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
+                       new ReduceAction159(44),
                        new ReduceAction183(44),
-                       new ReduceAction182(44),
+                       new ReduceAction184(44),
                        new ReduceAction185(44),
-                       new ReduceAction186(44),
+                       new ReduceAction184(44),
                        new ReduceAction187(44),
-                       new ReduceAction186(44),
+                       new ReduceAction188(44),
                        new ReduceAction189(44),
-                       new ReduceAction190(44),
+                       new ReduceAction188(44),
                        new ReduceAction191(44),
                        new ReduceAction192(44),
                        new ReduceAction193(44),
-                       new ReduceAction192(44),
-                       new ReduceAction195(44),
-                       new ReduceAction196(44),
+                       new ReduceAction194(44),
                        new ReduceAction195(44),
+                       new ReduceAction194(44),
+                       new ReduceAction197(44),
                        new ReduceAction198(44),
-                       new ReduceAction199(45),
-                       new ReduceAction200(45),
-                       new ReduceAction201(46),
-                       new ReduceAction202(46),
+                       new ReduceAction197(44),
+                       new ReduceAction200(44),
+                       new ReduceAction201(45),
+                       new ReduceAction202(45),
                        new ReduceAction203(46),
                        new ReduceAction204(46),
-                       new ReduceAction205(47),
-                       new ReduceAction206(47),
+                       new ReduceAction205(46),
+                       new ReduceAction206(46),
                        new ReduceAction207(47),
                        new ReduceAction208(47),
                        new ReduceAction209(47),
                        new ReduceAction210(47),
                        new ReduceAction211(47),
                        new ReduceAction212(47),
-                       new ReduceAction209(47),
-                       new ReduceAction210(47),
-                       new ReduceAction215(47),
-                       new ReduceAction216(47),
+                       new ReduceAction213(47),
+                       new ReduceAction214(47),
+                       new ReduceAction211(47),
+                       new ReduceAction212(47),
                        new ReduceAction217(47),
                        new ReduceAction218(47),
                        new ReduceAction219(47),
                        new ReduceAction220(47),
-                       new ReduceAction217(47),
-                       new ReduceAction218(47),
-                       new ReduceAction223(47),
-                       new ReduceAction224(47),
+                       new ReduceAction221(47),
+                       new ReduceAction222(47),
+                       new ReduceAction219(47),
+                       new ReduceAction220(47),
                        new ReduceAction225(47),
                        new ReduceAction226(47),
                        new ReduceAction227(47),
@@ -242,19 +242,19 @@ redef class Parser
                        new ReduceAction229(47),
                        new ReduceAction230(47),
                        new ReduceAction231(47),
-                       new ReduceAction228(47),
-                       new ReduceAction229(47),
-                       new ReduceAction234(47),
-                       new ReduceAction235(47),
+                       new ReduceAction232(47),
+                       new ReduceAction233(47),
+                       new ReduceAction230(47),
+                       new ReduceAction231(47),
                        new ReduceAction236(47),
                        new ReduceAction237(47),
                        new ReduceAction238(47),
                        new ReduceAction239(47),
-                       new ReduceAction236(47),
-                       new ReduceAction237(47),
-                       new ReduceAction242(47),
-                       new ReduceAction243(48),
-                       new ReduceAction244(48),
+                       new ReduceAction240(47),
+                       new ReduceAction241(47),
+                       new ReduceAction238(47),
+                       new ReduceAction239(47),
+                       new ReduceAction244(47),
                        new ReduceAction245(48),
                        new ReduceAction246(48),
                        new ReduceAction247(48),
@@ -264,829 +264,844 @@ redef class Parser
                        new ReduceAction251(48),
                        new ReduceAction252(48),
                        new ReduceAction253(48),
-                       new ReduceAction254(49),
-                       new ReduceAction255(49),
-                       new ReduceAction256(50),
-                       new ReduceAction257(50),
+                       new ReduceAction254(48),
+                       new ReduceAction255(48),
+                       new ReduceAction256(49),
+                       new ReduceAction257(49),
                        new ReduceAction258(50),
                        new ReduceAction259(50),
                        new ReduceAction260(50),
-                       new ReduceAction154(51),
-                       new ReduceAction156(51),
-                       new ReduceAction263(52),
-                       new ReduceAction264(52),
-                       new ReduceAction265(53),
-                       new ReduceAction266(53),
-                       new ReduceAction267(54),
-                       new ReduceAction268(54),
-                       new ReduceAction269(55),
-                       new ReduceAction270(55),
-                       new ReduceAction271(56),
-                       new ReduceAction272(56),
-                       new ReduceAction157(56),
-                       new ReduceAction274(57),
-                       new ReduceAction275(57),
-                       new ReduceAction276(57),
-                       new ReduceAction277(57),
-                       new ReduceAction278(58),
-                       new ReduceAction157(59),
-                       new ReduceAction280(59),
-                       new ReduceAction157(60),
-                       new ReduceAction282(60),
-                       new ReduceAction283(60),
-                       new ReduceAction284(60),
-                       new ReduceAction285(60),
-                       new ReduceAction157(61),
-                       new ReduceAction287(61),
-                       new ReduceAction157(62),
-                       new ReduceAction289(62),
-                       new ReduceAction290(62),
-                       new ReduceAction291(62),
-                       new ReduceAction292(62),
+                       new ReduceAction261(50),
+                       new ReduceAction262(50),
+                       new ReduceAction263(50),
+                       new ReduceAction264(50),
+                       new ReduceAction265(50),
+                       new ReduceAction158(51),
+                       new ReduceAction267(52),
+                       new ReduceAction268(52),
+                       new ReduceAction269(53),
+                       new ReduceAction270(53),
+                       new ReduceAction271(54),
+                       new ReduceAction272(54),
+                       new ReduceAction273(55),
+                       new ReduceAction274(55),
+                       new ReduceAction275(56),
+                       new ReduceAction276(56),
+                       new ReduceAction159(56),
+                       new ReduceAction278(57),
+                       new ReduceAction279(57),
+                       new ReduceAction280(57),
+                       new ReduceAction281(57),
+                       new ReduceAction282(58),
+                       new ReduceAction159(59),
+                       new ReduceAction284(59),
+                       new ReduceAction159(60),
+                       new ReduceAction286(60),
+                       new ReduceAction287(60),
+                       new ReduceAction288(60),
+                       new ReduceAction289(60),
+                       new ReduceAction159(61),
+                       new ReduceAction291(61),
+                       new ReduceAction159(62),
                        new ReduceAction293(62),
                        new ReduceAction294(62),
                        new ReduceAction295(62),
                        new ReduceAction296(62),
-                       new ReduceAction157(63),
-                       new ReduceAction298(63),
-                       new ReduceAction157(64),
-                       new ReduceAction300(64),
-                       new ReduceAction157(65),
-                       new ReduceAction302(65),
-                       new ReduceAction157(66),
-                       new ReduceAction304(66),
-                       new ReduceAction305(66),
-                       new ReduceAction157(67),
-                       new ReduceAction307(67),
-                       new ReduceAction308(67),
-                       new ReduceAction157(68),
-                       new ReduceAction310(68),
-                       new ReduceAction311(68),
-                       new ReduceAction312(68),
-                       new ReduceAction157(69),
-                       new ReduceAction314(69),
-                       new ReduceAction157(70),
-                       new ReduceAction316(70),
-                       new ReduceAction317(70),
-                       new ReduceAction318(70),
-                       new ReduceAction319(70),
-                       new ReduceAction157(71),
-                       new ReduceAction321(71),
-                       new ReduceAction322(71),
-                       new ReduceAction323(71),
-                       new ReduceAction324(71),
-                       new ReduceAction157(72),
-                       new ReduceAction326(72),
-                       new ReduceAction327(72),
-                       new ReduceAction181(72),
-                       new ReduceAction329(72),
-                       new ReduceAction182(72),
+                       new ReduceAction297(62),
+                       new ReduceAction298(62),
+                       new ReduceAction299(62),
+                       new ReduceAction300(62),
+                       new ReduceAction159(63),
+                       new ReduceAction302(63),
+                       new ReduceAction159(64),
+                       new ReduceAction304(64),
+                       new ReduceAction159(65),
+                       new ReduceAction306(65),
+                       new ReduceAction159(66),
+                       new ReduceAction308(66),
+                       new ReduceAction309(66),
+                       new ReduceAction159(67),
+                       new ReduceAction311(67),
+                       new ReduceAction312(67),
+                       new ReduceAction159(68),
+                       new ReduceAction314(68),
+                       new ReduceAction315(68),
+                       new ReduceAction316(68),
+                       new ReduceAction159(69),
+                       new ReduceAction318(69),
+                       new ReduceAction159(70),
+                       new ReduceAction320(70),
+                       new ReduceAction321(70),
+                       new ReduceAction322(70),
+                       new ReduceAction323(70),
+                       new ReduceAction159(71),
+                       new ReduceAction325(71),
+                       new ReduceAction326(71),
+                       new ReduceAction327(71),
+                       new ReduceAction328(71),
+                       new ReduceAction159(72),
+                       new ReduceAction330(72),
                        new ReduceAction331(72),
                        new ReduceAction183(72),
                        new ReduceAction333(72),
-                       new ReduceAction182(72),
-                       new ReduceAction331(72),
+                       new ReduceAction184(72),
+                       new ReduceAction335(72),
                        new ReduceAction185(72),
                        new ReduceAction337(72),
-                       new ReduceAction186(72),
-                       new ReduceAction339(72),
+                       new ReduceAction184(72),
+                       new ReduceAction335(72),
                        new ReduceAction187(72),
                        new ReduceAction341(72),
-                       new ReduceAction186(72),
-                       new ReduceAction339(72),
+                       new ReduceAction188(72),
+                       new ReduceAction343(72),
                        new ReduceAction189(72),
                        new ReduceAction345(72),
-                       new ReduceAction190(72),
-                       new ReduceAction347(72),
+                       new ReduceAction188(72),
+                       new ReduceAction343(72),
                        new ReduceAction191(72),
                        new ReduceAction349(72),
-                       new ReduceAction350(72),
+                       new ReduceAction192(72),
                        new ReduceAction351(72),
-                       new ReduceAction352(72),
+                       new ReduceAction193(72),
                        new ReduceAction353(72),
                        new ReduceAction354(72),
                        new ReduceAction355(72),
                        new ReduceAction356(72),
-                       new ReduceAction353(72),
-                       new ReduceAction354(72),
+                       new ReduceAction357(72),
+                       new ReduceAction358(72),
                        new ReduceAction359(72),
                        new ReduceAction360(72),
-                       new ReduceAction361(72),
-                       new ReduceAction157(73),
-                       new ReduceAction363(73),
-                       new ReduceAction364(73),
-                       new ReduceAction365(74),
-                       new ReduceAction366(74),
-                       new ReduceAction367(74),
-                       new ReduceAction368(74),
+                       new ReduceAction357(72),
+                       new ReduceAction358(72),
+                       new ReduceAction363(72),
+                       new ReduceAction364(72),
+                       new ReduceAction365(72),
+                       new ReduceAction159(73),
+                       new ReduceAction367(73),
+                       new ReduceAction368(73),
                        new ReduceAction369(74),
                        new ReduceAction370(74),
                        new ReduceAction371(74),
                        new ReduceAction372(74),
                        new ReduceAction373(74),
-                       new ReduceAction157(74),
-                       new ReduceAction157(74),
+                       new ReduceAction374(74),
+                       new ReduceAction375(74),
                        new ReduceAction376(74),
                        new ReduceAction377(74),
-                       new ReduceAction378(74),
-                       new ReduceAction379(75),
-                       new ReduceAction379(75),
-                       new ReduceAction381(76),
-                       new ReduceAction382(77),
-                       new ReduceAction383(78),
-                       new ReduceAction384(78),
-                       new ReduceAction382(79),
-                       new ReduceAction386(80),
-                       new ReduceAction268(80),
-                       new ReduceAction388(80),
-                       new ReduceAction389(81),
-                       new ReduceAction390(81),
-                       new ReduceAction391(82),
-                       new ReduceAction392(82),
-                       new ReduceAction393(83),
-                       new ReduceAction391(84),
-                       new ReduceAction392(84),
-                       new ReduceAction396(85),
-                       new ReduceAction397(86),
-                       new ReduceAction398(87),
-                       new ReduceAction399(87),
-                       new ReduceAction400(88),
+                       new ReduceAction159(74),
+                       new ReduceAction159(74),
+                       new ReduceAction380(74),
+                       new ReduceAction381(74),
+                       new ReduceAction382(74),
+                       new ReduceAction383(75),
+                       new ReduceAction383(75),
+                       new ReduceAction385(76),
+                       new ReduceAction386(77),
+                       new ReduceAction387(78),
+                       new ReduceAction388(78),
+                       new ReduceAction386(79),
+                       new ReduceAction390(80),
+                       new ReduceAction272(80),
+                       new ReduceAction392(80),
+                       new ReduceAction393(81),
+                       new ReduceAction394(81),
+                       new ReduceAction395(82),
+                       new ReduceAction396(82),
+                       new ReduceAction397(83),
+                       new ReduceAction395(84),
+                       new ReduceAction396(84),
+                       new ReduceAction400(85),
+                       new ReduceAction401(86),
+                       new ReduceAction402(87),
+                       new ReduceAction403(87),
+                       new ReduceAction404(88),
                        new ReduceAction22(88),
-                       new ReduceAction402(89),
-                       new ReduceAction403(89),
-                       new ReduceAction404(90),
-                       new ReduceAction405(91),
+                       new ReduceAction406(89),
+                       new ReduceAction407(89),
+                       new ReduceAction408(90),
+                       new ReduceAction409(90),
                        new ReduceAction406(91),
-                       new ReduceAction402(92),
-                       new ReduceAction403(92),
-                       new ReduceAction409(92),
-                       new ReduceAction157(93),
-                       new ReduceAction411(94),
-                       new ReduceAction404(95),
-                       new ReduceAction413(96),
-                       new ReduceAction414(96),
-                       new ReduceAction415(96),
-                       new ReduceAction416(96),
-                       new ReduceAction417(96),
-                       new ReduceAction418(97),
-                       new ReduceAction419(97),
-                       new ReduceAction420(97),
-                       new ReduceAction421(97),
-                       new ReduceAction422(97),
-                       new ReduceAction383(98),
-                       new ReduceAction384(98),
-                       new ReduceAction382(99),
-                       new ReduceAction426(100),
-                       new ReduceAction157(100),
-                       new ReduceAction157(100),
-                       new ReduceAction429(100),
-                       new ReduceAction430(100),
-                       new ReduceAction431(100),
-                       new ReduceAction432(101),
-                       new ReduceAction433(101),
-                       new ReduceAction434(101),
-                       new ReduceAction435(102),
-                       new ReduceAction436(102),
-                       new ReduceAction435(103),
-                       new ReduceAction438(103),
-                       new ReduceAction436(103),
-                       new ReduceAction440(103),
-                       new ReduceAction441(104),
-                       new ReduceAction392(105),
-                       new ReduceAction443(105),
-                       new ReduceAction444(106),
-                       new ReduceAction445(107),
-                       new ReduceAction446(107),
-                       new ReduceAction447(108),
-                       new ReduceAction448(108),
-                       new ReduceAction449(109),
-                       new ReduceAction450(109),
-                       new ReduceAction451(109),
-                       new ReduceAction452(109),
-                       new ReduceAction453(110),
-                       new ReduceAction454(110),
-                       new ReduceAction455(110),
-                       new ReduceAction22(110),
-                       new ReduceAction457(111),
-                       new ReduceAction458(111),
-                       new ReduceAction459(111),
-                       new ReduceAction458(111),
-                       new ReduceAction461(112),
-                       new ReduceAction462(112),
-                       new ReduceAction463(112),
-                       new ReduceAction462(112),
-                       new ReduceAction465(113),
-                       new ReduceAction466(114),
-                       new ReduceAction22(115),
-                       new ReduceAction468(115),
-                       new ReduceAction469(116),
-                       new ReduceAction469(116),
+                       new ReduceAction407(91),
+                       new ReduceAction412(91),
+                       new ReduceAction159(92),
+                       new ReduceAction414(93),
+                       new ReduceAction415(94),
+                       new ReduceAction416(94),
+                       new ReduceAction417(94),
+                       new ReduceAction418(94),
+                       new ReduceAction419(94),
+                       new ReduceAction420(95),
+                       new ReduceAction421(95),
+                       new ReduceAction422(95),
+                       new ReduceAction423(95),
+                       new ReduceAction424(95),
+                       new ReduceAction387(96),
+                       new ReduceAction388(96),
+                       new ReduceAction386(97),
+                       new ReduceAction428(98),
+                       new ReduceAction159(98),
+                       new ReduceAction159(98),
+                       new ReduceAction431(98),
+                       new ReduceAction432(98),
+                       new ReduceAction433(98),
+                       new ReduceAction434(99),
+                       new ReduceAction435(99),
+                       new ReduceAction436(99),
+                       new ReduceAction437(100),
+                       new ReduceAction438(100),
+                       new ReduceAction437(101),
+                       new ReduceAction440(101),
+                       new ReduceAction438(101),
+                       new ReduceAction442(101),
+                       new ReduceAction443(102),
+                       new ReduceAction396(103),
+                       new ReduceAction445(103),
+                       new ReduceAction446(104),
+                       new ReduceAction447(105),
+                       new ReduceAction448(105),
+                       new ReduceAction449(106),
+                       new ReduceAction450(106),
+                       new ReduceAction451(107),
+                       new ReduceAction452(107),
+                       new ReduceAction453(107),
+                       new ReduceAction454(107),
+                       new ReduceAction455(108),
+                       new ReduceAction456(108),
+                       new ReduceAction457(108),
+                       new ReduceAction22(108),
+                       new ReduceAction459(109),
+                       new ReduceAction460(109),
+                       new ReduceAction461(109),
+                       new ReduceAction460(109),
+                       new ReduceAction463(110),
+                       new ReduceAction464(110),
+                       new ReduceAction465(110),
+                       new ReduceAction464(110),
+                       new ReduceAction467(111),
+                       new ReduceAction468(112),
+                       new ReduceAction22(113),
+                       new ReduceAction470(113),
+                       new ReduceAction471(114),
+                       new ReduceAction471(114),
+                       new ReduceAction471(114),
+                       new ReduceAction474(115),
+                       new ReduceAction475(115),
+                       new ReduceAction23(115),
+                       new ReduceAction23(115),
+                       new ReduceAction478(115),
+                       new ReduceAction478(115),
+                       new ReduceAction480(115),
+                       new ReduceAction481(115),
+                       new ReduceAction482(115),
+                       new ReduceAction482(115),
+                       new ReduceAction484(115),
+                       new ReduceAction22(116),
+                       new ReduceAction486(116),
+                       new ReduceAction487(117),
                        new ReduceAction471(117),
-                       new ReduceAction472(117),
-                       new ReduceAction23(117),
-                       new ReduceAction22(118),
-                       new ReduceAction475(118),
-                       new ReduceAction476(119),
-                       new ReduceAction477(119),
-                       new ReduceAction469(119),
-                       new ReduceAction46(120),
-                       new ReduceAction47(120),
-                       new ReduceAction48(120),
-                       new ReduceAction55(120),
-                       new ReduceAction56(120),
-                       new ReduceAction74(121),
-                       new ReduceAction75(121),
-                       new ReduceAction84(122),
-                       new ReduceAction85(122),
-                       new ReduceAction86(122),
-                       new ReduceAction87(122),
-                       new ReduceAction88(122),
-                       new ReduceAction89(122),
-                       new ReduceAction90(122),
-                       new ReduceAction91(122),
-                       new ReduceAction92(122),
-                       new ReduceAction93(122),
-                       new ReduceAction94(122),
-                       new ReduceAction95(122),
-                       new ReduceAction96(122),
-                       new ReduceAction97(122),
-                       new ReduceAction98(122),
-                       new ReduceAction99(122),
-                       new ReduceAction100(122),
-                       new ReduceAction101(122),
-                       new ReduceAction102(122),
-                       new ReduceAction103(122),
-                       new ReduceAction104(122),
-                       new ReduceAction105(122),
-                       new ReduceAction461(123),
-                       new ReduceAction462(123),
-                       new ReduceAction463(123),
-                       new ReduceAction462(123),
-                       new ReduceAction144(124),
-                       new ReduceAction145(124),
-                       new ReduceAction157(125),
-                       new ReduceAction280(125),
-                       new ReduceAction157(126),
-                       new ReduceAction282(126),
-                       new ReduceAction283(126),
-                       new ReduceAction284(126),
-                       new ReduceAction285(126),
-                       new ReduceAction157(127),
-                       new ReduceAction287(127),
-                       new ReduceAction157(128),
-                       new ReduceAction289(128),
-                       new ReduceAction290(128),
-                       new ReduceAction291(128),
-                       new ReduceAction292(128),
-                       new ReduceAction293(128),
-                       new ReduceAction294(128),
-                       new ReduceAction295(128),
-                       new ReduceAction296(128),
-                       new ReduceAction157(129),
-                       new ReduceAction298(129),
-                       new ReduceAction157(130),
-                       new ReduceAction300(130),
-                       new ReduceAction157(131),
-                       new ReduceAction302(131),
-                       new ReduceAction157(132),
-                       new ReduceAction304(132),
-                       new ReduceAction305(132),
-                       new ReduceAction157(133),
-                       new ReduceAction307(133),
-                       new ReduceAction308(133),
-                       new ReduceAction157(134),
-                       new ReduceAction310(134),
-                       new ReduceAction311(134),
-                       new ReduceAction312(134),
-                       new ReduceAction157(135),
-                       new ReduceAction314(135),
-                       new ReduceAction157(136),
-                       new ReduceAction316(136),
-                       new ReduceAction317(136),
-                       new ReduceAction318(136),
-                       new ReduceAction319(136),
-                       new ReduceAction157(137),
-                       new ReduceAction321(137),
-                       new ReduceAction322(137),
-                       new ReduceAction323(137),
-                       new ReduceAction324(137),
-                       new ReduceAction157(138),
-                       new ReduceAction326(138),
-                       new ReduceAction327(138),
-                       new ReduceAction181(138),
-                       new ReduceAction185(138),
-                       new ReduceAction329(138),
-                       new ReduceAction337(138),
-                       new ReduceAction182(138),
-                       new ReduceAction186(138),
-                       new ReduceAction331(138),
-                       new ReduceAction339(138),
-                       new ReduceAction183(138),
-                       new ReduceAction187(138),
-                       new ReduceAction333(138),
-                       new ReduceAction341(138),
-                       new ReduceAction182(138),
-                       new ReduceAction186(138),
-                       new ReduceAction331(138),
-                       new ReduceAction339(138),
-                       new ReduceAction189(138),
-                       new ReduceAction345(138),
-                       new ReduceAction190(138),
-                       new ReduceAction191(138),
-                       new ReduceAction347(138),
-                       new ReduceAction349(138),
-                       new ReduceAction351(138),
-                       new ReduceAction352(138),
-                       new ReduceAction353(138),
-                       new ReduceAction354(138),
-                       new ReduceAction355(138),
-                       new ReduceAction356(138),
-                       new ReduceAction353(138),
-                       new ReduceAction354(138),
-                       new ReduceAction359(138),
-                       new ReduceAction360(138),
-                       new ReduceAction361(138),
-                       new ReduceAction157(139),
-                       new ReduceAction363(139),
-                       new ReduceAction364(139),
-                       new ReduceAction365(140),
-                       new ReduceAction366(140),
-                       new ReduceAction367(140),
-                       new ReduceAction368(140),
-                       new ReduceAction369(140),
-                       new ReduceAction370(140),
-                       new ReduceAction371(140),
-                       new ReduceAction372(140),
-                       new ReduceAction373(140),
-                       new ReduceAction157(140),
-                       new ReduceAction157(140),
-                       new ReduceAction144(141),
-                       new ReduceAction145(141),
-                       new ReduceAction146(141),
-                       new ReduceAction147(141),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction167(142),
-                       new ReduceAction168(142),
-                       new ReduceAction169(142),
-                       new ReduceAction170(142),
-                       new ReduceAction171(142),
-                       new ReduceAction172(142),
-                       new ReduceAction173(142),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction157(142),
-                       new ReduceAction181(142),
-                       new ReduceAction182(142),
-                       new ReduceAction183(142),
-                       new ReduceAction182(142),
-                       new ReduceAction185(142),
-                       new ReduceAction186(142),
-                       new ReduceAction187(142),
-                       new ReduceAction186(142),
-                       new ReduceAction189(142),
-                       new ReduceAction190(142),
-                       new ReduceAction191(142),
-                       new ReduceAction192(142),
-                       new ReduceAction193(142),
-                       new ReduceAction192(142),
-                       new ReduceAction195(142),
-                       new ReduceAction196(142),
-                       new ReduceAction195(142),
-                       new ReduceAction198(142),
-                       new ReduceAction205(143),
-                       new ReduceAction206(143),
-                       new ReduceAction207(143),
-                       new ReduceAction208(143),
-                       new ReduceAction209(143),
-                       new ReduceAction210(143),
-                       new ReduceAction211(143),
-                       new ReduceAction212(143),
-                       new ReduceAction209(143),
-                       new ReduceAction210(143),
-                       new ReduceAction215(143),
-                       new ReduceAction216(143),
-                       new ReduceAction217(143),
-                       new ReduceAction218(143),
-                       new ReduceAction219(143),
-                       new ReduceAction220(143),
-                       new ReduceAction217(143),
-                       new ReduceAction218(143),
-                       new ReduceAction223(143),
-                       new ReduceAction224(143),
-                       new ReduceAction225(143),
-                       new ReduceAction226(143),
-                       new ReduceAction227(143),
-                       new ReduceAction228(143),
-                       new ReduceAction229(143),
-                       new ReduceAction230(143),
-                       new ReduceAction231(143),
-                       new ReduceAction228(143),
-                       new ReduceAction229(143),
-                       new ReduceAction234(143),
-                       new ReduceAction235(143),
-                       new ReduceAction236(143),
-                       new ReduceAction237(143),
-                       new ReduceAction238(143),
-                       new ReduceAction239(143),
-                       new ReduceAction236(143),
-                       new ReduceAction237(143),
-                       new ReduceAction242(143),
-                       new ReduceAction157(144),
-                       new ReduceAction280(144),
-                       new ReduceAction157(145),
-                       new ReduceAction282(145),
-                       new ReduceAction283(145),
-                       new ReduceAction284(145),
-                       new ReduceAction285(145),
-                       new ReduceAction157(146),
-                       new ReduceAction287(146),
-                       new ReduceAction157(147),
-                       new ReduceAction289(147),
-                       new ReduceAction290(147),
-                       new ReduceAction291(147),
-                       new ReduceAction292(147),
-                       new ReduceAction293(147),
-                       new ReduceAction294(147),
-                       new ReduceAction295(147),
-                       new ReduceAction296(147),
-                       new ReduceAction157(148),
-                       new ReduceAction298(148),
-                       new ReduceAction157(149),
-                       new ReduceAction300(149),
-                       new ReduceAction157(150),
-                       new ReduceAction302(150),
-                       new ReduceAction157(151),
-                       new ReduceAction304(151),
-                       new ReduceAction305(151),
-                       new ReduceAction157(152),
-                       new ReduceAction307(152),
-                       new ReduceAction308(152),
-                       new ReduceAction157(153),
-                       new ReduceAction310(153),
-                       new ReduceAction311(153),
-                       new ReduceAction312(153),
-                       new ReduceAction157(154),
-                       new ReduceAction314(154),
-                       new ReduceAction157(155),
-                       new ReduceAction316(155),
-                       new ReduceAction317(155),
-                       new ReduceAction318(155),
-                       new ReduceAction319(155),
-                       new ReduceAction157(156),
-                       new ReduceAction321(156),
-                       new ReduceAction322(156),
-                       new ReduceAction323(156),
-                       new ReduceAction324(156),
-                       new ReduceAction157(157),
-                       new ReduceAction326(157),
-                       new ReduceAction327(157),
-                       new ReduceAction181(157),
-                       new ReduceAction329(157),
-                       new ReduceAction182(157),
-                       new ReduceAction331(157),
-                       new ReduceAction183(157),
-                       new ReduceAction333(157),
-                       new ReduceAction182(157),
-                       new ReduceAction331(157),
-                       new ReduceAction185(157),
-                       new ReduceAction337(157),
-                       new ReduceAction186(157),
-                       new ReduceAction339(157),
-                       new ReduceAction187(157),
-                       new ReduceAction341(157),
-                       new ReduceAction186(157),
-                       new ReduceAction339(157),
-                       new ReduceAction189(157),
-                       new ReduceAction345(157),
-                       new ReduceAction190(157),
-                       new ReduceAction347(157),
-                       new ReduceAction191(157),
-                       new ReduceAction349(157),
-                       new ReduceAction350(157),
-                       new ReduceAction351(157),
-                       new ReduceAction352(157),
-                       new ReduceAction353(157),
-                       new ReduceAction354(157),
-                       new ReduceAction355(157),
-                       new ReduceAction356(157),
-                       new ReduceAction353(157),
-                       new ReduceAction354(157),
-                       new ReduceAction359(157),
-                       new ReduceAction360(157),
-                       new ReduceAction361(157),
-                       new ReduceAction157(158),
-                       new ReduceAction363(158),
-                       new ReduceAction364(158),
-                       new ReduceAction365(159),
-                       new ReduceAction366(159),
-                       new ReduceAction367(159),
-                       new ReduceAction368(159),
-                       new ReduceAction369(159),
-                       new ReduceAction370(159),
-                       new ReduceAction371(159),
-                       new ReduceAction372(159),
-                       new ReduceAction373(159),
-                       new ReduceAction157(159),
-                       new ReduceAction398(160),
-                       new ReduceAction399(160),
-                       new ReduceAction400(161),
-                       new ReduceAction22(161),
-                       new ReduceAction402(162),
-                       new ReduceAction402(163),
-                       new ReduceAction383(164),
-                       new ReduceAction384(164),
-                       new ReduceAction426(165),
-                       new ReduceAction157(165),
-                       new ReduceAction157(165),
-                       new ReduceAction429(165),
-                       new ReduceAction430(165),
-                       new ReduceAction144(166),
-                       new ReduceAction145(166),
-                       new ReduceAction157(167),
-                       new ReduceAction280(167),
-                       new ReduceAction157(168),
-                       new ReduceAction282(168),
-                       new ReduceAction283(168),
-                       new ReduceAction284(168),
-                       new ReduceAction285(168),
-                       new ReduceAction157(169),
-                       new ReduceAction287(169),
-                       new ReduceAction157(170),
-                       new ReduceAction289(170),
-                       new ReduceAction290(170),
-                       new ReduceAction291(170),
-                       new ReduceAction292(170),
-                       new ReduceAction293(170),
-                       new ReduceAction294(170),
-                       new ReduceAction295(170),
-                       new ReduceAction296(170),
-                       new ReduceAction157(171),
-                       new ReduceAction298(171),
-                       new ReduceAction157(172),
-                       new ReduceAction300(172),
-                       new ReduceAction157(173),
-                       new ReduceAction302(173),
-                       new ReduceAction157(174),
-                       new ReduceAction304(174),
-                       new ReduceAction305(174),
-                       new ReduceAction157(175),
-                       new ReduceAction307(175),
-                       new ReduceAction308(175),
-                       new ReduceAction157(176),
-                       new ReduceAction310(176),
-                       new ReduceAction311(176),
-                       new ReduceAction312(176),
-                       new ReduceAction157(177),
-                       new ReduceAction314(177),
-                       new ReduceAction157(178),
-                       new ReduceAction316(178),
-                       new ReduceAction317(178),
-                       new ReduceAction318(178),
-                       new ReduceAction319(178),
-                       new ReduceAction157(179),
-                       new ReduceAction321(179),
-                       new ReduceAction322(179),
-                       new ReduceAction841(179),
-                       new ReduceAction157(180),
-                       new ReduceAction843(180),
-                       new ReduceAction844(180),
-                       new ReduceAction845(180),
-                       new ReduceAction846(180),
-                       new ReduceAction847(180),
-                       new ReduceAction181(180),
-                       new ReduceAction329(180),
-                       new ReduceAction846(180),
-                       new ReduceAction847(180),
-                       new ReduceAction189(180),
-                       new ReduceAction345(180),
-                       new ReduceAction854(180),
-                       new ReduceAction855(180),
-                       new ReduceAction351(180),
-                       new ReduceAction352(180),
-                       new ReduceAction353(180),
-                       new ReduceAction354(180),
-                       new ReduceAction355(180),
-                       new ReduceAction356(180),
-                       new ReduceAction353(180),
-                       new ReduceAction354(180),
-                       new ReduceAction359(180),
-                       new ReduceAction360(180),
-                       new ReduceAction361(180),
-                       new ReduceAction157(181),
-                       new ReduceAction363(181),
-                       new ReduceAction364(181),
-                       new ReduceAction365(182),
-                       new ReduceAction366(182),
-                       new ReduceAction367(182),
-                       new ReduceAction368(182),
-                       new ReduceAction369(182),
-                       new ReduceAction370(182),
-                       new ReduceAction371(182),
-                       new ReduceAction372(182),
-                       new ReduceAction373(182),
-                       new ReduceAction157(182),
-                       new ReduceAction880(183),
-                       new ReduceAction881(183),
-                       new ReduceAction154(184),
-                       new ReduceAction155(184),
-                       new ReduceAction156(184),
-                       new ReduceAction157(184),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction167(185),
-                       new ReduceAction168(185),
-                       new ReduceAction169(185),
-                       new ReduceAction170(185),
-                       new ReduceAction171(185),
-                       new ReduceAction172(185),
-                       new ReduceAction173(185),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction157(185),
-                       new ReduceAction181(185),
-                       new ReduceAction182(185),
-                       new ReduceAction183(185),
-                       new ReduceAction182(185),
-                       new ReduceAction185(185),
-                       new ReduceAction186(185),
-                       new ReduceAction187(185),
-                       new ReduceAction186(185),
-                       new ReduceAction189(185),
-                       new ReduceAction190(185),
-                       new ReduceAction191(185),
-                       new ReduceAction192(185),
-                       new ReduceAction193(185),
-                       new ReduceAction192(185),
-                       new ReduceAction195(185),
-                       new ReduceAction196(185),
-                       new ReduceAction195(185),
-                       new ReduceAction198(185),
-                       new ReduceAction254(186),
-                       new ReduceAction255(186),
-                       new ReduceAction256(187),
-                       new ReduceAction263(188),
-                       new ReduceAction264(188),
-                       new ReduceAction265(189),
-                       new ReduceAction266(189),
-                       new ReduceAction267(190),
-                       new ReduceAction268(190),
-                       new ReduceAction269(191),
-                       new ReduceAction270(191),
-                       new ReduceAction274(192),
-                       new ReduceAction275(192),
-                       new ReduceAction157(193),
+                       new ReduceAction471(118),
+                       new ReduceAction490(118),
+                       new ReduceAction48(119),
+                       new ReduceAction49(119),
+                       new ReduceAction50(119),
+                       new ReduceAction57(119),
+                       new ReduceAction58(119),
+                       new ReduceAction76(120),
+                       new ReduceAction77(120),
+                       new ReduceAction86(121),
+                       new ReduceAction87(121),
+                       new ReduceAction88(121),
+                       new ReduceAction89(121),
+                       new ReduceAction90(121),
+                       new ReduceAction91(121),
+                       new ReduceAction92(121),
+                       new ReduceAction93(121),
+                       new ReduceAction94(121),
+                       new ReduceAction95(121),
+                       new ReduceAction96(121),
+                       new ReduceAction97(121),
+                       new ReduceAction98(121),
+                       new ReduceAction99(121),
+                       new ReduceAction100(121),
+                       new ReduceAction101(121),
+                       new ReduceAction102(121),
+                       new ReduceAction103(121),
+                       new ReduceAction104(121),
+                       new ReduceAction105(121),
+                       new ReduceAction106(121),
+                       new ReduceAction107(121),
+                       new ReduceAction463(122),
+                       new ReduceAction464(122),
+                       new ReduceAction465(122),
+                       new ReduceAction464(122),
+                       new ReduceAction146(123),
+                       new ReduceAction147(123),
+                       new ReduceAction159(124),
+                       new ReduceAction284(124),
+                       new ReduceAction159(125),
+                       new ReduceAction286(125),
+                       new ReduceAction287(125),
+                       new ReduceAction288(125),
+                       new ReduceAction289(125),
+                       new ReduceAction159(126),
+                       new ReduceAction291(126),
+                       new ReduceAction159(127),
+                       new ReduceAction293(127),
+                       new ReduceAction294(127),
+                       new ReduceAction295(127),
+                       new ReduceAction296(127),
+                       new ReduceAction297(127),
+                       new ReduceAction298(127),
+                       new ReduceAction299(127),
+                       new ReduceAction300(127),
+                       new ReduceAction159(128),
+                       new ReduceAction302(128),
+                       new ReduceAction159(129),
+                       new ReduceAction304(129),
+                       new ReduceAction159(130),
+                       new ReduceAction306(130),
+                       new ReduceAction159(131),
+                       new ReduceAction308(131),
+                       new ReduceAction309(131),
+                       new ReduceAction159(132),
+                       new ReduceAction311(132),
+                       new ReduceAction312(132),
+                       new ReduceAction159(133),
+                       new ReduceAction314(133),
+                       new ReduceAction315(133),
+                       new ReduceAction316(133),
+                       new ReduceAction159(134),
+                       new ReduceAction318(134),
+                       new ReduceAction159(135),
+                       new ReduceAction320(135),
+                       new ReduceAction321(135),
+                       new ReduceAction322(135),
+                       new ReduceAction323(135),
+                       new ReduceAction159(136),
+                       new ReduceAction325(136),
+                       new ReduceAction326(136),
+                       new ReduceAction327(136),
+                       new ReduceAction328(136),
+                       new ReduceAction159(137),
+                       new ReduceAction330(137),
+                       new ReduceAction331(137),
+                       new ReduceAction183(137),
+                       new ReduceAction187(137),
+                       new ReduceAction333(137),
+                       new ReduceAction341(137),
+                       new ReduceAction184(137),
+                       new ReduceAction188(137),
+                       new ReduceAction335(137),
+                       new ReduceAction343(137),
+                       new ReduceAction185(137),
+                       new ReduceAction189(137),
+                       new ReduceAction337(137),
+                       new ReduceAction345(137),
+                       new ReduceAction184(137),
+                       new ReduceAction188(137),
+                       new ReduceAction335(137),
+                       new ReduceAction343(137),
+                       new ReduceAction191(137),
+                       new ReduceAction349(137),
+                       new ReduceAction192(137),
+                       new ReduceAction193(137),
+                       new ReduceAction351(137),
+                       new ReduceAction353(137),
+                       new ReduceAction355(137),
+                       new ReduceAction356(137),
+                       new ReduceAction357(137),
+                       new ReduceAction358(137),
+                       new ReduceAction359(137),
+                       new ReduceAction360(137),
+                       new ReduceAction357(137),
+                       new ReduceAction358(137),
+                       new ReduceAction363(137),
+                       new ReduceAction364(137),
+                       new ReduceAction365(137),
+                       new ReduceAction159(138),
+                       new ReduceAction367(138),
+                       new ReduceAction368(138),
+                       new ReduceAction369(139),
+                       new ReduceAction370(139),
+                       new ReduceAction371(139),
+                       new ReduceAction372(139),
+                       new ReduceAction373(139),
+                       new ReduceAction374(139),
+                       new ReduceAction375(139),
+                       new ReduceAction376(139),
+                       new ReduceAction377(139),
+                       new ReduceAction159(139),
+                       new ReduceAction159(139),
+                       new ReduceAction146(140),
+                       new ReduceAction147(140),
+                       new ReduceAction148(140),
+                       new ReduceAction149(140),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction169(141),
+                       new ReduceAction170(141),
+                       new ReduceAction171(141),
+                       new ReduceAction172(141),
+                       new ReduceAction173(141),
+                       new ReduceAction174(141),
+                       new ReduceAction175(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction159(141),
+                       new ReduceAction183(141),
+                       new ReduceAction184(141),
+                       new ReduceAction185(141),
+                       new ReduceAction184(141),
+                       new ReduceAction187(141),
+                       new ReduceAction188(141),
+                       new ReduceAction189(141),
+                       new ReduceAction188(141),
+                       new ReduceAction191(141),
+                       new ReduceAction192(141),
+                       new ReduceAction193(141),
+                       new ReduceAction194(141),
+                       new ReduceAction195(141),
+                       new ReduceAction194(141),
+                       new ReduceAction197(141),
+                       new ReduceAction198(141),
+                       new ReduceAction197(141),
+                       new ReduceAction200(141),
+                       new ReduceAction207(142),
+                       new ReduceAction208(142),
+                       new ReduceAction209(142),
+                       new ReduceAction210(142),
+                       new ReduceAction211(142),
+                       new ReduceAction212(142),
+                       new ReduceAction213(142),
+                       new ReduceAction214(142),
+                       new ReduceAction211(142),
+                       new ReduceAction212(142),
+                       new ReduceAction217(142),
+                       new ReduceAction218(142),
+                       new ReduceAction219(142),
+                       new ReduceAction220(142),
+                       new ReduceAction221(142),
+                       new ReduceAction222(142),
+                       new ReduceAction219(142),
+                       new ReduceAction220(142),
+                       new ReduceAction225(142),
+                       new ReduceAction226(142),
+                       new ReduceAction227(142),
+                       new ReduceAction228(142),
+                       new ReduceAction229(142),
+                       new ReduceAction230(142),
+                       new ReduceAction231(142),
+                       new ReduceAction232(142),
+                       new ReduceAction233(142),
+                       new ReduceAction230(142),
+                       new ReduceAction231(142),
+                       new ReduceAction236(142),
+                       new ReduceAction237(142),
+                       new ReduceAction238(142),
+                       new ReduceAction239(142),
+                       new ReduceAction240(142),
+                       new ReduceAction241(142),
+                       new ReduceAction238(142),
+                       new ReduceAction239(142),
+                       new ReduceAction244(142),
+                       new ReduceAction159(143),
+                       new ReduceAction284(143),
+                       new ReduceAction159(144),
+                       new ReduceAction286(144),
+                       new ReduceAction287(144),
+                       new ReduceAction288(144),
+                       new ReduceAction289(144),
+                       new ReduceAction159(145),
+                       new ReduceAction291(145),
+                       new ReduceAction159(146),
+                       new ReduceAction293(146),
+                       new ReduceAction294(146),
+                       new ReduceAction295(146),
+                       new ReduceAction296(146),
+                       new ReduceAction297(146),
+                       new ReduceAction298(146),
+                       new ReduceAction299(146),
+                       new ReduceAction300(146),
+                       new ReduceAction159(147),
+                       new ReduceAction302(147),
+                       new ReduceAction159(148),
+                       new ReduceAction304(148),
+                       new ReduceAction159(149),
+                       new ReduceAction306(149),
+                       new ReduceAction159(150),
+                       new ReduceAction308(150),
+                       new ReduceAction309(150),
+                       new ReduceAction159(151),
+                       new ReduceAction311(151),
+                       new ReduceAction312(151),
+                       new ReduceAction159(152),
+                       new ReduceAction314(152),
+                       new ReduceAction315(152),
+                       new ReduceAction316(152),
+                       new ReduceAction159(153),
+                       new ReduceAction318(153),
+                       new ReduceAction159(154),
+                       new ReduceAction320(154),
+                       new ReduceAction321(154),
+                       new ReduceAction322(154),
+                       new ReduceAction323(154),
+                       new ReduceAction159(155),
+                       new ReduceAction325(155),
+                       new ReduceAction326(155),
+                       new ReduceAction327(155),
+                       new ReduceAction328(155),
+                       new ReduceAction159(156),
+                       new ReduceAction330(156),
+                       new ReduceAction331(156),
+                       new ReduceAction183(156),
+                       new ReduceAction333(156),
+                       new ReduceAction184(156),
+                       new ReduceAction335(156),
+                       new ReduceAction185(156),
+                       new ReduceAction337(156),
+                       new ReduceAction184(156),
+                       new ReduceAction335(156),
+                       new ReduceAction187(156),
+                       new ReduceAction341(156),
+                       new ReduceAction188(156),
+                       new ReduceAction343(156),
+                       new ReduceAction189(156),
+                       new ReduceAction345(156),
+                       new ReduceAction188(156),
+                       new ReduceAction343(156),
+                       new ReduceAction191(156),
+                       new ReduceAction349(156),
+                       new ReduceAction192(156),
+                       new ReduceAction351(156),
+                       new ReduceAction193(156),
+                       new ReduceAction353(156),
+                       new ReduceAction354(156),
+                       new ReduceAction355(156),
+                       new ReduceAction356(156),
+                       new ReduceAction357(156),
+                       new ReduceAction358(156),
+                       new ReduceAction359(156),
+                       new ReduceAction360(156),
+                       new ReduceAction357(156),
+                       new ReduceAction358(156),
+                       new ReduceAction363(156),
+                       new ReduceAction364(156),
+                       new ReduceAction365(156),
+                       new ReduceAction159(157),
+                       new ReduceAction367(157),
+                       new ReduceAction368(157),
+                       new ReduceAction369(158),
+                       new ReduceAction370(158),
+                       new ReduceAction371(158),
+                       new ReduceAction372(158),
+                       new ReduceAction373(158),
+                       new ReduceAction374(158),
+                       new ReduceAction375(158),
+                       new ReduceAction376(158),
+                       new ReduceAction377(158),
+                       new ReduceAction159(158),
+                       new ReduceAction402(159),
+                       new ReduceAction403(159),
+                       new ReduceAction404(160),
+                       new ReduceAction22(160),
+                       new ReduceAction406(161),
+                       new ReduceAction406(162),
+                       new ReduceAction387(163),
+                       new ReduceAction388(163),
+                       new ReduceAction428(164),
+                       new ReduceAction159(164),
+                       new ReduceAction159(164),
+                       new ReduceAction431(164),
+                       new ReduceAction432(164),
+                       new ReduceAction146(165),
+                       new ReduceAction147(165),
+                       new ReduceAction159(166),
+                       new ReduceAction284(166),
+                       new ReduceAction159(167),
+                       new ReduceAction286(167),
+                       new ReduceAction287(167),
+                       new ReduceAction288(167),
+                       new ReduceAction289(167),
+                       new ReduceAction159(168),
+                       new ReduceAction291(168),
+                       new ReduceAction159(169),
+                       new ReduceAction293(169),
+                       new ReduceAction294(169),
+                       new ReduceAction295(169),
+                       new ReduceAction296(169),
+                       new ReduceAction297(169),
+                       new ReduceAction298(169),
+                       new ReduceAction299(169),
+                       new ReduceAction300(169),
+                       new ReduceAction159(170),
+                       new ReduceAction302(170),
+                       new ReduceAction159(171),
+                       new ReduceAction304(171),
+                       new ReduceAction159(172),
+                       new ReduceAction306(172),
+                       new ReduceAction159(173),
+                       new ReduceAction308(173),
+                       new ReduceAction309(173),
+                       new ReduceAction159(174),
+                       new ReduceAction311(174),
+                       new ReduceAction312(174),
+                       new ReduceAction159(175),
+                       new ReduceAction314(175),
+                       new ReduceAction315(175),
+                       new ReduceAction316(175),
+                       new ReduceAction159(176),
+                       new ReduceAction318(176),
+                       new ReduceAction159(177),
+                       new ReduceAction320(177),
+                       new ReduceAction321(177),
+                       new ReduceAction322(177),
+                       new ReduceAction323(177),
+                       new ReduceAction159(178),
+                       new ReduceAction325(178),
+                       new ReduceAction326(178),
+                       new ReduceAction853(178),
+                       new ReduceAction159(179),
+                       new ReduceAction855(179),
+                       new ReduceAction856(179),
+                       new ReduceAction857(179),
+                       new ReduceAction858(179),
+                       new ReduceAction859(179),
+                       new ReduceAction183(179),
+                       new ReduceAction333(179),
+                       new ReduceAction858(179),
+                       new ReduceAction859(179),
+                       new ReduceAction191(179),
+                       new ReduceAction349(179),
+                       new ReduceAction866(179),
+                       new ReduceAction867(179),
+                       new ReduceAction355(179),
+                       new ReduceAction356(179),
+                       new ReduceAction357(179),
+                       new ReduceAction358(179),
+                       new ReduceAction359(179),
+                       new ReduceAction360(179),
+                       new ReduceAction357(179),
+                       new ReduceAction358(179),
+                       new ReduceAction363(179),
+                       new ReduceAction364(179),
+                       new ReduceAction365(179),
+                       new ReduceAction159(180),
+                       new ReduceAction367(180),
+                       new ReduceAction368(180),
+                       new ReduceAction369(181),
+                       new ReduceAction370(181),
+                       new ReduceAction371(181),
+                       new ReduceAction372(181),
+                       new ReduceAction373(181),
+                       new ReduceAction374(181),
+                       new ReduceAction375(181),
+                       new ReduceAction376(181),
+                       new ReduceAction377(181),
+                       new ReduceAction159(181),
+                       new ReduceAction892(182),
+                       new ReduceAction893(182),
+                       new ReduceAction156(183),
+                       new ReduceAction157(183),
+                       new ReduceAction158(183),
+                       new ReduceAction159(183),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction169(184),
+                       new ReduceAction170(184),
+                       new ReduceAction171(184),
+                       new ReduceAction172(184),
+                       new ReduceAction173(184),
+                       new ReduceAction174(184),
+                       new ReduceAction175(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction159(184),
+                       new ReduceAction183(184),
+                       new ReduceAction184(184),
+                       new ReduceAction185(184),
+                       new ReduceAction184(184),
+                       new ReduceAction187(184),
+                       new ReduceAction188(184),
+                       new ReduceAction189(184),
+                       new ReduceAction188(184),
+                       new ReduceAction191(184),
+                       new ReduceAction192(184),
+                       new ReduceAction193(184),
+                       new ReduceAction194(184),
+                       new ReduceAction195(184),
+                       new ReduceAction194(184),
+                       new ReduceAction197(184),
+                       new ReduceAction198(184),
+                       new ReduceAction197(184),
+                       new ReduceAction200(184),
+                       new ReduceAction256(185),
+                       new ReduceAction257(185),
+                       new ReduceAction258(186),
+                       new ReduceAction267(187),
+                       new ReduceAction268(187),
+                       new ReduceAction269(188),
+                       new ReduceAction270(188),
+                       new ReduceAction271(189),
+                       new ReduceAction272(189),
+                       new ReduceAction273(190),
+                       new ReduceAction274(190),
+                       new ReduceAction278(191),
+                       new ReduceAction279(191),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction169(192),
+                       new ReduceAction170(192),
+                       new ReduceAction171(192),
+                       new ReduceAction172(192),
+                       new ReduceAction173(192),
+                       new ReduceAction174(192),
+                       new ReduceAction175(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction159(192),
+                       new ReduceAction183(192),
+                       new ReduceAction184(192),
+                       new ReduceAction185(192),
+                       new ReduceAction184(192),
+                       new ReduceAction187(192),
+                       new ReduceAction188(192),
+                       new ReduceAction189(192),
+                       new ReduceAction188(192),
+                       new ReduceAction191(192),
+                       new ReduceAction192(192),
+                       new ReduceAction193(192),
+                       new ReduceAction194(192),
+                       new ReduceAction195(192),
+                       new ReduceAction194(192),
+                       new ReduceAction197(192),
+                       new ReduceAction198(192),
+                       new ReduceAction197(192),
+                       new ReduceAction200(192),
+                       new ReduceAction156(193),
                        new ReduceAction157(193),
-                       new ReduceAction167(193),
-                       new ReduceAction168(193),
-                       new ReduceAction169(193),
-                       new ReduceAction170(193),
-                       new ReduceAction171(193),
-                       new ReduceAction172(193),
-                       new ReduceAction173(193),
-                       new ReduceAction157(193),
-                       new ReduceAction157(193),
-                       new ReduceAction157(193),
-                       new ReduceAction157(193),
-                       new ReduceAction157(193),
-                       new ReduceAction157(193),
-                       new ReduceAction157(193),
-                       new ReduceAction181(193),
-                       new ReduceAction182(193),
-                       new ReduceAction183(193),
-                       new ReduceAction182(193),
-                       new ReduceAction185(193),
-                       new ReduceAction186(193),
-                       new ReduceAction187(193),
-                       new ReduceAction186(193),
-                       new ReduceAction189(193),
-                       new ReduceAction190(193),
-                       new ReduceAction191(193),
-                       new ReduceAction192(193),
-                       new ReduceAction193(193),
-                       new ReduceAction192(193),
-                       new ReduceAction195(193),
-                       new ReduceAction196(193),
-                       new ReduceAction195(193),
-                       new ReduceAction198(193),
-                       new ReduceAction154(194),
-                       new ReduceAction155(194),
+                       new ReduceAction158(193),
                        new ReduceAction156(194),
-                       new ReduceAction154(195),
-                       new ReduceAction155(195),
-                       new ReduceAction156(195),
-                       new ReduceAction157(196),
-                       new ReduceAction157(196),
-                       new ReduceAction167(196),
-                       new ReduceAction168(196),
+                       new ReduceAction157(194),
+                       new ReduceAction158(194),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction169(195),
+                       new ReduceAction170(195),
+                       new ReduceAction171(195),
+                       new ReduceAction172(195),
+                       new ReduceAction173(195),
+                       new ReduceAction174(195),
+                       new ReduceAction175(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction159(195),
+                       new ReduceAction200(195),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
                        new ReduceAction169(196),
                        new ReduceAction170(196),
                        new ReduceAction171(196),
                        new ReduceAction172(196),
                        new ReduceAction173(196),
-                       new ReduceAction157(196),
-                       new ReduceAction157(196),
-                       new ReduceAction157(196),
-                       new ReduceAction157(196),
-                       new ReduceAction157(196),
-                       new ReduceAction157(196),
-                       new ReduceAction198(196),
-                       new ReduceAction157(197),
-                       new ReduceAction157(197),
-                       new ReduceAction167(197),
-                       new ReduceAction168(197),
+                       new ReduceAction174(196),
+                       new ReduceAction175(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction159(196),
+                       new ReduceAction200(196),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
                        new ReduceAction169(197),
                        new ReduceAction170(197),
                        new ReduceAction171(197),
                        new ReduceAction172(197),
                        new ReduceAction173(197),
-                       new ReduceAction157(197),
-                       new ReduceAction157(197),
-                       new ReduceAction157(197),
-                       new ReduceAction157(197),
-                       new ReduceAction157(197),
-                       new ReduceAction157(197),
-                       new ReduceAction198(197),
-                       new ReduceAction157(198),
-                       new ReduceAction157(198),
-                       new ReduceAction167(198),
-                       new ReduceAction168(198),
+                       new ReduceAction174(197),
+                       new ReduceAction175(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction159(197),
+                       new ReduceAction200(197),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
                        new ReduceAction169(198),
                        new ReduceAction170(198),
                        new ReduceAction171(198),
                        new ReduceAction172(198),
                        new ReduceAction173(198),
-                       new ReduceAction157(198),
-                       new ReduceAction157(198),
-                       new ReduceAction157(198),
-                       new ReduceAction157(198),
-                       new ReduceAction157(198),
-                       new ReduceAction157(198),
-                       new ReduceAction198(198),
-                       new ReduceAction157(199),
-                       new ReduceAction157(199),
-                       new ReduceAction167(199),
-                       new ReduceAction168(199),
-                       new ReduceAction169(199),
-                       new ReduceAction170(199),
-                       new ReduceAction171(199),
-                       new ReduceAction172(199),
-                       new ReduceAction173(199),
-                       new ReduceAction157(199),
-                       new ReduceAction157(199),
-                       new ReduceAction157(199),
-                       new ReduceAction157(199),
-                       new ReduceAction157(199),
-                       new ReduceAction157(199),
-                       new ReduceAction198(199),
-                       new ReduceAction432(200),
-                       new ReduceAction434(200),
-                       new ReduceAction1039(201),
-                       new ReduceAction1040(201),
-                       new ReduceAction1041(202),
-                       new ReduceAction1042(202),
-                       new ReduceAction1043(203),
-                       new ReduceAction1044(203),
-                       new ReduceAction1045(204),
-                       new ReduceAction1046(204),
-                       new ReduceAction43(205),
-                       new ReduceAction1048(205),
-                       new ReduceAction1049(206),
-                       new ReduceAction1050(206),
-                       new ReduceAction1051(207),
-                       new ReduceAction1052(207),
-                       new ReduceAction148(208),
-                       new ReduceAction1054(208),
-                       new ReduceAction383(209),
-                       new ReduceAction1056(209),
-                       new ReduceAction383(210),
-                       new ReduceAction1056(210),
-                       new ReduceAction383(211),
-                       new ReduceAction1056(211),
-                       new ReduceAction446(212),
-                       new ReduceAction1062(212),
-                       new ReduceAction405(213),
-                       new ReduceAction1064(213),
-                       new ReduceAction405(214),
-                       new ReduceAction1064(214),
-                       new ReduceAction383(215),
-                       new ReduceAction1056(215),
-                       new ReduceAction383(216),
-                       new ReduceAction1056(216),
-                       new ReduceAction447(217),
-                       new ReduceAction1072(217),
-                       new ReduceAction1073(218),
-                       new ReduceAction1074(218),
-                       new ReduceAction1075(219),
-                       new ReduceAction1076(219)
+                       new ReduceAction174(198),
+                       new ReduceAction175(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction159(198),
+                       new ReduceAction200(198),
+                       new ReduceAction434(199),
+                       new ReduceAction436(199),
+                       new ReduceAction474(200),
+                       new ReduceAction475(200),
+                       new ReduceAction23(200),
+                       new ReduceAction1054(201),
+                       new ReduceAction1055(201),
+                       new ReduceAction1056(202),
+                       new ReduceAction1057(202),
+                       new ReduceAction1058(203),
+                       new ReduceAction1059(203),
+                       new ReduceAction37(204),
+                       new ReduceAction1061(204),
+                       new ReduceAction45(205),
+                       new ReduceAction1063(205),
+                       new ReduceAction408(206),
+                       new ReduceAction1065(206),
+                       new ReduceAction1066(207),
+                       new ReduceAction1067(207),
+                       new ReduceAction1068(208),
+                       new ReduceAction1069(208),
+                       new ReduceAction150(209),
+                       new ReduceAction1071(209),
+                       new ReduceAction387(210),
+                       new ReduceAction1073(210),
+                       new ReduceAction387(211),
+                       new ReduceAction1073(211),
+                       new ReduceAction387(212),
+                       new ReduceAction1073(212),
+                       new ReduceAction448(213),
+                       new ReduceAction1079(213),
+                       new ReduceAction408(214),
+                       new ReduceAction1065(214),
+                       new ReduceAction387(215),
+                       new ReduceAction1073(215),
+                       new ReduceAction387(216),
+                       new ReduceAction1073(216),
+                       new ReduceAction449(217),
+                       new ReduceAction1087(217),
+                       new ReduceAction1088(218),
+                       new ReduceAction1089(218),
+                       new ReduceAction471(219),
+                       new ReduceAction490(219)
                )
        end
 end
@@ -1781,7 +1796,6 @@ private class ReduceAction26
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist9 = p.pop
                                        var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
@@ -1791,7 +1805,7 @@ private class ReduceAction26
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode8 = new Array[Object]
-                                       var listnode11 = new Array[Object]
+                                       var listnode12 = new Array[Object]
                                        var pdocnode2 = nodearraylist1
                                        assert pdocnode2 isa nullable ADoc
                                        var tkwredefnode3 = nodearraylist2
@@ -1802,24 +1816,23 @@ private class ReduceAction26
                                        assert pclasskindnode5 isa nullable AClasskind
                                        var tclassidnode6 = nodearraylist6
                                        assert tclassidnode6 isa nullable TClassid
-                                       var listnode7 = nodearraylist7
-                                       assert listnode7 isa Array[Object]
-                                       listnode8 = concat(listnode8, listnode7)
-                                       var listnode10 = nodearraylist8
-                                       assert listnode10 isa Array[Object]
-                                       listnode11 = concat(listnode11, listnode10)
-                                       var tkwendnode12 = nodearraylist9
-                                       assert tkwendnode12 isa nullable TKwend
+                                       var listnode11 = nodearraylist7
+                                       assert listnode11 isa Array[Object]
+                                       listnode12 = concat(listnode12, listnode11)
+                                       var tkwendnode13 = nodearraylist8
+                                       assert tkwendnode13 isa nullable TKwend
                                        var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
                                                pdocnode2,
                                                tkwredefnode3,
                                                pvisibilitynode4,
                                                pclasskindnode5,
                                                tclassidnode6,
+                                               null,
                                                listnode8,
                                                null,
-                                               listnode11,
-                                               tkwendnode12
+                                               null,
+                                               listnode12,
+                                               tkwendnode13
                                        )
                                        node_list = pclassdefnode1
                                        p.push(p.go_to(_goto), node_list)
@@ -1830,7 +1843,6 @@ private class ReduceAction27
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist10 = p.pop
                                        var nodearraylist9 = p.pop
                                        var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
@@ -1841,7 +1853,7 @@ private class ReduceAction27
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode8 = new Array[Object]
-                                       var listnode11 = new Array[Object]
+                                       var listnode12 = new Array[Object]
                                        var pdocnode2 = nodearraylist1
                                        assert pdocnode2 isa nullable ADoc
                                        var tkwredefnode3 = nodearraylist2
@@ -1852,26 +1864,83 @@ private class ReduceAction27
                                        assert pclasskindnode5 isa nullable AClasskind
                                        var tclassidnode6 = nodearraylist6
                                        assert tclassidnode6 isa nullable TClassid
-                                       var listnode7 = nodearraylist7
-                                       assert listnode7 isa Array[Object]
-                                       listnode8 = concat(listnode8, listnode7)
-                                       var pexterncodeblocknode9 = nodearraylist8
-                                       assert pexterncodeblocknode9 isa nullable AExternCodeBlock
-                                       var listnode10 = nodearraylist9
-                                       assert listnode10 isa Array[Object]
-                                       listnode11 = concat(listnode11, listnode10)
-                                       var tkwendnode12 = nodearraylist10
-                                       assert tkwendnode12 isa nullable TKwend
+                                       var pexterncodeblocknode10 = nodearraylist7
+                                       assert pexterncodeblocknode10 isa nullable AExternCodeBlock
+                                       var listnode11 = nodearraylist8
+                                       assert listnode11 isa Array[Object]
+                                       listnode12 = concat(listnode12, listnode11)
+                                       var tkwendnode13 = nodearraylist9
+                                       assert tkwendnode13 isa nullable TKwend
                                        var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
                                                pdocnode2,
                                                tkwredefnode3,
                                                pvisibilitynode4,
                                                pclasskindnode5,
                                                tclassidnode6,
+                                               null,
                                                listnode8,
-                                               pexterncodeblocknode9,
-                                               listnode11,
-                                               tkwendnode12
+                                               null,
+                                               pexterncodeblocknode10,
+                                               listnode12,
+                                               tkwendnode13
+                                       )
+                                       node_list = pclassdefnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction28
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist12 = p.pop
+                                       var nodearraylist11 = p.pop
+                                       var nodearraylist10 = p.pop
+                                       var nodearraylist9 = p.pop
+                                       var nodearraylist8 = p.pop
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var listnode9 = new Array[Object]
+                                       var listnode13 = new Array[Object]
+                                       var pdocnode2 = nodearraylist1
+                                       assert pdocnode2 isa nullable ADoc
+                                       var tkwredefnode3 = nodearraylist2
+                                       assert tkwredefnode3 isa nullable TKwredef
+                                       var pvisibilitynode4 = nodearraylist3
+                                       assert pvisibilitynode4 isa nullable AVisibility
+                                       var pclasskindnode5 = nodearraylist4
+                                       assert pclasskindnode5 isa nullable AClasskind
+                                       var tclassidnode6 = nodearraylist6
+                                       assert tclassidnode6 isa nullable TClassid
+                                       var tobranode7 = nodearraylist7
+                                       assert tobranode7 isa nullable TObra
+                                       var listnode8 = nodearraylist9
+                                       assert listnode8 isa Array[Object]
+                                       listnode9 = concat(listnode9, listnode8)
+                                       var tcbranode10 = nodearraylist10
+                                       assert tcbranode10 isa nullable TCbra
+                                       var listnode12 = nodearraylist11
+                                       assert listnode12 isa Array[Object]
+                                       listnode13 = concat(listnode13, listnode12)
+                                       var tkwendnode14 = nodearraylist12
+                                       assert tkwendnode14 isa nullable TKwend
+                                       var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
+                                               pdocnode2,
+                                               tkwredefnode3,
+                                               pvisibilitynode4,
+                                               pclasskindnode5,
+                                               tclassidnode6,
+                                               tobranode7,
+                                               listnode9,
+                                               tcbranode10,
+                                               null,
+                                               listnode13,
+                                               tkwendnode14
                                        )
                                        node_list = pclassdefnode1
                                        p.push(p.go_to(_goto), node_list)
@@ -1882,13 +1951,74 @@ private class ReduceAction29
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist13 = p.pop
+                                       var nodearraylist12 = p.pop
+                                       var nodearraylist11 = p.pop
+                                       var nodearraylist10 = p.pop
+                                       var nodearraylist9 = p.pop
+                                       var nodearraylist8 = p.pop
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var listnode9 = new Array[Object]
+                                       var listnode13 = new Array[Object]
+                                       var pdocnode2 = nodearraylist1
+                                       assert pdocnode2 isa nullable ADoc
+                                       var tkwredefnode3 = nodearraylist2
+                                       assert tkwredefnode3 isa nullable TKwredef
+                                       var pvisibilitynode4 = nodearraylist3
+                                       assert pvisibilitynode4 isa nullable AVisibility
+                                       var pclasskindnode5 = nodearraylist4
+                                       assert pclasskindnode5 isa nullable AClasskind
+                                       var tclassidnode6 = nodearraylist6
+                                       assert tclassidnode6 isa nullable TClassid
+                                       var tobranode7 = nodearraylist7
+                                       assert tobranode7 isa nullable TObra
+                                       var listnode8 = nodearraylist9
+                                       assert listnode8 isa Array[Object]
+                                       listnode9 = concat(listnode9, listnode8)
+                                       var tcbranode10 = nodearraylist10
+                                       assert tcbranode10 isa nullable TCbra
+                                       var pexterncodeblocknode11 = nodearraylist11
+                                       assert pexterncodeblocknode11 isa nullable AExternCodeBlock
+                                       var listnode12 = nodearraylist12
+                                       assert listnode12 isa Array[Object]
+                                       listnode13 = concat(listnode13, listnode12)
+                                       var tkwendnode14 = nodearraylist13
+                                       assert tkwendnode14 isa nullable TKwend
+                                       var pclassdefnode1: nullable AStdClassdef = new AStdClassdef.init_astdclassdef(
+                                               pdocnode2,
+                                               tkwredefnode3,
+                                               pvisibilitynode4,
+                                               pclasskindnode5,
+                                               tclassidnode6,
+                                               tobranode7,
+                                               listnode9,
+                                               tcbranode10,
+                                               pexterncodeblocknode11,
+                                               listnode13,
+                                               tkwendnode14
+                                       )
+                                       node_list = pclassdefnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction31
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
                                        var nodearraylist1 = p.pop
                                        var tkwredefnode1 = nodearraylist1
                                        node_list = tkwredefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction30
+private class ReduceAction32
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1903,7 +2033,7 @@ private class ReduceAction30
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction31
+private class ReduceAction33
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1922,7 +2052,7 @@ private class ReduceAction31
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction32
+private class ReduceAction34
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1937,7 +2067,7 @@ private class ReduceAction32
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction33
+private class ReduceAction35
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1952,7 +2082,7 @@ private class ReduceAction33
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction34
+private class ReduceAction36
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -1971,18 +2101,14 @@ private class ReduceAction34
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction35
+private class ReduceAction37
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist5 = p.pop
-                                       var nodearraylist4 = p.pop
-                                       var nodearraylist3 = p.pop
-                                       var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode2 = new Array[Object]
-                                       var pformaldefnode1 = nodearraylist3
+                                       var pformaldefnode1 = nodearraylist1
                                        if pformaldefnode1 != null then
                                                listnode2.add(pformaldefnode1)
                                        end
@@ -1990,20 +2116,16 @@ private class ReduceAction35
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction36
+private class ReduceAction38
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
-                                       var nodearraylist6 = p.pop
-                                       var nodearraylist5 = p.pop
-                                       var nodearraylist4 = p.pop
-                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var listnode3 = new Array[Object]
-                                       var pformaldefnode1 = nodearraylist3
-                                       var listnode2 = nodearraylist4
+                                       var pformaldefnode1 = nodearraylist1
+                                       var listnode2 = nodearraylist2
                                        assert listnode2 isa Array[Object]
                                        if pformaldefnode1 != null then
                                                listnode3.add(pformaldefnode1)
@@ -2013,7 +2135,7 @@ private class ReduceAction36
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction37
+private class ReduceAction39
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2023,7 +2145,7 @@ private class ReduceAction37
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction38
+private class ReduceAction40
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2036,11 +2158,12 @@ private class ReduceAction38
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction39
+private class ReduceAction41
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
                                        var tclassidnode2 = nodearraylist1
@@ -2056,11 +2179,12 @@ private class ReduceAction39
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction40
+private class ReduceAction42
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
@@ -2079,7 +2203,7 @@ private class ReduceAction40
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction41
+private class ReduceAction43
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2115,7 +2239,7 @@ private class ReduceAction41
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction42
+private class ReduceAction44
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2130,7 +2254,7 @@ private class ReduceAction42
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction43
+private class ReduceAction45
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2145,7 +2269,7 @@ private class ReduceAction43
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction44
+private class ReduceAction46
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2156,7 +2280,7 @@ private class ReduceAction44
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction45
+private class ReduceAction47
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2168,7 +2292,7 @@ private class ReduceAction45
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction46
+private class ReduceAction48
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2194,8 +2318,12 @@ private class ReduceAction46
                                        assert pmethidnode8 isa nullable AMethid
                                        var psignaturenode9 = nodearraylist6
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2208,13 +2336,15 @@ private class ReduceAction46
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction47
+private class ReduceAction49
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2243,8 +2373,12 @@ private class ReduceAction47
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist7
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist9
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist8
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist9
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist10
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2257,13 +2391,15 @@ private class ReduceAction47
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction48
+private class ReduceAction50
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2301,13 +2437,15 @@ private class ReduceAction48
                                                pannotationsnode10,
                                                null,
                                                null,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction49
+private class ReduceAction51
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2342,13 +2480,15 @@ private class ReduceAction49
                                                pannotationsnode10,
                                                null,
                                                null,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction50
+private class ReduceAction52
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2386,13 +2526,15 @@ private class ReduceAction50
                                                pannotationsnode10,
                                                null,
                                                null,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction51
+private class ReduceAction53
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2415,8 +2557,12 @@ private class ReduceAction51
                                        assert tkwnewnode7 isa nullable TKwnew
                                        var psignaturenode9 = nodearraylist5
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist7
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist6
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist7
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist8
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2429,13 +2575,15 @@ private class ReduceAction51
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction52
+private class ReduceAction54
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2461,8 +2609,12 @@ private class ReduceAction52
                                        assert pmethidnode8 isa nullable AMethid
                                        var psignaturenode9 = nodearraylist6
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2475,13 +2627,15 @@ private class ReduceAction52
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction53
+private class ReduceAction55
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2507,8 +2661,12 @@ private class ReduceAction53
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist6
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2521,13 +2679,15 @@ private class ReduceAction53
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction54
+private class ReduceAction56
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2556,8 +2716,12 @@ private class ReduceAction54
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist7
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist9
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist8
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist9
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist10
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2570,13 +2734,15 @@ private class ReduceAction54
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction55
+private class ReduceAction57
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2617,13 +2783,15 @@ private class ReduceAction55
                                                null,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction56
+private class ReduceAction58
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2667,13 +2835,15 @@ private class ReduceAction56
                                                pannotationsnode10,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction57
+private class ReduceAction59
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2697,8 +2867,8 @@ private class ReduceAction57
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pannotationsnode9 = nodearraylist7
-                                       assert pannotationsnode9 isa nullable AAnnotations
+                                       var pannotationsnode10 = nodearraylist7
+                                       assert pannotationsnode10 isa nullable AAnnotations
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2707,14 +2877,17 @@ private class ReduceAction57
                                                tidnode6,
                                                ptypenode7,
                                                null,
-                                               pannotationsnode9,
+                                               null,
+                                               pannotationsnode10,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction58
+private class ReduceAction60
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2741,10 +2914,12 @@ private class ReduceAction58
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pexprnode8 = nodearraylist9
-                                       assert pexprnode8 isa nullable AExpr
-                                       var pannotationsnode9 = nodearraylist10
-                                       assert pannotationsnode9 isa nullable AAnnotations
+                                       var tassignnode8 = nodearraylist7
+                                       assert tassignnode8 isa nullable TAssign
+                                       var pexprnode9 = nodearraylist9
+                                       assert pexprnode9 isa nullable AExpr
+                                       var pannotationsnode10 = nodearraylist10
+                                       assert pannotationsnode10 isa nullable AAnnotations
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2752,15 +2927,18 @@ private class ReduceAction58
                                                tkwvarnode5,
                                                tidnode6,
                                                ptypenode7,
-                                               pexprnode8,
-                                               pannotationsnode9,
+                                               tassignnode8,
+                                               pexprnode9,
+                                               pannotationsnode10,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction59
+private class ReduceAction61
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2785,8 +2963,10 @@ private class ReduceAction59
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pexprnode10 = nodearraylist8
-                                       assert pexprnode10 isa nullable AExpr
+                                       var tkwdonode11 = nodearraylist7
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist8
+                                       assert pexprnode12 isa nullable AExpr
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2796,13 +2976,16 @@ private class ReduceAction59
                                                ptypenode7,
                                                null,
                                                null,
-                                               pexprnode10
+                                               null,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction60
+private class ReduceAction62
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2828,10 +3011,12 @@ private class ReduceAction60
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pannotationsnode9 = nodearraylist7
-                                       assert pannotationsnode9 isa nullable AAnnotations
-                                       var pexprnode10 = nodearraylist9
-                                       assert pexprnode10 isa nullable AExpr
+                                       var pannotationsnode10 = nodearraylist7
+                                       assert pannotationsnode10 isa nullable AAnnotations
+                                       var tkwdonode11 = nodearraylist8
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist9
+                                       assert pexprnode12 isa nullable AExpr
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2840,14 +3025,17 @@ private class ReduceAction60
                                                tidnode6,
                                                ptypenode7,
                                                null,
-                                               pannotationsnode9,
-                                               pexprnode10
+                                               null,
+                                               pannotationsnode10,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction61
+private class ReduceAction63
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2873,8 +3061,12 @@ private class ReduceAction61
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pexprnode10 = nodearraylist8
-                                       assert pexprnode10 isa nullable AExpr
+                                       var tkwdonode11 = nodearraylist7
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist8
+                                       assert pexprnode12 isa nullable AExpr
+                                       var tkwendnode13 = nodearraylist9
+                                       assert tkwendnode13 isa nullable TKwend
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2884,13 +3076,16 @@ private class ReduceAction61
                                                ptypenode7,
                                                null,
                                                null,
-                                               pexprnode10
+                                               null,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               tkwendnode13
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction62
+private class ReduceAction64
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2917,10 +3112,14 @@ private class ReduceAction62
                                        assert tidnode6 isa nullable TId
                                        var ptypenode7 = nodearraylist6
                                        assert ptypenode7 isa nullable AType
-                                       var pannotationsnode9 = nodearraylist7
-                                       assert pannotationsnode9 isa nullable AAnnotations
-                                       var pexprnode10 = nodearraylist9
-                                       assert pexprnode10 isa nullable AExpr
+                                       var pannotationsnode10 = nodearraylist7
+                                       assert pannotationsnode10 isa nullable AAnnotations
+                                       var tkwdonode11 = nodearraylist8
+                                       assert tkwdonode11 isa nullable TKwdo
+                                       var pexprnode12 = nodearraylist9
+                                       assert pexprnode12 isa nullable AExpr
+                                       var tkwendnode13 = nodearraylist10
+                                       assert tkwendnode13 isa nullable TKwend
                                        var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2929,14 +3128,17 @@ private class ReduceAction62
                                                tidnode6,
                                                ptypenode7,
                                                null,
-                                               pannotationsnode9,
-                                               pexprnode10
+                                               null,
+                                               pannotationsnode10,
+                                               tkwdonode11,
+                                               pexprnode12,
+                                               tkwendnode13
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction63
+private class ReduceAction65
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -2959,8 +3161,12 @@ private class ReduceAction63
                                        assert tkwinitnode6 isa nullable TKwinit
                                        var psignaturenode9 = nodearraylist5
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist7
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist6
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist7
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist8
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -2973,13 +3179,15 @@ private class ReduceAction63
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction64
+private class ReduceAction66
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3005,8 +3213,12 @@ private class ReduceAction64
                                        assert pmethidnode8 isa nullable AMethid
                                        var psignaturenode9 = nodearraylist6
                                        assert psignaturenode9 isa nullable ASignature
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -3019,13 +3231,15 @@ private class ReduceAction64
                                                null,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction65
+private class ReduceAction67
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3051,8 +3265,12 @@ private class ReduceAction65
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist6
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist8
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist7
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist8
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist9
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -3065,13 +3283,15 @@ private class ReduceAction65
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction66
+private class ReduceAction68
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3100,8 +3320,12 @@ private class ReduceAction66
                                        assert psignaturenode9 isa nullable ASignature
                                        var pannotationsnode10 = nodearraylist7
                                        assert pannotationsnode10 isa nullable AAnnotations
-                                       var pexprnode13 = nodearraylist9
-                                       assert pexprnode13 isa nullable AExpr
+                                       var tkwdonode13 = nodearraylist8
+                                       assert tkwdonode13 isa nullable TKwdo
+                                       var pexprnode14 = nodearraylist9
+                                       assert pexprnode14 isa nullable AExpr
+                                       var tkwendnode15 = nodearraylist10
+                                       assert tkwendnode15 isa nullable TKwend
                                        var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
                                                pdocnode2,
                                                tkwredefnode3,
@@ -3114,13 +3338,15 @@ private class ReduceAction66
                                                pannotationsnode10,
                                                null,
                                                null,
-                                               pexprnode13
+                                               tkwdonode13,
+                                               pexprnode14,
+                                               tkwendnode15
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction67
+private class ReduceAction69
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3159,7 +3385,7 @@ private class ReduceAction67
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction68
+private class ReduceAction70
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3197,13 +3423,15 @@ private class ReduceAction68
                                                null,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction69
+private class ReduceAction71
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3244,13 +3472,15 @@ private class ReduceAction69
                                                null,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
-                                               null
+                                               null,
+                                               null,
+                                               null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction70
+private class ReduceAction72
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3291,13 +3521,15 @@ private class ReduceAction70
                                                pannotationsnode10,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction71
+private class ReduceAction73
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3341,13 +3573,15 @@ private class ReduceAction71
                                                pannotationsnode10,
                                                pexterncallsnode11,
                                                pexterncodeblocknode12,
+                                               null,
+                                               null,
                                                null
                                        )
                                        node_list = ppropdefnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction72
+private class ReduceAction74
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3358,19 +3592,32 @@ private class ReduceAction72
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction74
+private class ReduceAction76
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pannotationsnode1 = nodearraylist2
+                                       var listnode6 = new Array[Object]
+                                       var tkwisnode2 = nodearraylist1
+                                       assert tkwisnode2 isa nullable TKwis
+                                       var listnode5 = nodearraylist2
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
+                                               tkwisnode2,
+                                               null,
+                                               null,
+                                               listnode6,
+                                               null,
+                                               null
+                                       )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction75
+private class ReduceAction77
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3379,12 +3626,27 @@ private class ReduceAction75
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pannotationsnode1 = nodearraylist3
+                                       var listnode6 = new Array[Object]
+                                       var tkwisnode2 = nodearraylist1
+                                       assert tkwisnode2 isa nullable TKwis
+                                       var listnode5 = nodearraylist3
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tkwendnode8 = nodearraylist4
+                                       assert tkwendnode8 isa nullable TKwend
+                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
+                                               tkwisnode2,
+                                               null,
+                                               null,
+                                               listnode6,
+                                               null,
+                                               tkwendnode8
+                                       )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction78
+private class ReduceAction80
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3392,12 +3654,25 @@ private class ReduceAction78
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pannotationsnode1 = nodearraylist3
+                                       var listnode6 = new Array[Object]
+                                       var tkwisnode2 = nodearraylist1
+                                       assert tkwisnode2 isa nullable TKwis
+                                       var listnode5 = nodearraylist3
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
+                                               tkwisnode2,
+                                               null,
+                                               null,
+                                               listnode6,
+                                               null,
+                                               null
+                                       )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction79
+private class ReduceAction81
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3409,7 +3684,7 @@ private class ReduceAction79
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction80
+private class ReduceAction82
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3425,7 +3700,7 @@ private class ReduceAction80
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction81
+private class ReduceAction83
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3441,7 +3716,7 @@ private class ReduceAction81
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction82
+private class ReduceAction84
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3457,7 +3732,7 @@ private class ReduceAction82
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction83
+private class ReduceAction85
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3473,7 +3748,7 @@ private class ReduceAction83
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction84
+private class ReduceAction86
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3488,7 +3763,7 @@ private class ReduceAction84
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction85
+private class ReduceAction87
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3503,7 +3778,7 @@ private class ReduceAction85
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction86
+private class ReduceAction88
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3518,7 +3793,7 @@ private class ReduceAction86
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction87
+private class ReduceAction89
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3533,7 +3808,7 @@ private class ReduceAction87
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction88
+private class ReduceAction90
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3548,7 +3823,7 @@ private class ReduceAction88
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction89
+private class ReduceAction91
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3563,7 +3838,7 @@ private class ReduceAction89
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction90
+private class ReduceAction92
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3578,7 +3853,7 @@ private class ReduceAction90
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction91
+private class ReduceAction93
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3593,7 +3868,7 @@ private class ReduceAction91
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction92
+private class ReduceAction94
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3608,7 +3883,7 @@ private class ReduceAction92
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction93
+private class ReduceAction95
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3623,7 +3898,7 @@ private class ReduceAction93
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction94
+private class ReduceAction96
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3638,7 +3913,7 @@ private class ReduceAction94
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction95
+private class ReduceAction97
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3653,7 +3928,7 @@ private class ReduceAction95
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction96
+private class ReduceAction98
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3668,7 +3943,7 @@ private class ReduceAction96
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction97
+private class ReduceAction99
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3683,7 +3958,7 @@ private class ReduceAction97
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction98
+private class ReduceAction100
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3698,7 +3973,7 @@ private class ReduceAction98
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction99
+private class ReduceAction101
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3713,7 +3988,7 @@ private class ReduceAction99
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction100
+private class ReduceAction102
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3728,7 +4003,7 @@ private class ReduceAction100
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction101
+private class ReduceAction103
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3743,7 +4018,7 @@ private class ReduceAction101
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction102
+private class ReduceAction104
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3762,7 +4037,7 @@ private class ReduceAction102
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction103
+private class ReduceAction105
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3777,7 +4052,7 @@ private class ReduceAction103
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction104
+private class ReduceAction106
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3796,7 +4071,7 @@ private class ReduceAction104
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction105
+private class ReduceAction107
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3819,7 +4094,7 @@ private class ReduceAction105
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction106
+private class ReduceAction108
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3834,7 +4109,7 @@ private class ReduceAction106
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction107
+private class ReduceAction109
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3865,7 +4140,7 @@ private class ReduceAction107
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction108
+private class ReduceAction110
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3893,7 +4168,7 @@ private class ReduceAction108
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction109
+private class ReduceAction111
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3913,7 +4188,7 @@ private class ReduceAction109
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction110
+private class ReduceAction112
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3930,7 +4205,7 @@ private class ReduceAction110
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction111
+private class ReduceAction113
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3946,7 +4221,7 @@ private class ReduceAction111
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction112
+private class ReduceAction114
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3966,7 +4241,7 @@ private class ReduceAction112
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction114
+private class ReduceAction116
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -3979,7 +4254,7 @@ private class ReduceAction114
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction115
+private class ReduceAction117
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4000,7 +4275,7 @@ private class ReduceAction115
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction116
+private class ReduceAction118
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4021,7 +4296,7 @@ private class ReduceAction116
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction117
+private class ReduceAction119
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4045,7 +4320,7 @@ private class ReduceAction117
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction118
+private class ReduceAction120
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4069,7 +4344,7 @@ private class ReduceAction118
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction119
+private class ReduceAction121
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4096,7 +4371,7 @@ private class ReduceAction119
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction120
+private class ReduceAction122
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4120,7 +4395,7 @@ private class ReduceAction120
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction121
+private class ReduceAction123
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4148,7 +4423,7 @@ private class ReduceAction121
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction123
+private class ReduceAction125
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4161,7 +4436,7 @@ private class ReduceAction123
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction124
+private class ReduceAction126
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4172,7 +4447,7 @@ private class ReduceAction124
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction126
+private class ReduceAction128
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4187,7 +4462,7 @@ private class ReduceAction126
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction127
+private class ReduceAction129
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4202,7 +4477,7 @@ private class ReduceAction127
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction128
+private class ReduceAction130
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4225,7 +4500,7 @@ private class ReduceAction128
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction129
+private class ReduceAction131
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4240,7 +4515,7 @@ private class ReduceAction129
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction130
+private class ReduceAction132
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4272,7 +4547,7 @@ private class ReduceAction130
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction131
+private class ReduceAction133
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4300,7 +4575,7 @@ private class ReduceAction131
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction132
+private class ReduceAction134
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4329,7 +4604,7 @@ private class ReduceAction132
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction133
+private class ReduceAction135
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4354,7 +4629,7 @@ private class ReduceAction133
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction134
+private class ReduceAction136
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4388,7 +4663,7 @@ private class ReduceAction134
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction135
+private class ReduceAction137
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4418,7 +4693,7 @@ private class ReduceAction135
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction137
+private class ReduceAction139
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4429,7 +4704,7 @@ private class ReduceAction137
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction138
+private class ReduceAction140
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4450,7 +4725,7 @@ private class ReduceAction138
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction139
+private class ReduceAction141
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4466,7 +4741,7 @@ private class ReduceAction139
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction140
+private class ReduceAction142
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4485,7 +4760,7 @@ private class ReduceAction140
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction141
+private class ReduceAction143
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4496,7 +4771,7 @@ private class ReduceAction141
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction143
+private class ReduceAction145
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4508,29 +4783,31 @@ private class ReduceAction143
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction144
+private class ReduceAction146
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode4 = new Array[Object]
+                                       var listnode5 = new Array[Object]
                                        var tclassidnode3 = nodearraylist1
                                        assert tclassidnode3 isa nullable TClassid
-                                       var pannotationsnode5 = nodearraylist2
-                                       assert pannotationsnode5 isa nullable AAnnotations
+                                       var pannotationsnode7 = nodearraylist2
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                null,
                                                tclassidnode3,
-                                               listnode4,
-                                               pannotationsnode5
+                                               null,
+                                               listnode5,
+                                               null,
+                                               pannotationsnode7
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction145
+private class ReduceAction147
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4538,24 +4815,26 @@ private class ReduceAction145
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode4 = new Array[Object]
+                                       var listnode5 = new Array[Object]
                                        var tkwnullablenode2 = nodearraylist1
                                        assert tkwnullablenode2 isa nullable TKwnullable
                                        var tclassidnode3 = nodearraylist2
                                        assert tclassidnode3 isa nullable TClassid
-                                       var pannotationsnode5 = nodearraylist3
-                                       assert pannotationsnode5 isa nullable AAnnotations
+                                       var pannotationsnode7 = nodearraylist3
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                tkwnullablenode2,
                                                tclassidnode3,
-                                               listnode4,
-                                               pannotationsnode5
+                                               null,
+                                               listnode5,
+                                               null,
+                                               pannotationsnode7
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction146
+private class ReduceAction148
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4567,25 +4846,31 @@ private class ReduceAction146
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
+                                       var listnode6 = new Array[Object]
                                        var tclassidnode3 = nodearraylist1
                                        assert tclassidnode3 isa nullable TClassid
-                                       var listnode4 = nodearraylist4
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var pannotationsnode6 = nodearraylist7
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tobranode4 = nodearraylist2
+                                       assert tobranode4 isa nullable TObra
+                                       var listnode5 = nodearraylist4
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tcbranode7 = nodearraylist6
+                                       assert tcbranode7 isa nullable TCbra
+                                       var pannotationsnode8 = nodearraylist7
+                                       assert pannotationsnode8 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                null,
                                                tclassidnode3,
-                                               listnode5,
-                                               pannotationsnode6
+                                               tobranode4,
+                                               listnode6,
+                                               tcbranode7,
+                                               pannotationsnode8
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction147
+private class ReduceAction149
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4598,27 +4883,33 @@ private class ReduceAction147
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
+                                       var listnode6 = new Array[Object]
                                        var tkwnullablenode2 = nodearraylist1
                                        assert tkwnullablenode2 isa nullable TKwnullable
                                        var tclassidnode3 = nodearraylist2
                                        assert tclassidnode3 isa nullable TClassid
-                                       var listnode4 = nodearraylist5
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var pannotationsnode6 = nodearraylist8
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tobranode4 = nodearraylist3
+                                       assert tobranode4 isa nullable TObra
+                                       var listnode5 = nodearraylist5
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tcbranode7 = nodearraylist7
+                                       assert tcbranode7 isa nullable TCbra
+                                       var pannotationsnode8 = nodearraylist8
+                                       assert pannotationsnode8 isa nullable AAnnotations
                                        var ptypenode1: nullable AType = new AType.init_atype(
                                                tkwnullablenode2,
                                                tclassidnode3,
-                                               listnode5,
-                                               pannotationsnode6
+                                               tobranode4,
+                                               listnode6,
+                                               tcbranode7,
+                                               pannotationsnode8
                                        )
                                        node_list = ptypenode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction148
+private class ReduceAction150
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4633,7 +4924,7 @@ private class ReduceAction148
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction149
+private class ReduceAction151
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4652,7 +4943,7 @@ private class ReduceAction149
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction150
+private class ReduceAction152
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4665,7 +4956,7 @@ private class ReduceAction150
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction154
+private class ReduceAction156
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4677,7 +4968,7 @@ private class ReduceAction154
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction155
+private class ReduceAction157
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4695,7 +4986,7 @@ private class ReduceAction155
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction156
+private class ReduceAction158
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4712,7 +5003,7 @@ private class ReduceAction156
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction157
+private class ReduceAction159
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4723,7 +5014,7 @@ private class ReduceAction157
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction158
+private class ReduceAction160
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4743,7 +5034,7 @@ private class ReduceAction158
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction159
+private class ReduceAction161
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4767,7 +5058,7 @@ private class ReduceAction159
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction160
+private class ReduceAction162
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4788,7 +5079,7 @@ private class ReduceAction160
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction161
+private class ReduceAction163
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4813,7 +5104,7 @@ private class ReduceAction161
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction162
+private class ReduceAction164
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4837,7 +5128,7 @@ private class ReduceAction162
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction163
+private class ReduceAction165
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4865,7 +5156,7 @@ private class ReduceAction163
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction167
+private class ReduceAction169
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4881,7 +5172,7 @@ private class ReduceAction167
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction168
+private class ReduceAction170
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4900,7 +5191,7 @@ private class ReduceAction168
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction169
+private class ReduceAction171
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4916,7 +5207,7 @@ private class ReduceAction169
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction170
+private class ReduceAction172
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4935,7 +5226,7 @@ private class ReduceAction170
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction171
+private class ReduceAction173
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4950,7 +5241,7 @@ private class ReduceAction171
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction172
+private class ReduceAction174
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4966,7 +5257,7 @@ private class ReduceAction172
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction173
+private class ReduceAction175
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -4985,7 +5276,7 @@ private class ReduceAction173
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction181
+private class ReduceAction183
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5010,7 +5301,7 @@ private class ReduceAction181
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction182
+private class ReduceAction184
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5036,7 +5327,7 @@ private class ReduceAction182
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction183
+private class ReduceAction185
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5063,7 +5354,7 @@ private class ReduceAction183
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction185
+private class ReduceAction187
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5084,7 +5375,7 @@ private class ReduceAction185
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction186
+private class ReduceAction188
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5106,7 +5397,7 @@ private class ReduceAction186
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction187
+private class ReduceAction189
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5129,7 +5420,7 @@ private class ReduceAction187
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction189
+private class ReduceAction191
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5152,7 +5443,7 @@ private class ReduceAction189
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction190
+private class ReduceAction192
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5177,7 +5468,7 @@ private class ReduceAction190
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction191
+private class ReduceAction193
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5198,7 +5489,7 @@ private class ReduceAction191
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction192
+private class ReduceAction194
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5224,7 +5515,7 @@ private class ReduceAction192
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction193
+private class ReduceAction195
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5251,7 +5542,7 @@ private class ReduceAction193
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction195
+private class ReduceAction197
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5273,7 +5564,7 @@ private class ReduceAction195
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction196
+private class ReduceAction198
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5296,7 +5587,7 @@ private class ReduceAction196
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction198
+private class ReduceAction200
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5324,7 +5615,7 @@ private class ReduceAction198
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction199
+private class ReduceAction201
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5340,7 +5631,7 @@ private class ReduceAction199
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction200
+private class ReduceAction202
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5359,7 +5650,7 @@ private class ReduceAction200
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction201
+private class ReduceAction203
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5385,7 +5676,7 @@ private class ReduceAction201
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction202
+private class ReduceAction204
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5414,7 +5705,7 @@ private class ReduceAction202
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction203
+private class ReduceAction205
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5447,7 +5738,7 @@ private class ReduceAction203
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction204
+private class ReduceAction206
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5483,7 +5774,7 @@ private class ReduceAction204
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction205
+private class ReduceAction207
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5513,7 +5804,7 @@ private class ReduceAction205
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction206
+private class ReduceAction208
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5539,7 +5830,7 @@ private class ReduceAction206
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction207
+private class ReduceAction209
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5572,7 +5863,7 @@ private class ReduceAction207
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction208
+private class ReduceAction210
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5606,7 +5897,7 @@ private class ReduceAction208
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction209
+private class ReduceAction211
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5640,7 +5931,7 @@ private class ReduceAction209
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction210
+private class ReduceAction212
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5675,7 +5966,7 @@ private class ReduceAction210
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction211
+private class ReduceAction213
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5710,7 +6001,7 @@ private class ReduceAction211
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction212
+private class ReduceAction214
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5746,7 +6037,7 @@ private class ReduceAction212
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction215
+private class ReduceAction217
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5775,7 +6066,7 @@ private class ReduceAction215
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction216
+private class ReduceAction218
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5805,7 +6096,7 @@ private class ReduceAction216
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction217
+private class ReduceAction219
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5835,7 +6126,7 @@ private class ReduceAction217
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction218
+private class ReduceAction220
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5866,7 +6157,7 @@ private class ReduceAction218
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction219
+private class ReduceAction221
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5897,7 +6188,7 @@ private class ReduceAction219
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction220
+private class ReduceAction222
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5929,7 +6220,7 @@ private class ReduceAction220
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction223
+private class ReduceAction225
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5956,7 +6247,7 @@ private class ReduceAction223
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction224
+private class ReduceAction226
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -5986,7 +6277,7 @@ private class ReduceAction224
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction225
+private class ReduceAction227
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6012,7 +6303,7 @@ private class ReduceAction225
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction226
+private class ReduceAction228
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6045,7 +6336,7 @@ private class ReduceAction226
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction227
+private class ReduceAction229
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6079,7 +6370,7 @@ private class ReduceAction227
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction228
+private class ReduceAction230
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6113,7 +6404,7 @@ private class ReduceAction228
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction229
+private class ReduceAction231
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6148,7 +6439,7 @@ private class ReduceAction229
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction230
+private class ReduceAction232
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6183,7 +6474,7 @@ private class ReduceAction230
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction231
+private class ReduceAction233
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6219,7 +6510,7 @@ private class ReduceAction231
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction234
+private class ReduceAction236
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6248,7 +6539,7 @@ private class ReduceAction234
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction235
+private class ReduceAction237
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6278,7 +6569,7 @@ private class ReduceAction235
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction236
+private class ReduceAction238
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6308,7 +6599,7 @@ private class ReduceAction236
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction237
+private class ReduceAction239
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6339,7 +6630,7 @@ private class ReduceAction237
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction238
+private class ReduceAction240
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6370,7 +6661,7 @@ private class ReduceAction238
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction239
+private class ReduceAction241
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6402,7 +6693,7 @@ private class ReduceAction239
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction242
+private class ReduceAction244
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6429,7 +6720,7 @@ private class ReduceAction242
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction243
+private class ReduceAction245
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6444,7 +6735,7 @@ private class ReduceAction243
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction244
+private class ReduceAction246
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6459,7 +6750,7 @@ private class ReduceAction244
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction245
+private class ReduceAction247
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6474,7 +6765,7 @@ private class ReduceAction245
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction246
+private class ReduceAction248
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6489,7 +6780,7 @@ private class ReduceAction246
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction247
+private class ReduceAction249
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6504,7 +6795,7 @@ private class ReduceAction247
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction248
+private class ReduceAction250
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6519,7 +6810,7 @@ private class ReduceAction248
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction249
+private class ReduceAction251
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6534,7 +6825,7 @@ private class ReduceAction249
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction250
+private class ReduceAction252
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6549,7 +6840,7 @@ private class ReduceAction250
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction251
+private class ReduceAction253
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6564,7 +6855,7 @@ private class ReduceAction251
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction252
+private class ReduceAction254
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6579,7 +6870,7 @@ private class ReduceAction252
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction253
+private class ReduceAction255
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6594,7 +6885,7 @@ private class ReduceAction253
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction254
+private class ReduceAction256
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6617,7 +6908,7 @@ private class ReduceAction254
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction255
+private class ReduceAction257
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6637,7 +6928,7 @@ private class ReduceAction255
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction256
+private class ReduceAction258
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6654,21 +6945,27 @@ private class ReduceAction256
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist6
-                                       assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist8
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist6
                                        assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode6 = nodearraylist7
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist8
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               pexprnode5
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               tkwelsenode6,
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction257
+private class ReduceAction259
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6683,23 +6980,28 @@ private class ReduceAction257
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist6
-                                       assert pexprnode4 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist6
+                                       assert pexprnode5 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction258
+private class ReduceAction260
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist9 = p.pop
                                        var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
@@ -6712,25 +7014,32 @@ private class ReduceAction258
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist8
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist7
                                        assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode6 = nodearraylist8
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist9
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               pexprnode5
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               tkwelsenode6,
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction259
+private class ReduceAction261
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
                                        var nodearraylist5 = p.pop
                                        var nodearraylist4 = p.pop
@@ -6741,23 +7050,65 @@ private class ReduceAction259
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist6
-                                       assert pexprnode5 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var tkwelsenode6 = nodearraylist6
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist7
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
+                                               tkwthennode4,
                                                null,
-                                               pexprnode5
+                                               tkwelsenode6,
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction260
+private class ReduceAction262
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist8 = p.pop
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tkwifnode2 = nodearraylist1
+                                       assert tkwifnode2 isa nullable TKwif
+                                       var pexprnode3 = nodearraylist3
+                                       assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var tkwelsenode6 = nodearraylist7
+                                       assert tkwelsenode6 isa nullable TKwelse
+                                       var pexprnode7 = nodearraylist8
+                                       assert pexprnode7 isa nullable AExpr
+                                       var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
+                                               tkwifnode2,
+                                               pexprnode3,
+                                               tkwthennode4,
+                                               null,
+                                               tkwelsenode6,
+                                               pexprnode7
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction263
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist8 = p.pop
                                        var nodearraylist7 = p.pop
                                        var nodearraylist6 = p.pop
                                        var nodearraylist5 = p.pop
@@ -6769,19 +7120,88 @@ private class ReduceAction260
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
                                        var pexprnode5 = nodearraylist7
                                        assert pexprnode5 isa nullable AExpr
+                                       var pexprnode7 = nodearraylist8
+                                       assert pexprnode7 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
+                                               tkwthennode4,
+                                               pexprnode5,
                                                null,
-                                               pexprnode5
+                                               pexprnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction263
+private class ReduceAction264
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tkwifnode2 = nodearraylist1
+                                       assert tkwifnode2 isa nullable TKwif
+                                       var pexprnode3 = nodearraylist3
+                                       assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode7 = nodearraylist6
+                                       assert pexprnode7 isa nullable AExpr
+                                       var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
+                                               tkwifnode2,
+                                               pexprnode3,
+                                               tkwthennode4,
+                                               null,
+                                               null,
+                                               pexprnode7
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction265
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist7 = p.pop
+                                       var nodearraylist6 = p.pop
+                                       var nodearraylist5 = p.pop
+                                       var nodearraylist4 = p.pop
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var tkwifnode2 = nodearraylist1
+                                       assert tkwifnode2 isa nullable TKwif
+                                       var pexprnode3 = nodearraylist3
+                                       assert pexprnode3 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode7 = nodearraylist7
+                                       assert pexprnode7 isa nullable AExpr
+                                       var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
+                                               tkwifnode2,
+                                               pexprnode3,
+                                               tkwthennode4,
+                                               null,
+                                               null,
+                                               pexprnode7
+                                       )
+                                       node_list = pexprnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction267
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6804,7 +7224,7 @@ private class ReduceAction263
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction264
+private class ReduceAction268
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6824,7 +7244,7 @@ private class ReduceAction264
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction265
+private class ReduceAction269
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6857,7 +7277,7 @@ private class ReduceAction265
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction266
+private class ReduceAction270
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6887,7 +7307,7 @@ private class ReduceAction266
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction267
+private class ReduceAction271
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6909,27 +7329,30 @@ private class ReduceAction267
                                        var listnode3 = nodearraylist3
                                        assert listnode3 isa Array[Object]
                                        listnode4 = concat(listnode4, listnode3)
-                                       var pexprnode5 = nodearraylist7
-                                       assert pexprnode5 isa nullable AExpr
-                                       var tkwdonode6 = nodearraylist9
-                                       assert tkwdonode6 isa nullable TKwdo
-                                       var pexprnode7 = nodearraylist10
-                                       assert pexprnode7 isa nullable AExpr
-                                       var plabelnode8 = nodearraylist11
-                                       assert plabelnode8 isa nullable ALabel
+                                       var tkwinnode5 = nodearraylist5
+                                       assert tkwinnode5 isa nullable TKwin
+                                       var pexprnode6 = nodearraylist7
+                                       assert pexprnode6 isa nullable AExpr
+                                       var tkwdonode7 = nodearraylist9
+                                       assert tkwdonode7 isa nullable TKwdo
+                                       var pexprnode8 = nodearraylist10
+                                       assert pexprnode8 isa nullable AExpr
+                                       var plabelnode9 = nodearraylist11
+                                       assert plabelnode9 isa nullable ALabel
                                        var pexprnode1: nullable AForExpr = new AForExpr.init_aforexpr(
                                                tkwfornode2,
                                                listnode4,
-                                               pexprnode5,
-                                               tkwdonode6,
-                                               pexprnode7,
-                                               plabelnode8
+                                               tkwinnode5,
+                                               pexprnode6,
+                                               tkwdonode7,
+                                               pexprnode8,
+                                               plabelnode9
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction268
+private class ReduceAction272
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -6950,25 +7373,28 @@ private class ReduceAction268
                                        var listnode3 = nodearraylist3
                                        assert listnode3 isa Array[Object]
                                        listnode4 = concat(listnode4, listnode3)
-                                       var pexprnode5 = nodearraylist7
-                                       assert pexprnode5 isa nullable AExpr
-                                       var tkwdonode6 = nodearraylist9
-                                       assert tkwdonode6 isa nullable TKwdo
-                                       var pexprnode7 = nodearraylist10
-                                       assert pexprnode7 isa nullable AExpr
+                                       var tkwinnode5 = nodearraylist5
+                                       assert tkwinnode5 isa nullable TKwin
+                                       var pexprnode6 = nodearraylist7
+                                       assert pexprnode6 isa nullable AExpr
+                                       var tkwdonode7 = nodearraylist9
+                                       assert tkwdonode7 isa nullable TKwdo
+                                       var pexprnode8 = nodearraylist10
+                                       assert pexprnode8 isa nullable AExpr
                                        var pexprnode1: nullable AForExpr = new AForExpr.init_aforexpr(
                                                tkwfornode2,
                                                listnode4,
-                                               pexprnode5,
-                                               tkwdonode6,
-                                               pexprnode7,
+                                               tkwinnode5,
+                                               pexprnode6,
+                                               tkwdonode7,
+                                               pexprnode8,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction269
+private class ReduceAction273
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7001,7 +7427,7 @@ private class ReduceAction269
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction270
+private class ReduceAction274
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7031,7 +7457,7 @@ private class ReduceAction270
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction271
+private class ReduceAction275
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7061,7 +7487,7 @@ private class ReduceAction271
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction272
+private class ReduceAction276
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7094,7 +7520,7 @@ private class ReduceAction272
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction274
+private class ReduceAction278
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7107,19 +7533,22 @@ private class ReduceAction274
                                        assert tkwassertnode2 isa nullable TKwassert
                                        var pexprnode4 = nodearraylist2
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist4
-                                       assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode5 = nodearraylist3
+                                       assert tkwelsenode5 isa nullable TKwelse
+                                       var pexprnode6 = nodearraylist4
+                                       assert pexprnode6 isa nullable AExpr
                                        var pexprnode1: nullable AAssertExpr = new AAssertExpr.init_aassertexpr(
                                                tkwassertnode2,
                                                null,
                                                pexprnode4,
-                                               pexprnode5
+                                               tkwelsenode5,
+                                               pexprnode6
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction275
+private class ReduceAction279
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7135,19 +7564,22 @@ private class ReduceAction275
                                        assert tidnode3 isa nullable TId
                                        var pexprnode4 = nodearraylist3
                                        assert pexprnode4 isa nullable AExpr
-                                       var pexprnode5 = nodearraylist5
-                                       assert pexprnode5 isa nullable AExpr
+                                       var tkwelsenode5 = nodearraylist4
+                                       assert tkwelsenode5 isa nullable TKwelse
+                                       var pexprnode6 = nodearraylist5
+                                       assert pexprnode6 isa nullable AExpr
                                        var pexprnode1: nullable AAssertExpr = new AAssertExpr.init_aassertexpr(
                                                tkwassertnode2,
                                                tidnode3,
                                                pexprnode4,
-                                               pexprnode5
+                                               tkwelsenode5,
+                                               pexprnode6
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction276
+private class ReduceAction280
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7162,13 +7594,14 @@ private class ReduceAction276
                                                tkwassertnode2,
                                                null,
                                                pexprnode4,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction277
+private class ReduceAction281
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7186,13 +7619,14 @@ private class ReduceAction277
                                                tkwassertnode2,
                                                tidnode3,
                                                pexprnode4,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction278
+private class ReduceAction282
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7204,7 +7638,7 @@ private class ReduceAction278
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction280
+private class ReduceAction284
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7244,7 +7678,7 @@ private class ReduceAction280
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction282
+private class ReduceAction286
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7268,7 +7702,7 @@ private class ReduceAction282
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction283
+private class ReduceAction287
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7292,7 +7726,7 @@ private class ReduceAction283
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction284
+private class ReduceAction288
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7320,7 +7754,7 @@ private class ReduceAction284
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction285
+private class ReduceAction289
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7344,7 +7778,7 @@ private class ReduceAction285
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction287
+private class ReduceAction291
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7364,7 +7798,7 @@ private class ReduceAction287
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction289
+private class ReduceAction293
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7388,7 +7822,7 @@ private class ReduceAction289
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction290
+private class ReduceAction294
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7412,7 +7846,7 @@ private class ReduceAction290
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction291
+private class ReduceAction295
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7436,7 +7870,7 @@ private class ReduceAction291
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction292
+private class ReduceAction296
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7460,7 +7894,7 @@ private class ReduceAction292
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction293
+private class ReduceAction297
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7484,7 +7918,7 @@ private class ReduceAction293
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction294
+private class ReduceAction298
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7508,7 +7942,7 @@ private class ReduceAction294
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction295
+private class ReduceAction299
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7532,7 +7966,7 @@ private class ReduceAction295
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction296
+private class ReduceAction300
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7556,7 +7990,7 @@ private class ReduceAction296
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction298
+private class ReduceAction302
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7580,7 +8014,7 @@ private class ReduceAction298
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction300
+private class ReduceAction304
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7604,7 +8038,7 @@ private class ReduceAction300
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction302
+private class ReduceAction306
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7628,7 +8062,7 @@ private class ReduceAction302
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction304
+private class ReduceAction308
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7652,7 +8086,7 @@ private class ReduceAction304
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction305
+private class ReduceAction309
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7676,7 +8110,7 @@ private class ReduceAction305
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction307
+private class ReduceAction311
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7700,7 +8134,7 @@ private class ReduceAction307
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction308
+private class ReduceAction312
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7724,7 +8158,7 @@ private class ReduceAction308
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction310
+private class ReduceAction314
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7748,7 +8182,7 @@ private class ReduceAction310
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction311
+private class ReduceAction315
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7772,7 +8206,7 @@ private class ReduceAction311
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction312
+private class ReduceAction316
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7796,7 +8230,7 @@ private class ReduceAction312
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction314
+private class ReduceAction318
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7820,7 +8254,7 @@ private class ReduceAction314
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction316
+private class ReduceAction320
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7839,7 +8273,7 @@ private class ReduceAction316
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction317
+private class ReduceAction321
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7858,7 +8292,7 @@ private class ReduceAction317
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction318
+private class ReduceAction322
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7877,7 +8311,7 @@ private class ReduceAction318
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction319
+private class ReduceAction323
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7897,7 +8331,7 @@ private class ReduceAction319
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction321
+private class ReduceAction325
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7922,7 +8356,7 @@ private class ReduceAction321
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction322
+private class ReduceAction326
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7948,7 +8382,7 @@ private class ReduceAction322
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction323
+private class ReduceAction327
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7974,7 +8408,7 @@ private class ReduceAction323
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction324
+private class ReduceAction328
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -7996,7 +8430,7 @@ private class ReduceAction324
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction326
+private class ReduceAction330
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8018,7 +8452,7 @@ private class ReduceAction326
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction327
+private class ReduceAction331
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8036,7 +8470,7 @@ private class ReduceAction327
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction329
+private class ReduceAction333
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8062,7 +8496,7 @@ private class ReduceAction329
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction331
+private class ReduceAction335
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8089,7 +8523,7 @@ private class ReduceAction331
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction333
+private class ReduceAction337
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8117,7 +8551,7 @@ private class ReduceAction333
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction337
+private class ReduceAction341
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8139,7 +8573,7 @@ private class ReduceAction337
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction339
+private class ReduceAction343
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8162,7 +8596,7 @@ private class ReduceAction339
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction341
+private class ReduceAction345
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8186,7 +8620,7 @@ private class ReduceAction341
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction345
+private class ReduceAction349
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8210,7 +8644,7 @@ private class ReduceAction345
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction347
+private class ReduceAction351
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8236,7 +8670,7 @@ private class ReduceAction347
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction349
+private class ReduceAction353
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8258,7 +8692,7 @@ private class ReduceAction349
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction350
+private class ReduceAction354
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8277,7 +8711,7 @@ private class ReduceAction350
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction351
+private class ReduceAction355
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8307,7 +8741,7 @@ private class ReduceAction351
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction352
+private class ReduceAction356
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8338,7 +8772,7 @@ private class ReduceAction352
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction353
+private class ReduceAction357
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8369,7 +8803,7 @@ private class ReduceAction353
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction354
+private class ReduceAction358
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8401,7 +8835,7 @@ private class ReduceAction354
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction355
+private class ReduceAction359
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8433,7 +8867,7 @@ private class ReduceAction355
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction356
+private class ReduceAction360
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8466,7 +8900,7 @@ private class ReduceAction356
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction359
+private class ReduceAction363
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8502,7 +8936,7 @@ private class ReduceAction359
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction360
+private class ReduceAction364
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8543,7 +8977,7 @@ private class ReduceAction360
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction361
+private class ReduceAction365
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8576,7 +9010,7 @@ private class ReduceAction361
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction363
+private class ReduceAction367
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8595,7 +9029,7 @@ private class ReduceAction363
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction364
+private class ReduceAction368
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8618,7 +9052,7 @@ private class ReduceAction364
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction365
+private class ReduceAction369
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8637,7 +9071,7 @@ private class ReduceAction365
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction366
+private class ReduceAction370
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8656,7 +9090,7 @@ private class ReduceAction366
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction367
+private class ReduceAction371
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8675,7 +9109,7 @@ private class ReduceAction367
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction368
+private class ReduceAction372
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8694,7 +9128,7 @@ private class ReduceAction368
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction369
+private class ReduceAction373
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8713,7 +9147,7 @@ private class ReduceAction369
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction370
+private class ReduceAction374
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8732,7 +9166,7 @@ private class ReduceAction370
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction371
+private class ReduceAction375
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8751,7 +9185,7 @@ private class ReduceAction371
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction372
+private class ReduceAction376
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8770,7 +9204,7 @@ private class ReduceAction372
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction373
+private class ReduceAction377
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8789,7 +9223,7 @@ private class ReduceAction373
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction376
+private class ReduceAction380
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8808,24 +9242,27 @@ private class ReduceAction376
                                        assert tobranode2 isa nullable TObra
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
-                                       var tcbranode5 = nodearraylist9
-                                       assert tcbranode5 isa nullable TCbra
-                                       var pannotationsnode6 = nodearraylist10
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tdotdotnode4 = nodearraylist5
+                                       assert tdotdotnode4 isa nullable TDotdot
+                                       var pexprnode5 = nodearraylist7
+                                       assert pexprnode5 isa nullable AExpr
+                                       var tcbranode6 = nodearraylist9
+                                       assert tcbranode6 isa nullable TCbra
+                                       var pannotationsnode7 = nodearraylist10
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var pexprnode1: nullable ACrangeExpr = new ACrangeExpr.init_acrangeexpr(
                                                tobranode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               tcbranode5,
-                                               pannotationsnode6
+                                               tdotdotnode4,
+                                               pexprnode5,
+                                               tcbranode6,
+                                               pannotationsnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction377
+private class ReduceAction381
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8844,24 +9281,27 @@ private class ReduceAction377
                                        assert tobranode2 isa nullable TObra
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
-                                       var tobranode5 = nodearraylist9
-                                       assert tobranode5 isa nullable TObra
-                                       var pannotationsnode6 = nodearraylist10
-                                       assert pannotationsnode6 isa nullable AAnnotations
+                                       var tdotdotnode4 = nodearraylist5
+                                       assert tdotdotnode4 isa nullable TDotdot
+                                       var pexprnode5 = nodearraylist7
+                                       assert pexprnode5 isa nullable AExpr
+                                       var tobranode6 = nodearraylist9
+                                       assert tobranode6 isa nullable TObra
+                                       var pannotationsnode7 = nodearraylist10
+                                       assert pannotationsnode7 isa nullable AAnnotations
                                        var pexprnode1: nullable AOrangeExpr = new AOrangeExpr.init_aorangeexpr(
                                                tobranode2,
                                                pexprnode3,
-                                               pexprnode4,
-                                               tobranode5,
-                                               pannotationsnode6
+                                               tdotdotnode4,
+                                               pexprnode5,
+                                               tobranode6,
+                                               pannotationsnode7
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction378
+private class ReduceAction382
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8895,7 +9335,7 @@ private class ReduceAction378
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction379
+private class ReduceAction383
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8924,7 +9364,7 @@ private class ReduceAction379
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction381
+private class ReduceAction385
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8947,7 +9387,7 @@ private class ReduceAction381
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction382
+private class ReduceAction386
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8960,7 +9400,7 @@ private class ReduceAction382
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction383
+private class ReduceAction387
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8975,7 +9415,7 @@ private class ReduceAction383
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction384
+private class ReduceAction388
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -8994,7 +9434,7 @@ private class ReduceAction384
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction386
+private class ReduceAction390
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9006,7 +9446,7 @@ private class ReduceAction386
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction388
+private class ReduceAction392
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9022,19 +9462,23 @@ private class ReduceAction388
                                        assert tkwifnode2 isa nullable TKwif
                                        var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
-                                       var pexprnode4 = nodearraylist7
-                                       assert pexprnode4 isa nullable AExpr
+                                       var tkwthennode4 = nodearraylist5
+                                       assert tkwthennode4 isa nullable TKwthen
+                                       var pexprnode5 = nodearraylist7
+                                       assert pexprnode5 isa nullable AExpr
                                        var pexprnode1: nullable AIfExpr = new AIfExpr.init_aifexpr(
                                                tkwifnode2,
                                                pexprnode3,
-                                               pexprnode4,
+                                               tkwthennode4,
+                                               pexprnode5,
+                                               null,
                                                null
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction389
+private class ReduceAction393
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9061,7 +9505,7 @@ private class ReduceAction389
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction390
+private class ReduceAction394
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9092,7 +9536,7 @@ private class ReduceAction390
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction391
+private class ReduceAction395
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9114,7 +9558,7 @@ private class ReduceAction391
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction392
+private class ReduceAction396
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9130,7 +9574,7 @@ private class ReduceAction392
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction393
+private class ReduceAction397
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9145,7 +9589,7 @@ private class ReduceAction393
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction396
+private class ReduceAction400
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9160,7 +9604,7 @@ private class ReduceAction396
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction397
+private class ReduceAction401
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9175,32 +9619,34 @@ private class ReduceAction397
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction398
+private class ReduceAction402
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
-                                       var tatnode2 = nodearraylist1
-                                       assert tatnode2 isa nullable TAt
-                                       var pannotationnode4 = nodearraylist2
-                                       assert pannotationnode4 isa nullable AAnnotation
-                                       if pannotationnode4 != null then
-                                               listnode5.add(pannotationnode4)
+                                       var listnode6 = new Array[Object]
+                                       var tatnode3 = nodearraylist1
+                                       assert tatnode3 isa nullable TAt
+                                       var pannotationnode5 = nodearraylist2
+                                       assert pannotationnode5 isa nullable AAnnotation
+                                       if pannotationnode5 != null then
+                                               listnode6.add(pannotationnode5)
                                        end
                                        var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
-                                               tatnode2,
                                                null,
-                                               listnode5,
+                                               tatnode3,
+                                               null,
+                                               listnode6,
+                                               null,
                                                null
                                        )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction399
+private class ReduceAction403
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9211,27 +9657,29 @@ private class ReduceAction399
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
-                                       var tatnode2 = nodearraylist1
-                                       assert tatnode2 isa nullable TAt
-                                       var toparnode3 = nodearraylist2
-                                       assert toparnode3 isa nullable TOpar
-                                       var listnode4 = nodearraylist4
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var tcparnode6 = nodearraylist6
-                                       assert tcparnode6 isa nullable TCpar
+                                       var listnode6 = new Array[Object]
+                                       var tatnode3 = nodearraylist1
+                                       assert tatnode3 isa nullable TAt
+                                       var toparnode4 = nodearraylist2
+                                       assert toparnode4 isa nullable TOpar
+                                       var listnode5 = nodearraylist4
+                                       assert listnode5 isa Array[Object]
+                                       listnode6 = concat(listnode6, listnode5)
+                                       var tcparnode7 = nodearraylist6
+                                       assert tcparnode7 isa nullable TCpar
                                        var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
-                                               tatnode2,
-                                               toparnode3,
-                                               listnode5,
-                                               tcparnode6
+                                               null,
+                                               tatnode3,
+                                               toparnode4,
+                                               listnode6,
+                                               tcparnode7,
+                                               null
                                        )
                                        node_list = pannotationsnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction400
+private class ReduceAction404
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9242,7 +9690,7 @@ private class ReduceAction400
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction402
+private class ReduceAction406
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9274,7 +9722,7 @@ private class ReduceAction402
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction403
+private class ReduceAction407
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9318,27 +9766,7 @@ private class ReduceAction403
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction404
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist1 = p.pop
-                                       var listnode5 = new Array[Object]
-                                       var listnode4 = nodearraylist1
-                                       assert listnode4 isa Array[Object]
-                                       listnode5 = concat(listnode5, listnode4)
-                                       var pannotationsnode1: nullable AAnnotations = new AAnnotations.init_aannotations(
-                                               null,
-                                               null,
-                                               listnode5,
-                                               null
-                                       )
-                                       node_list = pannotationsnode1
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction405
+private class ReduceAction408
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9353,7 +9781,7 @@ private class ReduceAction405
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction406
+private class ReduceAction409
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9372,7 +9800,7 @@ private class ReduceAction406
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction409
+private class ReduceAction412
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9407,7 +9835,7 @@ private class ReduceAction409
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction411
+private class ReduceAction414
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9420,7 +9848,7 @@ private class ReduceAction411
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction413
+private class ReduceAction415
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9453,7 +9881,7 @@ private class ReduceAction413
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction414
+private class ReduceAction416
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9489,7 +9917,7 @@ private class ReduceAction414
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction415
+private class ReduceAction417
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9533,7 +9961,7 @@ private class ReduceAction415
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction416
+private class ReduceAction418
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9580,7 +10008,7 @@ private class ReduceAction416
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction417
+private class ReduceAction419
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9617,7 +10045,7 @@ private class ReduceAction417
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction418
+private class ReduceAction420
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9643,7 +10071,7 @@ private class ReduceAction418
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction419
+private class ReduceAction421
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9672,7 +10100,7 @@ private class ReduceAction419
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction420
+private class ReduceAction422
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9709,7 +10137,7 @@ private class ReduceAction420
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction421
+private class ReduceAction423
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9749,7 +10177,7 @@ private class ReduceAction421
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction422
+private class ReduceAction424
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9779,7 +10207,7 @@ private class ReduceAction422
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction426
+private class ReduceAction428
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9794,7 +10222,7 @@ private class ReduceAction426
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction429
+private class ReduceAction431
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9815,7 +10243,7 @@ private class ReduceAction429
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction430
+private class ReduceAction432
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9832,7 +10260,7 @@ private class ReduceAction430
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction431
+private class ReduceAction433
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9847,7 +10275,7 @@ private class ReduceAction431
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction432
+private class ReduceAction434
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9862,7 +10290,7 @@ private class ReduceAction432
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction433
+private class ReduceAction435
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9877,7 +10305,7 @@ private class ReduceAction433
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction434
+private class ReduceAction436
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9892,7 +10320,7 @@ private class ReduceAction434
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction435
+private class ReduceAction437
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9918,7 +10346,7 @@ private class ReduceAction435
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction436
+private class ReduceAction438
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9940,7 +10368,7 @@ private class ReduceAction436
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction438
+private class ReduceAction440
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9959,7 +10387,7 @@ private class ReduceAction438
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction440
+private class ReduceAction442
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9972,7 +10400,7 @@ private class ReduceAction440
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction441
+private class ReduceAction443
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -9998,7 +10426,7 @@ private class ReduceAction441
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction443
+private class ReduceAction445
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10018,7 +10446,7 @@ private class ReduceAction443
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction444
+private class ReduceAction446
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10032,7 +10460,7 @@ private class ReduceAction444
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction445
+private class ReduceAction447
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10050,7 +10478,7 @@ private class ReduceAction445
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction446
+private class ReduceAction448
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10064,7 +10492,7 @@ private class ReduceAction446
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction447
+private class ReduceAction449
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10079,7 +10507,7 @@ private class ReduceAction447
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction448
+private class ReduceAction450
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10100,7 +10528,7 @@ private class ReduceAction448
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction449
+private class ReduceAction451
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10118,7 +10546,7 @@ private class ReduceAction449
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction450
+private class ReduceAction452
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10140,7 +10568,7 @@ private class ReduceAction450
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction451
+private class ReduceAction453
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10162,7 +10590,7 @@ private class ReduceAction451
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction452
+private class ReduceAction454
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10188,7 +10616,7 @@ private class ReduceAction452
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction453
+private class ReduceAction455
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10205,7 +10633,7 @@ private class ReduceAction453
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction454
+private class ReduceAction456
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10226,7 +10654,7 @@ private class ReduceAction454
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction455
+private class ReduceAction457
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10244,7 +10672,7 @@ private class ReduceAction455
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction457
+private class ReduceAction459
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10255,7 +10683,7 @@ private class ReduceAction457
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction458
+private class ReduceAction460
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10267,7 +10695,7 @@ private class ReduceAction458
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction459
+private class ReduceAction461
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10280,7 +10708,7 @@ private class ReduceAction459
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction461
+private class ReduceAction463
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10291,7 +10719,7 @@ private class ReduceAction461
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction462
+private class ReduceAction464
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10303,7 +10731,7 @@ private class ReduceAction462
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction463
+private class ReduceAction465
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10316,7 +10744,7 @@ private class ReduceAction463
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction465
+private class ReduceAction467
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10329,7 +10757,7 @@ private class ReduceAction465
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction466
+private class ReduceAction468
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10342,7 +10770,7 @@ private class ReduceAction466
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction468
+private class ReduceAction470
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10353,7 +10781,7 @@ private class ReduceAction468
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction469
+private class ReduceAction471
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10362,7 +10790,7 @@ private class ReduceAction469
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction471
+private class ReduceAction474
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10379,7 +10807,7 @@ private class ReduceAction471
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction472
+private class ReduceAction475
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10397,39 +10825,98 @@ private class ReduceAction472
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction475
+private class ReduceAction478
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pdocnode1 = nodearraylist1
+                                       node_list = null
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction480
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       node_list = null
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction481
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist2
                                        node_list = pdocnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction476
+private class ReduceAction482
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist3
+                                       node_list = pdocnode1
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction477
+private class ReduceAction484
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist4 = p.pop
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist4
+                                       node_list = pdocnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction486
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist1 = p.pop
+                                       var pdocnode1 = nodearraylist1
+                                       node_list = pdocnode1
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction487
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       p.push(p.go_to(_goto), node_list)
+       end
+end
+private class ReduceAction490
+       super ReduceAction
+       redef fun action(p: Parser)
+       do
+                                       var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
+                                       var nodearraylist1 = p.pop
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction841
+private class ReduceAction853
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10453,7 +10940,7 @@ private class ReduceAction841
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction843
+private class ReduceAction855
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10473,7 +10960,7 @@ private class ReduceAction843
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction844
+private class ReduceAction856
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10496,7 +10983,7 @@ private class ReduceAction844
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction845
+private class ReduceAction857
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10520,7 +11007,7 @@ private class ReduceAction845
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction846
+private class ReduceAction858
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10544,7 +11031,7 @@ private class ReduceAction846
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction847
+private class ReduceAction859
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10569,7 +11056,7 @@ private class ReduceAction847
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction854
+private class ReduceAction866
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10592,7 +11079,7 @@ private class ReduceAction854
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction855
+private class ReduceAction867
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10616,7 +11103,7 @@ private class ReduceAction855
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction880
+private class ReduceAction892
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10629,7 +11116,7 @@ private class ReduceAction880
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction881
+private class ReduceAction893
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10639,7 +11126,7 @@ private class ReduceAction881
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1039
+private class ReduceAction1054
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10654,7 +11141,7 @@ private class ReduceAction1039
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1040
+private class ReduceAction1055
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10673,7 +11160,7 @@ private class ReduceAction1040
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1041
+private class ReduceAction1056
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10688,7 +11175,7 @@ private class ReduceAction1041
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1042
+private class ReduceAction1057
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10707,7 +11194,7 @@ private class ReduceAction1042
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1043
+private class ReduceAction1058
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10722,7 +11209,7 @@ private class ReduceAction1043
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1044
+private class ReduceAction1059
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10741,22 +11228,26 @@ private class ReduceAction1044
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1045
+private class ReduceAction1061
        super ReduceAction
        redef fun action(p: Parser)
        do
                                        var node_list: nullable Object = null
+                                       var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var listnode2 = new Array[Object]
-                                       var pformaldefnode1 = nodearraylist1
-                                       if pformaldefnode1 != null then
-                                               listnode2.add(pformaldefnode1)
+                                       var listnode3 = new Array[Object]
+                                       var listnode1 = nodearraylist1
+                                       assert listnode1 isa Array[Object]
+                                       var pformaldefnode2 = nodearraylist2
+                                       listnode3 = concat(listnode3, listnode1)
+                                       if pformaldefnode2 != null then
+                                               listnode3.add(pformaldefnode2)
                                        end
-                                       node_list = listnode2
+                                       node_list = listnode3
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1046
+private class ReduceAction1063
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10766,16 +11257,16 @@ private class ReduceAction1046
                                        var listnode3 = new Array[Object]
                                        var listnode1 = nodearraylist1
                                        assert listnode1 isa Array[Object]
-                                       var pformaldefnode2 = nodearraylist2
+                                       var ppropdefnode2 = nodearraylist2
                                        listnode3 = concat(listnode3, listnode1)
-                                       if pformaldefnode2 != null then
-                                               listnode3.add(pformaldefnode2)
+                                       if ppropdefnode2 != null then
+                                               listnode3.add(ppropdefnode2)
                                        end
                                        node_list = listnode3
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1048
+private class ReduceAction1065
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10785,16 +11276,16 @@ private class ReduceAction1048
                                        var listnode3 = new Array[Object]
                                        var listnode1 = nodearraylist1
                                        assert listnode1 isa Array[Object]
-                                       var ppropdefnode2 = nodearraylist2
+                                       var pannotationnode2 = nodearraylist2
                                        listnode3 = concat(listnode3, listnode1)
-                                       if ppropdefnode2 != null then
-                                               listnode3.add(ppropdefnode2)
+                                       if pannotationnode2 != null then
+                                               listnode3.add(pannotationnode2)
                                        end
                                        node_list = listnode3
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1049
+private class ReduceAction1066
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10809,7 +11300,7 @@ private class ReduceAction1049
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1050
+private class ReduceAction1067
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10828,7 +11319,7 @@ private class ReduceAction1050
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1051
+private class ReduceAction1068
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10843,7 +11334,7 @@ private class ReduceAction1051
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1052
+private class ReduceAction1069
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10862,7 +11353,7 @@ private class ReduceAction1052
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1054
+private class ReduceAction1071
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10881,7 +11372,7 @@ private class ReduceAction1054
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1056
+private class ReduceAction1073
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10900,7 +11391,7 @@ private class ReduceAction1056
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1062
+private class ReduceAction1079
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10918,26 +11409,7 @@ private class ReduceAction1062
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1064
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist2 = p.pop
-                                       var nodearraylist1 = p.pop
-                                       var listnode3 = new Array[Object]
-                                       var listnode1 = nodearraylist1
-                                       assert listnode1 isa Array[Object]
-                                       var pannotationnode2 = nodearraylist2
-                                       listnode3 = concat(listnode3, listnode1)
-                                       if pannotationnode2 != null then
-                                               listnode3.add(pannotationnode2)
-                                       end
-                                       node_list = listnode3
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction1072
+private class ReduceAction1087
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10956,7 +11428,7 @@ private class ReduceAction1072
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1073
+private class ReduceAction1088
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10971,7 +11443,7 @@ private class ReduceAction1073
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1074
+private class ReduceAction1089
        super ReduceAction
        redef fun action(p: Parser)
        do
@@ -10990,37 +11462,3 @@ private class ReduceAction1074
                                        p.push(p.go_to(_goto), node_list)
        end
 end
-private class ReduceAction1075
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist1 = p.pop
-                                       var listnode2 = new Array[Object]
-                                       var teolnode1 = nodearraylist1
-                                       if teolnode1 != null then
-                                               listnode2.add(teolnode1)
-                                       end
-                                       node_list = listnode2
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
-private class ReduceAction1076
-       super ReduceAction
-       redef fun action(p: Parser)
-       do
-                                       var node_list: nullable Object = null
-                                       var nodearraylist2 = p.pop
-                                       var nodearraylist1 = p.pop
-                                       var listnode3 = new Array[Object]
-                                       var listnode1 = nodearraylist1
-                                       assert listnode1 isa Array[Object]
-                                       var teolnode2 = nodearraylist2
-                                       listnode3 = concat(listnode3, listnode1)
-                                       if teolnode2 != null then
-                                               listnode3.add(teolnode2)
-                                       end
-                                       node_list = listnode3
-                                       p.push(p.go_to(_goto), node_list)
-       end
-end
index 4379bee..b26e0f9 100644 (file)
@@ -289,6 +289,9 @@ end
 class TAt
        super Token
 end
+class TSemi
+       super Token
+end
 class TClassid
        super Token
 end
@@ -423,7 +426,9 @@ class AStdClassdef
        var n_visibility: AVisibility is writable, noinit
        var n_classkind: AClasskind is writable, noinit
        var n_id: nullable TClassid = null is writable
+       var n_obra: nullable TObra = null is writable
        var n_formaldefs: List[AFormaldef] = new List[AFormaldef]
+       var n_cbra: nullable TCbra = null is writable
        var n_extern_code_block: nullable AExternCodeBlock = null is writable
        var n_propdefs: List[APropdef] = new List[APropdef]
        var n_kwend: TKwend is writable, noinit
@@ -472,9 +477,12 @@ class AAttrPropdef
        var n_kwvar: TKwvar is writable, noinit
        var n_id2: TId is writable, noinit
        var n_type: nullable AType = null is writable
+       var n_assign: nullable TAssign = null is writable
        var n_expr: nullable AExpr = null is writable
        var n_annotations: nullable AAnnotations = null is writable
+       var n_kwdo: nullable TKwdo = null is writable
        var n_block: nullable AExpr = null is writable
+       var n_kwend: nullable TKwend = null is writable
 end
 class AMainMethPropdef
        super APropdef
@@ -504,7 +512,9 @@ class AMethPropdef
        var n_annotations: nullable AAnnotations = null is writable
        var n_extern_calls: nullable AExternCalls = null is writable
        var n_extern_code_block: nullable AExternCodeBlock = null is writable
+       var n_kwdo: nullable TKwdo = null is writable
        var n_block: nullable AExpr = null is writable
+       var n_kwend: nullable TKwend = null is writable
 end
 class ASuperPropdef
        super APropdef
@@ -640,7 +650,9 @@ class AType
        super AType
        var n_kwnullable: nullable TKwnullable = null is writable
        var n_id: TClassid is writable, noinit
+       var n_obra: nullable TObra = null is writable
        var n_types: List[AType] = new List[AType]
+       var n_cbra: nullable TCbra = null is writable
        var n_annotations: nullable AAnnotations = null is writable
 end
 class ALabel
@@ -691,7 +703,9 @@ class AIfExpr
        super AExpr
        var n_kwif: TKwif is writable, noinit
        var n_expr: AExpr is writable, noinit
+       var n_kwthen: TKwthen is writable, noinit
        var n_then: nullable AExpr = null is writable
+       var n_kwelse: nullable TKwelse = null is writable
        var n_else: nullable AExpr = null is writable
 end
 class AIfexprExpr
@@ -721,6 +735,7 @@ class AForExpr
        super AExpr
        var n_kwfor: TKwfor is writable, noinit
        var n_ids: List[TId] = new List[TId]
+       var n_kwin: TKwin is writable, noinit
        var n_expr: AExpr is writable, noinit
        var n_kwdo: TKwdo is writable, noinit
        var n_block: nullable AExpr = null is writable
@@ -739,6 +754,7 @@ class AAssertExpr
        var n_kwassert: TKwassert is writable, noinit
        var n_id: nullable TId = null is writable
        var n_expr: AExpr is writable, noinit
+       var n_kwelse: nullable TKwelse = null is writable
        var n_else: nullable AExpr = null is writable
 end
 class AOnceExpr
@@ -1019,6 +1035,7 @@ class ACrangeExpr
        super AExpr
        var n_obra: TObra is writable, noinit
        var n_expr: AExpr is writable, noinit
+       var n_dotdot: TDotdot is writable, noinit
        var n_expr2: AExpr is writable, noinit
        var n_cbra: TCbra is writable, noinit
        var n_annotations: nullable AAnnotations = null is writable
@@ -1027,6 +1044,7 @@ class AOrangeExpr
        super AExpr
        var n_obra: TObra is writable, noinit
        var n_expr: AExpr is writable, noinit
+       var n_dotdot: TDotdot is writable, noinit
        var n_expr2: AExpr is writable, noinit
        var n_cbra: TObra is writable, noinit
        var n_annotations: nullable AAnnotations = null is writable
@@ -1302,10 +1320,12 @@ class ADoc
 end
 class AAnnotations
        super AAnnotations
+       var n_kwis: nullable TKwis = null is writable
        var n_at: nullable TAt = null is writable
        var n_opar: nullable TOpar = null is writable
        var n_items: List[AAnnotation] = new List[AAnnotation]
        var n_cpar: nullable TCpar = null is writable
+       var n_kwend: nullable TKwend = null is writable
 end
 class AAnnotation
        super AAnnotation
index a9613f6..fe79ef1 100644 (file)
@@ -895,6 +895,11 @@ class TAt
        super Token
 end
 
+# The symbol `;`
+class TSemi
+       super Token
+end
+
 # A class (or formal type) identifier. They start with an uppercase.
 class TClassid
        super Token
@@ -1137,9 +1142,15 @@ class AStdClassdef
        # The name of the class
        var n_id: nullable TClassid = null is writable
 
+       # The `[` symbol
+       var n_obra: nullable TObra = null is writable
+
        # The list of formal parameter types
        var n_formaldefs = new ANodes[AFormaldef](self)
 
+       # The `]` symbol
+       var n_cbra: nullable TCbra = null is writable
+
        # The extern block code
        var n_extern_code_block: nullable AExternCodeBlock = null is writable
 
@@ -1235,21 +1246,30 @@ end
 class AAttrPropdef
        super APropdef
 
-       # The identifier for a old-style attribute (null if new-style)
+       # The `var` keyword
        var n_kwvar: TKwvar is writable, noinit
 
-       # The identifier for a new-style attribute (null if old-style)
+       # The identifier for a new-style attribute
        var n_id2: TId is writable, noinit
 
        # The declared type of the attribute
        var n_type: nullable AType = null is writable
 
+       # The `=` symbol
+       var n_assign: nullable TAssign = null is writable
+
        # The initial value, if any (set with `=`)
        var n_expr: nullable AExpr = null is writable
 
+       # The `do` keyword
+       var n_kwdo: nullable TKwdo = null is writable
+
        # The initial value, if any (set with `do return`)
        var n_block: nullable AExpr = null is writable
 
+       # The `end` keyword
+       var n_kwend: nullable TKwend = null is writable
+
        redef fun hot_location
        do
                return n_id2.location
@@ -1275,9 +1295,15 @@ class AMethPropdef
        # The signature of the method, if any
        var n_signature: nullable ASignature = null is writable
 
+       # The `do` keyword
+       var n_kwdo: nullable TKwdo = null is writable
+
        # The body (in Nit) of the method, if any
        var n_block: nullable AExpr = null is writable
 
+       # The `end` keyword
+       var n_kwend: nullable TKwend = null is writable
+
        # The list of declared callbacks (for extern methods)
        var n_extern_calls: nullable AExternCalls = null is writable
 
@@ -1638,8 +1664,14 @@ class AType
        # The name of the class or of the formal type
        var n_id: TClassid is writable, noinit
 
+       # The opening bracket
+       var n_obra: nullable TObra = null is writable
+
        # Type arguments for a generic type
        var n_types = new ANodes[AType](self)
+
+       # The closing bracket
+       var n_cbra: nullable TCbra = null is writable
 end
 
 # A label at the end of a block or in a break/continue statement. eg `label x`
@@ -1766,9 +1798,15 @@ class AIfExpr
        # The expression used as the condition of the `if`
        var n_expr: AExpr is writable, noinit
 
+       # The `then` keyword
+       var n_kwthen: TKwthen is writable, noinit
+
        # The body of the `then` part
        var n_then: nullable AExpr = null is writable
 
+       # The `else` keyword
+       var n_kwelse: nullable TKwelse = null is writable
+
        # The body of the `else` part
        var n_else: nullable AExpr = null is writable
 end
@@ -1837,6 +1875,9 @@ class AForExpr
        # The list of name of the automatic variables
        var n_ids = new ANodes[TId](self)
 
+       # The `in` keyword
+       var n_kwin: TKwin is writable, noinit
+
        # The expression used as the collection to iterate on
        var n_expr: AExpr is writable, noinit
 
@@ -1878,6 +1919,9 @@ class AAssertExpr
        # The expression used as the condition of the `assert`
        var n_expr: AExpr is writable, noinit
 
+       # The `else` keyword
+       var n_kwelse: nullable TKwelse = null is writable
+
        # The body to execute when the assert fails
        var n_else: nullable AExpr = null is writable
 end
@@ -2314,7 +2358,10 @@ abstract class ARangeExpr
        # The left (lower) element of the range
        var n_expr: AExpr is writable, noinit
 
-       # The right (uppr) element of the range
+       # The `..`
+       var n_dotdot: TDotdot is writable, noinit
+
+       # The right (upper) element of the range
        var n_expr2: AExpr is writable, noinit
 end
 
@@ -2797,6 +2844,9 @@ end
 class AAnnotations
        super Prod
 
+       # The `is` keyword, for *is* annotations
+       var n_kwis: nullable TKwis = null is writable
+
        # The `@` symbol, for *at* annotations
        var n_at: nullable TAt = null is writable
 
@@ -2808,6 +2858,9 @@ class AAnnotations
 
        # The closing parenthesis in *at* annotations
        var n_cpar: nullable TCpar = null is writable
+
+       # The `end` keyword, for *is* annotations
+       var n_kwend: nullable TKwend = null is writable
 end
 
 # A single annotation
index 12175cf..8743717 100644 (file)
@@ -387,7 +387,9 @@ redef class AStdClassdef
                n_visibility: nullable AVisibility,
                n_classkind: nullable AClasskind,
                n_id: nullable TClassid,
+               n_obra: nullable TObra,
                n_formaldefs: Collection[Object], # Should be Collection[AFormaldef]
+               n_cbra: nullable TCbra,
                n_extern_code_block: nullable AExternCodeBlock,
                n_propdefs: Collection[Object], # Should be Collection[APropdef]
                n_kwend: nullable TKwend
@@ -403,7 +405,11 @@ redef class AStdClassdef
                n_classkind.parent = self
                _n_id = n_id
                if n_id != null then n_id.parent = self
+               _n_obra = n_obra
+               if n_obra != null then n_obra.parent = self
                self.n_formaldefs.unsafe_add_all(n_formaldefs)
+               _n_cbra = n_cbra
+               if n_cbra != null then n_cbra.parent = self
                _n_extern_code_block = n_extern_code_block
                if n_extern_code_block != null then n_extern_code_block.parent = self
                self.n_propdefs.unsafe_add_all(n_propdefs)
@@ -433,7 +439,15 @@ redef class AStdClassdef
                        n_id = new_child.as(nullable TClassid)
                        return
                end
+               if _n_obra == old_child then
+                       n_obra = new_child.as(nullable TObra)
+                       return
+               end
                if n_formaldefs.replace_child(old_child, new_child) then return
+               if _n_cbra == old_child then
+                       n_cbra = new_child.as(nullable TCbra)
+                       return
+               end
                if _n_extern_code_block == old_child then
                        n_extern_code_block = new_child.as(nullable AExternCodeBlock)
                        return
@@ -470,6 +484,16 @@ redef class AStdClassdef
                _n_id = node
                if node != null then node.parent = self
        end
+       redef fun n_obra=(node)
+       do
+               _n_obra = node
+               if node != null then node.parent = self
+       end
+       redef fun n_cbra=(node)
+       do
+               _n_cbra = node
+               if node != null then node.parent = self
+       end
        redef fun n_extern_code_block=(node)
        do
                _n_extern_code_block = node
@@ -489,7 +513,9 @@ redef class AStdClassdef
                v.enter_visit(_n_visibility)
                v.enter_visit(_n_classkind)
                v.enter_visit(_n_id)
+               v.enter_visit(_n_obra)
                n_formaldefs.visit_all(v)
+               v.enter_visit(_n_cbra)
                v.enter_visit(_n_extern_code_block)
                n_propdefs.visit_all(v)
                v.enter_visit(_n_kwend)
@@ -769,9 +795,12 @@ redef class AAttrPropdef
                n_kwvar: nullable TKwvar,
                n_id2: nullable TId,
                n_type: nullable AType,
+               n_assign: nullable TAssign,
                n_expr: nullable AExpr,
                n_annotations: nullable AAnnotations,
-               n_block: nullable AExpr
+               n_kwdo: nullable TKwdo,
+               n_block: nullable AExpr,
+               n_kwend: nullable TKwend
        )
        do
                _n_doc = n_doc
@@ -786,12 +815,18 @@ redef class AAttrPropdef
                n_id2.parent = self
                _n_type = n_type
                if n_type != null then n_type.parent = self
+               _n_assign = n_assign
+               if n_assign != null then n_assign.parent = self
                _n_expr = n_expr
                if n_expr != null then n_expr.parent = self
                _n_annotations = n_annotations
                if n_annotations != null then n_annotations.parent = self
+               _n_kwdo = n_kwdo
+               if n_kwdo != null then n_kwdo.parent = self
                _n_block = n_block
                if n_block != null then n_block.parent = self
+               _n_kwend = n_kwend
+               if n_kwend != null then n_kwend.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -820,6 +855,10 @@ redef class AAttrPropdef
                        n_type = new_child.as(nullable AType)
                        return
                end
+               if _n_assign == old_child then
+                       n_assign = new_child.as(nullable TAssign)
+                       return
+               end
                if _n_expr == old_child then
                        n_expr = new_child.as(nullable AExpr)
                        return
@@ -828,10 +867,18 @@ redef class AAttrPropdef
                        n_annotations = new_child.as(nullable AAnnotations)
                        return
                end
+               if _n_kwdo == old_child then
+                       n_kwdo = new_child.as(nullable TKwdo)
+                       return
+               end
                if _n_block == old_child then
                        n_block = new_child.as(nullable AExpr)
                        return
                end
+               if _n_kwend == old_child then
+                       n_kwend = new_child.as(nullable TKwend)
+                       return
+               end
        end
 
        redef fun n_doc=(node)
@@ -864,6 +911,11 @@ redef class AAttrPropdef
                _n_type = node
                if node != null then node.parent = self
        end
+       redef fun n_assign=(node)
+       do
+               _n_assign = node
+               if node != null then node.parent = self
+       end
        redef fun n_expr=(node)
        do
                _n_expr = node
@@ -874,11 +926,21 @@ redef class AAttrPropdef
                _n_annotations = node
                if node != null then node.parent = self
        end
+       redef fun n_kwdo=(node)
+       do
+               _n_kwdo = node
+               if node != null then node.parent = self
+       end
        redef fun n_block=(node)
        do
                _n_block = node
                if node != null then node.parent = self
        end
+       redef fun n_kwend=(node)
+       do
+               _n_kwend = node
+               if node != null then node.parent = self
+       end
 
 
        redef fun visit_all(v: Visitor)
@@ -889,9 +951,12 @@ redef class AAttrPropdef
                v.enter_visit(_n_kwvar)
                v.enter_visit(_n_id2)
                v.enter_visit(_n_type)
+               v.enter_visit(_n_assign)
                v.enter_visit(_n_expr)
                v.enter_visit(_n_annotations)
+               v.enter_visit(_n_kwdo)
                v.enter_visit(_n_block)
+               v.enter_visit(_n_kwend)
        end
 end
 redef class AMainMethPropdef
@@ -1056,7 +1121,9 @@ redef class AMethPropdef
                n_annotations: nullable AAnnotations,
                n_extern_calls: nullable AExternCalls,
                n_extern_code_block: nullable AExternCodeBlock,
-               n_block: nullable AExpr
+               n_kwdo: nullable TKwdo,
+               n_block: nullable AExpr,
+               n_kwend: nullable TKwend
        )
        do
                _n_doc = n_doc
@@ -1081,8 +1148,12 @@ redef class AMethPropdef
                if n_extern_calls != null then n_extern_calls.parent = self
                _n_extern_code_block = n_extern_code_block
                if n_extern_code_block != null then n_extern_code_block.parent = self
+               _n_kwdo = n_kwdo
+               if n_kwdo != null then n_kwdo.parent = self
                _n_block = n_block
                if n_block != null then n_block.parent = self
+               _n_kwend = n_kwend
+               if n_kwend != null then n_kwend.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -1131,10 +1202,18 @@ redef class AMethPropdef
                        n_extern_code_block = new_child.as(nullable AExternCodeBlock)
                        return
                end
+               if _n_kwdo == old_child then
+                       n_kwdo = new_child.as(nullable TKwdo)
+                       return
+               end
                if _n_block == old_child then
                        n_block = new_child.as(nullable AExpr)
                        return
                end
+               if _n_kwend == old_child then
+                       n_kwend = new_child.as(nullable TKwend)
+                       return
+               end
        end
 
        redef fun n_doc=(node)
@@ -1192,11 +1271,21 @@ redef class AMethPropdef
                _n_extern_code_block = node
                if node != null then node.parent = self
        end
+       redef fun n_kwdo=(node)
+       do
+               _n_kwdo = node
+               if node != null then node.parent = self
+       end
        redef fun n_block=(node)
        do
                _n_block = node
                if node != null then node.parent = self
        end
+       redef fun n_kwend=(node)
+       do
+               _n_kwend = node
+               if node != null then node.parent = self
+       end
 
 
        redef fun visit_all(v: Visitor)
@@ -1212,7 +1301,9 @@ redef class AMethPropdef
                v.enter_visit(_n_annotations)
                v.enter_visit(_n_extern_calls)
                v.enter_visit(_n_extern_code_block)
+               v.enter_visit(_n_kwdo)
                v.enter_visit(_n_block)
+               v.enter_visit(_n_kwend)
        end
 end
 redef class ASuperPropdef
@@ -2270,7 +2361,9 @@ redef class AType
        init init_atype (
                n_kwnullable: nullable TKwnullable,
                n_id: nullable TClassid,
+               n_obra: nullable TObra,
                n_types: Collection[Object], # Should be Collection[AType]
+               n_cbra: nullable TCbra,
                n_annotations: nullable AAnnotations
        )
        do
@@ -2278,7 +2371,11 @@ redef class AType
                if n_kwnullable != null then n_kwnullable.parent = self
                _n_id = n_id.as(not null)
                n_id.parent = self
+               _n_obra = n_obra
+               if n_obra != null then n_obra.parent = self
                self.n_types.unsafe_add_all(n_types)
+               _n_cbra = n_cbra
+               if n_cbra != null then n_cbra.parent = self
                _n_annotations = n_annotations
                if n_annotations != null then n_annotations.parent = self
        end
@@ -2293,7 +2390,15 @@ redef class AType
                        n_id = new_child.as(TClassid)
                        return
                end
+               if _n_obra == old_child then
+                       n_obra = new_child.as(nullable TObra)
+                       return
+               end
                if n_types.replace_child(old_child, new_child) then return
+               if _n_cbra == old_child then
+                       n_cbra = new_child.as(nullable TCbra)
+                       return
+               end
                if _n_annotations == old_child then
                        n_annotations = new_child.as(nullable AAnnotations)
                        return
@@ -2310,6 +2415,16 @@ redef class AType
                _n_id = node
                node.parent = self
        end
+       redef fun n_obra=(node)
+       do
+               _n_obra = node
+               if node != null then node.parent = self
+       end
+       redef fun n_cbra=(node)
+       do
+               _n_cbra = node
+               if node != null then node.parent = self
+       end
        redef fun n_annotations=(node)
        do
                _n_annotations = node
@@ -2321,7 +2436,9 @@ redef class AType
        do
                v.enter_visit(_n_kwnullable)
                v.enter_visit(_n_id)
+               v.enter_visit(_n_obra)
                n_types.visit_all(v)
+               v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
        end
 end
@@ -2708,7 +2825,9 @@ redef class AIfExpr
        init init_aifexpr (
                n_kwif: nullable TKwif,
                n_expr: nullable AExpr,
+               n_kwthen: nullable TKwthen,
                n_then: nullable AExpr,
+               n_kwelse: nullable TKwelse,
                n_else: nullable AExpr
        )
        do
@@ -2716,8 +2835,12 @@ redef class AIfExpr
                n_kwif.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_kwthen = n_kwthen.as(not null)
+               n_kwthen.parent = self
                _n_then = n_then
                if n_then != null then n_then.parent = self
+               _n_kwelse = n_kwelse
+               if n_kwelse != null then n_kwelse.parent = self
                _n_else = n_else
                if n_else != null then n_else.parent = self
        end
@@ -2732,10 +2855,18 @@ redef class AIfExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_kwthen == old_child then
+                       n_kwthen = new_child.as(TKwthen)
+                       return
+               end
                if _n_then == old_child then
                        n_then = new_child.as(nullable AExpr)
                        return
                end
+               if _n_kwelse == old_child then
+                       n_kwelse = new_child.as(nullable TKwelse)
+                       return
+               end
                if _n_else == old_child then
                        n_else = new_child.as(nullable AExpr)
                        return
@@ -2752,11 +2883,21 @@ redef class AIfExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_kwthen=(node)
+       do
+               _n_kwthen = node
+               node.parent = self
+       end
        redef fun n_then=(node)
        do
                _n_then = node
                if node != null then node.parent = self
        end
+       redef fun n_kwelse=(node)
+       do
+               _n_kwelse = node
+               if node != null then node.parent = self
+       end
        redef fun n_else=(node)
        do
                _n_else = node
@@ -2768,7 +2909,9 @@ redef class AIfExpr
        do
                v.enter_visit(_n_kwif)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_kwthen)
                v.enter_visit(_n_then)
+               v.enter_visit(_n_kwelse)
                v.enter_visit(_n_else)
        end
 end
@@ -3006,6 +3149,7 @@ redef class AForExpr
        init init_aforexpr (
                n_kwfor: nullable TKwfor,
                n_ids: Collection[Object], # Should be Collection[TId]
+               n_kwin: nullable TKwin,
                n_expr: nullable AExpr,
                n_kwdo: nullable TKwdo,
                n_block: nullable AExpr,
@@ -3015,6 +3159,8 @@ redef class AForExpr
                _n_kwfor = n_kwfor.as(not null)
                n_kwfor.parent = self
                self.n_ids.unsafe_add_all(n_ids)
+               _n_kwin = n_kwin.as(not null)
+               n_kwin.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
                _n_kwdo = n_kwdo.as(not null)
@@ -3032,6 +3178,10 @@ redef class AForExpr
                        return
                end
                if n_ids.replace_child(old_child, new_child) then return
+               if _n_kwin == old_child then
+                       n_kwin = new_child.as(TKwin)
+                       return
+               end
                if _n_expr == old_child then
                        n_expr = new_child.as(AExpr)
                        return
@@ -3055,6 +3205,11 @@ redef class AForExpr
                _n_kwfor = node
                node.parent = self
        end
+       redef fun n_kwin=(node)
+       do
+               _n_kwin = node
+               node.parent = self
+       end
        redef fun n_expr=(node)
        do
                _n_expr = node
@@ -3081,6 +3236,7 @@ redef class AForExpr
        do
                v.enter_visit(_n_kwfor)
                n_ids.visit_all(v)
+               v.enter_visit(_n_kwin)
                v.enter_visit(_n_expr)
                v.enter_visit(_n_kwdo)
                v.enter_visit(_n_block)
@@ -3173,6 +3329,7 @@ redef class AAssertExpr
                n_kwassert: nullable TKwassert,
                n_id: nullable TId,
                n_expr: nullable AExpr,
+               n_kwelse: nullable TKwelse,
                n_else: nullable AExpr
        )
        do
@@ -3182,6 +3339,8 @@ redef class AAssertExpr
                if n_id != null then n_id.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_kwelse = n_kwelse
+               if n_kwelse != null then n_kwelse.parent = self
                _n_else = n_else
                if n_else != null then n_else.parent = self
        end
@@ -3200,6 +3359,10 @@ redef class AAssertExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_kwelse == old_child then
+                       n_kwelse = new_child.as(nullable TKwelse)
+                       return
+               end
                if _n_else == old_child then
                        n_else = new_child.as(nullable AExpr)
                        return
@@ -3221,6 +3384,11 @@ redef class AAssertExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_kwelse=(node)
+       do
+               _n_kwelse = node
+               if node != null then node.parent = self
+       end
        redef fun n_else=(node)
        do
                _n_else = node
@@ -3233,6 +3401,7 @@ redef class AAssertExpr
                v.enter_visit(_n_kwassert)
                v.enter_visit(_n_id)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_kwelse)
                v.enter_visit(_n_else)
        end
 end
@@ -5744,6 +5913,7 @@ redef class ACrangeExpr
        init init_acrangeexpr (
                n_obra: nullable TObra,
                n_expr: nullable AExpr,
+               n_dotdot: nullable TDotdot,
                n_expr2: nullable AExpr,
                n_cbra: nullable TCbra,
                n_annotations: nullable AAnnotations
@@ -5753,6 +5923,8 @@ redef class ACrangeExpr
                n_obra.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_dotdot = n_dotdot.as(not null)
+               n_dotdot.parent = self
                _n_expr2 = n_expr2.as(not null)
                n_expr2.parent = self
                _n_cbra = n_cbra.as(not null)
@@ -5771,6 +5943,10 @@ redef class ACrangeExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_dotdot == old_child then
+                       n_dotdot = new_child.as(TDotdot)
+                       return
+               end
                if _n_expr2 == old_child then
                        n_expr2 = new_child.as(AExpr)
                        return
@@ -5795,6 +5971,11 @@ redef class ACrangeExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_dotdot=(node)
+       do
+               _n_dotdot = node
+               node.parent = self
+       end
        redef fun n_expr2=(node)
        do
                _n_expr2 = node
@@ -5816,6 +5997,7 @@ redef class ACrangeExpr
        do
                v.enter_visit(_n_obra)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_dotdot)
                v.enter_visit(_n_expr2)
                v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
@@ -5825,6 +6007,7 @@ redef class AOrangeExpr
        init init_aorangeexpr (
                n_obra: nullable TObra,
                n_expr: nullable AExpr,
+               n_dotdot: nullable TDotdot,
                n_expr2: nullable AExpr,
                n_cbra: nullable TObra,
                n_annotations: nullable AAnnotations
@@ -5834,6 +6017,8 @@ redef class AOrangeExpr
                n_obra.parent = self
                _n_expr = n_expr.as(not null)
                n_expr.parent = self
+               _n_dotdot = n_dotdot.as(not null)
+               n_dotdot.parent = self
                _n_expr2 = n_expr2.as(not null)
                n_expr2.parent = self
                _n_cbra = n_cbra.as(not null)
@@ -5852,6 +6037,10 @@ redef class AOrangeExpr
                        n_expr = new_child.as(AExpr)
                        return
                end
+               if _n_dotdot == old_child then
+                       n_dotdot = new_child.as(TDotdot)
+                       return
+               end
                if _n_expr2 == old_child then
                        n_expr2 = new_child.as(AExpr)
                        return
@@ -5876,6 +6065,11 @@ redef class AOrangeExpr
                _n_expr = node
                node.parent = self
        end
+       redef fun n_dotdot=(node)
+       do
+               _n_dotdot = node
+               node.parent = self
+       end
        redef fun n_expr2=(node)
        do
                _n_expr2 = node
@@ -5897,6 +6091,7 @@ redef class AOrangeExpr
        do
                v.enter_visit(_n_obra)
                v.enter_visit(_n_expr)
+               v.enter_visit(_n_dotdot)
                v.enter_visit(_n_expr2)
                v.enter_visit(_n_cbra)
                v.enter_visit(_n_annotations)
@@ -8067,12 +8262,16 @@ redef class ADoc
 end
 redef class AAnnotations
        init init_aannotations (
+               n_kwis: nullable TKwis,
                n_at: nullable TAt,
                n_opar: nullable TOpar,
                n_items: Collection[Object], # Should be Collection[AAnnotation]
-               n_cpar: nullable TCpar
+               n_cpar: nullable TCpar,
+               n_kwend: nullable TKwend
        )
        do
+               _n_kwis = n_kwis
+               if n_kwis != null then n_kwis.parent = self
                _n_at = n_at
                if n_at != null then n_at.parent = self
                _n_opar = n_opar
@@ -8080,10 +8279,16 @@ redef class AAnnotations
                self.n_items.unsafe_add_all(n_items)
                _n_cpar = n_cpar
                if n_cpar != null then n_cpar.parent = self
+               _n_kwend = n_kwend
+               if n_kwend != null then n_kwend.parent = self
        end
 
        redef fun replace_child(old_child: ANode, new_child: nullable ANode)
        do
+               if _n_kwis == old_child then
+                       n_kwis = new_child.as(nullable TKwis)
+                       return
+               end
                if _n_at == old_child then
                        n_at = new_child.as(nullable TAt)
                        return
@@ -8097,8 +8302,17 @@ redef class AAnnotations
                        n_cpar = new_child.as(nullable TCpar)
                        return
                end
+               if _n_kwend == old_child then
+                       n_kwend = new_child.as(nullable TKwend)
+                       return
+               end
        end
 
+       redef fun n_kwis=(node)
+       do
+               _n_kwis = node
+               if node != null then node.parent = self
+       end
        redef fun n_at=(node)
        do
                _n_at = node
@@ -8114,14 +8328,21 @@ redef class AAnnotations
                _n_cpar = node
                if node != null then node.parent = self
        end
+       redef fun n_kwend=(node)
+       do
+               _n_kwend = node
+               if node != null then node.parent = self
+       end
 
 
        redef fun visit_all(v: Visitor)
        do
+               v.enter_visit(_n_kwis)
                v.enter_visit(_n_at)
                v.enter_visit(_n_opar)
                n_items.visit_all(v)
                v.enter_visit(_n_cpar)
+               v.enter_visit(_n_kwend)
        end
 end
 redef class AAnnotation
index 2c9d926..eb77663 100644 (file)
@@ -3,7 +3,7 @@
 #include "tables_nit.h"
 
 static const int lexer_goto_row1[] = {
-       56,
+       57,
        9, 9, 1,
        10, 10, 2,
        13, 13, 3,
@@ -25,41 +25,42 @@ static const int lexer_goto_row1[] = {
        48, 48, 19,
        49, 57, 20,
        58, 58, 21,
-       60, 60, 22,
-       61, 61, 23,
-       62, 62, 24,
-       64, 64, 25,
-       65, 90, 26,
-       91, 91, 27,
-       93, 93, 28,
-       94, 94, 29,
-       95, 95, 30,
-       96, 96, 31,
-       97, 97, 32,
-       98, 98, 33,
-       99, 99, 34,
-       100, 100, 35,
-       101, 101, 36,
-       102, 102, 37,
-       103, 104, 38,
-       105, 105, 39,
-       106, 107, 38,
-       108, 108, 40,
-       109, 109, 41,
-       110, 110, 42,
-       111, 111, 43,
-       112, 112, 44,
-       113, 113, 38,
-       114, 114, 45,
-       115, 115, 46,
-       116, 116, 47,
-       117, 117, 48,
-       118, 118, 49,
-       119, 119, 50,
-       120, 122, 38,
-       124, 124, 51,
-       125, 125, 52,
-       126, 126, 53
+       59, 59, 22,
+       60, 60, 23,
+       61, 61, 24,
+       62, 62, 25,
+       64, 64, 26,
+       65, 90, 27,
+       91, 91, 28,
+       93, 93, 29,
+       94, 94, 30,
+       95, 95, 31,
+       96, 96, 32,
+       97, 97, 33,
+       98, 98, 34,
+       99, 99, 35,
+       100, 100, 36,
+       101, 101, 37,
+       102, 102, 38,
+       103, 104, 39,
+       105, 105, 40,
+       106, 107, 39,
+       108, 108, 41,
+       109, 109, 42,
+       110, 110, 43,
+       111, 111, 44,
+       112, 112, 45,
+       113, 113, 39,
+       114, 114, 46,
+       115, 115, 47,
+       116, 116, 48,
+       117, 117, 49,
+       118, 118, 50,
+       119, 119, 51,
+       120, 122, 39,
+       124, 124, 52,
+       125, 125, 53,
+       126, 126, 54
 };
 static const int lexer_goto_row2[] = {
        2,
@@ -68,7 +69,7 @@ static const int lexer_goto_row2[] = {
 };
 static const int lexer_goto_row4[] = {
        1,
-       10, 10, 54
+       10, 10, 55
 };
 static const int lexer_goto_row5[] = {
        1,
@@ -76,74 +77,74 @@ static const int lexer_goto_row5[] = {
 };
 static const int lexer_goto_row6[] = {
        1,
-       61, 61, 55
+       61, 61, 56
 };
 static const int lexer_goto_row7[] = {
        9,
-       0, 9, 56,
-       11, 12, 56,
-       14, 33, 56,
-       34, 34, 57,
-       35, 91, 56,
-       92, 92, 58,
-       93, 122, 56,
-       123, 123, 59,
-       124, 255, 56
+       0, 9, 57,
+       11, 12, 57,
+       14, 33, 57,
+       34, 34, 58,
+       35, 91, 57,
+       92, 92, 59,
+       93, 122, 57,
+       123, 123, 60,
+       124, 255, 57
 };
 static const int lexer_goto_row8[] = {
        5,
-       0, 9, 60,
-       10, 10, 61,
-       11, 12, 60,
-       13, 13, 62,
-       14, 255, 60
+       0, 9, 61,
+       10, 10, 62,
+       11, 12, 61,
+       13, 13, 63,
+       14, 255, 61
 };
 static const int lexer_goto_row9[] = {
        1,
-       61, 61, 63
+       61, 61, 64
 };
 static const int lexer_goto_row10[] = {
        1,
-       61, 61, 64
+       61, 61, 65
 };
 static const int lexer_goto_row11[] = {
        7,
-       0, 9, 65,
-       11, 12, 65,
-       14, 38, 65,
-       39, 39, 66,
-       40, 91, 65,
-       92, 92, 67,
-       93, 255, 65
+       0, 9, 66,
+       11, 12, 66,
+       14, 38, 66,
+       39, 39, 67,
+       40, 91, 66,
+       92, 92, 68,
+       93, 255, 66
 };
 static const int lexer_goto_row14[] = {
        2,
-       42, 42, 68,
-       61, 61, 69
+       42, 42, 69,
+       61, 61, 70
 };
 static const int lexer_goto_row15[] = {
        1,
-       61, 61, 70
+       61, 61, 71
 };
 static const int lexer_goto_row17[] = {
        1,
-       61, 61, 71
+       61, 61, 72
 };
 static const int lexer_goto_row18[] = {
        2,
-       46, 46, 72,
-       48, 57, 73
+       46, 46, 73,
+       48, 57, 74
 };
 static const int lexer_goto_row19[] = {
        1,
-       61, 61, 74
+       61, 61, 75
 };
 static const int lexer_goto_row20[] = {
        4,
-       46, 46, 75,
+       46, 46, 76,
        48, 57, 20,
-       88, 88, 76,
-       120, 120, 77
+       88, 88, 77,
+       120, 120, 78
 };
 static const int lexer_goto_row21[] = {
        1,
@@ -151,1764 +152,1764 @@ static const int lexer_goto_row21[] = {
 };
 static const int lexer_goto_row22[] = {
        1,
-       58, 58, 78
-};
-static const int lexer_goto_row23[] = {
-       2,
-       60, 60, 79,
-       61, 61, 80
+       58, 58, 79
 };
 static const int lexer_goto_row24[] = {
-       1,
+       2,
+       60, 60, 80,
        61, 61, 81
 };
 static const int lexer_goto_row25[] = {
+       1,
+       61, 61, 82
+};
+static const int lexer_goto_row26[] = {
        2,
-       61, 61, 82,
-       62, 62, 83
+       61, 61, 83,
+       62, 62, 84
 };
-static const int lexer_goto_row27[] = {
+static const int lexer_goto_row28[] = {
        4,
-       48, 57, 84,
-       65, 90, 85,
-       95, 95, 86,
-       97, 122, 87
-};
-static const int lexer_goto_row30[] = {
-       1,
-       61, 61, 88
+       48, 57, 85,
+       65, 90, 86,
+       95, 95, 87,
+       97, 122, 88
 };
 static const int lexer_goto_row31[] = {
-       2,
-       95, 95, 89,
-       97, 122, 90
+       1,
+       61, 61, 89
 };
 static const int lexer_goto_row32[] = {
-       1,
-       123, 123, 91
+       2,
+       95, 95, 90,
+       97, 122, 91
 };
 static const int lexer_goto_row33[] = {
-       10,
-       48, 57, 92,
-       65, 90, 93,
-       95, 95, 94,
-       97, 97, 95,
-       98, 98, 96,
-       99, 109, 95,
-       110, 110, 97,
-       111, 114, 95,
-       115, 115, 98,
-       116, 122, 95
+       1,
+       123, 123, 92
 };
 static const int lexer_goto_row34[] = {
-       4,
-       48, 95, -34,
-       97, 113, 95,
-       114, 114, 99,
-       115, 122, 95
+       10,
+       48, 57, 93,
+       65, 90, 94,
+       95, 95, 95,
+       97, 97, 96,
+       98, 98, 97,
+       99, 109, 96,
+       110, 110, 98,
+       111, 114, 96,
+       115, 115, 99,
+       116, 122, 96
 };
 static const int lexer_goto_row35[] = {
-       6,
-       48, 95, -34,
-       97, 107, 95,
-       108, 108, 100,
-       109, 110, 95,
-       111, 111, 101,
-       112, 122, 95
+       4,
+       48, 95, -35,
+       97, 113, 96,
+       114, 114, 100,
+       115, 122, 96
 };
 static const int lexer_goto_row36[] = {
-       4,
-       48, 95, -34,
-       97, 110, 95,
+       6,
+       48, 95, -35,
+       97, 107, 96,
+       108, 108, 101,
+       109, 110, 96,
        111, 111, 102,
-       112, 122, 95
+       112, 122, 96
 };
 static const int lexer_goto_row37[] = {
-       7,
-       48, 107, -36,
-       108, 108, 103,
-       109, 109, 95,
-       110, 110, 104,
-       111, 119, 95,
-       120, 120, 105,
-       121, 122, 95
+       4,
+       48, 95, -35,
+       97, 110, 96,
+       111, 111, 103,
+       112, 122, 96
 };
 static const int lexer_goto_row38[] = {
        7,
-       48, 95, -34,
-       97, 97, 106,
-       98, 110, 95,
-       111, 111, 107,
-       112, 116, 95,
-       117, 117, 108,
-       118, 122, 95
+       48, 107, -37,
+       108, 108, 104,
+       109, 109, 96,
+       110, 110, 105,
+       111, 119, 96,
+       120, 120, 106,
+       121, 122, 96
 };
 static const int lexer_goto_row39[] = {
-       2,
-       48, 95, -34,
-       97, 122, 95
+       7,
+       48, 95, -35,
+       97, 97, 107,
+       98, 110, 96,
+       111, 111, 108,
+       112, 116, 96,
+       117, 117, 109,
+       118, 122, 96
 };
 static const int lexer_goto_row40[] = {
-       9,
-       48, 95, -34,
-       97, 101, 95,
-       102, 102, 109,
-       103, 108, 95,
-       109, 109, 110,
-       110, 110, 111,
-       111, 114, 95,
-       115, 115, 112,
-       116, 122, 95
+       2,
+       48, 95, -35,
+       97, 122, 96
 };
 static const int lexer_goto_row41[] = {
-       5,
-       48, 95, -34,
-       97, 97, 113,
-       98, 110, 95,
-       111, 111, 114,
-       112, 122, 95
+       9,
+       48, 95, -35,
+       97, 101, 96,
+       102, 102, 110,
+       103, 108, 96,
+       109, 109, 111,
+       110, 110, 112,
+       111, 114, 96,
+       115, 115, 113,
+       116, 122, 96
 };
 static const int lexer_goto_row42[] = {
-       3,
-       48, 110, -37,
+       5,
+       48, 95, -35,
+       97, 97, 114,
+       98, 110, 96,
        111, 111, 115,
-       112, 122, 95
+       112, 122, 96
 };
 static const int lexer_goto_row43[] = {
-       8,
-       48, 95, -34,
-       97, 100, 95,
-       101, 101, 116,
-       102, 110, 95,
-       111, 111, 117,
-       112, 116, 95,
-       117, 117, 118,
-       118, 122, 95
+       3,
+       48, 110, -38,
+       111, 111, 116,
+       112, 122, 96
 };
 static const int lexer_goto_row44[] = {
-       6,
-       48, 95, -34,
-       97, 109, 95,
-       110, 110, 119,
-       111, 113, 95,
-       114, 114, 120,
-       115, 122, 95
+       8,
+       48, 95, -35,
+       97, 100, 96,
+       101, 101, 117,
+       102, 110, 96,
+       111, 111, 118,
+       112, 116, 96,
+       117, 117, 119,
+       118, 122, 96
 };
 static const int lexer_goto_row45[] = {
-       7,
-       48, 95, -34,
-       97, 97, 121,
-       98, 113, 95,
-       114, 114, 122,
-       115, 116, 95,
-       117, 117, 123,
-       118, 122, 95
+       6,
+       48, 95, -35,
+       97, 109, 96,
+       110, 110, 120,
+       111, 113, 96,
+       114, 114, 121,
+       115, 122, 96
 };
 static const int lexer_goto_row46[] = {
-       3,
-       48, 100, -44,
-       101, 101, 124,
-       102, 122, 95
+       7,
+       48, 95, -35,
+       97, 97, 122,
+       98, 113, 96,
+       114, 114, 123,
+       115, 116, 96,
+       117, 117, 124,
+       118, 122, 96
 };
 static const int lexer_goto_row47[] = {
-       5,
-       48, 100, -44,
+       3,
+       48, 100, -45,
        101, 101, 125,
-       102, 116, 95,
-       117, 117, 126,
-       118, 122, 95
+       102, 122, 96
 };
 static const int lexer_goto_row48[] = {
-       8,
-       48, 95, -34,
-       97, 103, 95,
-       104, 104, 127,
-       105, 113, 95,
-       114, 114, 128,
-       115, 120, 95,
-       121, 121, 129,
-       122, 122, 95
+       5,
+       48, 100, -45,
+       101, 101, 126,
+       102, 116, 96,
+       117, 117, 127,
+       118, 122, 96
 };
 static const int lexer_goto_row49[] = {
-       3,
-       48, 109, -45,
-       110, 110, 130,
-       111, 122, 95
+       8,
+       48, 95, -35,
+       97, 103, 96,
+       104, 104, 128,
+       105, 113, 96,
+       114, 114, 129,
+       115, 120, 96,
+       121, 121, 130,
+       122, 122, 96
 };
 static const int lexer_goto_row50[] = {
        3,
-       48, 95, -34,
-       97, 97, 131,
-       98, 122, 95
+       48, 109, -46,
+       110, 110, 131,
+       111, 122, 96
 };
 static const int lexer_goto_row51[] = {
-       4,
-       48, 103, -49,
-       104, 104, 132,
-       105, 105, 133,
-       106, 122, 95
+       3,
+       48, 95, -35,
+       97, 97, 132,
+       98, 122, 96
 };
 static const int lexer_goto_row52[] = {
-       1,
-       61, 61, 134
+       4,
+       48, 103, -50,
+       104, 104, 133,
+       105, 105, 134,
+       106, 122, 96
 };
 static const int lexer_goto_row53[] = {
+       1,
+       61, 61, 135
+};
+static const int lexer_goto_row54[] = {
        11,
-       0, 9, 135,
-       11, 12, 135,
-       14, 33, 135,
-       34, 34, 136,
-       35, 91, 135,
-       92, 92, 137,
-       93, 122, 135,
-       123, 123, 138,
-       124, 124, 135,
-       125, 125, 139,
-       126, 255, 135
-};
-static const int lexer_goto_row57[] = {
+       0, 9, 136,
+       11, 12, 136,
+       14, 33, 136,
+       34, 34, 137,
+       35, 91, 136,
+       92, 92, 138,
+       93, 122, 136,
+       123, 123, 139,
+       124, 124, 136,
+       125, 125, 140,
+       126, 255, 136
+};
+static const int lexer_goto_row58[] = {
        3,
        0, 33, -8,
-       34, 34, 140,
+       34, 34, 141,
        35, 255, -8
 };
-static const int lexer_goto_row58[] = {
+static const int lexer_goto_row59[] = {
        1,
-       34, 34, 141
+       34, 34, 142
 };
-static const int lexer_goto_row59[] = {
+static const int lexer_goto_row60[] = {
        3,
-       0, 9, 142,
-       11, 12, 142,
-       14, 255, 142
+       0, 9, 143,
+       11, 12, 143,
+       14, 255, 143
 };
-static const int lexer_goto_row61[] = {
+static const int lexer_goto_row62[] = {
        1,
        0, 255, -9
 };
-static const int lexer_goto_row63[] = {
-       1,
-       10, 10, 143
-};
-static const int lexer_goto_row66[] = {
+static const int lexer_goto_row64[] = {
        1,
-       39, 39, 144
+       10, 10, 144
 };
 static const int lexer_goto_row67[] = {
        1,
        39, 39, 145
 };
 static const int lexer_goto_row68[] = {
-       3,
-       0, 9, 146,
-       11, 12, 146,
-       14, 255, 146
+       1,
+       39, 39, 146
 };
 static const int lexer_goto_row69[] = {
-       1,
-       61, 61, 147
+       3,
+       0, 9, 147,
+       11, 12, 147,
+       14, 255, 147
 };
-static const int lexer_goto_row73[] = {
+static const int lexer_goto_row70[] = {
        1,
-       46, 46, 148
+       61, 61, 148
 };
 static const int lexer_goto_row74[] = {
        1,
-       48, 57, 73
+       46, 46, 149
 };
-static const int lexer_goto_row76[] = {
+static const int lexer_goto_row75[] = {
        1,
-       48, 57, 73
+       48, 57, 74
 };
 static const int lexer_goto_row77[] = {
-       3,
-       48, 57, 149,
-       65, 70, 150,
-       97, 102, 151
+       1,
+       48, 57, 74
 };
 static const int lexer_goto_row78[] = {
-       1,
-       48, 102, -78
+       3,
+       48, 57, 150,
+       65, 70, 151,
+       97, 102, 152
 };
-static const int lexer_goto_row80[] = {
+static const int lexer_goto_row79[] = {
        1,
-       61, 61, 152
+       48, 102, -79
 };
 static const int lexer_goto_row81[] = {
        1,
-       62, 62, 153
+       61, 61, 153
 };
-static const int lexer_goto_row84[] = {
+static const int lexer_goto_row82[] = {
        1,
-       61, 61, 154
+       62, 62, 154
 };
 static const int lexer_goto_row85[] = {
        1,
-       48, 122, -28
+       61, 61, 155
 };
 static const int lexer_goto_row86[] = {
        1,
-       48, 122, -28
+       48, 122, -29
 };
 static const int lexer_goto_row87[] = {
        1,
-       48, 122, -28
+       48, 122, -29
 };
 static const int lexer_goto_row88[] = {
        1,
-       48, 122, -28
+       48, 122, -29
 };
-static const int lexer_goto_row90[] = {
+static const int lexer_goto_row89[] = {
        1,
-       100, 100, 155
+       48, 122, -29
 };
 static const int lexer_goto_row91[] = {
-       4,
-       48, 57, 156,
-       65, 90, 157,
-       95, 95, 158,
-       97, 122, 159
+       1,
+       100, 100, 156
 };
 static const int lexer_goto_row92[] = {
-       5,
-       0, 91, 160,
-       92, 92, 161,
-       93, 95, 160,
-       96, 96, 162,
-       97, 255, 160
+       4,
+       48, 57, 157,
+       65, 90, 158,
+       95, 95, 159,
+       97, 122, 160
 };
 static const int lexer_goto_row93[] = {
-       1,
-       48, 122, -40
+       5,
+       0, 91, 161,
+       92, 92, 162,
+       93, 95, 161,
+       96, 96, 163,
+       97, 255, 161
 };
 static const int lexer_goto_row94[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row95[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row96[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row97[] = {
-       5,
-       48, 110, -37,
-       111, 111, 163,
-       112, 114, 95,
-       115, 115, 164,
-       116, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row98[] = {
-       4,
-       48, 95, -34,
-       97, 99, 95,
-       100, 100, 165,
-       101, 122, 95
+       5,
+       48, 110, -38,
+       111, 111, 164,
+       112, 114, 96,
+       115, 115, 165,
+       116, 122, 96
 };
 static const int lexer_goto_row99[] = {
        4,
-       48, 95, -34,
-       97, 114, 95,
-       115, 115, 166,
-       116, 122, 95
+       48, 95, -35,
+       97, 99, 96,
+       100, 100, 166,
+       101, 122, 96
 };
 static const int lexer_goto_row100[] = {
-       3,
-       48, 100, -44,
-       101, 101, 167,
-       102, 122, 95
+       4,
+       48, 95, -35,
+       97, 114, 96,
+       115, 115, 167,
+       116, 122, 96
 };
 static const int lexer_goto_row101[] = {
        3,
-       48, 95, -34,
-       97, 97, 168,
-       98, 122, 95
+       48, 100, -45,
+       101, 101, 168,
+       102, 122, 96
 };
 static const int lexer_goto_row102[] = {
        3,
-       48, 109, -45,
-       110, 110, 169,
-       111, 122, 95
+       48, 95, -35,
+       97, 97, 169,
+       98, 122, 96
 };
 static const int lexer_goto_row103[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 109, -46,
+       110, 110, 170,
+       111, 122, 96
 };
 static const int lexer_goto_row104[] = {
-       3,
-       48, 114, -100,
-       115, 115, 170,
-       116, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row105[] = {
-       5,
-       48, 99, -99,
-       100, 100, 171,
-       101, 116, 95,
-       117, 117, 172,
-       118, 122, 95
+       3,
+       48, 114, -101,
+       115, 115, 171,
+       116, 122, 96
 };
 static const int lexer_goto_row106[] = {
-       4,
-       48, 95, -34,
-       97, 115, 95,
-       116, 116, 173,
-       117, 122, 95
+       5,
+       48, 99, -100,
+       100, 100, 172,
+       101, 116, 96,
+       117, 117, 173,
+       118, 122, 96
 };
 static const int lexer_goto_row107[] = {
-       3,
-       48, 107, -36,
-       108, 108, 174,
-       109, 122, 95
+       4,
+       48, 95, -35,
+       97, 115, 96,
+       116, 116, 174,
+       117, 122, 96
 };
 static const int lexer_goto_row108[] = {
        3,
-       48, 113, -35,
-       114, 114, 175,
-       115, 122, 95
+       48, 107, -37,
+       108, 108, 175,
+       109, 122, 96
 };
 static const int lexer_goto_row109[] = {
        3,
-       48, 109, -45,
-       110, 110, 176,
-       111, 122, 95
+       48, 113, -36,
+       114, 114, 176,
+       115, 122, 96
 };
 static const int lexer_goto_row110[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 109, -46,
+       110, 110, 177,
+       111, 122, 96
 };
 static const int lexer_goto_row111[] = {
-       4,
-       48, 95, -34,
-       97, 111, 95,
-       112, 112, 177,
-       113, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row112[] = {
-       6,
-       48, 95, -34,
-       97, 104, 95,
-       105, 105, 178,
-       106, 115, 95,
-       116, 116, 179,
-       117, 122, 95
+       4,
+       48, 95, -35,
+       97, 111, 96,
+       112, 112, 178,
+       113, 122, 96
 };
 static const int lexer_goto_row113[] = {
-       5,
-       48, 95, -34,
-       97, 97, 180,
-       98, 114, 95,
-       115, 115, 181,
-       116, 122, 95
+       6,
+       48, 95, -35,
+       97, 104, 96,
+       105, 105, 179,
+       106, 115, 96,
+       116, 116, 180,
+       117, 122, 96
 };
 static const int lexer_goto_row114[] = {
-       3,
-       48, 97, -34,
-       98, 98, 182,
-       99, 122, 95
+       5,
+       48, 95, -35,
+       97, 97, 181,
+       98, 114, 96,
+       115, 115, 182,
+       116, 122, 96
 };
 static const int lexer_goto_row115[] = {
        3,
-       48, 110, -37,
-       111, 111, 183,
-       112, 122, 95
+       48, 97, -35,
+       98, 98, 183,
+       99, 122, 96
 };
 static const int lexer_goto_row116[] = {
        3,
-       48, 99, -99,
-       100, 100, 184,
-       101, 122, 95
+       48, 110, -38,
+       111, 111, 184,
+       112, 122, 96
 };
 static const int lexer_goto_row117[] = {
-       4,
-       48, 95, -34,
-       97, 118, 95,
-       119, 119, 185,
-       120, 122, 95
+       3,
+       48, 99, -100,
+       100, 100, 185,
+       101, 122, 96
 };
 static const int lexer_goto_row118[] = {
-       3,
-       48, 115, -107,
-       116, 116, 186,
-       117, 122, 95
+       4,
+       48, 95, -35,
+       97, 118, 96,
+       119, 119, 186,
+       120, 122, 96
 };
 static const int lexer_goto_row119[] = {
        3,
-       48, 107, -36,
-       108, 108, 187,
-       109, 122, 95
+       48, 115, -108,
+       116, 116, 187,
+       117, 122, 96
 };
 static const int lexer_goto_row120[] = {
-       4,
-       48, 95, -34,
-       97, 98, 95,
-       99, 99, 188,
-       100, 122, 95
+       3,
+       48, 107, -37,
+       108, 108, 188,
+       109, 122, 96
 };
 static const int lexer_goto_row121[] = {
-       1,
-       48, 122, -40
+       4,
+       48, 95, -35,
+       97, 98, 96,
+       99, 99, 189,
+       100, 122, 96
 };
 static const int lexer_goto_row122[] = {
-       3,
-       48, 98, -121,
-       99, 99, 189,
-       100, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row123[] = {
-       5,
-       48, 104, -113,
-       105, 105, 190,
-       106, 110, 95,
-       111, 111, 191,
-       112, 122, 95
+       3,
+       48, 98, -122,
+       99, 99, 190,
+       100, 122, 96
 };
 static const int lexer_goto_row124[] = {
-       3,
-       48, 97, -34,
-       98, 98, 192,
-       99, 122, 95
+       5,
+       48, 104, -114,
+       105, 105, 191,
+       106, 110, 96,
+       111, 111, 192,
+       112, 122, 96
 };
 static const int lexer_goto_row125[] = {
-       5,
-       48, 99, -99,
-       100, 100, 193,
-       101, 115, 95,
-       116, 116, 194,
-       117, 122, 95
+       3,
+       48, 97, -35,
+       98, 98, 193,
+       99, 122, 96
 };
 static const int lexer_goto_row126[] = {
-       3,
-       48, 107, -36,
-       108, 108, 195,
-       109, 122, 95
+       5,
+       48, 99, -100,
+       100, 100, 194,
+       101, 115, 96,
+       116, 116, 195,
+       117, 122, 96
 };
 static const int lexer_goto_row127[] = {
        3,
-       48, 111, -112,
-       112, 112, 196,
-       113, 122, 95
+       48, 107, -37,
+       108, 108, 196,
+       109, 122, 96
 };
 static const int lexer_goto_row128[] = {
        3,
-       48, 100, -44,
-       101, 101, 197,
-       102, 122, 95
+       48, 111, -113,
+       112, 112, 197,
+       113, 122, 96
 };
 static const int lexer_goto_row129[] = {
-       4,
-       48, 95, -34,
-       97, 116, 95,
-       117, 117, 198,
-       118, 122, 95
+       3,
+       48, 100, -45,
+       101, 101, 198,
+       102, 122, 96
 };
 static const int lexer_goto_row130[] = {
-       3,
-       48, 111, -112,
-       112, 112, 199,
-       113, 122, 95
+       4,
+       48, 95, -35,
+       97, 116, 96,
+       117, 117, 199,
+       118, 122, 96
 };
 static const int lexer_goto_row131[] = {
        3,
-       48, 104, -113,
-       105, 105, 200,
-       106, 122, 95
+       48, 111, -113,
+       112, 112, 200,
+       113, 122, 96
 };
 static const int lexer_goto_row132[] = {
        3,
-       48, 113, -35,
-       114, 114, 201,
-       115, 122, 95
+       48, 104, -114,
+       105, 105, 201,
+       106, 122, 96
 };
 static const int lexer_goto_row133[] = {
        3,
-       48, 104, -113,
-       105, 105, 202,
-       106, 122, 95
+       48, 113, -36,
+       114, 114, 202,
+       115, 122, 96
 };
 static const int lexer_goto_row134[] = {
        3,
-       48, 115, -107,
-       116, 116, 203,
-       117, 122, 95
+       48, 104, -114,
+       105, 105, 203,
+       106, 122, 96
 };
-static const int lexer_goto_row136[] = {
+static const int lexer_goto_row135[] = {
+       3,
+       48, 115, -108,
+       116, 116, 204,
+       117, 122, 96
+};
+static const int lexer_goto_row137[] = {
        2,
-       0, 123, -54,
-       124, 255, 135
+       0, 123, -55,
+       124, 255, 136
 };
-static const int lexer_goto_row138[] = {
+static const int lexer_goto_row139[] = {
        3,
-       0, 9, 204,
-       11, 12, 204,
-       14, 255, 204
+       0, 9, 205,
+       11, 12, 205,
+       14, 255, 205
 };
-static const int lexer_goto_row140[] = {
+static const int lexer_goto_row141[] = {
        3,
-       0, 124, -54,
-       125, 125, 205,
-       126, 255, 135
-};
-static const int lexer_goto_row142[] = {
-       11,
-       0, 9, 206,
-       10, 10, 207,
-       11, 12, 206,
-       13, 13, 208,
-       14, 33, 206,
-       34, 34, 209,
-       35, 91, 206,
-       92, 92, 210,
-       93, 122, 206,
-       123, 123, 211,
-       124, 255, 206
+       0, 124, -55,
+       125, 125, 206,
+       126, 255, 136
 };
 static const int lexer_goto_row143[] = {
-       1,
-       0, 255, -58
-};
-static const int lexer_goto_row146[] = {
-       9,
-       0, 9, 212,
-       10, 10, 213,
-       11, 12, 212,
-       13, 13, 214,
-       14, 38, 212,
-       39, 39, 215,
-       40, 91, 212,
-       92, 92, 216,
-       93, 255, 212
+       11,
+       0, 9, 207,
+       10, 10, 208,
+       11, 12, 207,
+       13, 13, 209,
+       14, 33, 207,
+       34, 34, 210,
+       35, 91, 207,
+       92, 92, 211,
+       93, 122, 207,
+       123, 123, 212,
+       124, 255, 207
+};
+static const int lexer_goto_row144[] = {
+       1,
+       0, 255, -59
 };
 static const int lexer_goto_row147[] = {
-       1,
-       39, 39, 217
+       9,
+       0, 9, 213,
+       10, 10, 214,
+       11, 12, 213,
+       13, 13, 215,
+       14, 38, 213,
+       39, 39, 216,
+       40, 91, 213,
+       92, 92, 217,
+       93, 255, 213
 };
-static const int lexer_goto_row150[] = {
+static const int lexer_goto_row148[] = {
        1,
-       48, 102, -78
+       39, 39, 218
 };
 static const int lexer_goto_row151[] = {
        1,
-       48, 102, -78
+       48, 102, -79
 };
 static const int lexer_goto_row152[] = {
        1,
-       48, 102, -78
+       48, 102, -79
 };
-static const int lexer_goto_row156[] = {
+static const int lexer_goto_row153[] = {
        1,
-       101, 101, 218
+       48, 102, -79
 };
 static const int lexer_goto_row157[] = {
        1,
-       48, 122, -92
+       101, 101, 219
 };
 static const int lexer_goto_row158[] = {
        1,
-       48, 122, -92
+       48, 122, -93
 };
 static const int lexer_goto_row159[] = {
        1,
-       48, 122, -92
+       48, 122, -93
 };
 static const int lexer_goto_row160[] = {
        1,
-       48, 122, -92
+       48, 122, -93
 };
 static const int lexer_goto_row161[] = {
        1,
-       0, 255, -93
+       48, 122, -93
 };
 static const int lexer_goto_row162[] = {
        1,
-       0, 255, 219
+       0, 255, -94
 };
 static const int lexer_goto_row163[] = {
-       3,
-       0, 124, 220,
-       125, 125, 221,
-       126, 255, 220
+       1,
+       0, 255, 220
 };
 static const int lexer_goto_row164[] = {
        3,
-       48, 113, -35,
-       114, 114, 222,
-       115, 122, 95
+       0, 124, 221,
+       125, 125, 222,
+       126, 255, 221
 };
 static const int lexer_goto_row165[] = {
        3,
-       48, 115, -107,
-       116, 116, 223,
-       117, 122, 95
+       48, 113, -36,
+       114, 114, 223,
+       115, 122, 96
 };
 static const int lexer_goto_row166[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 115, -108,
+       116, 116, 224,
+       117, 122, 96
 };
 static const int lexer_goto_row167[] = {
-       3,
-       48, 100, -44,
-       101, 101, 224,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row168[] = {
        3,
-       48, 95, -34,
-       97, 97, 225,
-       98, 122, 95
+       48, 100, -45,
+       101, 101, 225,
+       102, 122, 96
 };
 static const int lexer_goto_row169[] = {
        3,
-       48, 114, -100,
-       115, 115, 226,
-       116, 122, 95
+       48, 95, -35,
+       97, 97, 226,
+       98, 122, 96
 };
 static const int lexer_goto_row170[] = {
        3,
-       48, 115, -107,
-       116, 116, 227,
-       117, 122, 95
+       48, 114, -101,
+       115, 115, 227,
+       116, 122, 96
 };
 static const int lexer_goto_row171[] = {
        3,
-       48, 100, -44,
-       101, 101, 228,
-       102, 122, 95
+       48, 115, -108,
+       116, 116, 228,
+       117, 122, 96
 };
 static const int lexer_goto_row172[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 100, -45,
+       101, 101, 229,
+       102, 122, 96
 };
 static const int lexer_goto_row173[] = {
-       4,
-       48, 95, -34,
-       97, 108, 95,
-       109, 109, 229,
-       110, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row174[] = {
-       3,
-       48, 100, -44,
-       101, 101, 230,
-       102, 122, 95
+       4,
+       48, 95, -35,
+       97, 108, 96,
+       109, 109, 230,
+       110, 122, 96
 };
 static const int lexer_goto_row175[] = {
        3,
-       48, 114, -100,
-       115, 115, 231,
-       116, 122, 95
+       48, 100, -45,
+       101, 101, 231,
+       102, 122, 96
 };
 static const int lexer_goto_row176[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 114, -101,
+       115, 115, 232,
+       116, 122, 96
 };
 static const int lexer_goto_row177[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row178[] = {
-       5,
-       48, 107, -36,
-       108, 108, 232,
-       109, 110, 95,
-       111, 111, 233,
-       112, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row179[] = {
-       3,
-       48, 115, -107,
-       116, 116, 234,
-       117, 122, 95
+       5,
+       48, 107, -37,
+       108, 108, 233,
+       109, 110, 96,
+       111, 111, 234,
+       112, 122, 96
 };
 static const int lexer_goto_row180[] = {
-       5,
-       48, 100, -44,
-       101, 101, 235,
-       102, 113, 95,
-       114, 114, 236,
-       115, 122, 95
+       3,
+       48, 115, -108,
+       116, 116, 235,
+       117, 122, 96
 };
 static const int lexer_goto_row181[] = {
-       1,
-       48, 122, -40
+       5,
+       48, 100, -45,
+       101, 101, 236,
+       102, 113, 96,
+       114, 114, 237,
+       115, 122, 96
 };
 static const int lexer_goto_row182[] = {
-       3,
-       48, 100, -44,
-       101, 101, 237,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row183[] = {
        3,
-       48, 100, -44,
+       48, 100, -45,
        101, 101, 238,
-       102, 122, 95
+       102, 122, 96
 };
 static const int lexer_goto_row184[] = {
        3,
-       48, 111, -112,
-       112, 112, 239,
-       113, 122, 95
+       48, 100, -45,
+       101, 101, 239,
+       102, 122, 96
 };
 static const int lexer_goto_row185[] = {
        3,
-       48, 116, -130,
-       117, 117, 240,
-       118, 122, 95
+       48, 111, -113,
+       112, 112, 240,
+       113, 122, 96
 };
 static const int lexer_goto_row186[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 116, -131,
+       117, 117, 241,
+       118, 122, 96
 };
 static const int lexer_goto_row187[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row188[] = {
-       3,
-       48, 107, -36,
-       108, 108, 241,
-       109, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row189[] = {
        3,
-       48, 100, -44,
-       101, 101, 242,
-       102, 122, 95
+       48, 107, -37,
+       108, 108, 242,
+       109, 122, 96
 };
 static const int lexer_goto_row190[] = {
-       4,
-       48, 95, -34,
-       97, 106, 95,
-       107, 107, 243,
-       108, 122, 95
+       3,
+       48, 100, -45,
+       101, 101, 243,
+       102, 122, 96
 };
 static const int lexer_goto_row191[] = {
        4,
-       48, 95, -34,
-       97, 117, 95,
-       118, 118, 244,
-       119, 122, 95
+       48, 95, -35,
+       97, 106, 96,
+       107, 107, 244,
+       108, 122, 96
 };
 static const int lexer_goto_row192[] = {
-       3,
-       48, 115, -107,
-       116, 116, 245,
-       117, 122, 95
+       4,
+       48, 95, -35,
+       97, 117, 96,
+       118, 118, 245,
+       119, 122, 96
 };
 static const int lexer_goto_row193[] = {
        3,
-       48, 107, -36,
-       108, 108, 246,
-       109, 122, 95
+       48, 115, -108,
+       116, 116, 246,
+       117, 122, 96
 };
 static const int lexer_goto_row194[] = {
        3,
-       48, 100, -44,
-       101, 101, 247,
-       102, 122, 95
+       48, 107, -37,
+       108, 108, 247,
+       109, 122, 96
 };
 static const int lexer_goto_row195[] = {
        3,
-       48, 116, -130,
-       117, 117, 248,
-       118, 122, 95
+       48, 100, -45,
+       101, 101, 248,
+       102, 122, 96
 };
 static const int lexer_goto_row196[] = {
        3,
-       48, 101, -41,
-       102, 102, 249,
-       103, 122, 95
+       48, 116, -131,
+       117, 117, 249,
+       118, 122, 96
 };
 static const int lexer_goto_row197[] = {
        3,
-       48, 100, -44,
-       101, 101, 250,
-       102, 122, 95
+       48, 101, -42,
+       102, 102, 250,
+       103, 122, 96
 };
 static const int lexer_goto_row198[] = {
        3,
-       48, 109, -45,
-       110, 110, 251,
-       111, 122, 95
+       48, 100, -45,
+       101, 101, 251,
+       102, 122, 96
 };
 static const int lexer_goto_row199[] = {
        3,
-       48, 100, -44,
-       101, 101, 252,
-       102, 122, 95
+       48, 109, -46,
+       110, 110, 252,
+       111, 122, 96
 };
 static const int lexer_goto_row200[] = {
        3,
-       48, 100, -44,
+       48, 100, -45,
        101, 101, 253,
-       102, 122, 95
+       102, 122, 96
 };
 static const int lexer_goto_row201[] = {
        3,
-       48, 117, -192,
-       118, 118, 254,
-       119, 122, 95
+       48, 100, -45,
+       101, 101, 254,
+       102, 122, 96
 };
 static const int lexer_goto_row202[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 117, -193,
+       118, 118, 255,
+       119, 122, 96
 };
 static const int lexer_goto_row203[] = {
-       3,
-       48, 107, -36,
-       108, 108, 255,
-       109, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row204[] = {
        3,
-       48, 103, -49,
-       104, 104, 256,
-       105, 122, 95
+       48, 107, -37,
+       108, 108, 256,
+       109, 122, 96
 };
 static const int lexer_goto_row205[] = {
-       1,
-       0, 255, -137
+       3,
+       48, 103, -50,
+       104, 104, 257,
+       105, 122, 96
 };
 static const int lexer_goto_row206[] = {
-       11,
-       0, 9, 257,
-       10, 10, 258,
-       11, 12, 257,
-       13, 13, 259,
-       14, 33, 257,
-       34, 34, 260,
-       35, 91, 257,
-       92, 92, 261,
-       93, 122, 257,
-       123, 123, 262,
-       124, 255, 257
+       1,
+       0, 255, -138
 };
 static const int lexer_goto_row207[] = {
-       1,
-       0, 255, -143
+       11,
+       0, 9, 258,
+       10, 10, 259,
+       11, 12, 258,
+       13, 13, 260,
+       14, 33, 258,
+       34, 34, 261,
+       35, 91, 258,
+       92, 92, 262,
+       93, 122, 258,
+       123, 123, 263,
+       124, 255, 258
 };
 static const int lexer_goto_row208[] = {
        1,
-       0, 255, -143
+       0, 255, -144
 };
 static const int lexer_goto_row209[] = {
        1,
-       0, 255, -143
+       0, 255, -144
 };
 static const int lexer_goto_row210[] = {
-       5,
-       0, 33, -143,
-       34, 34, 263,
-       35, 122, -143,
-       123, 123, 264,
-       124, 255, 206
+       1,
+       0, 255, -144
 };
 static const int lexer_goto_row211[] = {
-       3,
-       0, 9, 265,
-       11, 12, 265,
-       14, 255, 265
+       5,
+       0, 33, -144,
+       34, 34, 264,
+       35, 122, -144,
+       123, 123, 265,
+       124, 255, 207
 };
 static const int lexer_goto_row212[] = {
-       5,
-       0, 33, -143,
-       34, 34, 266,
-       35, 122, -143,
-       123, 123, 267,
-       124, 255, 206
+       3,
+       0, 9, 266,
+       11, 12, 266,
+       14, 255, 266
 };
 static const int lexer_goto_row213[] = {
-       1,
-       0, 255, -147
+       5,
+       0, 33, -144,
+       34, 34, 267,
+       35, 122, -144,
+       123, 123, 268,
+       124, 255, 207
 };
 static const int lexer_goto_row214[] = {
        1,
-       0, 255, -147
+       0, 255, -148
 };
 static const int lexer_goto_row215[] = {
        1,
-       0, 255, -147
+       0, 255, -148
 };
 static const int lexer_goto_row216[] = {
-       9,
-       0, 9, 268,
-       10, 10, 269,
-       11, 12, 268,
-       13, 13, 270,
-       14, 38, 268,
-       39, 39, 271,
-       40, 91, 268,
-       92, 92, 272,
-       93, 255, 268
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row217[] = {
-       3,
-       0, 9, 273,
-       11, 12, 273,
-       14, 255, 273
-};
-static const int lexer_goto_row219[] = {
-       1,
-       98, 98, 274
+       9,
+       0, 9, 269,
+       10, 10, 270,
+       11, 12, 269,
+       13, 13, 271,
+       14, 38, 269,
+       39, 39, 272,
+       40, 91, 269,
+       92, 92, 273,
+       93, 255, 269
+};
+static const int lexer_goto_row218[] = {
+       3,
+       0, 9, 274,
+       11, 12, 274,
+       14, 255, 274
 };
 static const int lexer_goto_row220[] = {
        1,
-       0, 255, -93
+       98, 98, 275
 };
 static const int lexer_goto_row221[] = {
        1,
-       0, 255, -93
+       0, 255, -94
 };
-static const int lexer_goto_row223[] = {
-       3,
-       48, 115, -107,
-       116, 116, 275,
-       117, 122, 95
+static const int lexer_goto_row222[] = {
+       1,
+       0, 255, -94
 };
 static const int lexer_goto_row224[] = {
        3,
-       48, 113, -35,
-       114, 114, 276,
-       115, 122, 95
+       48, 115, -108,
+       116, 116, 276,
+       117, 122, 96
 };
 static const int lexer_goto_row225[] = {
        3,
-       48, 113, -35,
+       48, 113, -36,
        114, 114, 277,
-       115, 122, 95
+       115, 122, 96
 };
 static const int lexer_goto_row226[] = {
        3,
-       48, 106, -191,
-       107, 107, 278,
-       108, 122, 95
+       48, 113, -36,
+       114, 114, 278,
+       115, 122, 96
 };
 static const int lexer_goto_row227[] = {
        3,
-       48, 114, -100,
-       115, 115, 279,
-       116, 122, 95
+       48, 106, -192,
+       107, 107, 279,
+       108, 122, 96
 };
 static const int lexer_goto_row228[] = {
        3,
-       48, 104, -113,
-       105, 105, 280,
-       106, 122, 95
+       48, 114, -101,
+       115, 115, 280,
+       116, 122, 96
 };
 static const int lexer_goto_row229[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 104, -114,
+       105, 105, 281,
+       106, 122, 96
 };
 static const int lexer_goto_row230[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row231[] = {
-       3,
-       48, 113, -35,
-       114, 114, 281,
-       115, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row232[] = {
        3,
-       48, 100, -44,
-       101, 101, 282,
-       102, 122, 95
+       48, 113, -36,
+       114, 114, 282,
+       115, 122, 96
 };
 static const int lexer_goto_row233[] = {
        3,
-       48, 104, -113,
-       105, 105, 283,
-       106, 122, 95
+       48, 100, -45,
+       101, 101, 283,
+       102, 122, 96
 };
 static const int lexer_goto_row234[] = {
        3,
-       48, 113, -35,
-       114, 114, 284,
-       115, 122, 95
+       48, 104, -114,
+       105, 105, 284,
+       106, 122, 96
 };
 static const int lexer_goto_row235[] = {
-       1,
-       48, 122, -40
-};
-static const int lexer_goto_row236[] = {
        3,
-       48, 113, -35,
+       48, 113, -36,
        114, 114, 285,
-       115, 122, 95
+       115, 122, 96
+};
+static const int lexer_goto_row236[] = {
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row237[] = {
        3,
-       48, 116, -130,
-       117, 117, 286,
-       118, 122, 95
+       48, 113, -36,
+       114, 114, 286,
+       115, 122, 96
 };
 static const int lexer_goto_row238[] = {
        3,
-       48, 115, -107,
-       116, 116, 287,
-       117, 122, 95
+       48, 116, -131,
+       117, 117, 287,
+       118, 122, 96
 };
 static const int lexer_goto_row239[] = {
        3,
-       48, 107, -36,
-       108, 108, 288,
-       109, 122, 95
+       48, 115, -108,
+       116, 116, 288,
+       117, 122, 96
 };
 static const int lexer_goto_row240[] = {
-       1,
-       48, 122, -40
-};
-static const int lexer_goto_row241[] = {
        3,
-       48, 107, -36,
+       48, 107, -37,
        108, 108, 289,
-       109, 122, 95
+       109, 122, 96
+};
+static const int lexer_goto_row241[] = {
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row242[] = {
        3,
-       48, 95, -34,
-       97, 97, 290,
-       98, 122, 95
+       48, 107, -37,
+       108, 108, 290,
+       109, 122, 96
 };
 static const int lexer_goto_row243[] = {
-       1,
-       48, 122, -40
-};
-static const int lexer_goto_row244[] = {
        3,
-       48, 95, -34,
+       48, 95, -35,
        97, 97, 291,
-       98, 122, 95
+       98, 122, 96
+};
+static const int lexer_goto_row244[] = {
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row245[] = {
        3,
-       48, 95, -34,
+       48, 95, -35,
        97, 97, 292,
-       98, 122, 95
+       98, 122, 96
 };
 static const int lexer_goto_row246[] = {
        3,
-       48, 100, -44,
-       101, 101, 293,
-       102, 122, 95
+       48, 95, -35,
+       97, 97, 293,
+       98, 122, 96
 };
 static const int lexer_goto_row247[] = {
        3,
-       48, 104, -113,
-       105, 105, 294,
-       106, 122, 95
+       48, 100, -45,
+       101, 101, 294,
+       102, 122, 96
 };
 static const int lexer_goto_row248[] = {
        3,
-       48, 101, -41,
-       102, 102, 295,
-       103, 122, 95
+       48, 104, -114,
+       105, 105, 295,
+       106, 122, 96
 };
 static const int lexer_goto_row249[] = {
        3,
-       48, 113, -35,
-       114, 114, 296,
-       115, 122, 95
+       48, 101, -42,
+       102, 102, 296,
+       103, 122, 96
 };
 static const int lexer_goto_row250[] = {
-       1,
-       48, 122, -40
-};
-static const int lexer_goto_row251[] = {
        3,
-       48, 113, -35,
+       48, 113, -36,
        114, 114, 297,
-       115, 122, 95
+       115, 122, 96
 };
-static const int lexer_goto_row252[] = {
+static const int lexer_goto_row251[] = {
        1,
-       48, 122, -40
+       48, 122, -41
+};
+static const int lexer_goto_row252[] = {
+       3,
+       48, 113, -36,
+       114, 114, 298,
+       115, 122, 96
 };
 static const int lexer_goto_row253[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row254[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row255[] = {
-       3,
-       48, 100, -44,
-       101, 101, 298,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row256[] = {
        3,
-       48, 100, -44,
+       48, 100, -45,
        101, 101, 299,
-       102, 122, 95
+       102, 122, 96
 };
 static const int lexer_goto_row257[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 100, -45,
+       101, 101, 300,
+       102, 122, 96
 };
 static const int lexer_goto_row258[] = {
        1,
-       0, 255, -207
+       48, 122, -41
 };
 static const int lexer_goto_row259[] = {
-       11,
-       0, 9, 300,
-       10, 10, 258,
-       11, 12, 300,
-       13, 13, 259,
-       14, 33, 300,
-       34, 34, 301,
-       35, 91, 300,
-       92, 92, 302,
-       93, 122, 300,
-       123, 123, 303,
-       124, 255, 300
+       1,
+       0, 255, -208
 };
 static const int lexer_goto_row260[] = {
-       1,
-       0, 255, -260
+       11,
+       0, 9, 301,
+       10, 10, 259,
+       11, 12, 301,
+       13, 13, 260,
+       14, 33, 301,
+       34, 34, 302,
+       35, 91, 301,
+       92, 92, 303,
+       93, 122, 301,
+       123, 123, 304,
+       124, 255, 301
 };
 static const int lexer_goto_row261[] = {
-       5,
-       0, 33, -260,
-       34, 34, 304,
-       35, 122, -260,
-       123, 123, 305,
-       124, 255, 300
+       1,
+       0, 255, -261
 };
 static const int lexer_goto_row262[] = {
-       3,
-       0, 9, 306,
-       11, 12, 306,
-       14, 255, 306
+       5,
+       0, 33, -261,
+       34, 34, 305,
+       35, 122, -261,
+       123, 123, 306,
+       124, 255, 301
 };
 static const int lexer_goto_row263[] = {
-       5,
-       0, 33, -260,
-       34, 34, 307,
-       35, 122, -260,
-       123, 123, 308,
-       124, 255, 300
+       3,
+       0, 9, 307,
+       11, 12, 307,
+       14, 255, 307
 };
 static const int lexer_goto_row264[] = {
-       3,
-       0, 33, -143,
-       34, 34, 309,
-       35, 255, -211
+       5,
+       0, 33, -261,
+       34, 34, 308,
+       35, 122, -261,
+       123, 123, 309,
+       124, 255, 301
 };
 static const int lexer_goto_row265[] = {
        3,
-       0, 122, -213,
-       123, 123, 310,
-       124, 255, 206
+       0, 33, -144,
+       34, 34, 310,
+       35, 255, -212
 };
 static const int lexer_goto_row266[] = {
-       1,
-       0, 255, -143
+       3,
+       0, 122, -214,
+       123, 123, 311,
+       124, 255, 207
 };
 static const int lexer_goto_row267[] = {
-       3,
-       0, 33, -143,
-       34, 34, 311,
-       35, 255, -211
+       1,
+       0, 255, -144
 };
 static const int lexer_goto_row268[] = {
        3,
-       0, 122, -213,
-       123, 123, 312,
-       124, 255, 206
+       0, 33, -144,
+       34, 34, 312,
+       35, 255, -212
 };
 static const int lexer_goto_row269[] = {
-       1,
-       0, 255, -147
+       3,
+       0, 122, -214,
+       123, 123, 313,
+       124, 255, 207
 };
 static const int lexer_goto_row270[] = {
        1,
-       0, 255, -147
+       0, 255, -148
 };
 static const int lexer_goto_row271[] = {
        1,
-       0, 255, -147
+       0, 255, -148
 };
 static const int lexer_goto_row272[] = {
-       9,
-       0, 9, 313,
-       10, 10, 314,
-       11, 12, 313,
-       13, 13, 315,
-       14, 38, 313,
-       39, 39, 316,
-       40, 91, 313,
-       92, 92, 317,
-       93, 255, 313
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row273[] = {
-       3,
-       0, 9, 318,
-       11, 12, 318,
-       14, 255, 318
+       9,
+       0, 9, 314,
+       10, 10, 315,
+       11, 12, 314,
+       13, 13, 316,
+       14, 38, 314,
+       39, 39, 317,
+       40, 91, 314,
+       92, 92, 318,
+       93, 255, 314
 };
 static const int lexer_goto_row274[] = {
-       1,
-       0, 255, -147
+       3,
+       0, 9, 319,
+       11, 12, 319,
+       14, 255, 319
 };
 static const int lexer_goto_row275[] = {
        1,
-       117, 117, 319
+       0, 255, -148
 };
 static const int lexer_goto_row276[] = {
        1,
-       48, 122, -40
+       117, 117, 320
 };
 static const int lexer_goto_row277[] = {
-       3,
-       48, 95, -34,
-       97, 97, 320,
-       98, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row278[] = {
        3,
-       48, 115, -107,
-       116, 116, 321,
-       117, 122, 95
+       48, 95, -35,
+       97, 97, 321,
+       98, 122, 96
 };
 static const int lexer_goto_row279[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 115, -108,
+       116, 116, 322,
+       117, 122, 96
 };
 static const int lexer_goto_row280[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row281[] = {
-       3,
-       48, 109, -45,
-       110, 110, 322,
-       111, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row282[] = {
        3,
-       48, 109, -45,
+       48, 109, -46,
        110, 110, 323,
-       111, 122, 95
+       111, 122, 96
 };
 static const int lexer_goto_row283[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 109, -46,
+       110, 110, 324,
+       111, 122, 96
 };
 static const int lexer_goto_row284[] = {
-       3,
-       48, 100, -44,
-       101, 101, 324,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row285[] = {
        3,
-       48, 115, -107,
-       116, 116, 325,
-       117, 122, 95
+       48, 100, -45,
+       101, 101, 325,
+       102, 122, 96
 };
 static const int lexer_goto_row286[] = {
        3,
-       48, 101, -41,
-       102, 102, 326,
-       103, 122, 95
+       48, 115, -108,
+       116, 116, 326,
+       117, 122, 96
 };
 static const int lexer_goto_row287[] = {
        3,
-       48, 99, -99,
-       100, 100, 327,
-       101, 122, 95
+       48, 101, -42,
+       102, 102, 327,
+       103, 122, 96
 };
 static const int lexer_goto_row288[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 99, -100,
+       100, 100, 328,
+       101, 122, 96
 };
 static const int lexer_goto_row289[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row290[] = {
-       3,
-       48, 100, -44,
-       101, 101, 328,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row291[] = {
        3,
-       48, 97, -34,
-       98, 98, 329,
-       99, 122, 95
+       48, 100, -45,
+       101, 101, 329,
+       102, 122, 96
 };
 static const int lexer_goto_row292[] = {
-       4,
-       48, 95, -34,
-       97, 102, 95,
-       103, 103, 330,
-       104, 122, 95
+       3,
+       48, 97, -35,
+       98, 98, 330,
+       99, 122, 96
 };
 static const int lexer_goto_row293[] = {
-       3,
-       48, 115, -107,
-       116, 116, 331,
-       117, 122, 95
+       4,
+       48, 95, -35,
+       97, 102, 96,
+       103, 103, 331,
+       104, 122, 96
 };
 static const int lexer_goto_row294[] = {
        3,
-       48, 98, -121,
-       99, 99, 332,
-       100, 122, 95
+       48, 115, -108,
+       116, 116, 332,
+       117, 122, 96
 };
 static const int lexer_goto_row295[] = {
        3,
-       48, 98, -121,
+       48, 98, -122,
        99, 99, 333,
-       100, 122, 95
+       100, 122, 96
 };
 static const int lexer_goto_row296[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 98, -122,
+       99, 99, 334,
+       100, 122, 96
 };
 static const int lexer_goto_row297[] = {
-       3,
-       48, 109, -45,
-       110, 110, 334,
-       111, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row298[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 109, -46,
+       110, 110, 335,
+       111, 122, 96
 };
 static const int lexer_goto_row299[] = {
-       3,
-       48, 113, -35,
-       114, 114, 335,
-       115, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row300[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 113, -36,
+       114, 114, 336,
+       115, 122, 96
 };
 static const int lexer_goto_row301[] = {
        1,
-       0, 255, -260
+       48, 122, -41
 };
 static const int lexer_goto_row302[] = {
        1,
-       0, 255, -262
+       0, 255, -261
 };
 static const int lexer_goto_row303[] = {
-       3,
-       0, 9, 336,
-       11, 12, 336,
-       14, 255, 336
+       1,
+       0, 255, -263
 };
 static const int lexer_goto_row304[] = {
-       1,
-       0, 255, -264
+       3,
+       0, 9, 337,
+       11, 12, 337,
+       14, 255, 337
 };
 static const int lexer_goto_row305[] = {
-       3,
-       0, 33, -260,
-       34, 34, 337,
-       35, 255, -262
+       1,
+       0, 255, -265
 };
 static const int lexer_goto_row306[] = {
        3,
-       0, 122, -264,
-       123, 123, 338,
-       124, 255, 300
+       0, 33, -261,
+       34, 34, 338,
+       35, 255, -263
 };
 static const int lexer_goto_row307[] = {
-       1,
-       0, 255, -207
+       3,
+       0, 122, -265,
+       123, 123, 339,
+       124, 255, 301
 };
 static const int lexer_goto_row308[] = {
-       3,
-       0, 33, -260,
-       34, 34, 339,
-       35, 255, -262
+       1,
+       0, 255, -208
 };
 static const int lexer_goto_row309[] = {
        3,
-       0, 122, -264,
-       123, 123, 340,
-       124, 255, 300
+       0, 33, -261,
+       34, 34, 340,
+       35, 255, -263
 };
 static const int lexer_goto_row310[] = {
-       1,
-       34, 34, 341
+       3,
+       0, 122, -265,
+       123, 123, 341,
+       124, 255, 301
 };
 static const int lexer_goto_row311[] = {
        1,
-       0, 255, -269
+       34, 34, 342
 };
 static const int lexer_goto_row312[] = {
        1,
-       0, 255, -265
+       0, 255, -270
 };
 static const int lexer_goto_row313[] = {
        1,
-       123, 123, 342
+       0, 255, -266
 };
 static const int lexer_goto_row314[] = {
        1,
-       0, 255, -147
+       123, 123, 343
 };
 static const int lexer_goto_row315[] = {
        1,
-       0, 255, -147
+       0, 255, -148
 };
 static const int lexer_goto_row316[] = {
        1,
-       0, 255, -147
+       0, 255, -148
 };
-static const int lexer_goto_row318[] = {
-       3,
-       0, 9, 343,
-       11, 12, 343,
-       14, 255, 343
+static const int lexer_goto_row317[] = {
+       1,
+       0, 255, -148
 };
 static const int lexer_goto_row319[] = {
-       1,
-       0, 255, -147
+       3,
+       0, 9, 344,
+       11, 12, 344,
+       14, 255, 344
 };
 static const int lexer_goto_row320[] = {
        1,
-       103, 103, 344
+       0, 255, -148
 };
 static const int lexer_goto_row321[] = {
-       3,
-       48, 98, -121,
-       99, 99, 345,
-       100, 122, 95
+       1,
+       103, 103, 345
 };
 static const int lexer_goto_row322[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 98, -122,
+       99, 99, 346,
+       100, 122, 96
 };
 static const int lexer_goto_row323[] = {
-       3,
-       48, 116, -130,
-       117, 117, 346,
-       118, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row324[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 116, -131,
+       117, 117, 347,
+       118, 122, 96
 };
 static const int lexer_goto_row325[] = {
-       3,
-       48, 114, -100,
-       115, 115, 347,
-       116, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row326[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 114, -101,
+       115, 115, 348,
+       116, 122, 96
 };
 static const int lexer_goto_row327[] = {
-       3,
-       48, 95, -34,
-       97, 97, 348,
-       98, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row328[] = {
        3,
-       48, 100, -44,
-       101, 101, 349,
-       102, 122, 95
+       48, 95, -35,
+       97, 97, 349,
+       98, 122, 96
 };
 static const int lexer_goto_row329[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 100, -45,
+       101, 101, 350,
+       102, 122, 96
 };
 static const int lexer_goto_row330[] = {
-       3,
-       48, 107, -36,
-       108, 108, 350,
-       109, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row331[] = {
        3,
-       48, 100, -44,
-       101, 101, 351,
-       102, 122, 95
+       48, 107, -37,
+       108, 108, 351,
+       109, 122, 96
 };
 static const int lexer_goto_row332[] = {
        3,
-       48, 100, -44,
+       48, 100, -45,
        101, 101, 352,
-       102, 122, 95
+       102, 122, 96
 };
 static const int lexer_goto_row333[] = {
        3,
-       48, 115, -107,
-       116, 116, 353,
-       117, 122, 95
+       48, 100, -45,
+       101, 101, 353,
+       102, 122, 96
 };
 static const int lexer_goto_row334[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 115, -108,
+       116, 116, 354,
+       117, 122, 96
 };
 static const int lexer_goto_row335[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row336[] = {
-       3,
-       48, 114, -100,
-       115, 115, 354,
-       116, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row337[] = {
-       1,
-       0, 255, -260
+       3,
+       48, 114, -101,
+       115, 115, 355,
+       116, 122, 96
 };
 static const int lexer_goto_row338[] = {
        1,
-       34, 34, 355
+       0, 255, -261
 };
 static const int lexer_goto_row339[] = {
        1,
-       0, 255, -310
+       34, 34, 356
 };
 static const int lexer_goto_row340[] = {
        1,
-       0, 255, -306
+       0, 255, -311
 };
 static const int lexer_goto_row341[] = {
        1,
-       123, 123, 356
+       0, 255, -307
 };
 static const int lexer_goto_row342[] = {
        1,
-       34, 34, 341
+       123, 123, 357
 };
 static const int lexer_goto_row343[] = {
        1,
-       123, 123, 342
+       34, 34, 342
 };
 static const int lexer_goto_row344[] = {
        1,
-       0, 255, -147
+       123, 123, 343
 };
 static const int lexer_goto_row345[] = {
        1,
-       95, 95, 357
+       0, 255, -148
 };
 static const int lexer_goto_row346[] = {
-       3,
-       48, 115, -107,
-       116, 116, 358,
-       117, 122, 95
+       1,
+       95, 95, 358
 };
 static const int lexer_goto_row347[] = {
        3,
-       48, 100, -44,
-       101, 101, 359,
-       102, 122, 95
+       48, 115, -108,
+       116, 116, 359,
+       117, 122, 96
 };
 static const int lexer_goto_row348[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 100, -45,
+       101, 101, 360,
+       102, 122, 96
 };
 static const int lexer_goto_row349[] = {
-       3,
-       48, 98, -121,
-       99, 99, 360,
-       100, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row350[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 98, -122,
+       99, 99, 361,
+       100, 122, 96
 };
 static const int lexer_goto_row351[] = {
-       3,
-       48, 100, -44,
-       101, 101, 361,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row352[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 100, -45,
+       101, 101, 362,
+       102, 122, 96
 };
 static const int lexer_goto_row353[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row354[] = {
-       3,
-       48, 100, -44,
-       101, 101, 362,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row355[] = {
        3,
-       48, 95, -34,
-       97, 97, 363,
-       98, 122, 95
+       48, 100, -45,
+       101, 101, 363,
+       102, 122, 96
 };
 static const int lexer_goto_row356[] = {
-       1,
-       34, 34, 355
+       3,
+       48, 95, -35,
+       97, 97, 364,
+       98, 122, 96
 };
 static const int lexer_goto_row357[] = {
        1,
-       123, 123, 356
+       34, 34, 356
 };
 static const int lexer_goto_row358[] = {
        1,
-       95, 95, 364
+       123, 123, 357
 };
 static const int lexer_goto_row359[] = {
        1,
-       48, 122, -40
+       95, 95, 365
 };
 static const int lexer_goto_row360[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row361[] = {
-       3,
-       48, 100, -44,
-       101, 101, 365,
-       102, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row362[] = {
-       1,
-       48, 122, -40
+       3,
+       48, 100, -45,
+       101, 101, 366,
+       102, 122, 96
 };
 static const int lexer_goto_row363[] = {
-       3,
-       48, 99, -99,
-       100, 100, 366,
-       101, 122, 95
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row364[] = {
        3,
-       48, 107, -36,
-       108, 108, 367,
-       109, 122, 95
+       48, 99, -100,
+       100, 100, 367,
+       101, 122, 96
 };
-static const int lexer_goto_row366[] = {
-       1,
-       48, 122, -40
+static const int lexer_goto_row365[] = {
+       3,
+       48, 107, -37,
+       108, 108, 368,
+       109, 122, 96
 };
 static const int lexer_goto_row367[] = {
        1,
-       48, 122, -40
+       48, 122, -41
 };
 static const int lexer_goto_row368[] = {
        1,
-       48, 122, -40
+       48, 122, -41
+};
+static const int lexer_goto_row369[] = {
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row_null[] = {0};
 const int* const lexer_goto_table[] = {
@@ -1934,14 +1935,14 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row20,
        lexer_goto_row21,
        lexer_goto_row22,
-       lexer_goto_row23,
+       lexer_goto_row_null,
        lexer_goto_row24,
        lexer_goto_row25,
+       lexer_goto_row26,
        lexer_goto_row_null,
-       lexer_goto_row27,
+       lexer_goto_row28,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row30,
        lexer_goto_row31,
        lexer_goto_row32,
        lexer_goto_row33,
@@ -1965,43 +1966,43 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row51,
        lexer_goto_row52,
        lexer_goto_row53,
+       lexer_goto_row54,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row57,
        lexer_goto_row58,
        lexer_goto_row59,
+       lexer_goto_row60,
        lexer_goto_row_null,
-       lexer_goto_row61,
+       lexer_goto_row62,
        lexer_goto_row_null,
-       lexer_goto_row63,
+       lexer_goto_row64,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row66,
        lexer_goto_row67,
        lexer_goto_row68,
        lexer_goto_row69,
+       lexer_goto_row70,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row73,
        lexer_goto_row74,
+       lexer_goto_row75,
        lexer_goto_row_null,
-       lexer_goto_row76,
        lexer_goto_row77,
        lexer_goto_row78,
+       lexer_goto_row79,
        lexer_goto_row_null,
-       lexer_goto_row80,
        lexer_goto_row81,
+       lexer_goto_row82,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row84,
        lexer_goto_row85,
        lexer_goto_row86,
        lexer_goto_row87,
        lexer_goto_row88,
+       lexer_goto_row89,
        lexer_goto_row_null,
-       lexer_goto_row90,
        lexer_goto_row91,
        lexer_goto_row92,
        lexer_goto_row93,
@@ -2046,28 +2047,28 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row132,
        lexer_goto_row133,
        lexer_goto_row134,
+       lexer_goto_row135,
        lexer_goto_row_null,
-       lexer_goto_row136,
+       lexer_goto_row137,
        lexer_goto_row_null,
-       lexer_goto_row138,
+       lexer_goto_row139,
        lexer_goto_row_null,
-       lexer_goto_row140,
+       lexer_goto_row141,
        lexer_goto_row_null,
-       lexer_goto_row142,
        lexer_goto_row143,
+       lexer_goto_row144,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row146,
        lexer_goto_row147,
+       lexer_goto_row148,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row150,
        lexer_goto_row151,
        lexer_goto_row152,
+       lexer_goto_row153,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row156,
        lexer_goto_row157,
        lexer_goto_row158,
        lexer_goto_row159,
@@ -2129,12 +2130,12 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row215,
        lexer_goto_row216,
        lexer_goto_row217,
+       lexer_goto_row218,
        lexer_goto_row_null,
-       lexer_goto_row219,
        lexer_goto_row220,
        lexer_goto_row221,
+       lexer_goto_row222,
        lexer_goto_row_null,
-       lexer_goto_row223,
        lexer_goto_row224,
        lexer_goto_row225,
        lexer_goto_row226,
@@ -2228,8 +2229,8 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row314,
        lexer_goto_row315,
        lexer_goto_row316,
+       lexer_goto_row317,
        lexer_goto_row_null,
-       lexer_goto_row318,
        lexer_goto_row319,
        lexer_goto_row320,
        lexer_goto_row321,
@@ -2276,3317 +2277,3333 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row362,
        lexer_goto_row363,
        lexer_goto_row364,
+       lexer_goto_row365,
        lexer_goto_row_null,
-       lexer_goto_row366,
        lexer_goto_row367,
-       lexer_goto_row368
+       lexer_goto_row368,
+       lexer_goto_row369
 };
 
 const int lexer_accept_table[] = {
-       -1,0,1,1,0,94,107,2,80,83,-1,53,54,77,75,57,76,74,79,99,99,58,87,60,90,95,96,55,56,82,-1,-1,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,81,107,84,1,86,107,102,-1,103,2,2,2,65,69,108,108,108,78,63,61,62,73,101,64,-1,-1,-1,59,89,88,85,91,92,96,96,96,96,68,-1,98,-1,97,97,97,97,97,97,47,97,97,97,16,97,97,97,97,97,97,23,97,29,15,97,97,97,97,97,97,97,31,97,97,97,97,97,97,97,97,97,97,97,97,97,67,107,105,-1,104,107,102,107,107,2,106,107,108,66,72,100,100,100,70,93,71,-1,98,98,98,98,-1,-1,-1,97,97,30,97,97,97,97,97,10,97,97,97,28,11,97,97,97,40,97,97,97,97,39,32,97,97,97,97,97,97,97,97,97,97,97,97,97,97,17,97,97,107,107,107,107,107,-1,-1,-1,107,107,107,-1,-1,106,-1,-1,-1,109,97,97,97,97,97,97,25,9,97,97,97,97,13,97,97,97,97,27,97,46,41,97,97,97,97,97,97,43,97,24,44,12,97,97,51,107,-1,-1,105,-1,104,-1,-1,107,-1,-1,107,107,107,-1,-1,107,-1,37,97,97,36,6,97,97,45,97,97,97,97,49,50,97,97,97,97,97,97,14,97,42,97,26,-1,-1,-1,-1,-1,-1,107,-1,-1,102,-1,-1,103,107,107,107,102,-1,107,-1,97,38,97,18,97,5,97,97,4,97,97,97,97,19,34,97,-1,105,-1,-1,104,102,103,107,-1,97,97,33,97,22,97,3,21,97,97,105,104,-1,7,35,97,48,97,97,52,8,20,9
+       -1,0,1,1,0,94,108,2,80,83,-1,53,54,77,75,57,76,74,79,100,100,58,96,87,60,90,95,97,55,56,82,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,81,108,84,1,86,108,103,-1,104,2,2,2,65,69,109,109,109,78,63,61,62,73,102,64,-1,-1,-1,59,89,88,85,91,92,97,97,97,97,68,-1,99,-1,98,98,98,98,98,98,47,98,98,98,16,98,98,98,98,98,98,23,98,29,15,98,98,98,98,98,98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,98,67,108,106,-1,105,108,103,108,108,2,107,108,109,66,72,101,101,101,70,93,71,-1,99,99,99,99,-1,-1,-1,98,98,30,98,98,98,98,98,10,98,98,98,28,11,98,98,98,40,98,98,98,98,39,32,98,98,98,98,98,98,98,98,98,98,98,98,98,98,17,98,98,108,108,108,108,108,-1,-1,-1,108,108,108,-1,-1,107,-1,-1,-1,110,98,98,98,98,98,98,25,9,98,98,98,98,13,98,98,98,98,27,98,46,41,98,98,98,98,98,98,43,98,24,44,12,98,98,51,108,-1,-1,106,-1,105,-1,-1,108,-1,-1,108,108,108,-1,-1,108,-1,37,98,98,36,6,98,98,45,98,98,98,98,49,50,98,98,98,98,98,98,14,98,42,98,26,-1,-1,-1,-1,-1,-1,108,-1,-1,103,-1,-1,104,108,108,108,103,-1,108,-1,98,38,98,18,98,5,98,98,4,98,98,98,98,19,34,98,-1,106,-1,-1,105,103,104,108,-1,98,98,33,98,22,98,3,21,98,98,106,105,-1,7,35,98,48,98,98,52,8,20,9
 };
 
 static int parser_action_row1[] = {
-       4,
-       -1, 1, 474,
+       7,
+       -1, 1, 485,
        0, 0, 1,
        1, 0, 2,
-       109, 1, 22
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row2[] = {
        1,
-       -1, 1, 1075
+       -1, 1, 489
 };
 static int parser_action_row3[] = {
        1,
-       -1, 1, 1073
+       -1, 1, 1088
 };
 static int parser_action_row4[] = {
-       2,
-       -1, 3, 3,
-       109, 2, -1
-};
-static int parser_action_row5[] = {
        4,
-       -1, 1, 474,
+       -1, 1, 477,
        0, 0, 1,
        1, 0, 2,
-       109, 1, 22
+       95, 0, 3
+};
+static int parser_action_row5[] = {
+       2,
+       -1, 3, 4,
+       110, 2, -1
 };
 static int parser_action_row6[] = {
-       1,
-       -1, 1, 1039
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row7[] = {
        1,
-       -1, 1, 1043
+       -1, 1, 1054
 };
 static int parser_action_row8[] = {
        1,
-       -1, 1, 0
+       -1, 1, 1058
 };
 static int parser_action_row9[] = {
        1,
-       -1, 1, 21
+       -1, 1, 0
 };
 static int parser_action_row10[] = {
        1,
-       -1, 1, 19
+       -1, 1, 21
 };
 static int parser_action_row11[] = {
        1,
-       -1, 1, 1041
+       -1, 1, 19
 };
 static int parser_action_row12[] = {
-       2,
-       -1, 1, 475,
-       109, 1, 23
+       1,
+       -1, 1, 1056
 };
 static int parser_action_row13[] = {
-       35,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       28, 0, 33,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55,
-       108, 0, 56
+       2,
+       -1, 1, 486,
+       110, 1, 23
 };
 static int parser_action_row14[] = {
-       2,
-       -1, 1, 473,
-       1, 0, 2
+       33,
+       -1, 1, 30,
+       12, 0, 31,
+       13, 0, 32,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row15[] = {
        3,
        -1, 3, 14,
-       0, 0, 83,
-       1, 0, 84
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row16[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 1090
 };
 static int parser_action_row17[] = {
        4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       -1, 3, 16,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row18[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 488
 };
 static int parser_action_row19[] = {
-       3,
-       -1, 1, 471,
+       7,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 97
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row20[] = {
-       2,
-       -1, 1, 478,
-       0, 0, 99
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row21[] = {
-       1,
-       -1, 1, 1
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row22[] = {
-       35,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       28, 0, 33,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55,
-       108, 0, 56
+       7,
+       -1, 1, 474,
+       0, 0, 102,
+       1, 0, 103,
+       9, 1, 1051,
+       28, 1, 1051,
+       95, 0, 104,
+       109, 1, 1051
 };
 static int parser_action_row23[] = {
-       4,
-       -1, 1, 474,
+       7,
+       -1, 1, 476,
        0, 0, 1,
        1, 0, 2,
-       109, 1, 22
+       9, 1, 1053,
+       28, 1, 1053,
+       95, 0, 105,
+       109, 1, 1053
 };
 static int parser_action_row24[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 481
 };
 static int parser_action_row25[] = {
        4,
        -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       0, 0, 102,
+       1, 0, 103,
+       95, 0, 104
 };
 static int parser_action_row26[] = {
-       27,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 349,
-       73, 1, 349,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       4,
+       -1, 1, 476,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 105
 };
 static int parser_action_row27[] = {
        1,
-       -1, 1, 29
+       -1, 1, 1
 };
 static int parser_action_row28[] = {
        33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 148,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 30,
+       12, 0, 31,
+       13, 0, 32,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row29[] = {
-       2,
-       -1, 3, 28,
-       96, 0, 153
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row30[] = {
-       3,
-       -1, 1, 474,
+       7,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row31[] = {
-       3,
-       -1, 1, 474,
+       5,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row32[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 148,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 353,
+       73, 1, 353,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row33[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 31
 };
 static int parser_action_row34[] = {
-       3,
-       -1, 1, 474,
+       34,
+       -1, 1, 458,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row35[] = {
-       26,
-       -1, 1, 167,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 34,
+       97, 0, 162
 };
 static int parser_action_row36[] = {
-       2,
-       -1, 1, 172,
-       49, 0, 188
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row37[] = {
-       2,
-       -1, 1, 169,
-       49, 0, 188
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row38[] = {
-       1,
-       -1, 1, 171
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row39[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 191,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
-};
-static int parser_action_row40[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row40[] = {
+       26,
+       -1, 1, 169,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
 static int parser_action_row41[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 174,
+       49, 0, 197
 };
 static int parser_action_row42[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 171,
+       49, 0, 197
 };
 static int parser_action_row43[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 173
 };
 static int parser_action_row44[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 200,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row45[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row46[] = {
        2,
-       -1, 3, 45,
-       11, 0, 202
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row47[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row48[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row49[] = {
        2,
-       -1, 3, 48,
-       58, 0, 205
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row50[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 337,
-       58, 0, 206,
-       59, 0, 207,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 337,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row51[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 50,
+       11, 0, 211
 };
 static int parser_action_row52[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row53[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row54[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 53,
+       58, 0, 214
 };
 static int parser_action_row55[] = {
-       1,
-       -1, 1, 393
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 341,
+       58, 0, 215,
+       59, 0, 216,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 341,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row56[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row57[] = {
-       1,
-       -1, 1, 139
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row58[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row59[] = {
        2,
-       -1, 3, 58,
-       108, 0, 232
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row60[] = {
        1,
-       -1, 1, 143
+       -1, 1, 397
 };
 static int parser_action_row61[] = {
-       1,
-       -1, 1, 24
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row62[] = {
-       1,
-       -1, 1, 25
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row63[] = {
-       3,
-       -1, 1, 158,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 24
 };
 static int parser_action_row64[] = {
        1,
-       -1, 1, 165
+       -1, 1, 25
 };
 static int parser_action_row65[] = {
-       1,
-       -1, 1, 166
+       4,
+       -1, 1, 160,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row66[] = {
        1,
-       -1, 1, 174
+       -1, 1, 167
 };
 static int parser_action_row67[] = {
        1,
-       -1, 1, 175
+       -1, 1, 168
 };
 static int parser_action_row68[] = {
        1,
-       -1, 1, 177
+       -1, 1, 176
 };
 static int parser_action_row69[] = {
        1,
-       -1, 1, 176
+       -1, 1, 177
 };
 static int parser_action_row70[] = {
        1,
-       -1, 1, 178
+       -1, 1, 179
 };
 static int parser_action_row71[] = {
        1,
-       -1, 1, 179
+       -1, 1, 178
 };
 static int parser_action_row72[] = {
        1,
        -1, 1, 180
 };
 static int parser_action_row73[] = {
-       3,
-       -1, 3, 72,
-       54, 0, 236,
-       73, 0, 237
+       1,
+       -1, 1, 181
 };
 static int parser_action_row74[] = {
        1,
-       -1, 1, 325
+       -1, 1, 182
 };
 static int parser_action_row75[] = {
-       1,
-       -1, 1, 375
+       3,
+       -1, 3, 74,
+       54, 0, 244,
+       73, 0, 245
 };
 static int parser_action_row76[] = {
        1,
-       -1, 1, 374
+       -1, 1, 329
 };
 static int parser_action_row77[] = {
-       3,
-       -1, 3, 76,
-       103, 0, 239,
-       104, 0, 240
+       1,
+       -1, 1, 379
 };
 static int parser_action_row78[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 378
 };
 static int parser_action_row79[] = {
        3,
        -1, 3, 78,
-       41, 0, 246,
-       97, 0, 247
+       104, 0, 247,
+       105, 0, 248
 };
 static int parser_action_row80[] = {
-       1,
-       -1, 1, 1071
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row81[] = {
        3,
-       -1, 1, 453,
-       12, 0, 248,
-       96, 0, 249
+       -1, 3, 80,
+       41, 0, 254,
+       98, 0, 255
 };
 static int parser_action_row82[] = {
-       4,
-       -1, 1, 455,
-       12, 0, 250,
-       95, 0, 48,
-       96, 0, 251
+       1,
+       -1, 1, 1086
 };
 static int parser_action_row83[] = {
        3,
-       -1, 1, 472,
-       0, 0, 1,
-       1, 0, 97
+       -1, 1, 455,
+       12, 0, 256,
+       97, 0, 257
 };
 static int parser_action_row84[] = {
-       1,
-       -1, 1, 470
+       4,
+       -1, 1, 457,
+       12, 0, 258,
+       96, 0, 53,
+       97, 0, 259
 };
 static int parser_action_row85[] = {
-       1,
-       -1, 1, 469
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row86[] = {
        1,
-       -1, 1, 20
+       -1, 1, 141
 };
 static int parser_action_row87[] = {
-       1,
-       -1, 1, 1040
+       2,
+       -1, 3, 86,
+       109, 0, 263
 };
 static int parser_action_row88[] = {
        1,
-       -1, 1, 2
+       -1, 1, 145
 };
 static int parser_action_row89[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 472
 };
 static int parser_action_row90[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 471
 };
 static int parser_action_row91[] = {
        1,
-       -1, 1, 4
+       -1, 1, 473
 };
 static int parser_action_row92[] = {
        1,
-       -1, 1, 1042
+       -1, 1, 20
 };
 static int parser_action_row93[] = {
-       35,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       28, 0, 33,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55,
-       108, 0, 56
+       1,
+       -1, 1, 1055
 };
 static int parser_action_row94[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 2
 };
 static int parser_action_row95[] = {
-       1,
-       -1, 1, 1044
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row96[] = {
-       1,
-       -1, 1, 8
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row97[] = {
-       33,
-       -1, 1, 28,
-       12, 0, 25,
-       13, 0, 26,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 4
 };
 static int parser_action_row98[] = {
        1,
-       -1, 1, 1074
+       -1, 1, 1057
 };
 static int parser_action_row99[] = {
-       2,
-       -1, 1, 476,
-       0, 0, 99
+       33,
+       -1, 1, 30,
+       12, 0, 31,
+       13, 0, 32,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row100[] = {
-       1,
-       -1, 1, 1076
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row101[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       1,
+       -1, 1, 1059
 };
 static int parser_action_row102[] = {
        1,
-       -1, 1, 3
+       -1, 1, 8
 };
 static int parser_action_row103[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       1,
+       -1, 1, 490
 };
 static int parser_action_row104[] = {
+       1,
+       -1, 1, 1089
+};
+static int parser_action_row105[] = {
        4,
-       -1, 1, 474,
+       -1, 1, 479,
        0, 0, 1,
        1, 0, 2,
-       109, 1, 22
-};
-static int parser_action_row105[] = {
-       1,
-       -1, 1, 5
+       95, 0, 3
 };
 static int parser_action_row106[] = {
        4,
-       -1, 1, 474,
+       -1, 1, 478,
        0, 0, 1,
        1, 0, 2,
-       109, 1, 22
+       95, 0, 3
 };
 static int parser_action_row107[] = {
        1,
-       -1, 1, 9
+       -1, 1, 1091
 };
 static int parser_action_row108[] = {
-       2,
-       -1, 1, 756,
-       52, 0, 265
+       7,
+       -1, 1, 475,
+       0, 0, 102,
+       1, 0, 103,
+       9, 1, 1052,
+       28, 1, 1052,
+       95, 0, 271,
+       109, 1, 1052
 };
 static int parser_action_row109[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 475,
+       0, 0, 102,
+       1, 0, 103,
+       95, 0, 271
 };
 static int parser_action_row110[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row111[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 3
 };
 static int parser_action_row112[] = {
-       3,
-       -1, 1, 474,
+       7,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       28, 1, 487,
+       95, 0, 3,
+       109, 1, 487,
+       110, 1, 22
 };
 static int parser_action_row113[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row114[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 5
 };
 static int parser_action_row115[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row116[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 9
 };
 static int parser_action_row117[] = {
-       15,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 275,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 768,
+       52, 0, 277
 };
 static int parser_action_row118[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row119[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row120[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row121[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row122[] = {
-       3,
-       -1, 1, 744,
-       52, 0, 265,
-       58, 0, 206
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row123[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row124[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row125[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row126[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       15,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 287,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row127[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row128[] = {
-       1,
-       -1, 1, 781
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row129[] = {
-       1,
-       -1, 1, 348
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row130[] = {
-       1,
-       -1, 1, 191
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row131[] = {
        3,
-       -1, 3, 130,
-       41, 0, 288,
-       97, 0, 289
+       -1, 1, 756,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row132[] = {
        2,
-       -1, 1, 453,
-       96, 0, 290
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row133[] = {
-       1,
-       -1, 1, 438
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row134[] = {
-       4,
-       -1, 1, 686,
-       29, 0, 291,
-       30, 0, 292,
-       32, 0, 293
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row135[] = {
-       1,
-       -1, 1, 688
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row136[] = {
-       1,
-       -1, 1, 693
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row137[] = {
-       10,
-       -1, 1, 695,
-       39, 0, 294,
-       80, 0, 295,
-       84, 0, 296,
-       85, 0, 297,
-       86, 0, 298,
-       87, 0, 299,
-       89, 0, 300,
-       90, 0, 301,
-       92, 0, 302
+       1,
+       -1, 1, 793
 };
 static int parser_action_row138[] = {
-       2,
-       -1, 1, 704,
-       81, 0, 303
+       1,
+       -1, 1, 352
 };
 static int parser_action_row139[] = {
-       2,
-       -1, 1, 706,
-       82, 0, 304
+       1,
+       -1, 1, 193
 };
 static int parser_action_row140[] = {
        3,
-       -1, 1, 708,
-       88, 0, 305,
-       91, 0, 306
+       -1, 3, 139,
+       41, 0, 300,
+       98, 0, 301
 };
 static int parser_action_row141[] = {
-       3,
-       -1, 1, 710,
-       74, 0, 307,
-       75, 0, 308
+       2,
+       -1, 1, 455,
+       97, 0, 302
 };
 static int parser_action_row142[] = {
-       4,
-       -1, 1, 713,
-       76, 0, 309,
-       78, 0, 310,
-       79, 0, 311
+       1,
+       -1, 1, 440
 };
 static int parser_action_row143[] = {
-       1,
-       -1, 1, 716
+       4,
+       -1, 1, 698,
+       29, 0, 303,
+       30, 0, 304,
+       32, 0, 305
 };
 static int parser_action_row144[] = {
-       2,
-       -1, 1, 720,
-       77, 0, 312
+       1,
+       -1, 1, 700
 };
 static int parser_action_row145[] = {
        1,
-       -1, 1, 722
+       -1, 1, 705
 };
 static int parser_action_row146[] = {
-       3,
-       -1, 1, 727,
-       54, 0, 236,
-       73, 0, 313
+       10,
+       -1, 1, 707,
+       39, 0, 306,
+       80, 0, 307,
+       84, 0, 308,
+       85, 0, 309,
+       86, 0, 310,
+       87, 0, 311,
+       89, 0, 312,
+       90, 0, 313,
+       92, 0, 314
 };
 static int parser_action_row147[] = {
-       1,
-       -1, 1, 732
+       2,
+       -1, 1, 716,
+       81, 0, 315
 };
 static int parser_action_row148[] = {
-       3,
-       -1, 1, 455,
-       95, 0, 48,
-       96, 0, 315
+       2,
+       -1, 1, 718,
+       82, 0, 316
 };
 static int parser_action_row149[] = {
-       2,
-       -1, 1, 156,
-       49, 1, 969
+       3,
+       -1, 1, 720,
+       88, 0, 317,
+       91, 0, 318
 };
 static int parser_action_row150[] = {
-       1,
-       -1, 1, 255
+       3,
+       -1, 1, 722,
+       74, 0, 319,
+       75, 0, 320
 };
 static int parser_action_row151[] = {
-       1,
-       -1, 1, 157
+       4,
+       -1, 1, 725,
+       76, 0, 321,
+       78, 0, 322,
+       79, 0, 323
 };
 static int parser_action_row152[] = {
-       31,
-       -1, 1, 456,
-       9, 0, 317,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 728
 };
 static int parser_action_row153[] = {
        2,
-       -1, 3, 152,
-       49, 0, 188
+       -1, 1, 732,
+       77, 0, 324
 };
 static int parser_action_row154[] = {
-       3,
-       -1, 1, 153,
-       57, 0, 321,
-       94, 0, 195
+       1,
+       -1, 1, 734
 };
 static int parser_action_row155[] = {
-       1,
-       -1, 1, 475
+       3,
+       -1, 1, 739,
+       54, 0, 244,
+       73, 0, 325
 };
 static int parser_action_row156[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 744
 };
 static int parser_action_row157[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 327
 };
 static int parser_action_row158[] = {
-       1,
-       -1, 1, 264
+       2,
+       -1, 1, 158,
+       49, 1, 981
 };
 static int parser_action_row159[] = {
-       2,
-       -1, 3, 158,
-       49, 0, 188
+       1,
+       -1, 1, 257
 };
 static int parser_action_row160[] = {
-       3,
-       -1, 3, 159,
-       52, 0, 327,
-       96, 0, 328
+       1,
+       -1, 1, 159
 };
 static int parser_action_row161[] = {
-       2,
-       -1, 3, 160,
-       101, 0, 331
+       31,
+       -1, 1, 458,
+       9, 0, 329,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row162[] = {
        2,
-       -1, 1, 349,
-       52, 0, 265
+       -1, 3, 161,
+       49, 0, 197
 };
 static int parser_action_row163[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 155,
+       57, 0, 333,
+       94, 0, 204
 };
 static int parser_action_row164[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row165[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 1051,
+       0, 0, 102,
+       1, 0, 103
 };
 static int parser_action_row166[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 1053,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row167[] = {
-       17,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row168[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 268
 };
 static int parser_action_row169[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 168,
+       49, 0, 197
 };
 static int parser_action_row170[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 169,
+       52, 0, 340,
+       97, 0, 341
 };
 static int parser_action_row171[] = {
-       3,
-       -1, 1, 337,
-       52, 0, 265,
-       58, 0, 206
+       2,
+       -1, 1, 353,
+       52, 0, 277
 };
 static int parser_action_row172[] = {
-       1,
-       -1, 1, 168
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row173[] = {
-       4,
-       -1, 1, 279,
-       29, 0, 342,
-       30, 0, 343,
-       32, 0, 344
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row174[] = {
-       1,
-       -1, 1, 281
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row175[] = {
-       1,
-       -1, 1, 286
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row176[] = {
-       10,
-       -1, 1, 288,
-       39, 0, 345,
-       80, 0, 346,
-       84, 0, 347,
-       85, 0, 348,
-       86, 0, 349,
-       87, 0, 350,
-       89, 0, 351,
-       90, 0, 352,
-       92, 0, 353
+       17,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row177[] = {
-       2,
-       -1, 1, 297,
-       81, 0, 354
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row178[] = {
-       2,
-       -1, 1, 299,
-       82, 0, 355
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row179[] = {
-       3,
-       -1, 1, 301,
-       88, 0, 356,
-       91, 0, 357
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row180[] = {
        3,
-       -1, 1, 303,
-       74, 0, 358,
-       75, 0, 359
+       -1, 1, 341,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row181[] = {
-       4,
-       -1, 1, 306,
-       76, 0, 360,
-       78, 0, 361,
-       79, 0, 362
+       1,
+       -1, 1, 170
 };
 static int parser_action_row182[] = {
-       1,
-       -1, 1, 309
+       4,
+       -1, 1, 283,
+       29, 0, 354,
+       30, 0, 355,
+       32, 0, 356
 };
 static int parser_action_row183[] = {
-       2,
-       -1, 1, 313,
-       77, 0, 363
+       1,
+       -1, 1, 285
 };
 static int parser_action_row184[] = {
        1,
-       -1, 1, 315
+       -1, 1, 290
 };
 static int parser_action_row185[] = {
-       3,
-       -1, 1, 320,
-       54, 0, 236,
-       73, 0, 364
+       10,
+       -1, 1, 292,
+       39, 0, 357,
+       80, 0, 358,
+       84, 0, 359,
+       85, 0, 360,
+       86, 0, 361,
+       87, 0, 362,
+       89, 0, 363,
+       90, 0, 364,
+       92, 0, 365
 };
 static int parser_action_row186[] = {
-       3,
-       -1, 3, 185,
-       41, 0, 366,
-       97, 0, 367
+       2,
+       -1, 1, 301,
+       81, 0, 366
 };
 static int parser_action_row187[] = {
        2,
-       -1, 1, 453,
-       96, 0, 368
+       -1, 1, 303,
+       82, 0, 367
 };
 static int parser_action_row188[] = {
        3,
-       -1, 1, 455,
-       95, 0, 48,
-       96, 0, 369
+       -1, 1, 305,
+       88, 0, 368,
+       91, 0, 369
 };
 static int parser_action_row189[] = {
-       2,
-       -1, 1, 199,
-       96, 0, 371
+       3,
+       -1, 1, 307,
+       74, 0, 370,
+       75, 0, 371
 };
 static int parser_action_row190[] = {
-       1,
-       -1, 1, 173
+       4,
+       -1, 1, 310,
+       76, 0, 372,
+       78, 0, 373,
+       79, 0, 374
 };
 static int parser_action_row191[] = {
        1,
-       -1, 1, 170
+       -1, 1, 313
 };
 static int parser_action_row192[] = {
-       4,
-       -1, 1, 337,
-       52, 0, 265,
-       57, 0, 372,
-       58, 0, 206
+       2,
+       -1, 1, 317,
+       77, 0, 375
 };
 static int parser_action_row193[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 319
 };
 static int parser_action_row194[] = {
-       2,
-       -1, 1, 276,
-       24, 0, 374
+       3,
+       -1, 1, 324,
+       54, 0, 244,
+       73, 0, 376
 };
 static int parser_action_row195[] = {
        3,
        -1, 3, 194,
-       47, 0, 375,
-       95, 0, 376
+       41, 0, 378,
+       98, 0, 379
 };
 static int parser_action_row196[] = {
-       3,
-       -1, 1, 28,
-       13, 0, 26,
-       52, 0, 378
+       2,
+       -1, 1, 455,
+       97, 0, 380
 };
 static int parser_action_row197[] = {
-       1,
-       -1, 1, 400
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 381
 };
 static int parser_action_row198[] = {
-       1,
-       -1, 1, 365
+       2,
+       -1, 1, 201,
+       97, 0, 383
 };
 static int parser_action_row199[] = {
        1,
-       -1, 1, 366
+       -1, 1, 175
 };
 static int parser_action_row200[] = {
        1,
-       -1, 1, 367
+       -1, 1, 172
 };
 static int parser_action_row201[] = {
-       1,
-       -1, 1, 368
+       4,
+       -1, 1, 341,
+       52, 0, 277,
+       57, 0, 384,
+       58, 0, 215
 };
 static int parser_action_row202[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 381,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row203[] = {
-       3,
-       -1, 3, 202,
-       47, 0, 384,
-       95, 0, 385
+       2,
+       -1, 1, 280,
+       24, 0, 386
 };
 static int parser_action_row204[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 203,
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row205[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 434,
-       27, 0, 435,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 30,
+       13, 0, 32,
+       52, 0, 390
 };
 static int parser_action_row206[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 404
 };
 static int parser_action_row207[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 369
 };
 static int parser_action_row208[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 370
 };
 static int parser_action_row209[] = {
        1,
-       -1, 1, 243
+       -1, 1, 371
 };
 static int parser_action_row210[] = {
        1,
-       -1, 1, 244
+       -1, 1, 372
 };
 static int parser_action_row211[] = {
-       1,
-       -1, 1, 245
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 393,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row212[] = {
-       1,
-       -1, 1, 246
+       3,
+       -1, 3, 211,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row213[] = {
-       1,
-       -1, 1, 247
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row214[] = {
-       1,
-       -1, 1, 248
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row215[] = {
-       1,
-       -1, 1, 249
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row216[] = {
-       1,
-       -1, 1, 250
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row217[] = {
-       1,
-       -1, 1, 251
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row218[] = {
        1,
-       -1, 1, 252
+       -1, 1, 245
 };
 static int parser_action_row219[] = {
        1,
-       -1, 1, 253
+       -1, 1, 246
 };
 static int parser_action_row220[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 247
 };
 static int parser_action_row221[] = {
-       13,
-       -1, 1, 336,
-       59, 0, 443,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 248
 };
 static int parser_action_row222[] = {
        1,
-       -1, 1, 185
+       -1, 1, 249
 };
 static int parser_action_row223[] = {
        1,
-       -1, 1, 369
+       -1, 1, 250
 };
 static int parser_action_row224[] = {
        1,
-       -1, 1, 370
+       -1, 1, 251
 };
 static int parser_action_row225[] = {
        1,
-       -1, 1, 371
+       -1, 1, 252
 };
 static int parser_action_row226[] = {
        1,
-       -1, 1, 373
+       -1, 1, 253
 };
 static int parser_action_row227[] = {
        1,
-       -1, 1, 372
+       -1, 1, 254
 };
 static int parser_action_row228[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 255
 };
 static int parser_action_row229[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row230[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       13,
+       -1, 1, 340,
+       59, 0, 455,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row231[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 187
 };
 static int parser_action_row232[] = {
-       9,
-       -1, 3, 231,
-       3, 0, 449,
-       4, 0, 450,
-       5, 0, 451,
-       6, 0, 452,
-       7, 0, 453,
-       8, 0, 454,
-       10, 0, 455,
-       17, 0, 456
+       1,
+       -1, 1, 373
 };
 static int parser_action_row233[] = {
        1,
-       -1, 1, 140
+       -1, 1, 374
 };
 static int parser_action_row234[] = {
        1,
-       -1, 1, 1055
+       -1, 1, 375
 };
 static int parser_action_row235[] = {
-       32,
-       -1, 1, 160,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 377
 };
 static int parser_action_row236[] = {
-       3,
-       -1, 1, 159,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 376
 };
 static int parser_action_row237[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row238[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row239[] = {
-       13,
-       -1, 1, 350,
-       59, 0, 463,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row240[] = {
-       1,
-       -1, 1, 396
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row241[] = {
-       1,
-       -1, 1, 397
+       9,
+       -1, 3, 240,
+       3, 0, 461,
+       4, 0, 462,
+       5, 0, 463,
+       6, 0, 464,
+       7, 0, 465,
+       8, 0, 466,
+       10, 0, 467,
+       17, 0, 468
 };
 static int parser_action_row242[] = {
        1,
-       -1, 1, 1061
+       -1, 1, 1072
 };
 static int parser_action_row243[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       32,
+       -1, 1, 162,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row244[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       4,
+       -1, 1, 161,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row245[] = {
        3,
-       -1, 3, 244,
-       103, 0, 239,
-       104, 0, 240
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row246[] = {
-       26,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       103, 1, 392,
-       104, 1, 392,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row247[] = {
-       27,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 345,
-       73, 1, 345,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       13,
+       -1, 1, 354,
+       59, 0, 475,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row248[] = {
-       13,
-       -1, 1, 327,
-       59, 0, 472,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 400
 };
 static int parser_action_row249[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 401
 };
 static int parser_action_row250[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 339,
-       59, 0, 476,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 339,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 1078
 };
 static int parser_action_row251[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row252[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 343,
-       58, 0, 206,
-       59, 0, 481,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 343,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row253[] = {
-       1,
-       -1, 1, 1072
+       3,
+       -1, 3, 252,
+       104, 0, 247,
+       105, 0, 248
 };
 static int parser_action_row254[] = {
-       3,
-       -1, 1, 454,
-       12, 0, 485,
-       96, 0, 486
+       26,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       104, 1, 396,
+       105, 1, 396,
+       106, 0, 60
 };
 static int parser_action_row255[] = {
-       2,
-       -1, 1, 477,
-       0, 0, 99
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 349,
+       73, 1, 349,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row256[] = {
-       1,
-       -1, 1, 6
+       13,
+       -1, 1, 331,
+       59, 0, 484,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row257[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row258[] = {
-       1,
-       -1, 1, 10
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 343,
+       59, 0, 488,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 343,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row259[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row260[] = {
-       1,
-       -1, 1, 12
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 347,
+       58, 0, 215,
+       59, 0, 493,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 347,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row261[] = {
-       8,
-       -1, 3, 260,
-       4, 0, 450,
-       5, 0, 451,
-       6, 0, 452,
-       7, 0, 453,
-       8, 0, 454,
-       10, 0, 455,
-       17, 0, 456
+       1,
+       -1, 1, 1087
 };
 static int parser_action_row262[] = {
-       1,
-       -1, 1, 7
+       3,
+       -1, 1, 456,
+       12, 0, 497,
+       97, 0, 498
 };
 static int parser_action_row263[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       109, 1, 22
+       2,
+       -1, 3, 262,
+       102, 0, 499
 };
 static int parser_action_row264[] = {
        1,
-       -1, 1, 11
+       -1, 1, 142
 };
 static int parser_action_row265[] = {
        1,
-       -1, 1, 13
+       -1, 1, 6
 };
 static int parser_action_row266[] = {
-       3,
-       -1, 1, 474,
+       5,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row267[] = {
        1,
-       -1, 1, 755
+       -1, 1, 10
 };
 static int parser_action_row268[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row269[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 12
 };
 static int parser_action_row270[] = {
-       3,
-       -1, 3, 269,
-       47, 0, 375,
-       95, 0, 376
+       1,
+       -1, 1, 483
 };
 static int parser_action_row271[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 482
 };
 static int parser_action_row272[] = {
-       1,
-       -1, 1, 772
+       4,
+       -1, 1, 480,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row273[] = {
-       1,
-       -1, 1, 773
+       8,
+       -1, 3, 272,
+       4, 0, 462,
+       5, 0, 463,
+       6, 0, 464,
+       7, 0, 465,
+       8, 0, 466,
+       10, 0, 467,
+       17, 0, 468
 };
 static int parser_action_row274[] = {
        1,
-       -1, 1, 774
+       -1, 1, 7
 };
 static int parser_action_row275[] = {
-       1,
-       -1, 1, 775
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3,
+       110, 1, 22
 };
 static int parser_action_row276[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 11
 };
 static int parser_action_row277[] = {
-       3,
-       -1, 3, 276,
-       41, 0, 288,
-       97, 0, 496
+       1,
+       -1, 1, 13
 };
 static int parser_action_row278[] = {
        3,
-       -1, 3, 277,
-       54, 0, 236,
-       73, 0, 497
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row279[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       53, 0, 498,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 499,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 767
 };
 static int parser_action_row280[] = {
-       1,
-       -1, 1, 724
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row281[] = {
-       1,
-       -1, 1, 723
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row282[] = {
-       1,
-       -1, 1, 725
+       3,
+       -1, 3, 281,
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row283[] = {
-       1,
-       -1, 1, 743
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row284[] = {
        1,
-       -1, 1, 776
+       -1, 1, 784
 };
 static int parser_action_row285[] = {
        1,
-       -1, 1, 777
+       -1, 1, 785
 };
 static int parser_action_row286[] = {
        1,
-       -1, 1, 778
+       -1, 1, 786
 };
 static int parser_action_row287[] = {
        1,
-       -1, 1, 780
+       -1, 1, 787
 };
 static int parser_action_row288[] = {
-       1,
-       -1, 1, 779
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row289[] = {
-       2,
-       -1, 1, 752,
-       52, 0, 265
+       3,
+       -1, 3, 288,
+       41, 0, 300,
+       98, 0, 510
 };
 static int parser_action_row290[] = {
-       1,
-       -1, 1, 734
+       3,
+       -1, 3, 289,
+       54, 0, 244,
+       73, 0, 511
 };
 static int parser_action_row291[] = {
-       2,
-       -1, 1, 746,
-       52, 0, 265
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       53, 0, 512,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row292[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 736
 };
 static int parser_action_row293[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 506
+       1,
+       -1, 1, 735
 };
 static int parser_action_row294[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 737
 };
 static int parser_action_row295[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 755
 };
 static int parser_action_row296[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 788
 };
 static int parser_action_row297[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 789
 };
 static int parser_action_row298[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 790
 };
 static int parser_action_row299[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 792
 };
 static int parser_action_row300[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 791
 };
 static int parser_action_row301[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 764,
+       52, 0, 277
 };
 static int parser_action_row302[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 746
 };
 static int parser_action_row303[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 758,
+       52, 0, 277
 };
 static int parser_action_row304[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row305[] = {
-       3,
-       -1, 1, 474,
+       4,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       24, 0, 520
 };
 static int parser_action_row306[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row307[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row308[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row309[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row310[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row311[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row312[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row313[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row314[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row315[] = {
-       1,
-       -1, 1, 757
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row316[] = {
        3,
-       -1, 1, 750,
-       52, 0, 265,
-       58, 0, 206
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row317[] = {
-       2,
-       -1, 1, 454,
-       96, 0, 530
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row318[] = {
-       2,
-       -1, 1, 155,
-       49, 1, 968
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row319[] = {
-       2,
-       -1, 1, 154,
-       49, 1, 967
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row320[] = {
        3,
-       -1, 3, 319,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row321[] = {
-       1,
-       -1, 1, 254
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row322[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row323[] = {
-       2,
-       -1, 1, 201,
-       59, 0, 534
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row324[] = {
-       2,
-       -1, 1, 153,
-       57, 0, 321
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row325[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row326[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row327[] = {
        1,
-       -1, 1, 263
+       -1, 1, 769
 };
 static int parser_action_row328[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 762,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row329[] = {
-       1,
-       -1, 1, 447
+       2,
+       -1, 1, 456,
+       97, 0, 544
 };
 static int parser_action_row330[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 157,
+       49, 1, 980
 };
 static int parser_action_row331[] = {
        2,
-       -1, 1, 446,
-       56, 0, 540
+       -1, 1, 156,
+       49, 1, 979
 };
 static int parser_action_row332[] = {
-       3,
-       -1, 1, 474,
+       4,
+       -1, 3, 331,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row333[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 256
 };
 static int parser_action_row334[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 161,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row335[] = {
-       3,
-       -1, 3, 334,
-       47, 0, 375,
-       95, 0, 376
+       2,
+       -1, 1, 203,
+       59, 0, 548
 };
 static int parser_action_row336[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row337[] = {
        3,
-       -1, 3, 336,
-       54, 0, 236,
-       73, 0, 546
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row338[] = {
        3,
-       -1, 3, 337,
-       41, 0, 366,
-       97, 0, 547
+       -1, 1, 1052,
+       0, 0, 102,
+       1, 0, 103
 };
 static int parser_action_row339[] = {
-       1,
-       -1, 1, 317
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row340[] = {
        1,
-       -1, 1, 316
+       -1, 1, 267
 };
 static int parser_action_row341[] = {
-       1,
-       -1, 1, 318
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row342[] = {
        1,
-       -1, 1, 336
+       -1, 1, 449
 };
 static int parser_action_row343[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row344[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 549
+       2,
+       -1, 1, 448,
+       56, 0, 554
 };
 static int parser_action_row345[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row346[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row347[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 346,
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row348[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row349[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 348,
+       54, 0, 244,
+       73, 0, 559
 };
 static int parser_action_row350[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 349,
+       41, 0, 378,
+       98, 0, 560
 };
 static int parser_action_row351[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 321
 };
 static int parser_action_row352[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 320
 };
 static int parser_action_row353[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 322
 };
 static int parser_action_row354[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 340
 };
 static int parser_action_row355[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row356[] = {
-       3,
-       -1, 1, 474,
+       4,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       24, 0, 562
 };
 static int parser_action_row357[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row358[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row359[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row360[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row361[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row362[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row363[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row364[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row365[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row366[] = {
-       1,
-       -1, 1, 350
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row367[] = {
-       2,
-       -1, 1, 345,
-       52, 0, 265
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row368[] = {
-       1,
-       -1, 1, 327
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row369[] = {
-       2,
-       -1, 1, 339,
-       52, 0, 265
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row370[] = {
        3,
-       -1, 1, 343,
-       52, 0, 265,
-       58, 0, 206
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row371[] = {
-       2,
-       -1, 1, 454,
-       96, 0, 574
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row372[] = {
-       1,
-       -1, 1, 200
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row373[] = {
-       1,
-       -1, 1, 278
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row374[] = {
-       2,
-       -1, 1, 277,
-       24, 0, 575
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row375[] = {
-       33,
-       -1, 1, 456,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1, 0, 2
 };
 static int parser_action_row376[] = {
-       2,
-       -1, 3, 375,
-       95, 0, 579
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row377[] = {
        3,
-       -1, 1, 785,
-       54, 0, 580,
-       94, 0, 581
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row378[] = {
-       2,
-       -1, 3, 377,
-       73, 0, 584
+       1,
+       -1, 1, 354
 };
 static int parser_action_row379[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 349,
+       52, 0, 277
 };
 static int parser_action_row380[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       1,
+       -1, 1, 331
 };
 static int parser_action_row381[] = {
-       1,
-       -1, 1, 398
+       2,
+       -1, 1, 343,
+       52, 0, 277
 };
 static int parser_action_row382[] = {
-       6,
-       -1, 1, 337,
-       52, 0, 265,
-       57, 0, 321,
-       58, 0, 206,
-       59, 1, 153,
-       94, 0, 195
+       3,
+       -1, 1, 347,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row383[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 456,
+       97, 0, 587
 };
 static int parser_action_row384[] = {
        1,
-       -1, 1, 273
+       -1, 1, 202
 };
 static int parser_action_row385[] = {
-       2,
-       -1, 3, 384,
-       95, 0, 590
+       1,
+       -1, 1, 282
 };
 static int parser_action_row386[] = {
-       3,
-       -1, 1, 401,
-       54, 0, 591,
-       94, 0, 195
+       2,
+       -1, 1, 281,
+       24, 0, 588
 };
 static int parser_action_row387[] = {
-       2,
-       -1, 3, 386,
-       57, 0, 593
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row388[] = {
-       26,
-       -1, 1, 975,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 387,
+       96, 0, 592
 };
 static int parser_action_row389[] = {
-       2,
-       -1, 1, 980,
-       49, 0, 188
+       3,
+       -1, 1, 797,
+       54, 0, 593,
+       94, 0, 594
 };
 static int parser_action_row390[] = {
        2,
-       -1, 1, 977,
-       49, 0, 188
+       -1, 3, 389,
+       73, 0, 597
 };
 static int parser_action_row391[] = {
-       1,
-       -1, 1, 979
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row392[] = {
-       2,
-       -1, 3, 391,
-       11, 0, 597
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row393[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       55, 0, 598
+       1,
+       -1, 1, 402
 };
 static int parser_action_row394[] = {
-       24,
-       -1, 1, 486,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       6,
+       -1, 1, 341,
+       52, 0, 277,
+       57, 0, 333,
+       58, 0, 215,
+       59, 1, 155,
+       94, 0, 204
 };
 static int parser_action_row395[] = {
-       24,
+       3,
        -1, 1, 487,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row396[] = {
        1,
-       -1, 1, 488
+       -1, 1, 277
 };
 static int parser_action_row397[] = {
-       1,
-       -1, 1, 489
+       2,
+       -1, 3, 396,
+       96, 0, 603
 };
 static int parser_action_row398[] = {
-       1,
-       -1, 1, 490
+       3,
+       -1, 1, 405,
+       54, 0, 604,
+       94, 0, 204
 };
 static int parser_action_row399[] = {
-       1,
-       -1, 1, 491
+       2,
+       -1, 3, 398,
+       57, 0, 606
 };
 static int parser_action_row400[] = {
-       1,
-       -1, 1, 492
+       26,
+       -1, 1, 987,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row401[] = {
-       1,
-       -1, 1, 493
+       2,
+       -1, 1, 992,
+       49, 0, 197
 };
 static int parser_action_row402[] = {
-       1,
-       -1, 1, 494
+       2,
+       -1, 1, 989,
+       49, 0, 197
 };
 static int parser_action_row403[] = {
-       24,
-       -1, 1, 495,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 991
 };
 static int parser_action_row404[] = {
-       1,
-       -1, 1, 496
+       2,
+       -1, 3, 403,
+       11, 0, 610
 };
 static int parser_action_row405[] = {
-       1,
-       -1, 1, 497
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       55, 0, 611
 };
 static int parser_action_row406[] = {
-       1,
-       -1, 1, 500
+       24,
+       -1, 1, 498,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row407[] = {
-       1,
-       -1, 1, 498
+       24,
+       -1, 1, 499,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row408[] = {
        1,
-       -1, 1, 502
+       -1, 1, 500
 };
 static int parser_action_row409[] = {
        1,
@@ -5594,7 +5611,7 @@ static int parser_action_row409[] = {
 };
 static int parser_action_row410[] = {
        1,
-       -1, 1, 499
+       -1, 1, 502
 };
 static int parser_action_row411[] = {
        1,
@@ -5602,14700 +5619,14955 @@ static int parser_action_row411[] = {
 };
 static int parser_action_row412[] = {
        1,
-       -1, 1, 505
+       -1, 1, 504
 };
 static int parser_action_row413[] = {
-       4,
-       -1, 1, 401,
-       54, 0, 591,
-       58, 0, 205,
-       94, 0, 195
+       1,
+       -1, 1, 505
 };
 static int parser_action_row414[] = {
-       15,
-       -1, 1, 337,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 599,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 506
 };
 static int parser_action_row415[] = {
-       1,
-       -1, 1, 426
+       24,
+       -1, 1, 507,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row416[] = {
        1,
-       -1, 1, 973
+       -1, 1, 508
 };
 static int parser_action_row417[] = {
        1,
-       -1, 1, 974
+       -1, 1, 509
 };
 static int parser_action_row418[] = {
        1,
-       -1, 1, 982
+       -1, 1, 512
 };
 static int parser_action_row419[] = {
        1,
-       -1, 1, 984
+       -1, 1, 510
 };
 static int parser_action_row420[] = {
        1,
-       -1, 1, 983
+       -1, 1, 514
 };
 static int parser_action_row421[] = {
        1,
-       -1, 1, 985
+       -1, 1, 513
 };
 static int parser_action_row422[] = {
        1,
-       -1, 1, 986
+       -1, 1, 511
 };
 static int parser_action_row423[] = {
        1,
-       -1, 1, 987
+       -1, 1, 515
 };
 static int parser_action_row424[] = {
        1,
-       -1, 1, 427
+       -1, 1, 517
 };
 static int parser_action_row425[] = {
-       3,
-       -1, 1, 320,
-       54, 0, 236,
-       73, 0, 600
+       4,
+       -1, 1, 405,
+       54, 0, 604,
+       58, 0, 214,
+       94, 0, 204
 };
 static int parser_action_row426[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       15,
+       -1, 1, 341,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 612,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row427[] = {
        1,
-       -1, 1, 431
+       -1, 1, 428
 };
 static int parser_action_row428[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 602
+       1,
+       -1, 1, 985
 };
 static int parser_action_row429[] = {
-       3,
-       -1, 3, 428,
-       41, 0, 366,
-       97, 0, 247
+       1,
+       -1, 1, 986
 };
 static int parser_action_row430[] = {
-       22,
-       -1, 1, 453,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 610
+       1,
+       -1, 1, 994
 };
 static int parser_action_row431[] = {
        1,
-       -1, 1, 508
+       -1, 1, 996
 };
 static int parser_action_row432[] = {
        1,
-       -1, 1, 430
+       -1, 1, 995
 };
 static int parser_action_row433[] = {
        1,
-       -1, 1, 428
+       -1, 1, 997
 };
 static int parser_action_row434[] = {
-       23,
-       -1, 1, 455,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       95, 0, 48,
-       96, 0, 612
-};
+       1,
+       -1, 1, 998
+};
 static int parser_action_row435[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 999
 };
 static int parser_action_row436[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 429
 };
 static int parser_action_row437[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 324,
+       54, 0, 244,
+       73, 0, 613
 };
 static int parser_action_row438[] = {
-       2,
-       -1, 1, 153,
-       57, 0, 321
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row439[] = {
-       2,
-       -1, 1, 383,
-       56, 0, 619
+       1,
+       -1, 1, 433
 };
 static int parser_action_row440[] = {
-       1,
-       -1, 1, 466
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 615
 };
 static int parser_action_row441[] = {
-       1,
-       -1, 1, 465
+       3,
+       -1, 3, 440,
+       41, 0, 378,
+       98, 0, 255
 };
 static int parser_action_row442[] = {
-       1,
-       -1, 1, 216
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 623
 };
 static int parser_action_row443[] = {
        1,
-       -1, 1, 235
+       -1, 1, 520
 };
 static int parser_action_row444[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 432
 };
 static int parser_action_row445[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 430
 };
 static int parser_action_row446[] = {
-       1,
-       -1, 1, 80
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 625
 };
 static int parser_action_row447[] = {
-       1,
-       -1, 1, 82
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row448[] = {
-       1,
-       -1, 1, 81
-};
-static int parser_action_row449[] = {
-       1,
-       -1, 1, 83
-};
-static int parser_action_row450[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row451[] = {
+static int parser_action_row449[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row450[] = {
+       2,
+       -1, 1, 155,
+       57, 0, 333
+};
+static int parser_action_row451[] = {
+       2,
+       -1, 1, 387,
+       56, 0, 632
+};
 static int parser_action_row452[] = {
        1,
-       -1, 1, 30
+       -1, 1, 468
 };
 static int parser_action_row453[] = {
-       2,
-       -1, 3, 452,
-       5, 0, 626
+       1,
+       -1, 1, 467
 };
 static int parser_action_row454[] = {
        1,
-       -1, 1, 32
+       -1, 1, 218
 };
 static int parser_action_row455[] = {
        1,
-       -1, 1, 33
+       -1, 1, 237
 };
 static int parser_action_row456[] = {
-       23,
-       -1, 3, 455,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 48,
-       96, 0, 647
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row457[] = {
-       2,
-       -1, 3, 456,
-       5, 0, 652
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row458[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 82
 };
 static int parser_action_row459[] = {
        1,
-       -1, 1, 164
+       -1, 1, 84
 };
 static int parser_action_row460[] = {
        1,
-       -1, 1, 1056
+       -1, 1, 83
 };
 static int parser_action_row461[] = {
-       32,
-       -1, 1, 161,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 85
 };
 static int parser_action_row462[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 499,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row463[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 655,
-       46, 0, 656,
-       95, 0, 48,
-       96, 0, 657
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row464[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 32
 };
 static int parser_action_row465[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 464,
+       5, 0, 639
 };
 static int parser_action_row466[] = {
-       26,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       103, 1, 395,
-       104, 1, 395,
-       105, 0, 55
+       1,
+       -1, 1, 34
 };
 static int parser_action_row467[] = {
        1,
-       -1, 1, 389
+       -1, 1, 35
 };
 static int parser_action_row468[] = {
-       1,
-       -1, 1, 1062
+       23,
+       -1, 3, 467,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row469[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 468,
+       5, 0, 665
 };
 static int parser_action_row470[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row471[] = {
        1,
-       -1, 1, 344
+       -1, 1, 166
 };
 static int parser_action_row472[] = {
        1,
-       -1, 1, 189
+       -1, 1, 1073
 };
 static int parser_action_row473[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       32,
+       -1, 1, 163,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row474[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row475[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       5,
+       -1, 1, 458,
+       12, 0, 668,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 670
 };
 static int parser_action_row476[] = {
-       1,
-       -1, 1, 195
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row477[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row478[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       26,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       104, 1, 399,
+       105, 1, 399,
+       106, 0, 60
 };
 static int parser_action_row479[] = {
-       13,
-       -1, 1, 338,
-       59, 0, 671,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 393
 };
 static int parser_action_row480[] = {
        1,
-       -1, 1, 186
+       -1, 1, 1079
 };
 static int parser_action_row481[] = {
-       1,
-       -1, 1, 197
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row482[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row483[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 348
 };
 static int parser_action_row484[] = {
-       13,
-       -1, 1, 342,
-       59, 0, 675,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 191
 };
 static int parser_action_row485[] = {
-       1,
-       -1, 1, 188
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row486[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row487[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 341,
-       59, 0, 678,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 341,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row488[] = {
        1,
-       -1, 1, 14
+       -1, 1, 197
 };
 static int parser_action_row489[] = {
-       7,
-       -1, 3, 488,
-       5, 0, 451,
-       6, 0, 452,
-       7, 0, 453,
-       8, 0, 454,
-       10, 0, 455,
-       17, 0, 456
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row490[] = {
-       1,
-       -1, 1, 15
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row491[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       53, 0, 682,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 499,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       13,
+       -1, 1, 342,
+       59, 0, 684,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row492[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 188
 };
 static int parser_action_row493[] = {
        1,
-       -1, 1, 694
+       -1, 1, 199
 };
 static int parser_action_row494[] = {
-       3,
-       -1, 1, 729,
-       52, 0, 265,
-       73, 0, 685
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row495[] = {
-       1,
-       -1, 1, 726
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row496[] = {
-       3,
-       -1, 3, 495,
-       47, 0, 375,
-       95, 0, 376
+       13,
+       -1, 1, 346,
+       59, 0, 688,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row497[] = {
-       3,
-       -1, 1, 731,
-       54, 1, 734,
-       73, 1, 734
+       1,
+       -1, 1, 190
 };
 static int parser_action_row498[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row499[] = {
-       8,
-       -1, 1, 436,
-       0, 1, 439,
-       1, 1, 439,
-       9, 1, 439,
-       24, 1, 439,
-       53, 1, 439,
-       56, 1, 439,
-       109, 1, 439
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 345,
+       59, 0, 691,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 345,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row500[] = {
-       4,
-       -1, 1, 337,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 689
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row501[] = {
-       2,
-       -1, 1, 362,
-       71, 0, 690
+       1,
+       -1, 1, 14
 };
 static int parser_action_row502[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       7,
+       -1, 3, 501,
+       5, 0, 463,
+       6, 0, 464,
+       7, 0, 465,
+       8, 0, 466,
+       10, 0, 467,
+       17, 0, 468
 };
 static int parser_action_row503[] = {
-       2,
-       -1, 3, 502,
-       53, 0, 692
+       1,
+       -1, 1, 484
 };
 static int parser_action_row504[] = {
        1,
-       -1, 1, 751
+       -1, 1, 15
 };
 static int parser_action_row505[] = {
-       1,
-       -1, 1, 745
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       53, 0, 696,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row506[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
-};
-static int parser_action_row507[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row507[] = {
+       1,
+       -1, 1, 706
+};
 static int parser_action_row508[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 741,
+       52, 0, 277,
+       73, 0, 699
 };
 static int parser_action_row509[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 738
 };
 static int parser_action_row510[] = {
        3,
        -1, 3, 509,
-       47, 0, 384,
-       95, 0, 385
+       47, 0, 387,
+       96, 0, 388
 };
 static int parser_action_row511[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 743,
+       54, 1, 746,
+       73, 1, 746
 };
 static int parser_action_row512[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row513[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       9,
+       -1, 1, 438,
+       0, 1, 441,
+       1, 1, 441,
+       9, 1, 441,
+       24, 1, 441,
+       53, 1, 441,
+       56, 1, 441,
+       95, 1, 441,
+       110, 1, 441
 };
 static int parser_action_row514[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       4,
+       -1, 1, 341,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 703
 };
 static int parser_action_row515[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 366,
+       71, 0, 704
 };
 static int parser_action_row516[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row517[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 516,
+       53, 0, 706
 };
 static int parser_action_row518[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 763
 };
 static int parser_action_row519[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 757
 };
 static int parser_action_row520[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row521[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row522[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row523[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row524[] = {
-       20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 3, 523,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row525[] = {
        20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row526[] = {
        20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row527[] = {
        20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row528[] = {
        20,
-       -1, 1, 456,
-       12, 0, 107,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row529[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 716,
-       46, 0, 717,
-       95, 0, 48,
-       96, 0, 718
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row530[] = {
-       1,
-       -1, 1, 749
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row531[] = {
-       2,
-       -1, 1, 748,
-       52, 0, 265
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row532[] = {
-       31,
-       -1, 1, 456,
-       9, 0, 723,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row533[] = {
-       3,
-       -1, 3, 532,
-       0, 0, 1,
-       1, 0, 2
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row534[] = {
-       3,
-       -1, 3, 533,
-       47, 0, 384,
-       95, 0, 385
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row535[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row536[] = {
-       2,
-       -1, 1, 202,
-       59, 0, 727
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row537[] = {
-       2,
-       -1, 3, 536,
-       23, 0, 728
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row538[] = {
-       2,
-       -1, 3, 537,
-       15, 0, 729
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row539[] = {
-       2,
-       -1, 3, 538,
-       96, 0, 328
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row540[] = {
-       2,
-       -1, 3, 539,
-       28, 0, 731
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row541[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row542[] = {
-       1,
-       -1, 1, 138
+       20,
+       -1, 1, 458,
+       12, 0, 116,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row543[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       5,
+       -1, 1, 458,
+       12, 0, 730,
+       46, 0, 731,
+       96, 0, 53,
+       97, 0, 732
 };
 static int parser_action_row544[] = {
        1,
-       -1, 1, 287
+       -1, 1, 761
 };
 static int parser_action_row545[] = {
-       3,
-       -1, 1, 322,
-       52, 0, 265,
-       73, 0, 584
+       2,
+       -1, 1, 760,
+       52, 0, 277
 };
 static int parser_action_row546[] = {
-       1,
-       -1, 1, 319
+       31,
+       -1, 1, 458,
+       9, 0, 737,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row547[] = {
-       3,
-       -1, 1, 474,
+       4,
+       -1, 3, 546,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row548[] = {
        3,
-       -1, 1, 324,
-       54, 1, 327,
-       73, 1, 327
+       -1, 3, 547,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row549[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 161,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
-};
-static int parser_action_row550[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row550[] = {
+       2,
+       -1, 1, 204,
+       59, 0, 741
+};
 static int parser_action_row551[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 161,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 550,
+       23, 0, 742
 };
 static int parser_action_row552[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 161,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 551,
+       15, 0, 743
 };
 static int parser_action_row553[] = {
-       3,
+       2,
        -1, 3, 552,
-       47, 0, 384,
-       95, 0, 385
+       97, 0, 341
 };
 static int parser_action_row554[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 553,
+       28, 0, 745
 };
 static int parser_action_row555[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row556[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row557[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 291
 };
 static int parser_action_row558[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 326,
+       52, 0, 277,
+       73, 0, 597
 };
 static int parser_action_row559[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 323
 };
 static int parser_action_row560[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row561[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 328,
+       54, 1, 331,
+       73, 1, 331
 };
 static int parser_action_row562[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row563[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row564[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row565[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row566[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 565,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row567[] = {
        22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row568[] = {
        22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row569[] = {
        22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row570[] = {
        22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row571[] = {
        22,
-       -1, 1, 456,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row572[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 759,
-       46, 0, 656,
-       95, 0, 48,
-       96, 0, 760
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row573[] = {
-       1,
-       -1, 1, 338
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row574[] = {
-       1,
-       -1, 1, 342
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row575[] = {
-       2,
-       -1, 1, 341,
-       52, 0, 265
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row576[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row577[] = {
-       1,
-       -1, 1, 156
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row578[] = {
-       1,
-       -1, 1, 274
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row579[] = {
-       31,
-       -1, 1, 456,
-       9, 0, 766,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row580[] = {
-       3,
-       -1, 1, 785,
-       54, 0, 768,
-       94, 0, 581
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row581[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row582[] = {
-       3,
-       -1, 1, 28,
-       13, 0, 26,
-       52, 0, 771
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row583[] = {
-       1,
-       -1, 1, 784
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row584[] = {
-       1,
-       -1, 1, 610
+       22,
+       -1, 1, 458,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row585[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       5,
+       -1, 1, 458,
+       12, 0, 773,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 774
 };
 static int parser_action_row586[] = {
-       2,
-       -1, 1, 28,
-       13, 0, 26
+       1,
+       -1, 1, 342
 };
 static int parser_action_row587[] = {
-       4,
-       -1, 3, 586,
-       6, 0, 778,
-       17, 0, 779,
-       96, 0, 780
-};
+       1,
+       -1, 1, 346
+};
 static int parser_action_row588[] = {
        2,
-       -1, 3, 587,
-       59, 0, 782
+       -1, 1, 345,
+       52, 0, 277
 };
 static int parser_action_row589[] = {
-       2,
-       -1, 1, 153,
-       57, 0, 321
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row590[] = {
-       2,
-       -1, 3, 589,
-       15, 0, 784
+       1,
+       -1, 1, 158
 };
 static int parser_action_row591[] = {
-       3,
-       -1, 1, 401,
-       54, 0, 785,
-       94, 0, 195
+       1,
+       -1, 1, 278
 };
 static int parser_action_row592[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       31,
+       -1, 1, 458,
+       9, 0, 780,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row593[] = {
-       1,
-       -1, 1, 144
+       3,
+       -1, 1, 797,
+       54, 0, 782,
+       94, 0, 594
 };
 static int parser_action_row594[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row595[] = {
-       1,
-       -1, 1, 976
+       3,
+       -1, 1, 30,
+       13, 0, 32,
+       52, 0, 785
 };
 static int parser_action_row596[] = {
        1,
-       -1, 1, 981
+       -1, 1, 796
 };
 static int parser_action_row597[] = {
        1,
-       -1, 1, 978
+       -1, 1, 622
 };
 static int parser_action_row598[] = {
        3,
-       -1, 3, 597,
-       47, 0, 384,
-       95, 0, 385
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row599[] = {
        2,
-       -1, 1, 504,
-       59, 0, 790
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row600[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       4,
+       -1, 3, 599,
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row601[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 600,
+       59, 0, 796
 };
 static int parser_action_row602[] = {
        2,
-       -1, 3, 601,
-       53, 0, 792
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row603[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 602,
+       15, 0, 798
 };
 static int parser_action_row604[] = {
-       1,
-       -1, 1, 1057
+       3,
+       -1, 1, 405,
+       54, 0, 799,
+       94, 0, 204
 };
 static int parser_action_row605[] = {
-       2,
-       -1, 3, 604,
-       53, 0, 794
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row606[] = {
-       2,
-       -1, 1, 381,
-       56, 0, 602
+       1,
+       -1, 1, 146
 };
 static int parser_action_row607[] = {
-       2,
-       -1, 3, 606,
-       55, 0, 598
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row608[] = {
        1,
-       -1, 1, 486
+       -1, 1, 988
 };
 static int parser_action_row609[] = {
        1,
-       -1, 1, 487
+       -1, 1, 993
 };
 static int parser_action_row610[] = {
        1,
-       -1, 1, 495
+       -1, 1, 990
 };
 static int parser_action_row611[] = {
-       14,
-       -1, 1, 339,
-       52, 0, 265,
-       59, 0, 796,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       3,
+       -1, 3, 610,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row612[] = {
-       1,
-       -1, 1, 509
+       2,
+       -1, 1, 516,
+       59, 0, 804
 };
 static int parser_action_row613[] = {
-       15,
-       -1, 1, 343,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 797,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row614[] = {
-       22,
-       -1, 1, 454,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 798
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row615[] = {
-       1,
-       -1, 1, 511
+       2,
+       -1, 3, 614,
+       53, 0, 806
 };
 static int parser_action_row616[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row617[] = {
-       3,
-       -1, 3, 616,
-       52, 0, 327,
-       96, 0, 328
+       1,
+       -1, 1, 1074
 };
 static int parser_action_row618[] = {
        2,
-       -1, 1, 386,
-       72, 0, 802
+       -1, 3, 617,
+       53, 0, 808
 };
 static int parser_action_row619[] = {
        2,
-       -1, 3, 618,
-       55, 0, 803
+       -1, 1, 385,
+       56, 0, 615
 };
 static int parser_action_row620[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 619,
+       55, 0, 611
 };
 static int parser_action_row621[] = {
        1,
-       -1, 1, 1059
+       -1, 1, 498
 };
 static int parser_action_row622[] = {
-       2,
-       -1, 1, 384,
-       56, 0, 619
+       1,
+       -1, 1, 499
 };
 static int parser_action_row623[] = {
        1,
-       -1, 1, 215
+       -1, 1, 507
 };
 static int parser_action_row624[] = {
-       1,
-       -1, 1, 234
+       14,
+       -1, 1, 343,
+       52, 0, 277,
+       59, 0, 810,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row625[] = {
-       3,
-       -1, 3, 624,
-       58, 0, 806,
-       96, 0, 807
+       1,
+       -1, 1, 521
 };
 static int parser_action_row626[] = {
-       4,
-       -1, 3, 625,
-       9, 0, 810,
-       58, 0, 806,
-       96, 0, 807
+       15,
+       -1, 1, 347,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 811,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row627[] = {
-       1,
-       -1, 1, 31
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 812
 };
 static int parser_action_row628[] = {
-       2,
-       -1, 3, 627,
-       55, 0, 812
+       1,
+       -1, 1, 523
 };
 static int parser_action_row629[] = {
-       1,
-       -1, 1, 84
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row630[] = {
-       1,
-       -1, 1, 85
+       3,
+       -1, 3, 629,
+       52, 0, 340,
+       97, 0, 341
 };
 static int parser_action_row631[] = {
-       1,
-       -1, 1, 86
+       2,
+       -1, 1, 390,
+       72, 0, 816
 };
 static int parser_action_row632[] = {
-       1,
-       -1, 1, 87
+       2,
+       -1, 3, 631,
+       55, 0, 817
 };
 static int parser_action_row633[] = {
-       1,
-       -1, 1, 88
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row634[] = {
        1,
-       -1, 1, 89
+       -1, 1, 1076
 };
 static int parser_action_row635[] = {
-       1,
-       -1, 1, 90
+       2,
+       -1, 1, 388,
+       56, 0, 632
 };
 static int parser_action_row636[] = {
        1,
-       -1, 1, 91
+       -1, 1, 217
 };
 static int parser_action_row637[] = {
        1,
-       -1, 1, 92
+       -1, 1, 236
 };
 static int parser_action_row638[] = {
-       1,
-       -1, 1, 93
+       3,
+       -1, 3, 637,
+       58, 0, 820,
+       97, 0, 821
 };
 static int parser_action_row639[] = {
-       1,
-       -1, 1, 94
+       4,
+       -1, 3, 638,
+       9, 0, 824,
+       58, 0, 820,
+       97, 0, 821
 };
 static int parser_action_row640[] = {
        1,
-       -1, 1, 95
+       -1, 1, 33
 };
 static int parser_action_row641[] = {
-       1,
-       -1, 1, 98
+       2,
+       -1, 3, 640,
+       55, 0, 826
 };
 static int parser_action_row642[] = {
        1,
-       -1, 1, 96
+       -1, 1, 86
 };
 static int parser_action_row643[] = {
        1,
-       -1, 1, 100
+       -1, 1, 87
 };
 static int parser_action_row644[] = {
        1,
-       -1, 1, 99
+       -1, 1, 88
 };
 static int parser_action_row645[] = {
        1,
-       -1, 1, 97
+       -1, 1, 89
 };
 static int parser_action_row646[] = {
        1,
-       -1, 1, 101
+       -1, 1, 90
 };
 static int parser_action_row647[] = {
        1,
-       -1, 1, 103
+       -1, 1, 91
 };
 static int parser_action_row648[] = {
-       3,
-       -1, 1, 106,
-       58, 0, 206,
-       59, 0, 813
+       1,
+       -1, 1, 92
 };
 static int parser_action_row649[] = {
        1,
-       -1, 1, 461
+       -1, 1, 93
 };
 static int parser_action_row650[] = {
-       5,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 814,
-       57, 0, 815
+       1,
+       -1, 1, 94
 };
 static int parser_action_row651[] = {
-       22,
-       -1, 3, 650,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       96, 0, 819
+       1,
+       -1, 1, 95
 };
 static int parser_action_row652[] = {
-       23,
-       -1, 3, 651,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 48,
-       96, 0, 647
+       1,
+       -1, 1, 96
 };
 static int parser_action_row653[] = {
        1,
-       -1, 1, 34
+       -1, 1, 97
 };
 static int parser_action_row654[] = {
-       3,
-       -1, 3, 653,
-       95, 0, 823,
-       96, 0, 824
+       1,
+       -1, 1, 100
 };
 static int parser_action_row655[] = {
-       2,
-       -1, 3, 654,
-       55, 0, 828
+       1,
+       -1, 1, 98
 };
 static int parser_action_row656[] = {
-       27,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 347,
-       73, 1, 347,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 102
 };
 static int parser_action_row657[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 101
 };
 static int parser_action_row658[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 329,
-       58, 0, 206,
-       59, 0, 832,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 329,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 99
 };
 static int parser_action_row659[] = {
-       2,
-       -1, 3, 658,
-       97, 0, 836
+       1,
+       -1, 1, 103
 };
 static int parser_action_row660[] = {
-       3,
-       -1, 1, 453,
-       12, 0, 837,
-       96, 0, 838
+       1,
+       -1, 1, 105
 };
 static int parser_action_row661[] = {
-       4,
-       -1, 1, 455,
-       12, 0, 839,
-       95, 0, 48,
-       96, 0, 840
+       3,
+       -1, 1, 108,
+       58, 0, 215,
+       59, 0, 827
 };
 static int parser_action_row662[] = {
        1,
-       -1, 1, 223
+       -1, 1, 463
 };
 static int parser_action_row663[] = {
-       1,
-       -1, 1, 242
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row664[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       22,
+       -1, 3, 663,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       97, 0, 833
 };
 static int parser_action_row665[] = {
-       1,
-       -1, 1, 390
+       23,
+       -1, 3, 664,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row666[] = {
        1,
-       -1, 1, 391
+       -1, 1, 36
 };
 static int parser_action_row667[] = {
-       1,
-       -1, 1, 206
+       3,
+       -1, 3, 666,
+       96, 0, 837,
+       97, 0, 838
 };
 static int parser_action_row668[] = {
-       1,
-       -1, 1, 225
+       2,
+       -1, 3, 667,
+       55, 0, 842
 };
 static int parser_action_row669[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       53, 0, 843,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 499,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 351,
+       73, 1, 351,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row670[] = {
-       1,
-       -1, 1, 218
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row671[] = {
-       1,
-       -1, 1, 237
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 333,
+       58, 0, 215,
+       59, 0, 846,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 333,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row672[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 671,
+       98, 0, 850
 };
 static int parser_action_row673[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 455,
+       12, 0, 851,
+       97, 0, 852
 };
 static int parser_action_row674[] = {
-       1,
-       -1, 1, 222
+       4,
+       -1, 1, 457,
+       12, 0, 853,
+       96, 0, 53,
+       97, 0, 854
 };
 static int parser_action_row675[] = {
        1,
-       -1, 1, 241
+       -1, 1, 225
 };
 static int parser_action_row676[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 244
 };
 static int parser_action_row677[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row678[] = {
        1,
-       -1, 1, 196
+       -1, 1, 394
 };
 static int parser_action_row679[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 395
 };
 static int parser_action_row680[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 208
 };
 static int parser_action_row681[] = {
-       13,
-       -1, 1, 340,
-       59, 0, 851,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 227
 };
 static int parser_action_row682[] = {
-       1,
-       -1, 1, 187
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       53, 0, 857,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row683[] = {
        1,
-       -1, 1, 436
+       -1, 1, 220
 };
 static int parser_action_row684[] = {
-       2,
-       -1, 3, 683,
-       53, 0, 853
+       1,
+       -1, 1, 239
 };
 static int parser_action_row685[] = {
-       2,
-       -1, 3, 684,
-       23, 0, 854
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row686[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row687[] = {
        1,
-       -1, 1, 728
+       -1, 1, 224
 };
 static int parser_action_row688[] = {
-       2,
-       -1, 3, 687,
-       73, 0, 685
+       1,
+       -1, 1, 243
 };
 static int parser_action_row689[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 716,
-       46, 0, 717,
-       95, 0, 48,
-       96, 0, 718
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row690[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row691[] = {
        1,
-       -1, 1, 363
+       -1, 1, 198
 };
 static int parser_action_row692[] = {
-       2,
-       -1, 1, 442,
-       56, 0, 858
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row693[] = {
-       8,
-       -1, 1, 435,
-       0, 1, 437,
-       1, 1, 437,
-       9, 1, 437,
-       24, 1, 437,
-       53, 1, 437,
-       56, 1, 437,
-       109, 1, 437
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row694[] = {
-       1,
-       -1, 1, 690
+       13,
+       -1, 1, 344,
+       59, 0, 865,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row695[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 107,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 189
 };
 static int parser_action_row696[] = {
        1,
-       -1, 1, 689
+       -1, 1, 140
 };
 static int parser_action_row697[] = {
        1,
-       -1, 1, 692
+       -1, 1, 438
 };
 static int parser_action_row698[] = {
-       1,
-       -1, 1, 703
+       2,
+       -1, 3, 697,
+       53, 0, 867
 };
 static int parser_action_row699[] = {
        2,
-       -1, 1, 705,
-       81, 0, 303
+       -1, 3, 698,
+       23, 0, 868
 };
 static int parser_action_row700[] = {
-       2,
-       -1, 1, 696,
-       80, 0, 295
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row701[] = {
-       2,
-       -1, 1, 697,
-       80, 0, 295
+       1,
+       -1, 1, 740
 };
 static int parser_action_row702[] = {
        2,
-       -1, 1, 698,
-       80, 0, 295
+       -1, 3, 701,
+       73, 0, 699
 };
 static int parser_action_row703[] = {
-       2,
-       -1, 1, 699,
-       80, 0, 295
+       5,
+       -1, 1, 458,
+       12, 0, 730,
+       46, 0, 731,
+       96, 0, 53,
+       97, 0, 732
 };
 static int parser_action_row704[] = {
-       2,
-       -1, 1, 700,
-       80, 0, 295
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row705[] = {
-       2,
-       -1, 1, 701,
-       80, 0, 295
+       1,
+       -1, 1, 367
 };
 static int parser_action_row706[] = {
        2,
-       -1, 1, 702,
-       80, 0, 295
+       -1, 1, 444,
+       56, 0, 872
 };
 static int parser_action_row707[] = {
-       2,
-       -1, 1, 707,
-       82, 0, 304
+       9,
+       -1, 1, 437,
+       0, 1, 439,
+       1, 1, 439,
+       9, 1, 439,
+       24, 1, 439,
+       53, 1, 439,
+       56, 1, 439,
+       95, 1, 439,
+       110, 1, 439
 };
 static int parser_action_row708[] = {
-       3,
-       -1, 1, 709,
-       88, 0, 305,
-       91, 0, 306
+       1,
+       -1, 1, 702
 };
 static int parser_action_row709[] = {
-       3,
-       -1, 1, 711,
-       74, 0, 307,
-       75, 0, 308
+       21,
+       -1, 1, 458,
+       12, 0, 116,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row710[] = {
-       3,
-       -1, 1, 712,
-       74, 0, 307,
-       75, 0, 308
+       1,
+       -1, 1, 701
 };
 static int parser_action_row711[] = {
-       4,
-       -1, 1, 714,
-       76, 0, 309,
-       78, 0, 310,
-       79, 0, 311
+       1,
+       -1, 1, 704
 };
 static int parser_action_row712[] = {
-       4,
-       -1, 1, 715,
-       76, 0, 309,
-       78, 0, 310,
-       79, 0, 311
+       1,
+       -1, 1, 715
 };
 static int parser_action_row713[] = {
-       1,
-       -1, 1, 717
+       2,
+       -1, 1, 717,
+       81, 0, 315
 };
 static int parser_action_row714[] = {
-       1,
-       -1, 1, 718
+       2,
+       -1, 1, 708,
+       80, 0, 307
 };
 static int parser_action_row715[] = {
-       1,
-       -1, 1, 719
+       2,
+       -1, 1, 709,
+       80, 0, 307
 };
 static int parser_action_row716[] = {
-       1,
-       -1, 1, 721
+       2,
+       -1, 1, 710,
+       80, 0, 307
 };
 static int parser_action_row717[] = {
        2,
-       -1, 1, 754,
-       52, 0, 265
+       -1, 1, 711,
+       80, 0, 307
 };
 static int parser_action_row718[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 712,
+       80, 0, 307
 };
 static int parser_action_row719[] = {
-       3,
-       -1, 1, 736,
-       52, 0, 265,
-       58, 0, 206
+       2,
+       -1, 1, 713,
+       80, 0, 307
 };
 static int parser_action_row720[] = {
        2,
-       -1, 3, 719,
-       97, 0, 865
+       -1, 1, 714,
+       80, 0, 307
 };
 static int parser_action_row721[] = {
        2,
-       -1, 1, 453,
-       96, 0, 866
+       -1, 1, 719,
+       82, 0, 316
 };
 static int parser_action_row722[] = {
        3,
-       -1, 1, 455,
-       95, 0, 48,
-       96, 0, 867
+       -1, 1, 721,
+       88, 0, 317,
+       91, 0, 318
 };
 static int parser_action_row723[] = {
-       1,
-       -1, 1, 747
+       3,
+       -1, 1, 723,
+       74, 0, 319,
+       75, 0, 320
 };
 static int parser_action_row724[] = {
-       1,
-       -1, 1, 162
+       3,
+       -1, 1, 724,
+       74, 0, 319,
+       75, 0, 320
 };
 static int parser_action_row725[] = {
-       31,
-       -1, 1, 456,
-       9, 0, 869,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       4,
+       -1, 1, 726,
+       76, 0, 321,
+       78, 0, 322,
+       79, 0, 323
 };
 static int parser_action_row726[] = {
-       1,
-       -1, 1, 152
+       4,
+       -1, 1, 727,
+       76, 0, 321,
+       78, 0, 322,
+       79, 0, 323
 };
 static int parser_action_row727[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 729
 };
 static int parser_action_row728[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 730
 };
 static int parser_action_row729[] = {
-       34,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 872,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       24, 0, 876,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 731
 };
 static int parser_action_row730[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 148,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 733
 };
 static int parser_action_row731[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 540
+       2,
+       -1, 1, 766,
+       52, 0, 277
 };
 static int parser_action_row732[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row733[] = {
-       2,
-       -1, 3, 732,
-       96, 0, 909
+       3,
+       -1, 1, 748,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row734[] = {
        2,
        -1, 3, 733,
-       23, 0, 910
+       98, 0, 879
 };
 static int parser_action_row735[] = {
-       1,
-       -1, 1, 321
+       2,
+       -1, 1, 455,
+       97, 0, 880
 };
 static int parser_action_row736[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 759,
-       46, 0, 656,
-       95, 0, 48,
-       96, 0, 760
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 881
 };
 static int parser_action_row737[] = {
        1,
-       -1, 1, 283
+       -1, 1, 759
 };
 static int parser_action_row738[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 161,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 164
 };
 static int parser_action_row739[] = {
-       1,
-       -1, 1, 282
+       31,
+       -1, 1, 458,
+       9, 0, 883,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row740[] = {
        1,
-       -1, 1, 285
+       -1, 1, 154
 };
 static int parser_action_row741[] = {
-       1,
-       -1, 1, 296
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row742[] = {
-       2,
-       -1, 1, 298,
-       81, 0, 354
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row743[] = {
-       2,
-       -1, 1, 289,
-       80, 0, 346
+       35,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 886,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       24, 0, 890,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row744[] = {
-       2,
-       -1, 1, 290,
-       80, 0, 346
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row745[] = {
-       2,
-       -1, 1, 291,
-       80, 0, 346
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 554
 };
 static int parser_action_row746[] = {
-       2,
-       -1, 1, 292,
-       80, 0, 346
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row747[] = {
        2,
-       -1, 1, 293,
-       80, 0, 346
+       -1, 3, 746,
+       97, 0, 923
 };
 static int parser_action_row748[] = {
        2,
-       -1, 1, 294,
-       80, 0, 346
+       -1, 3, 747,
+       23, 0, 924
 };
 static int parser_action_row749[] = {
-       2,
-       -1, 1, 295,
-       80, 0, 346
+       1,
+       -1, 1, 325
 };
 static int parser_action_row750[] = {
-       2,
-       -1, 1, 300,
-       82, 0, 355
+       5,
+       -1, 1, 458,
+       12, 0, 773,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 774
 };
 static int parser_action_row751[] = {
-       3,
-       -1, 1, 302,
-       88, 0, 356,
-       91, 0, 357
+       1,
+       -1, 1, 287
 };
 static int parser_action_row752[] = {
-       3,
-       -1, 1, 304,
-       74, 0, 358,
-       75, 0, 359
+       23,
+       -1, 1, 458,
+       12, 0, 170,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row753[] = {
-       3,
-       -1, 1, 305,
-       74, 0, 358,
-       75, 0, 359
+       1,
+       -1, 1, 286
 };
 static int parser_action_row754[] = {
-       4,
-       -1, 1, 307,
-       76, 0, 360,
-       78, 0, 361,
-       79, 0, 362
+       1,
+       -1, 1, 289
 };
 static int parser_action_row755[] = {
-       4,
-       -1, 1, 308,
-       76, 0, 360,
-       78, 0, 361,
-       79, 0, 362
-};
-static int parser_action_row756[] = {
        1,
-       -1, 1, 310
+       -1, 1, 300
 };
-static int parser_action_row757[] = {
-       1,
-       -1, 1, 311
+static int parser_action_row756[] = {
+       2,
+       -1, 1, 302,
+       81, 0, 366
+};
+static int parser_action_row757[] = {
+       2,
+       -1, 1, 293,
+       80, 0, 358
 };
 static int parser_action_row758[] = {
-       1,
-       -1, 1, 312
+       2,
+       -1, 1, 294,
+       80, 0, 358
 };
 static int parser_action_row759[] = {
-       1,
-       -1, 1, 314
+       2,
+       -1, 1, 295,
+       80, 0, 358
 };
 static int parser_action_row760[] = {
        2,
-       -1, 1, 347,
-       52, 0, 265
+       -1, 1, 296,
+       80, 0, 358
 };
 static int parser_action_row761[] = {
-       3,
-       -1, 1, 329,
-       52, 0, 265,
-       58, 0, 206
+       2,
+       -1, 1, 297,
+       80, 0, 358
 };
 static int parser_action_row762[] = {
        2,
-       -1, 3, 761,
-       97, 0, 914
+       -1, 1, 298,
+       80, 0, 358
 };
 static int parser_action_row763[] = {
        2,
-       -1, 1, 453,
-       96, 0, 915
+       -1, 1, 299,
+       80, 0, 358
 };
 static int parser_action_row764[] = {
-       3,
-       -1, 1, 455,
-       95, 0, 48,
-       96, 0, 916
+       2,
+       -1, 1, 304,
+       82, 0, 367
 };
 static int parser_action_row765[] = {
-       1,
-       -1, 1, 340
+       3,
+       -1, 1, 306,
+       88, 0, 368,
+       91, 0, 369
 };
 static int parser_action_row766[] = {
-       1,
-       -1, 1, 275
+       3,
+       -1, 1, 308,
+       74, 0, 370,
+       75, 0, 371
 };
 static int parser_action_row767[] = {
-       1,
-       -1, 1, 155
+       3,
+       -1, 1, 309,
+       74, 0, 370,
+       75, 0, 371
 };
 static int parser_action_row768[] = {
-       1,
-       -1, 1, 154
+       4,
+       -1, 1, 311,
+       76, 0, 372,
+       78, 0, 373,
+       79, 0, 374
 };
 static int parser_action_row769[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 312,
+       76, 0, 372,
+       78, 0, 373,
+       79, 0, 374
 };
 static int parser_action_row770[] = {
        1,
-       -1, 1, 611
+       -1, 1, 314
 };
 static int parser_action_row771[] = {
-       3,
-       -1, 3, 770,
-       47, 0, 384,
-       95, 0, 385
+       1,
+       -1, 1, 315
 };
 static int parser_action_row772[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 316
 };
 static int parser_action_row773[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       1,
+       -1, 1, 318
 };
 static int parser_action_row774[] = {
-       1,
-       -1, 1, 782
+       2,
+       -1, 1, 351,
+       52, 0, 277
 };
 static int parser_action_row775[] = {
        3,
-       -1, 3, 774,
-       95, 0, 48,
-       96, 0, 923
+       -1, 1, 333,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row776[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       2,
+       -1, 3, 775,
+       98, 0, 928
 };
 static int parser_action_row777[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 455,
+       97, 0, 929
 };
 static int parser_action_row778[] = {
-       2,
-       -1, 1, 405,
-       56, 0, 928
+       3,
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 930
 };
 static int parser_action_row779[] = {
        1,
-       -1, 1, 434
+       -1, 1, 344
 };
 static int parser_action_row780[] = {
        1,
-       -1, 1, 433
+       -1, 1, 279
 };
 static int parser_action_row781[] = {
        1,
-       -1, 1, 432
+       -1, 1, 157
 };
 static int parser_action_row782[] = {
-       3,
-       -1, 1, 401,
-       52, 0, 931,
-       94, 0, 195
+       1,
+       -1, 1, 156
 };
 static int parser_action_row783[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row784[] = {
-       2,
-       -1, 3, 783,
-       59, 0, 934
+       1,
+       -1, 1, 623
 };
 static int parser_action_row785[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 148,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 784,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row786[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row787[] = {
-       1,
-       -1, 1, 145
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row788[] = {
-       3,
-       -1, 3, 787,
-       47, 0, 384,
-       95, 0, 385
+       1,
+       -1, 1, 794
 };
 static int parser_action_row789[] = {
-       1,
-       -1, 1, 198
+       3,
+       -1, 3, 788,
+       96, 0, 53,
+       97, 0, 937
 };
 static int parser_action_row790[] = {
-       2,
-       -1, 3, 789,
-       57, 0, 939
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row791[] = {
-       1,
-       -1, 1, 507
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row792[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 759,
-       46, 0, 656,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       95, 0, 48,
-       96, 0, 940
+       2,
+       -1, 1, 408,
+       56, 0, 942
 };
 static int parser_action_row793[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 436
 };
 static int parser_action_row794[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 435
 };
 static int parser_action_row795[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 434
 };
 static int parser_action_row796[] = {
-       1,
-       -1, 1, 1058
+       3,
+       -1, 1, 405,
+       52, 0, 945,
+       94, 0, 204
 };
 static int parser_action_row797[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row798[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 797,
+       59, 0, 948
 };
 static int parser_action_row799[] = {
-       14,
-       -1, 1, 341,
-       52, 0, 265,
-       59, 0, 947,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row800[] = {
-       1,
-       -1, 1, 510
-};
-static int parser_action_row801[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row801[] = {
+       1,
+       -1, 1, 147
+};
 static int parser_action_row802[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 801,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row803[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 200
 };
 static int parser_action_row804[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 803,
+       57, 0, 953
 };
 static int parser_action_row805[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 434,
-       27, 0, 435,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 519
 };
 static int parser_action_row806[] = {
-       1,
-       -1, 1, 1060
+       25,
+       -1, 1, 458,
+       12, 0, 773,
+       46, 0, 669,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 954
 };
 static int parser_action_row807[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row808[] = {
-       2,
-       -1, 1, 449,
-       58, 0, 206
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row809[] = {
        2,
-       -1, 1, 76,
-       14, 0, 955
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row810[] = {
-       2,
-       -1, 3, 809,
-       96, 0, 957
+       1,
+       -1, 1, 1075
 };
 static int parser_action_row811[] = {
-       3,
-       -1, 3, 810,
-       0, 0, 83,
-       1, 0, 84
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row812[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 955
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row813[] = {
-       2,
-       -1, 1, 102,
-       59, 0, 960
+       14,
+       -1, 1, 345,
+       52, 0, 277,
+       59, 0, 961,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row814[] = {
        1,
-       -1, 1, 104
+       -1, 1, 522
 };
 static int parser_action_row815[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row816[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row817[] = {
-       4,
-       -1, 1, 122,
-       4, 0, 963,
-       14, 0, 964,
-       15, 0, 965
-};
-static int parser_action_row818[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row818[] = {
+       2,
+       -1, 1, 405,
+       94, 0, 204
+};
 static int parser_action_row819[] = {
-       1,
-       -1, 1, 110
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row820[] = {
-       2,
-       -1, 1, 106,
-       59, 0, 813
+       1,
+       -1, 1, 1077
 };
 static int parser_action_row821[] = {
-       1,
-       -1, 1, 462
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row822[] = {
-       1,
-       -1, 1, 464
+       2,
+       -1, 1, 451,
+       58, 0, 215
 };
 static int parser_action_row823[] = {
-       22,
-       -1, 3, 822,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       96, 0, 819
+       2,
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row824[] = {
        2,
-       -1, 1, 457,
-       58, 0, 205
+       -1, 3, 823,
+       97, 0, 971
 };
 static int parser_action_row825[] = {
-       2,
+       4,
        -1, 3, 824,
-       58, 0, 206
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row826[] = {
        2,
-       -1, 1, 37,
-       54, 0, 971
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row827[] = {
        2,
-       -1, 3, 826,
-       95, 0, 973
+       -1, 1, 104,
+       59, 0, 974
 };
 static int parser_action_row828[] = {
-       3,
-       -1, 3, 827,
-       95, 0, 974,
-       96, 0, 824
+       1,
+       -1, 1, 106
 };
 static int parser_action_row829[] = {
-       1,
-       -1, 1, 441
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row830[] = {
-       1,
-       -1, 1, 346
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row831[] = {
-       1,
-       -1, 1, 190
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 979
 };
 static int parser_action_row832[] = {
        3,
-       -1, 3, 831,
-       31, 0, 976,
-       52, 0, 977
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row833[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 112
 };
 static int parser_action_row834[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 108,
+       59, 0, 827
 };
 static int parser_action_row835[] = {
-       13,
-       -1, 1, 328,
-       59, 0, 980,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 464
 };
 static int parser_action_row836[] = {
        1,
-       -1, 1, 181
+       -1, 1, 466
 };
 static int parser_action_row837[] = {
-       13,
-       -1, 1, 326,
-       59, 0, 982,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       22,
+       -1, 3, 836,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       97, 0, 833
 };
 static int parser_action_row838[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 459,
+       58, 0, 214
 };
 static int parser_action_row839[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 331,
-       59, 0, 985,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 331,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 838,
+       58, 0, 215
 };
 static int parser_action_row840[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       7,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       28, 0, 84,
+       54, 0, 985,
+       95, 0, 3,
+       109, 0, 85
 };
 static int parser_action_row841[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 335,
-       58, 0, 206,
-       59, 0, 990,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 335,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 840,
+       96, 0, 995
 };
 static int parser_action_row842[] = {
        3,
-       -1, 1, 454,
-       12, 0, 994,
-       96, 0, 995
+       -1, 3, 841,
+       96, 0, 996,
+       97, 0, 838
 };
 static int parser_action_row843[] = {
        1,
-       -1, 1, 394
+       -1, 1, 443
 };
 static int parser_action_row844[] = {
        1,
-       -1, 1, 439
+       -1, 1, 350
 };
 static int parser_action_row845[] = {
-       2,
-       -1, 3, 844,
-       53, 0, 996
+       1,
+       -1, 1, 192
 };
 static int parser_action_row846[] = {
-       1,
-       -1, 1, 217
+       3,
+       -1, 3, 845,
+       31, 0, 998,
+       52, 0, 999
 };
 static int parser_action_row847[] = {
-       1,
-       -1, 1, 236
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row848[] = {
-       1,
-       -1, 1, 221
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row849[] = {
-       1,
-       -1, 1, 240
+       13,
+       -1, 1, 332,
+       59, 0, 1002,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row850[] = {
        1,
-       -1, 1, 220
+       -1, 1, 183
 };
 static int parser_action_row851[] = {
-       1,
-       -1, 1, 239
+       13,
+       -1, 1, 330,
+       59, 0, 1004,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row852[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row853[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 335,
+       59, 0, 1007,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 335,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row854[] = {
-       1,
-       -1, 1, 435
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row855[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 339,
+       58, 0, 215,
+       59, 0, 1012,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 339,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row856[] = {
        3,
-       -1, 3, 855,
-       95, 0, 48,
-       96, 0, 1000
+       -1, 1, 456,
+       12, 0, 1016,
+       97, 0, 1017
 };
 static int parser_action_row857[] = {
-       2,
-       -1, 3, 856,
-       97, 0, 1003
+       1,
+       -1, 1, 398
 };
 static int parser_action_row858[] = {
        1,
-       -1, 1, 364
+       -1, 1, 441
 };
 static int parser_action_row859[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 858,
+       53, 0, 1018
 };
 static int parser_action_row860[] = {
        1,
-       -1, 1, 1069
+       -1, 1, 219
 };
 static int parser_action_row861[] = {
-       2,
-       -1, 1, 443,
-       56, 0, 858
+       1,
+       -1, 1, 238
 };
 static int parser_action_row862[] = {
        1,
-       -1, 1, 691
+       -1, 1, 223
 };
 static int parser_action_row863[] = {
        1,
-       -1, 1, 753
+       -1, 1, 242
 };
 static int parser_action_row864[] = {
-       3,
-       -1, 3, 863,
-       31, 0, 1006,
-       52, 0, 1007
+       1,
+       -1, 1, 222
 };
 static int parser_action_row865[] = {
        1,
-       -1, 1, 735
+       -1, 1, 241
 };
 static int parser_action_row866[] = {
-       1,
-       -1, 1, 733
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row867[] = {
-       2,
-       -1, 1, 738,
-       52, 0, 265
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row868[] = {
-       3,
-       -1, 1, 742,
-       52, 0, 265,
-       58, 0, 206
+       1,
+       -1, 1, 437
 };
 static int parser_action_row869[] = {
-       2,
-       -1, 1, 454,
-       96, 0, 1010
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row870[] = {
-       1,
-       -1, 1, 163
+       3,
+       -1, 3, 869,
+       96, 0, 53,
+       97, 0, 1022
 };
 static int parser_action_row871[] = {
-       1,
-       -1, 1, 203
+       2,
+       -1, 3, 870,
+       98, 0, 1025
 };
 static int parser_action_row872[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 368
 };
 static int parser_action_row873[] = {
-       1,
-       -1, 1, 262
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row874[] = {
-       27,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 349,
-       73, 1, 349,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 1084
 };
 static int parser_action_row875[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1013,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 445,
+       56, 0, 872
 };
 static int parser_action_row876[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 703
 };
 static int parser_action_row877[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 765
 };
 static int parser_action_row878[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 877,
+       31, 0, 1028,
+       52, 0, 1029
 };
 static int parser_action_row879[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1013,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 747
 };
 static int parser_action_row880[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 745
 };
 static int parser_action_row881[] = {
-       27,
-       -1, 1, 167,
-       12, 0, 161,
-       22, 0, 162,
-       24, 1, 888,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 750,
+       52, 0, 277
 };
 static int parser_action_row882[] = {
        3,
-       -1, 1, 172,
-       24, 1, 893,
-       49, 0, 188
+       -1, 1, 754,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row883[] = {
-       3,
-       -1, 1, 169,
-       24, 1, 890,
-       49, 0, 188
+       2,
+       -1, 1, 456,
+       97, 0, 1032
 };
 static int parser_action_row884[] = {
-       2,
-       -1, 1, 171,
-       24, 1, 892
+       1,
+       -1, 1, 165
 };
 static int parser_action_row885[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 191,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 205
 };
 static int parser_action_row886[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row887[] = {
-       2,
-       -1, 3, 886,
-       11, 0, 1030
+       1,
+       -1, 1, 266
 };
 static int parser_action_row888[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 337,
-       58, 0, 206,
-       59, 0, 207,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 337,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 353,
+       73, 1, 353,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row889[] = {
-       1,
-       -1, 1, 257
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row890[] = {
-       2,
-       -1, 1, 165,
-       24, 1, 886
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row891[] = {
-       2,
-       -1, 1, 166,
-       24, 1, 887
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row892[] = {
-       1,
-       -1, 1, 259
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row893[] = {
-       3,
-       -1, 3, 892,
-       54, 0, 236,
-       73, 0, 1032
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row894[] = {
        3,
-       -1, 3, 893,
-       41, 0, 1033,
-       97, 0, 247
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row895[] = {
-       3,
-       -1, 1, 453,
-       12, 0, 1034,
-       96, 0, 1035
+       27,
+       -1, 1, 169,
+       12, 0, 170,
+       22, 0, 171,
+       24, 1, 900,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row896[] = {
-       32,
-       -1, 1, 456,
-       9, 0, 872,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       24, 0, 876,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 174,
+       24, 1, 905,
+       49, 0, 197
 };
 static int parser_action_row897[] = {
-       2,
-       -1, 3, 896,
-       24, 0, 1039
+       3,
+       -1, 1, 171,
+       24, 1, 902,
+       49, 0, 197
 };
 static int parser_action_row898[] = {
-       1,
-       -1, 1, 895
+       2,
+       -1, 1, 173,
+       24, 1, 904
 };
 static int parser_action_row899[] = {
-       1,
-       -1, 1, 896
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 200,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row900[] = {
-       1,
-       -1, 1, 898
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row901[] = {
-       1,
-       -1, 1, 897
+       2,
+       -1, 3, 900,
+       11, 0, 1052
 };
 static int parser_action_row902[] = {
-       1,
-       -1, 1, 899
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 341,
+       58, 0, 215,
+       59, 0, 216,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 341,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row903[] = {
        1,
-       -1, 1, 900
+       -1, 1, 259
 };
 static int parser_action_row904[] = {
-       1,
-       -1, 1, 901
+       2,
+       -1, 1, 167,
+       24, 1, 898
 };
 static int parser_action_row905[] = {
-       4,
-       -1, 1, 455,
-       12, 0, 1040,
-       95, 0, 48,
-       96, 0, 1041
+       2,
+       -1, 1, 168,
+       24, 1, 899
 };
 static int parser_action_row906[] = {
        1,
-       -1, 1, 266
+       -1, 1, 264
 };
 static int parser_action_row907[] = {
-       2,
+       3,
        -1, 3, 906,
-       49, 0, 188
+       54, 0, 244,
+       73, 0, 1054
 };
 static int parser_action_row908[] = {
-       2,
+       3,
        -1, 3, 907,
-       53, 0, 1044
+       41, 0, 1055,
+       98, 0, 255
 };
 static int parser_action_row909[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 455,
+       12, 0, 1056,
+       97, 0, 1057
 };
 static int parser_action_row910[] = {
-       1,
-       -1, 1, 448
+       32,
+       -1, 1, 458,
+       9, 0, 886,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       24, 0, 1058,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row911[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 910,
+       24, 0, 1062
 };
 static int parser_action_row912[] = {
-       2,
-       -1, 3, 911,
-       97, 0, 1047
+       1,
+       -1, 1, 907
 };
 static int parser_action_row913[] = {
        1,
-       -1, 1, 284
+       -1, 1, 908
 };
 static int parser_action_row914[] = {
        1,
-       -1, 1, 328
+       -1, 1, 910
 };
 static int parser_action_row915[] = {
        1,
-       -1, 1, 326
+       -1, 1, 909
 };
 static int parser_action_row916[] = {
-       2,
-       -1, 1, 331,
-       52, 0, 265
+       1,
+       -1, 1, 911
 };
 static int parser_action_row917[] = {
-       3,
-       -1, 1, 335,
-       52, 0, 265,
-       58, 0, 206
+       1,
+       -1, 1, 912
 };
 static int parser_action_row918[] = {
-       2,
-       -1, 1, 454,
-       96, 0, 1050
+       1,
+       -1, 1, 913
 };
 static int parser_action_row919[] = {
-       3,
-       -1, 3, 918,
-       47, 0, 384,
-       95, 0, 385
+       4,
+       -1, 1, 457,
+       12, 0, 1063,
+       96, 0, 53,
+       97, 0, 1064
 };
 static int parser_action_row920[] = {
-       2,
-       -1, 1, 148,
-       56, 0, 1052
+       1,
+       -1, 1, 270
 };
 static int parser_action_row921[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 920,
+       49, 0, 197
 };
 static int parser_action_row922[] = {
        2,
-       -1, 1, 28,
-       13, 0, 26
+       -1, 3, 921,
+       53, 0, 1067
 };
 static int parser_action_row923[] = {
-       4,
-       -1, 3, 922,
-       6, 0, 778,
-       17, 0, 779,
-       96, 0, 780
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row924[] = {
-       3,
-       -1, 1, 352,
-       52, 0, 265,
-       58, 0, 206
+       1,
+       -1, 1, 450
 };
 static int parser_action_row925[] = {
-       2,
-       -1, 3, 924,
-       96, 0, 1059
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row926[] = {
-       3,
+       2,
        -1, 3, 925,
-       95, 0, 48,
-       96, 0, 1060
+       98, 0, 1070
 };
 static int parser_action_row927[] = {
-       4,
-       -1, 3, 926,
-       6, 0, 778,
-       17, 0, 779,
-       96, 0, 780
+       1,
+       -1, 1, 288
 };
 static int parser_action_row928[] = {
-       2,
-       -1, 3, 927,
-       53, 0, 1063
+       1,
+       -1, 1, 332
 };
 static int parser_action_row929[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 330
 };
 static int parser_action_row930[] = {
-       1,
-       -1, 1, 1063
+       2,
+       -1, 1, 335,
+       52, 0, 277
 };
 static int parser_action_row931[] = {
-       2,
-       -1, 1, 406,
-       56, 0, 928
+       3,
+       -1, 1, 339,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row932[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 456,
+       97, 0, 1073
 };
 static int parser_action_row933[] = {
-       1,
-       -1, 1, 402
+       3,
+       -1, 3, 932,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row934[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 150,
+       56, 0, 1075
 };
 static int parser_action_row935[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row936[] = {
-       1,
-       -1, 1, 270
+       2,
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row937[] = {
-       2,
+       4,
        -1, 3, 936,
-       49, 0, 188
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row938[] = {
        3,
-       -1, 3, 937,
-       47, 0, 384,
-       95, 0, 385
+       -1, 1, 356,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row939[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 938,
+       97, 0, 1082
 };
 static int parser_action_row940[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 939,
+       96, 0, 53,
+       97, 0, 1083
 };
 static int parser_action_row941[] = {
-       15,
-       -1, 1, 329,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 1073,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       4,
+       -1, 3, 940,
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row942[] = {
-       22,
-       -1, 1, 453,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 1074
+       2,
+       -1, 3, 941,
+       53, 0, 1086
 };
 static int parser_action_row943[] = {
-       1,
-       -1, 1, 429
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row944[] = {
-       23,
-       -1, 1, 455,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       95, 0, 48,
-       96, 0, 1075
+       1,
+       -1, 1, 1080
 };
 static int parser_action_row945[] = {
-       1,
-       -1, 1, 380
+       2,
+       -1, 1, 409,
+       56, 0, 942
 };
 static int parser_action_row946[] = {
-       1,
-       -1, 1, 382
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row947[] = {
        1,
-       -1, 1, 379
+       -1, 1, 406
 };
 static int parser_action_row948[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row949[] = {
-       2,
-       -1, 3, 948,
-       23, 0, 1077
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row950[] = {
-       2,
-       -1, 3, 949,
-       28, 0, 1078
+       1,
+       -1, 1, 274
 };
 static int parser_action_row951[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 1079,
-       22, 0, 1080,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 3, 950,
+       49, 0, 197
 };
 static int parser_action_row952[] = {
-       1,
-       -1, 1, 378
+       3,
+       -1, 3, 951,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row953[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row954[] = {
-       1,
-       -1, 1, 385
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row955[] = {
-       2,
-       -1, 3, 954,
-       96, 0, 1119
+       15,
+       -1, 1, 333,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1096,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row956[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1097
 };
 static int parser_action_row957[] = {
-       3,
-       -1, 3, 956,
-       0, 0, 83,
-       1, 0, 84
+       1,
+       -1, 1, 431
 };
 static int parser_action_row958[] = {
-       2,
-       -1, 1, 450,
-       58, 0, 206
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1098
 };
 static int parser_action_row959[] = {
        1,
-       -1, 1, 18
+       -1, 1, 384
 };
 static int parser_action_row960[] = {
-       3,
-       -1, 3, 959,
-       0, 0, 83,
-       1, 0, 84
+       1,
+       -1, 1, 386
 };
 static int parser_action_row961[] = {
        1,
-       -1, 1, 105
+       -1, 1, 383
 };
 static int parser_action_row962[] = {
-       2,
-       -1, 1, 113,
-       96, 0, 1126
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row963[] = {
-       3,
+       2,
        -1, 3, 962,
-       47, 0, 384,
-       95, 0, 385
+       23, 0, 1100
 };
 static int parser_action_row964[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 963,
+       28, 0, 1101
 };
 static int parser_action_row965[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       23,
+       -1, 1, 458,
+       12, 0, 1102,
+       22, 0, 1103,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row966[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 382
 };
 static int parser_action_row967[] = {
        3,
-       -1, 1, 122,
-       4, 0, 963,
-       15, 0, 1134
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row968[] = {
-       3,
-       -1, 3, 967,
-       28, 0, 33,
-       108, 0, 56
+       1,
+       -1, 1, 389
 };
 static int parser_action_row969[] = {
-       1,
-       -1, 1, 481
+       2,
+       -1, 3, 968,
+       97, 0, 1142
 };
 static int parser_action_row970[] = {
-       1,
-       -1, 1, 109
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row971[] = {
-       1,
-       -1, 1, 463
+       4,
+       -1, 3, 970,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row972[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 452,
+       58, 0, 215
 };
 static int parser_action_row973[] = {
-       5,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       28, 0, 33,
-       108, 0, 56
+       1,
+       -1, 1, 18
 };
 static int parser_action_row974[] = {
-       1,
-       -1, 1, 458
+       4,
+       -1, 3, 973,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row975[] = {
-       2,
-       -1, 1, 460,
-       58, 0, 205
+       1,
+       -1, 1, 107
 };
 static int parser_action_row976[] = {
        2,
-       -1, 3, 975,
-       95, 0, 1146
+       -1, 1, 115,
+       97, 0, 1148
 };
 static int parser_action_row977[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 976,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row978[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row979[] = {
-       1,
-       -1, 1, 208
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row980[] = {
-       1,
-       -1, 1, 227
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row981[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1156
 };
 static int parser_action_row982[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 981,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row983[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 493
 };
 static int parser_action_row984[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 111
 };
 static int parser_action_row985[] = {
        1,
-       -1, 1, 192
+       -1, 1, 465
 };
 static int parser_action_row986[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row987[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 75,
+       9, 1, 45
 };
 static int parser_action_row988[] = {
-       13,
-       -1, 1, 330,
-       59, 0, 1155,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       2,
+       -1, 3, 987,
+       9, 0, 1160
 };
 static int parser_action_row989[] = {
        1,
-       -1, 1, 182
+       -1, 1, 1062
 };
 static int parser_action_row990[] = {
-       1,
-       -1, 1, 194
+       4,
+       -1, 3, 989,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row991[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row992[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 74
 };
 static int parser_action_row993[] = {
-       13,
-       -1, 1, 334,
-       59, 0, 1159,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 486
 };
 static int parser_action_row994[] = {
-       1,
-       -1, 1, 184
+       5,
+       -1, 1, 30,
+       6, 0, 1163,
+       9, 1, 46,
+       13, 0, 32,
+       97, 0, 1164
 };
 static int parser_action_row995[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       9, 1, 487,
+       95, 0, 3
 };
 static int parser_action_row996[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 333,
-       59, 0, 1162,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 333,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 460
 };
 static int parser_action_row997[] = {
-       1,
-       -1, 1, 437
+       2,
+       -1, 1, 462,
+       58, 0, 214
 };
 static int parser_action_row998[] = {
-       1,
-       -1, 1, 219
+       2,
+       -1, 3, 997,
+       96, 0, 1171
 };
 static int parser_action_row999[] = {
-       1,
-       -1, 1, 238
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1000[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1001[] = {
-       3,
-       -1, 1, 759,
-       52, 0, 265,
-       58, 0, 206
+       1,
+       -1, 1, 210
 };
 static int parser_action_row1002[] = {
-       2,
-       -1, 3, 1001,
-       96, 0, 1168
+       1,
+       -1, 1, 229
 };
 static int parser_action_row1003[] = {
-       3,
-       -1, 3, 1002,
-       95, 0, 48,
-       96, 0, 1169
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1004[] = {
-       3,
-       -1, 1, 730,
-       54, 1, 733,
-       73, 1, 733
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1005[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 499,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1006[] = {
-       1,
-       -1, 1, 1070
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1007[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 194
 };
 static int parser_action_row1008[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1009[] = {
-       1,
-       -1, 1, 737
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1010[] = {
-       1,
-       -1, 1, 741
+       13,
+       -1, 1, 334,
+       59, 0, 1180,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1011[] = {
-       2,
-       -1, 1, 740,
-       52, 0, 265
+       1,
+       -1, 1, 184
 };
 static int parser_action_row1012[] = {
        1,
-       -1, 1, 204
+       -1, 1, 196
 };
 static int parser_action_row1013[] = {
-       2,
-       -1, 1, 191,
-       24, 1, 912
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1014[] = {
-       3,
-       -1, 1, 156,
-       24, 1, 884,
-       49, 1, 969
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1015[] = {
-       31,
-       -1, 1, 456,
-       9, 0, 1175,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       13,
+       -1, 1, 338,
+       59, 0, 1184,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1016[] = {
        1,
-       -1, 1, 921
+       -1, 1, 186
 };
 static int parser_action_row1017[] = {
-       1,
-       -1, 1, 885
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1018[] = {
-       2,
-       -1, 3, 1017,
-       49, 0, 188
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 337,
+       59, 0, 1187,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 337,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1019[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 439
 };
 static int parser_action_row1020[] = {
        1,
-       -1, 1, 261
+       -1, 1, 221
 };
 static int parser_action_row1021[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 240
 };
 static int parser_action_row1022[] = {
-       1,
-       -1, 1, 924
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1023[] = {
-       2,
-       -1, 3, 1022,
-       49, 0, 188
+       3,
+       -1, 1, 771,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1024[] = {
-       3,
+       2,
        -1, 3, 1023,
-       52, 0, 327,
-       96, 0, 328
+       97, 0, 1193
 };
 static int parser_action_row1025[] = {
-       2,
-       -1, 1, 168,
-       24, 1, 889
+       3,
+       -1, 3, 1024,
+       96, 0, 53,
+       97, 0, 1194
 };
 static int parser_action_row1026[] = {
-       2,
-       -1, 1, 173,
-       24, 1, 894
+       3,
+       -1, 1, 742,
+       54, 1, 745,
+       73, 1, 745
 };
 static int parser_action_row1027[] = {
-       2,
-       -1, 1, 170,
-       24, 1, 891
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 513,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1028[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1085
 };
 static int parser_action_row1029[] = {
-       2,
-       -1, 1, 276,
-       24, 0, 1183
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1030[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 381,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1031[] = {
-       3,
-       -1, 3, 1030,
-       47, 0, 384,
-       95, 0, 385
+       1,
+       -1, 1, 749
 };
 static int parser_action_row1032[] = {
-       2,
-       -1, 1, 185,
-       24, 1, 906
+       1,
+       -1, 1, 753
 };
 static int parser_action_row1033[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 752,
+       52, 0, 277
 };
 static int parser_action_row1034[] = {
-       27,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 345,
-       73, 1, 345,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 206
 };
 static int parser_action_row1035[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 193,
+       24, 1, 924
 };
 static int parser_action_row1036[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 339,
-       59, 0, 476,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 339,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 158,
+       24, 1, 896,
+       49, 1, 981
 };
 static int parser_action_row1037[] = {
-       3,
-       -1, 3, 1036,
-       9, 0, 872,
-       24, 0, 876
+       31,
+       -1, 1, 458,
+       9, 0, 1200,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1038[] = {
-       3,
-       -1, 3, 1037,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 933
 };
 static int parser_action_row1039[] = {
        1,
-       -1, 1, 260
+       -1, 1, 897
 };
 static int parser_action_row1040[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1039,
+       49, 0, 197
 };
 static int parser_action_row1041[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1042[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 343,
-       58, 0, 206,
-       59, 0, 481,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 343,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 261
 };
 static int parser_action_row1043[] = {
-       3,
-       -1, 1, 454,
-       12, 0, 1195,
-       96, 0, 1196
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1044[] = {
        1,
-       -1, 1, 265
+       -1, 1, 936
 };
 static int parser_action_row1045[] = {
-       1,
-       -1, 1, 445
+       2,
+       -1, 3, 1044,
+       49, 0, 197
 };
 static int parser_action_row1046[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1045,
+       52, 0, 340,
+       97, 0, 341
 };
 static int parser_action_row1047[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 170,
+       24, 1, 901
 };
 static int parser_action_row1048[] = {
-       3,
-       -1, 1, 323,
-       54, 1, 326,
-       73, 1, 326
+       2,
+       -1, 1, 175,
+       24, 1, 906
 };
 static int parser_action_row1049[] = {
-       1,
-       -1, 1, 330
+       2,
+       -1, 1, 172,
+       24, 1, 903
 };
 static int parser_action_row1050[] = {
-       1,
-       -1, 1, 334
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1051[] = {
        2,
-       -1, 1, 333,
-       52, 0, 265
+       -1, 1, 280,
+       24, 0, 1208
 };
 static int parser_action_row1052[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 393,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1053[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1052,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1054[] = {
-       1,
-       -1, 1, 1053
+       2,
+       -1, 1, 187,
+       24, 1, 918
 };
 static int parser_action_row1055[] = {
-       2,
-       -1, 1, 149,
-       56, 0, 1052
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1056[] = {
-       2,
-       -1, 3, 1055,
-       55, 0, 1203
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 349,
+       73, 1, 349,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1057[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1058[] = {
-       2,
-       -1, 1, 785,
-       94, 0, 581
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 343,
+       59, 0, 488,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 343,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1059[] = {
-       1,
-       -1, 1, 351
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1060[] = {
-       2,
-       -1, 1, 354,
-       52, 0, 265
+       3,
+       -1, 3, 1059,
+       9, 0, 886,
+       24, 0, 1216
 };
 static int parser_action_row1061[] = {
-       3,
-       -1, 1, 358,
-       52, 0, 265,
-       58, 0, 206
+       4,
+       -1, 3, 1060,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1062[] = {
-       2,
-       -1, 3, 1061,
-       96, 0, 1208
+       1,
+       -1, 1, 265
 };
 static int parser_action_row1063[] = {
-       13,
-       -1, 1, 401,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       52, 0, 1209,
-       94, 0, 195,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1064[] = {
-       1,
-       -1, 1, 399
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1065[] = {
-       2,
-       -1, 1, 28,
-       13, 0, 26
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 347,
+       58, 0, 215,
+       59, 0, 493,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 347,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1066[] = {
-       1,
-       -1, 1, 1064
+       3,
+       -1, 1, 456,
+       12, 0, 1222,
+       97, 0, 1223
 };
 static int parser_action_row1067[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 269
 };
 static int parser_action_row1068[] = {
        1,
-       -1, 1, 271
+       -1, 1, 447
 };
 static int parser_action_row1069[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1070[] = {
-       1,
-       -1, 1, 269
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1071[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 327,
+       54, 1, 330,
+       73, 1, 330
 };
 static int parser_action_row1072[] = {
-       2,
-       -1, 3, 1071,
-       55, 0, 1218
+       1,
+       -1, 1, 334
 };
 static int parser_action_row1073[] = {
        1,
-       -1, 1, 988
+       -1, 1, 338
 };
 static int parser_action_row1074[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 337,
+       52, 0, 277
 };
 static int parser_action_row1075[] = {
-       14,
-       -1, 1, 331,
-       52, 0, 265,
-       59, 0, 1219,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
-};
-static int parser_action_row1076[] = {
-       15,
-       -1, 1, 335,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 1220,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
-};
-static int parser_action_row1077[] = {
-       22,
-       -1, 1, 454,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 1221
-};
-static int parser_action_row1078[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1079[] = {
+static int parser_action_row1076[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
-static int parser_action_row1080[] = {
+static int parser_action_row1077[] = {
+       1,
+       -1, 1, 1070
+};
+static int parser_action_row1078[] = {
        2,
-       -1, 1, 584,
-       52, 0, 265
+       -1, 1, 151,
+       56, 0, 1075
 };
-static int parser_action_row1081[] = {
+static int parser_action_row1079[] = {
+       2,
+       -1, 3, 1078,
+       55, 0, 1230
+};
+static int parser_action_row1080[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1081[] = {
+       2,
+       -1, 1, 797,
+       94, 0, 594
+};
 static int parser_action_row1082[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 355
 };
 static int parser_action_row1083[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 358,
+       52, 0, 277
 };
 static int parser_action_row1084[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 362,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1085[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 1084,
+       97, 0, 1235
 };
 static int parser_action_row1086[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       13,
+       -1, 1, 405,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       52, 0, 1236,
+       94, 0, 204,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1087[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 403
 };
 static int parser_action_row1088[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row1089[] = {
-       16,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1233,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       52, 0, 46,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 1081
 };
 static int parser_action_row1090[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1091[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 275
 };
 static int parser_action_row1092[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1093[] = {
-       3,
-       -1, 1, 566,
-       52, 0, 265,
-       58, 0, 206
+       1,
+       -1, 1, 273
 };
 static int parser_action_row1094[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1095[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 1094,
+       55, 0, 1245
 };
 static int parser_action_row1096[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 1000
 };
 static int parser_action_row1097[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1098[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       14,
+       -1, 1, 335,
+       52, 0, 277,
+       59, 0, 1246,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1099[] = {
-       1,
-       -1, 1, 609
+       15,
+       -1, 1, 339,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1247,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1100[] = {
-       1,
-       -1, 1, 608
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1248
 };
 static int parser_action_row1101[] = {
        3,
-       -1, 3, 1100,
-       41, 0, 1245,
-       97, 0, 1246
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1102[] = {
-       2,
-       -1, 1, 453,
-       96, 0, 1247
-};
-static int parser_action_row1103[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1103[] = {
+       2,
+       -1, 1, 596,
+       52, 0, 277
+};
 static int parser_action_row1104[] = {
-       4,
-       -1, 1, 514,
-       29, 0, 1249,
-       30, 0, 1250,
-       32, 0, 1251
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1105[] = {
-       1,
-       -1, 1, 516
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1106[] = {
-       1,
-       -1, 1, 521
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1107[] = {
-       10,
-       -1, 1, 523,
-       39, 0, 1252,
-       80, 0, 1253,
-       84, 0, 1254,
-       85, 0, 1255,
-       86, 0, 1256,
-       87, 0, 1257,
-       89, 0, 1258,
-       90, 0, 1259,
-       92, 0, 1260
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1108[] = {
        2,
-       -1, 1, 532,
-       81, 0, 1261
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1109[] = {
        2,
-       -1, 1, 534,
-       82, 0, 1262
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1110[] = {
-       3,
-       -1, 1, 536,
-       88, 0, 1263,
-       91, 0, 1264
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1111[] = {
-       3,
-       -1, 1, 538,
-       74, 0, 1265,
-       75, 0, 1266
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1112[] = {
-       4,
-       -1, 1, 541,
-       76, 0, 1267,
-       78, 0, 1268,
-       79, 0, 1269
+       16,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1260,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       52, 0, 51,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1113[] = {
-       1,
-       -1, 1, 544
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1114[] = {
-       2,
-       -1, 1, 548,
-       77, 0, 1270
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1115[] = {
-       1,
-       -1, 1, 550
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1116[] = {
-       2,
-       -1, 1, 555,
-       73, 0, 1271
+       3,
+       -1, 1, 578,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1117[] = {
-       1,
-       -1, 1, 560
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1118[] = {
-       3,
-       -1, 1, 455,
-       95, 0, 48,
-       96, 0, 1272
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1119[] = {
-       1,
-       -1, 1, 386
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1120[] = {
        2,
-       -1, 1, 451,
-       58, 0, 206
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1121[] = {
        2,
-       -1, 3, 1120,
-       96, 0, 1274
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1122[] = {
        1,
-       -1, 1, 74
+       -1, 1, 621
 };
 static int parser_action_row1123[] = {
        1,
-       -1, 1, 404
+       -1, 1, 620
 };
 static int parser_action_row1124[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1123,
+       41, 0, 1272,
+       98, 0, 1273
 };
 static int parser_action_row1125[] = {
-       1,
-       -1, 1, 16
+       2,
+       -1, 1, 455,
+       97, 0, 1274
 };
 static int parser_action_row1126[] = {
-       1,
-       -1, 1, 17
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1127[] = {
-       3,
-       -1, 1, 401,
-       57, 0, 815,
-       94, 0, 195
+       4,
+       -1, 1, 526,
+       29, 0, 1276,
+       30, 0, 1277,
+       32, 0, 1278
 };
 static int parser_action_row1128[] = {
-       2,
-       -1, 3, 1127,
-       53, 0, 1282
+       1,
+       -1, 1, 528
 };
 static int parser_action_row1129[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1283
+       1,
+       -1, 1, 533
 };
 static int parser_action_row1130[] = {
-       1,
-       -1, 1, 151
+       10,
+       -1, 1, 535,
+       39, 0, 1279,
+       80, 0, 1280,
+       84, 0, 1281,
+       85, 0, 1282,
+       86, 0, 1283,
+       87, 0, 1284,
+       89, 0, 1285,
+       90, 0, 1286,
+       92, 0, 1287
 };
 static int parser_action_row1131[] = {
-       25,
-       -1, 3, 1130,
-       41, 0, 1287,
-       47, 0, 384,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 412,
-       96, 0, 647
+       2,
+       -1, 1, 544,
+       81, 0, 1288
 };
 static int parser_action_row1132[] = {
-       3,
-       -1, 1, 77,
-       0, 1, 484,
-       1, 1, 484
+       2,
+       -1, 1, 546,
+       82, 0, 1289
 };
 static int parser_action_row1133[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 548,
+       88, 0, 1290,
+       91, 0, 1291
 };
 static int parser_action_row1134[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       3,
+       -1, 1, 550,
+       74, 0, 1292,
+       75, 0, 1293
 };
 static int parser_action_row1135[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       4,
+       -1, 1, 553,
+       76, 0, 1294,
+       78, 0, 1295,
+       79, 0, 1296
 };
 static int parser_action_row1136[] = {
-       3,
-       -1, 3, 1135,
-       28, 0, 33,
-       108, 0, 56
+       1,
+       -1, 1, 556
 };
 static int parser_action_row1137[] = {
-       1,
-       -1, 1, 482
+       2,
+       -1, 1, 560,
+       77, 0, 1297
 };
 static int parser_action_row1138[] = {
-       2,
-       -1, 3, 1137,
-       95, 0, 1298
+       1,
+       -1, 1, 562
 };
 static int parser_action_row1139[] = {
        2,
-       -1, 1, 73,
-       9, 1, 43
+       -1, 1, 567,
+       73, 0, 1298
 };
 static int parser_action_row1140[] = {
-       2,
-       -1, 3, 1139,
-       9, 0, 1300
-};
-static int parser_action_row1141[] = {
        1,
-       -1, 1, 1047
+       -1, 1, 572
 };
-static int parser_action_row1142[] = {
+static int parser_action_row1141[] = {
        3,
-       -1, 3, 1141,
-       0, 0, 83,
-       1, 0, 84
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 1299
+};
+static int parser_action_row1142[] = {
+       1,
+       -1, 1, 390
 };
 static int parser_action_row1143[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 453,
+       58, 0, 215
 };
 static int parser_action_row1144[] = {
-       1,
-       -1, 1, 72
+       2,
+       -1, 3, 1143,
+       97, 0, 1301
 };
 static int parser_action_row1145[] = {
-       5,
-       -1, 1, 28,
-       6, 0, 1303,
-       9, 1, 44,
-       13, 0, 26,
-       96, 0, 1304
+       1,
+       -1, 1, 76
 };
 static int parser_action_row1146[] = {
-       3,
-       -1, 1, 474,
+       4,
+       -1, 1, 485,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1147[] = {
        1,
-       -1, 1, 459
+       -1, 1, 16
 };
 static int parser_action_row1148[] = {
-       2,
-       -1, 3, 1147,
-       45, 0, 1310
+       1,
+       -1, 1, 17
 };
 static int parser_action_row1149[] = {
-       4,
-       -1, 3, 1148,
-       31, 0, 1311,
-       47, 0, 384,
-       95, 0, 385
+       3,
+       -1, 1, 405,
+       57, 0, 829,
+       94, 0, 204
 };
 static int parser_action_row1150[] = {
-       1,
-       -1, 1, 207
+       2,
+       -1, 3, 1149,
+       53, 0, 1308
 };
 static int parser_action_row1151[] = {
-       1,
-       -1, 1, 226
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       56, 0, 1309
 };
 static int parser_action_row1152[] = {
        1,
-       -1, 1, 205
+       -1, 1, 153
 };
 static int parser_action_row1153[] = {
-       1,
-       -1, 1, 224
+       25,
+       -1, 3, 1152,
+       41, 0, 1313,
+       47, 0, 396,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 424,
+       97, 0, 660
 };
 static int parser_action_row1154[] = {
-       1,
-       -1, 1, 210
+       4,
+       -1, 1, 79,
+       0, 1, 496,
+       1, 1, 496,
+       95, 1, 496
 };
 static int parser_action_row1155[] = {
-       1,
-       -1, 1, 229
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1156[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1157[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1158[] = {
-       1,
-       -1, 1, 214
+       3,
+       -1, 3, 1157,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1159[] = {
        1,
-       -1, 1, 233
+       -1, 1, 494
 };
 static int parser_action_row1160[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 39,
+       96, 0, 1324
 };
 static int parser_action_row1161[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 26
 };
 static int parser_action_row1162[] = {
        1,
-       -1, 1, 193
+       -1, 1, 47
 };
 static int parser_action_row1163[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1162,
+       9, 0, 1327
 };
 static int parser_action_row1164[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1050
 };
 static int parser_action_row1165[] = {
-       13,
-       -1, 1, 332,
-       59, 0, 1319,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 1049
 };
 static int parser_action_row1166[] = {
-       1,
-       -1, 1, 183
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row1167[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       56,
+       -1, 1, 420,
+       12, 0, 116,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 117,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 118,
+       33, 0, 1329,
+       34, 0, 1330,
+       35, 0, 1331,
+       36, 0, 1332,
+       37, 0, 43,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       47, 0, 396,
+       48, 0, 125,
+       50, 0, 49,
+       51, 0, 1333,
+       52, 0, 1334,
+       54, 0, 619,
+       74, 0, 1335,
+       75, 0, 1336,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 1337,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 1338,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1168[] = {
        1,
-       -1, 1, 758
+       -1, 1, 75
 };
 static int parser_action_row1169[] = {
-       2,
-       -1, 1, 761,
-       52, 0, 265
+       1,
+       -1, 1, 1063
 };
 static int parser_action_row1170[] = {
-       3,
-       -1, 1, 765,
-       52, 0, 265,
-       58, 0, 206
+       4,
+       -1, 1, 30,
+       6, 0, 1163,
+       13, 0, 32,
+       97, 0, 1164
 };
 static int parser_action_row1171[] = {
-       2,
-       -1, 3, 1170,
-       96, 0, 1324
+       1,
+       -1, 1, 44
 };
 static int parser_action_row1172[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 461
 };
 static int parser_action_row1173[] = {
        2,
        -1, 3, 1172,
-       45, 0, 1326
+       45, 0, 1358
 };
 static int parser_action_row1174[] = {
        4,
        -1, 3, 1173,
-       31, 0, 1327,
-       47, 0, 384,
-       95, 0, 385
+       31, 0, 1359,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1175[] = {
        1,
-       -1, 1, 739
+       -1, 1, 209
 };
 static int parser_action_row1176[] = {
-       3,
-       -1, 1, 155,
-       24, 1, 883,
-       49, 1, 968
+       1,
+       -1, 1, 228
 };
 static int parser_action_row1177[] = {
-       3,
-       -1, 1, 154,
-       24, 1, 882,
-       49, 1, 967
+       1,
+       -1, 1, 207
 };
 static int parser_action_row1178[] = {
-       2,
-       -1, 1, 254,
-       24, 1, 920
+       1,
+       -1, 1, 226
 };
 static int parser_action_row1179[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 212
 };
 static int parser_action_row1180[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 231
 };
 static int parser_action_row1181[] = {
-       2,
-       -1, 1, 263,
-       24, 1, 923
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1182[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1183[] = {
-       2,
-       -1, 1, 277,
-       24, 0, 1332
+       1,
+       -1, 1, 216
 };
 static int parser_action_row1184[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1333,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 235
 };
 static int parser_action_row1185[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1186[] = {
-       2,
-       -1, 3, 1185,
-       57, 0, 1337
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1187[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 1338,
-       46, 0, 656,
-       95, 0, 48,
-       96, 0, 1339
+       1,
+       -1, 1, 195
 };
 static int parser_action_row1188[] = {
-       2,
-       -1, 1, 189,
-       24, 1, 910
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1189[] = {
-       2,
-       -1, 1, 195,
-       24, 1, 916
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1190[] = {
-       2,
-       -1, 1, 186,
-       24, 1, 907
+       13,
+       -1, 1, 336,
+       59, 0, 1367,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1191[] = {
        1,
-       -1, 1, 258
+       -1, 1, 185
 };
 static int parser_action_row1192[] = {
        3,
-       -1, 3, 1191,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1193[] = {
        1,
-       -1, 1, 256
+       -1, 1, 770
 };
 static int parser_action_row1194[] = {
        2,
-       -1, 1, 197,
-       24, 1, 918
+       -1, 1, 773,
+       52, 0, 277
 };
 static int parser_action_row1195[] = {
-       2,
-       -1, 1, 188,
-       24, 1, 909
+       3,
+       -1, 1, 777,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1196[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 1195,
+       97, 0, 1372
 };
 static int parser_action_row1197[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 341,
-       59, 0, 678,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 341,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1198[] = {
        2,
        -1, 3, 1197,
-       15, 0, 1344
+       45, 0, 1374
 };
 static int parser_action_row1199[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 3, 1198,
+       31, 0, 1375,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1200[] = {
        1,
-       -1, 1, 332
+       -1, 1, 751
 };
 static int parser_action_row1201[] = {
-       2,
-       -1, 3, 1200,
-       55, 0, 1346
+       3,
+       -1, 1, 157,
+       24, 1, 895,
+       49, 1, 980
 };
 static int parser_action_row1202[] = {
        3,
-       -1, 3, 1201,
-       47, 0, 384,
-       95, 0, 385
+       -1, 1, 156,
+       24, 1, 894,
+       49, 1, 979
 };
 static int parser_action_row1203[] = {
-       1,
-       -1, 1, 1054
+       2,
+       -1, 1, 256,
+       24, 1, 932
 };
 static int parser_action_row1204[] = {
-       2,
-       -1, 1, 785,
-       94, 0, 581
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1205[] = {
-       2,
-       -1, 3, 1204,
-       53, 0, 1349
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1206[] = {
-       1,
-       -1, 1, 786
+       2,
+       -1, 1, 267,
+       24, 1, 935
 };
 static int parser_action_row1207[] = {
-       1,
-       -1, 1, 353
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1208[] = {
-       1,
-       -1, 1, 357
+       2,
+       -1, 1, 281,
+       24, 0, 1380
 };
 static int parser_action_row1209[] = {
-       2,
-       -1, 1, 356,
-       52, 0, 265
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1381,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1210[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1211[] = {
-       1,
-       -1, 1, 407
+       2,
+       -1, 3, 1210,
+       57, 0, 1385
 };
 static int parser_action_row1212[] = {
-       1,
-       -1, 1, 409
+       5,
+       -1, 1, 458,
+       12, 0, 1386,
+       46, 0, 669,
+       96, 0, 53,
+       97, 0, 1387
 };
 static int parser_action_row1213[] = {
-       1,
-       -1, 1, 410
+       2,
+       -1, 1, 191,
+       24, 1, 922
 };
 static int parser_action_row1214[] = {
-       1,
-       -1, 1, 411
+       2,
+       -1, 1, 197,
+       24, 1, 928
 };
 static int parser_action_row1215[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1216[] = {
        2,
-       -1, 1, 423,
-       56, 0, 1353
+       -1, 1, 188,
+       24, 1, 919
 };
-static int parser_action_row1217[] = {
+static int parser_action_row1216[] = {
        1,
-       -1, 1, 272
+       -1, 1, 262
+};
+static int parser_action_row1217[] = {
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1218[] = {
-       2,
-       -1, 3, 1217,
-       55, 0, 1356
+       1,
+       -1, 1, 263
 };
 static int parser_action_row1219[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       4,
+       -1, 3, 1218,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1220[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 258
 };
 static int parser_action_row1221[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 199,
+       24, 1, 930
 };
 static int parser_action_row1222[] = {
-       14,
-       -1, 1, 333,
-       52, 0, 265,
-       59, 0, 1358,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       2,
+       -1, 1, 190,
+       24, 1, 921
 };
 static int parser_action_row1223[] = {
        25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 434,
-       27, 0, 435,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1224[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 345,
+       59, 0, 691,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 345,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1225[] = {
-       1,
-       -1, 1, 582
+       2,
+       -1, 3, 1224,
+       15, 0, 1393
 };
 static int parser_action_row1226[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1227[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 1079,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 336
 };
 static int parser_action_row1228[] = {
-       3,
+       2,
        -1, 3, 1227,
-       47, 0, 1364,
-       95, 0, 1365
+       55, 0, 1395
 };
 static int parser_action_row1229[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       3,
+       -1, 3, 1228,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1230[] = {
        1,
-       -1, 1, 599
+       -1, 1, 1071
 };
 static int parser_action_row1231[] = {
-       1,
-       -1, 1, 600
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1232[] = {
-       1,
-       -1, 1, 601
+       2,
+       -1, 3, 1231,
+       53, 0, 1398
 };
 static int parser_action_row1233[] = {
        1,
-       -1, 1, 602
+       -1, 1, 798
 };
 static int parser_action_row1234[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 357
 };
 static int parser_action_row1235[] = {
-       3,
-       -1, 3, 1234,
-       41, 0, 1245,
-       97, 0, 1369
+       1,
+       -1, 1, 361
 };
 static int parser_action_row1236[] = {
        2,
-       -1, 3, 1235,
-       73, 0, 1370
+       -1, 1, 360,
+       52, 0, 277
 };
 static int parser_action_row1237[] = {
-       1,
-       -1, 1, 552
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1238[] = {
        1,
-       -1, 1, 551
+       -1, 1, 410
 };
 static int parser_action_row1239[] = {
        1,
-       -1, 1, 553
+       -1, 1, 412
 };
 static int parser_action_row1240[] = {
        1,
-       -1, 1, 564
+       -1, 1, 413
 };
 static int parser_action_row1241[] = {
        1,
-       -1, 1, 603
+       -1, 1, 414
 };
 static int parser_action_row1242[] = {
-       1,
-       -1, 1, 604
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1243[] = {
-       1,
-       -1, 1, 605
+       2,
+       -1, 1, 425,
+       56, 0, 1402
 };
 static int parser_action_row1244[] = {
        1,
-       -1, 1, 607
+       -1, 1, 276
 };
 static int parser_action_row1245[] = {
-       1,
-       -1, 1, 606
+       2,
+       -1, 3, 1244,
+       55, 0, 1405
 };
 static int parser_action_row1246[] = {
        2,
-       -1, 1, 580,
-       52, 0, 265
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1247[] = {
-       1,
-       -1, 1, 562
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1248[] = {
-       2,
-       -1, 1, 570,
-       52, 0, 265
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1249[] = {
-       3,
-       -1, 3, 1248,
-       54, 0, 1373,
-       55, 0, 1374
+       14,
+       -1, 1, 337,
+       52, 0, 277,
+       59, 0, 1407,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1250[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1251[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       24, 0, 1376
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1252[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 594
 };
 static int parser_action_row1253[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1254[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1255[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1254,
+       47, 0, 1413,
+       96, 0, 1414
 };
 static int parser_action_row1256[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1257[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 611
 };
 static int parser_action_row1258[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 612
 };
 static int parser_action_row1259[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 613
 };
 static int parser_action_row1260[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 614
 };
 static int parser_action_row1261[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1262[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1261,
+       41, 0, 1272,
+       98, 0, 1418
 };
 static int parser_action_row1263[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 1262,
+       73, 0, 1419
 };
 static int parser_action_row1264[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 564
 };
 static int parser_action_row1265[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 563
 };
 static int parser_action_row1266[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 565
 };
 static int parser_action_row1267[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 576
 };
 static int parser_action_row1268[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 615
 };
 static int parser_action_row1269[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 616
 };
 static int parser_action_row1270[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 617
 };
 static int parser_action_row1271[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 619
 };
 static int parser_action_row1272[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 618
 };
 static int parser_action_row1273[] = {
-       3,
-       -1, 1, 578,
-       52, 0, 265,
-       58, 0, 206
+       2,
+       -1, 1, 592,
+       52, 0, 277
 };
 static int parser_action_row1274[] = {
-       2,
-       -1, 1, 454,
-       96, 0, 1400
+       1,
+       -1, 1, 574
 };
 static int parser_action_row1275[] = {
        2,
-       -1, 1, 452,
-       58, 0, 206
+       -1, 1, 582,
+       52, 0, 277
 };
 static int parser_action_row1276[] = {
-       2,
+       3,
        -1, 3, 1275,
-       9, 0, 1401
+       54, 0, 1422,
+       55, 0, 1423
 };
 static int parser_action_row1277[] = {
-       1,
-       -1, 1, 1065
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1278[] = {
-       2,
-       -1, 1, 28,
-       13, 0, 26
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       24, 0, 1425
 };
 static int parser_action_row1279[] = {
-       8,
-       -1, 1, 474,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       4, 1, 412,
-       9, 1, 412,
-       15, 1, 412,
-       28, 1, 412,
-       108, 1, 412
+       1, 0, 2
 };
 static int parser_action_row1280[] = {
-       2,
-       -1, 1, 116,
-       71, 0, 1404
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1281[] = {
-       2,
-       -1, 1, 400,
-       57, 0, 815
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1282[] = {
-       1,
-       -1, 1, 115
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1283[] = {
-       4,
-       -1, 1, 474,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       57, 0, 815
+       1, 0, 2
 };
 static int parser_action_row1284[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1285[] = {
-       1,
-       -1, 1, 1049
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1286[] = {
-       1,
-       -1, 1, 111
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1287[] = {
-       4,
-       -1, 1, 474,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       56, 0, 1283
+       1, 0, 2
 };
 static int parser_action_row1288[] = {
-       1,
-       -1, 1, 126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1289[] = {
-       2,
-       -1, 1, 120,
-       56, 0, 1411
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1290[] = {
-       1,
-       -1, 1, 124
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1291[] = {
-       1,
-       -1, 1, 125
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1292[] = {
-       2,
-       -1, 1, 129,
-       73, 0, 1414
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1293[] = {
-       1,
-       -1, 1, 127
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1294[] = {
-       2,
-       -1, 1, 78,
-       9, 0, 1415
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1295[] = {
-       1,
-       -1, 1, 468
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1296[] = {
-       1,
-       -1, 1, 479
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1297[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1298[] = {
-       1,
-       -1, 1, 483
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1299[] = {
        3,
-       -1, 1, 153,
-       57, 0, 321,
-       94, 0, 195
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1300[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1419
+       3,
+       -1, 1, 590,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1301[] = {
-       1,
-       -1, 1, 26
+       2,
+       -1, 1, 456,
+       97, 0, 1449
 };
 static int parser_action_row1302[] = {
-       1,
-       -1, 1, 45
+       2,
+       -1, 1, 454,
+       58, 0, 215
 };
 static int parser_action_row1303[] = {
-       2,
-       -1, 3, 1302,
-       9, 0, 1423
+       1,
+       -1, 1, 1064
 };
 static int parser_action_row1304[] = {
-       1,
-       -1, 1, 1038
+       2,
+       -1, 1, 30,
+       13, 0, 32
 };
 static int parser_action_row1305[] = {
-       1,
-       -1, 1, 1037
+       5,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1451,
+       95, 0, 3
 };
 static int parser_action_row1306[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       2,
+       -1, 1, 118,
+       71, 0, 1453
 };
 static int parser_action_row1307[] = {
-       56,
-       -1, 1, 418,
-       12, 0, 107,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 108,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 109,
-       33, 0, 1425,
-       34, 0, 1426,
-       35, 0, 1427,
-       36, 0, 1428,
-       37, 0, 38,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       47, 0, 384,
-       48, 0, 116,
-       50, 0, 44,
-       51, 0, 1429,
-       52, 0, 1430,
-       54, 0, 606,
-       74, 0, 1431,
-       75, 0, 1432,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 1433,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 1434,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 404,
+       57, 0, 829
 };
 static int parser_action_row1308[] = {
        1,
-       -1, 1, 73
+       -1, 1, 117
 };
 static int parser_action_row1309[] = {
-       1,
-       -1, 1, 1048
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       57, 0, 829
 };
 static int parser_action_row1310[] = {
-       5,
-       -1, 1, 28,
-       6, 0, 1303,
-       9, 1, 42,
-       13, 0, 26,
-       96, 0, 1304
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1311[] = {
        1,
-       -1, 1, 361
+       -1, 1, 1066
 };
 static int parser_action_row1312[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 113
 };
 static int parser_action_row1313[] = {
-       3,
-       -1, 1, 474,
+       4,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       56, 0, 1309
 };
 static int parser_action_row1314[] = {
        1,
-       -1, 1, 209
+       -1, 1, 128
 };
 static int parser_action_row1315[] = {
-       1,
-       -1, 1, 228
+       2,
+       -1, 1, 122,
+       56, 0, 1460
 };
 static int parser_action_row1316[] = {
        1,
-       -1, 1, 213
+       -1, 1, 126
 };
 static int parser_action_row1317[] = {
        1,
-       -1, 1, 232
+       -1, 1, 127
 };
 static int parser_action_row1318[] = {
-       1,
-       -1, 1, 212
+       2,
+       -1, 1, 131,
+       73, 0, 1463
 };
 static int parser_action_row1319[] = {
        1,
-       -1, 1, 231
+       -1, 1, 129
 };
 static int parser_action_row1320[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       9,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       4, 1, 80,
+       9, 0, 1464,
+       15, 1, 80,
+       28, 1, 80,
+       95, 0, 3,
+       109, 1, 80
 };
 static int parser_action_row1321[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 470
 };
 static int parser_action_row1322[] = {
-       2,
-       -1, 3, 1321,
-       24, 0, 1458
+       1,
+       -1, 1, 491
 };
 static int parser_action_row1323[] = {
-       1,
-       -1, 1, 760
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1324[] = {
        1,
-       -1, 1, 764
+       -1, 1, 495
 };
 static int parser_action_row1325[] = {
-       2,
-       -1, 1, 763,
-       52, 0, 265
+       3,
+       -1, 1, 155,
+       57, 0, 333,
+       94, 0, 204
 };
 static int parser_action_row1326[] = {
-       1,
-       -1, 1, 444
+       2,
+       -1, 3, 1325,
+       55, 0, 1468
 };
 static int parser_action_row1327[] = {
-       1,
-       -1, 1, 768
+       2,
+       -1, 1, 37,
+       56, 0, 1469
 };
 static int parser_action_row1328[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 27
 };
 static int parser_action_row1329[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       7,
+       -1, 3, 1328,
+       10, 0, 1472,
+       11, 0, 1473,
+       12, 0, 1474,
+       16, 0, 1475,
+       38, 0, 1476,
+       41, 0, 1477
 };
 static int parser_action_row1330[] = {
-       2,
-       -1, 3, 1329,
-       23, 0, 1462
+       26,
+       -1, 1, 1003,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1331[] = {
        2,
-       -1, 3, 1330,
-       15, 0, 1463
+       -1, 1, 1008,
+       49, 0, 197
 };
 static int parser_action_row1332[] = {
        2,
-       -1, 3, 1331,
-       28, 0, 1464
+       -1, 1, 1005,
+       49, 0, 197
 };
 static int parser_action_row1333[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1333,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1007
 };
 static int parser_action_row1334[] = {
        2,
-       -1, 1, 156,
-       24, 1, 884
+       -1, 3, 1333,
+       11, 0, 1481
 };
 static int parser_action_row1335[] = {
-       31,
-       -1, 1, 456,
-       9, 0, 1466,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1336[] = {
-       1,
-       -1, 1, 931
+       24,
+       -1, 1, 498,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1337[] = {
-       2,
-       -1, 3, 1336,
-       15, 0, 1468
+       24,
+       -1, 1, 499,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1338[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 507,
+       12, 0, 170,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1339[] = {
-       27,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 347,
-       73, 1, 347,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       15,
+       -1, 1, 756,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1483,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1340[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 329,
-       58, 0, 206,
-       59, 0, 832,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 329,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       1,
+       -1, 1, 802
 };
 static int parser_action_row1341[] = {
-       3,
-       -1, 1, 453,
-       12, 0, 1472,
-       96, 0, 1473
+       1,
+       -1, 1, 1001
 };
 static int parser_action_row1342[] = {
-       4,
-       -1, 1, 455,
-       12, 0, 1474,
-       95, 0, 48,
-       96, 0, 1475
+       1,
+       -1, 1, 1010
 };
 static int parser_action_row1343[] = {
-       2,
-       -1, 1, 196,
-       24, 1, 917
+       1,
+       -1, 1, 1012
 };
 static int parser_action_row1344[] = {
-       2,
-       -1, 1, 187,
-       24, 1, 908
+       1,
+       -1, 1, 1011
 };
 static int parser_action_row1345[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 148,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1013
 };
 static int parser_action_row1346[] = {
-       2,
-       -1, 3, 1345,
-       24, 0, 1479
+       1,
+       -1, 1, 1014
 };
 static int parser_action_row1347[] = {
-       2,
-       -1, 1, 785,
-       94, 0, 581
+       1,
+       -1, 1, 1015
 };
 static int parser_action_row1348[] = {
        1,
-       -1, 1, 150
+       -1, 1, 421
 };
 static int parser_action_row1349[] = {
-       1,
-       -1, 1, 612
+       3,
+       -1, 3, 1348,
+       41, 0, 300,
+       98, 0, 1486
 };
 static int parser_action_row1350[] = {
-       1,
-       -1, 1, 783
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1487
 };
 static int parser_action_row1351[] = {
        1,
-       -1, 1, 355
+       -1, 1, 806
 };
 static int parser_action_row1352[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1002
 };
 static int parser_action_row1353[] = {
-       2,
-       -1, 3, 1352,
-       53, 0, 1482
+       1,
+       -1, 1, 803
 };
 static int parser_action_row1354[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 739,
+       54, 0, 244,
+       73, 0, 1488
 };
 static int parser_action_row1355[] = {
        1,
-       -1, 1, 1067
+       -1, 1, 424
 };
 static int parser_action_row1356[] = {
        2,
-       -1, 1, 424,
-       56, 0, 1353
+       -1, 1, 800,
+       56, 0, 1402
 };
 static int parser_action_row1357[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 804
 };
 static int parser_action_row1358[] = {
-       1,
-       -1, 1, 146
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1491
 };
 static int parser_action_row1359[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 365
 };
 static int parser_action_row1360[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1361[] = {
-       1,
-       -1, 1, 388
-};
-static int parser_action_row1362[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1362[] = {
+       1,
+       -1, 1, 211
+};
 static int parser_action_row1363[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 230
 };
 static int parser_action_row1364[] = {
        1,
-       -1, 1, 522
+       -1, 1, 215
 };
 static int parser_action_row1365[] = {
-       2,
-       -1, 3, 1364,
-       95, 0, 1489
+       1,
+       -1, 1, 234
 };
 static int parser_action_row1366[] = {
-       2,
-       -1, 1, 785,
-       94, 0, 581
+       1,
+       -1, 1, 214
 };
 static int parser_action_row1367[] = {
-       3,
-       -1, 1, 557,
-       52, 0, 265,
-       73, 0, 1491
+       1,
+       -1, 1, 233
 };
 static int parser_action_row1368[] = {
-       1,
-       -1, 1, 554
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1369[] = {
-       3,
-       -1, 3, 1368,
-       47, 0, 1364,
-       95, 0, 1365
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1370[] = {
        2,
-       -1, 1, 559,
-       73, 1, 562
+       -1, 3, 1369,
+       24, 0, 1497
 };
 static int parser_action_row1371[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 772
 };
 static int parser_action_row1372[] = {
        1,
-       -1, 1, 579
+       -1, 1, 776
 };
 static int parser_action_row1373[] = {
-       1,
-       -1, 1, 568
+       2,
+       -1, 1, 775,
+       52, 0, 277
 };
 static int parser_action_row1374[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 446
 };
 static int parser_action_row1375[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 780
 };
 static int parser_action_row1376[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 1079,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1377[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1378[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 1079,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 3, 1377,
+       23, 0, 1501
 };
 static int parser_action_row1379[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 1079,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 3, 1378,
+       15, 0, 1502
 };
 static int parser_action_row1380[] = {
-       3,
+       2,
        -1, 3, 1379,
-       47, 0, 1501,
-       95, 0, 1502
+       28, 0, 1503
 };
 static int parser_action_row1381[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1381,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1382[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 1, 158,
+       24, 1, 896
 };
 static int parser_action_row1383[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       31,
+       -1, 1, 458,
+       9, 0, 1505,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1384[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 943
 };
 static int parser_action_row1385[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 3, 1384,
+       15, 0, 1507
 };
 static int parser_action_row1386[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1387[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       27,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 351,
+       73, 1, 351,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1388[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 333,
+       58, 0, 215,
+       59, 0, 846,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 333,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1389[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       3,
+       -1, 1, 455,
+       12, 0, 1511,
+       97, 0, 1512
 };
 static int parser_action_row1390[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       4,
+       -1, 1, 457,
+       12, 0, 1513,
+       96, 0, 53,
+       97, 0, 1514
 };
 static int parser_action_row1391[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 260
 };
 static int parser_action_row1392[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 1, 198,
+       24, 1, 929
 };
 static int parser_action_row1393[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 1, 189,
+       24, 1, 920
 };
 static int parser_action_row1394[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 157,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1395[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 3, 1394,
+       24, 0, 1518
 };
 static int parser_action_row1396[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1397[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 152
 };
 static int parser_action_row1398[] = {
-       21,
-       -1, 1, 456,
-       12, 0, 1079,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 624
 };
 static int parser_action_row1399[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 1522,
-       46, 0, 1523,
-       95, 0, 48,
-       96, 0, 1524
+       1,
+       -1, 1, 795
 };
 static int parser_action_row1400[] = {
        1,
-       -1, 1, 576
+       -1, 1, 359
 };
 static int parser_action_row1401[] = {
-       2,
-       -1, 1, 574,
-       52, 0, 265
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1402[] = {
-       1,
-       -1, 1, 75
+       2,
+       -1, 3, 1401,
+       53, 0, 1521
 };
 static int parser_action_row1403[] = {
-       5,
-       -1, 1, 79,
-       18, 0, 227,
-       19, 0, 228,
-       20, 0, 229,
-       21, 0, 230
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1404[] = {
        1,
-       -1, 1, 1066
+       -1, 1, 1082
 };
 static int parser_action_row1405[] = {
-       1,
-       -1, 1, 118
+       2,
+       -1, 1, 426,
+       56, 0, 1402
 };
 static int parser_action_row1406[] = {
        2,
-       -1, 1, 117,
-       71, 0, 1530
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1407[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 148
 };
 static int parser_action_row1408[] = {
-       1,
-       -1, 1, 108
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1409[] = {
-       2,
-       -1, 3, 1408,
-       96, 0, 1126
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1410[] = {
        1,
-       -1, 1, 1050
+       -1, 1, 392
 };
 static int parser_action_row1411[] = {
-       1,
-       -1, 1, 112
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1412[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1413[] = {
        1,
-       -1, 1, 1051
+       -1, 1, 534
 };
 static int parser_action_row1414[] = {
        2,
-       -1, 1, 121,
-       56, 0, 1411
+       -1, 3, 1413,
+       96, 0, 1528
 };
 static int parser_action_row1415[] = {
-       24,
-       -1, 3, 1414,
-       46, 0, 1535,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 48,
-       96, 0, 647
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1416[] = {
-       1,
-       -1, 1, 485
+       3,
+       -1, 1, 569,
+       52, 0, 277,
+       73, 0, 1530
 };
 static int parser_action_row1417[] = {
        1,
-       -1, 1, 480
+       -1, 1, 566
 };
 static int parser_action_row1418[] = {
-       1,
-       -1, 1, 39
+       3,
+       -1, 3, 1417,
+       47, 0, 1413,
+       96, 0, 1414
 };
 static int parser_action_row1419[] = {
        2,
-       -1, 1, 153,
-       57, 0, 321
+       -1, 1, 571,
+       73, 1, 574
 };
 static int parser_action_row1420[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
 static int parser_action_row1421[] = {
        1,
-       -1, 1, 1045
+       -1, 1, 591
 };
 static int parser_action_row1422[] = {
-       2,
-       -1, 3, 1421,
-       55, 0, 1539
+       1,
+       -1, 1, 580
 };
 static int parser_action_row1423[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       56, 0, 1419
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1424[] = {
-       1,
-       -1, 1, 27
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1425[] = {
-       7,
-       -1, 3, 1424,
-       10, 0, 1542,
-       11, 0, 1543,
-       12, 0, 1544,
-       16, 0, 1545,
-       38, 0, 1546,
-       41, 0, 1547
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1426[] = {
-       26,
-       -1, 1, 991,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1427[] = {
-       2,
-       -1, 1, 996,
-       49, 0, 188
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1428[] = {
-       2,
-       -1, 1, 993,
-       49, 0, 188
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1429[] = {
-       1,
-       -1, 1, 995
+       3,
+       -1, 3, 1428,
+       47, 0, 1540,
+       96, 0, 1541
 };
 static int parser_action_row1430[] = {
-       2,
-       -1, 3, 1429,
-       11, 0, 1551
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1431[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1432[] = {
-       24,
-       -1, 1, 486,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1433[] = {
-       24,
-       -1, 1, 487,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1434[] = {
-       24,
-       -1, 1, 495,
-       12, 0, 161,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1435[] = {
-       15,
-       -1, 1, 744,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 1553,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1436[] = {
-       1,
-       -1, 1, 790
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1437[] = {
-       1,
-       -1, 1, 989
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1438[] = {
-       1,
-       -1, 1, 998
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1439[] = {
-       1,
-       -1, 1, 1000
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1440[] = {
-       1,
-       -1, 1, 999
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1441[] = {
-       1,
-       -1, 1, 1001
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1442[] = {
-       1,
-       -1, 1, 1002
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1443[] = {
-       1,
-       -1, 1, 1003
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1444[] = {
-       1,
-       -1, 1, 419
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1445[] = {
-       3,
-       -1, 3, 1444,
-       41, 0, 288,
-       97, 0, 1556
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1446[] = {
-       22,
-       -1, 1, 453,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 1557
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1447[] = {
-       1,
-       -1, 1, 794
+       21,
+       -1, 1, 458,
+       12, 0, 1102,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1448[] = {
-       1,
-       -1, 1, 990
+       5,
+       -1, 1, 458,
+       12, 0, 1561,
+       46, 0, 1562,
+       96, 0, 53,
+       97, 0, 1563
 };
 static int parser_action_row1449[] = {
        1,
-       -1, 1, 791
+       -1, 1, 588
 };
 static int parser_action_row1450[] = {
-       3,
-       -1, 1, 727,
-       54, 0, 236,
-       73, 0, 1558
+       2,
+       -1, 1, 586,
+       52, 0, 277
 };
 static int parser_action_row1451[] = {
-       1,
-       -1, 1, 422
+       5,
+       -1, 1, 81,
+       18, 0, 236,
+       19, 0, 237,
+       20, 0, 238,
+       21, 0, 239
 };
 static int parser_action_row1452[] = {
-       2,
-       -1, 1, 788,
-       56, 0, 1353
+       1,
+       -1, 1, 77
 };
 static int parser_action_row1453[] = {
        1,
-       -1, 1, 792
+       -1, 1, 1065
 };
 static int parser_action_row1454[] = {
-       23,
-       -1, 1, 455,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       95, 0, 48,
-       96, 0, 1561
+       1,
+       -1, 1, 120
 };
 static int parser_action_row1455[] = {
        2,
-       -1, 3, 1454,
-       45, 0, 1563
+       -1, 1, 119,
+       71, 0, 1569
 };
 static int parser_action_row1456[] = {
-       2,
-       -1, 3, 1455,
-       53, 0, 1564
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1457[] = {
        1,
-       -1, 1, 211
+       -1, 1, 110
 };
 static int parser_action_row1458[] = {
-       1,
-       -1, 1, 230
+       2,
+       -1, 3, 1457,
+       97, 0, 1148
 };
 static int parser_action_row1459[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 1067
 };
 static int parser_action_row1460[] = {
        1,
-       -1, 1, 762
+       -1, 1, 114
 };
 static int parser_action_row1461[] = {
-       2,
-       -1, 3, 1460,
-       45, 0, 1566
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1462[] = {
-       2,
-       -1, 3, 1461,
-       53, 0, 1567
+       1,
+       -1, 1, 1068
 };
 static int parser_action_row1463[] = {
-       34,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 872,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       24, 0, 876,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 123,
+       56, 0, 1460
 };
 static int parser_action_row1464[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1013,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       24,
+       -1, 3, 1463,
+       46, 0, 1574,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1465[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 497
 };
 static int parser_action_row1466[] = {
        1,
-       -1, 1, 932
+       -1, 1, 492
 };
 static int parser_action_row1467[] = {
-       2,
-       -1, 1, 155,
-       24, 1, 883
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1468[] = {
        2,
-       -1, 1, 154,
-       24, 1, 882
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row1469[] = {
-       33,
-       -1, 1, 456,
+       6,
+       -1, 1, 485,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 1013,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       28, 0, 84,
+       95, 0, 3,
+       109, 0, 85
 };
 static int parser_action_row1470[] = {
-       2,
-       -1, 1, 198,
-       24, 1, 919
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1471[] = {
-       2,
-       -1, 1, 190,
-       24, 1, 911
+       1,
+       -1, 1, 1060
 };
 static int parser_action_row1472[] = {
        2,
-       -1, 1, 181,
-       24, 1, 902
+       -1, 1, 38,
+       56, 0, 1469
 };
 static int parser_action_row1473[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       23,
+       -1, 3, 1472,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1474[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 331,
-       59, 0, 985,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 331,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 1473,
+       96, 0, 1583
 };
 static int parser_action_row1475[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       27,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       54, 0, 640,
+       57, 0, 829,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1476[] = {
-       40,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 335,
-       58, 0, 206,
-       59, 0, 990,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 335,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 1475,
+       97, 0, 1586
 };
 static int parser_action_row1477[] = {
-       3,
-       -1, 1, 454,
-       12, 0, 1578,
-       96, 0, 1579
+       27,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       54, 0, 640,
+       57, 0, 829,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 53,
+       97, 0, 660
 };
 static int parser_action_row1478[] = {
-       1,
-       -1, 1, 268
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1479[] = {
-       2,
-       -1, 3, 1478,
-       49, 0, 188
+       1,
+       -1, 1, 1004
 };
 static int parser_action_row1480[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 1009
 };
 static int parser_action_row1481[] = {
        1,
-       -1, 1, 613
+       -1, 1, 1006
 };
 static int parser_action_row1482[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1481,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1483[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1484[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1485[] = {
-       1,
-       -1, 1, 1068
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1486[] = {
-       1,
-       -1, 1, 147
+       13,
+       -1, 1, 755,
+       59, 0, 1594,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1487[] = {
-       2,
-       -1, 1, 386,
-       24, 0, 1479
+       13,
+       -1, 1, 746,
+       59, 0, 1596,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1488[] = {
-       2,
-       -1, 3, 1487,
-       15, 0, 1585
+       14,
+       -1, 1, 758,
+       52, 0, 277,
+       59, 0, 1598,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1489[] = {
-       2,
-       -1, 3, 1488,
-       23, 0, 1586
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1490[] = {
-       2,
-       -1, 1, 785,
-       94, 0, 581
+       13,
+       -1, 1, 769,
+       59, 0, 1602,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1491[] = {
-       1,
-       -1, 1, 795
+       2,
+       -1, 1, 801,
+       56, 0, 1402
 };
 static int parser_action_row1492[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       15,
+       -1, 1, 762,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1604,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1493[] = {
-       1,
-       -1, 1, 556
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1607
 };
 static int parser_action_row1494[] = {
        2,
        -1, 3, 1493,
-       73, 0, 1491
+       45, 0, 1608
 };
 static int parser_action_row1495[] = {
-       5,
-       -1, 1, 456,
-       12, 0, 1522,
-       46, 0, 1523,
-       95, 0, 48,
-       96, 0, 1524
+       2,
+       -1, 3, 1494,
+       53, 0, 1609
 };
 static int parser_action_row1496[] = {
        1,
-       -1, 1, 377
+       -1, 1, 213
 };
 static int parser_action_row1497[] = {
        1,
-       -1, 1, 376
+       -1, 1, 232
 };
 static int parser_action_row1498[] = {
-       1,
-       -1, 1, 518
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1499[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 1079,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 774
 };
 static int parser_action_row1500[] = {
-       1,
-       -1, 1, 517
+       2,
+       -1, 3, 1499,
+       45, 0, 1611
 };
 static int parser_action_row1501[] = {
-       1,
-       -1, 1, 520
+       2,
+       -1, 3, 1500,
+       53, 0, 1612
 };
 static int parser_action_row1502[] = {
-       2,
-       -1, 3, 1501,
-       95, 0, 1591
+       35,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 886,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       24, 0, 890,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1503[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1504[] = {
-       1,
-       -1, 1, 531
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1505[] = {
-       2,
-       -1, 1, 533,
-       81, 0, 1261
+       1,
+       -1, 1, 944
 };
 static int parser_action_row1506[] = {
        2,
-       -1, 1, 524,
-       80, 0, 1253
+       -1, 1, 157,
+       24, 1, 895
 };
 static int parser_action_row1507[] = {
        2,
-       -1, 1, 525,
-       80, 0, 1253
+       -1, 1, 156,
+       24, 1, 894
 };
 static int parser_action_row1508[] = {
-       2,
-       -1, 1, 526,
-       80, 0, 1253
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1509[] = {
        2,
-       -1, 1, 527,
-       80, 0, 1253
+       -1, 1, 200,
+       24, 1, 931
 };
 static int parser_action_row1510[] = {
        2,
-       -1, 1, 528,
-       80, 0, 1253
+       -1, 1, 192,
+       24, 1, 923
 };
 static int parser_action_row1511[] = {
        2,
-       -1, 1, 529,
-       80, 0, 1253
+       -1, 1, 183,
+       24, 1, 914
 };
 static int parser_action_row1512[] = {
-       2,
-       -1, 1, 530,
-       80, 0, 1253
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1513[] = {
-       2,
-       -1, 1, 535,
-       82, 0, 1262
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 335,
+       59, 0, 1007,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 335,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1514[] = {
-       3,
-       -1, 1, 537,
-       88, 0, 1263,
-       91, 0, 1264
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1515[] = {
-       3,
-       -1, 1, 539,
-       74, 0, 1265,
-       75, 0, 1266
+       40,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 339,
+       58, 0, 215,
+       59, 0, 1012,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 339,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1516[] = {
        3,
-       -1, 1, 540,
-       74, 0, 1265,
-       75, 0, 1266
+       -1, 1, 456,
+       12, 0, 1623,
+       97, 0, 1624
 };
 static int parser_action_row1517[] = {
-       4,
-       -1, 1, 542,
-       76, 0, 1267,
-       78, 0, 1268,
-       79, 0, 1269
+       1,
+       -1, 1, 272
 };
 static int parser_action_row1518[] = {
-       4,
-       -1, 1, 543,
-       76, 0, 1267,
-       78, 0, 1268,
-       79, 0, 1269
+       2,
+       -1, 3, 1517,
+       49, 0, 197
 };
 static int parser_action_row1519[] = {
-       1,
-       -1, 1, 545
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1520[] = {
        1,
-       -1, 1, 546
+       -1, 1, 625
 };
 static int parser_action_row1521[] = {
-       1,
-       -1, 1, 547
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1522[] = {
-       1,
-       -1, 1, 549
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1523[] = {
-       2,
-       -1, 1, 583,
-       52, 0, 265
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1524[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 1083
 };
 static int parser_action_row1525[] = {
-       3,
-       -1, 1, 565,
-       52, 0, 265,
-       58, 0, 206
+       1,
+       -1, 1, 149
 };
 static int parser_action_row1526[] = {
        2,
-       -1, 3, 1525,
-       97, 0, 1596
+       -1, 1, 390,
+       24, 0, 1518
 };
 static int parser_action_row1527[] = {
        2,
-       -1, 1, 453,
-       96, 0, 1597
+       -1, 3, 1526,
+       15, 0, 1630
 };
 static int parser_action_row1528[] = {
-       3,
-       -1, 1, 455,
-       95, 0, 48,
-       96, 0, 1598
+       2,
+       -1, 3, 1527,
+       23, 0, 1631
 };
 static int parser_action_row1529[] = {
-       1,
-       -1, 1, 572
+       2,
+       -1, 1, 797,
+       94, 0, 594
 };
 static int parser_action_row1530[] = {
-       4,
-       -1, 3, 1529,
-       6, 0, 778,
-       17, 0, 779,
-       96, 0, 780
+       1,
+       -1, 1, 807
 };
 static int parser_action_row1531[] = {
-       1,
-       -1, 1, 119
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1532[] = {
        1,
-       -1, 1, 107
+       -1, 1, 568
 };
 static int parser_action_row1533[] = {
-       1,
-       -1, 1, 114
+       2,
+       -1, 3, 1532,
+       73, 0, 1530
 };
 static int parser_action_row1534[] = {
-       25,
-       -1, 3, 1533,
-       41, 0, 1287,
-       47, 0, 384,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 412,
-       96, 0, 647
+       5,
+       -1, 1, 458,
+       12, 0, 1561,
+       46, 0, 1562,
+       96, 0, 53,
+       97, 0, 1563
 };
 static int parser_action_row1535[] = {
        1,
-       -1, 1, 1052
+       -1, 1, 381
 };
 static int parser_action_row1536[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 380
 };
 static int parser_action_row1537[] = {
        1,
-       -1, 1, 128
+       -1, 1, 530
 };
 static int parser_action_row1538[] = {
-       1,
-       -1, 1, 40
+       22,
+       -1, 1, 458,
+       12, 0, 1102,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
 };
 static int parser_action_row1539[] = {
-       2,
-       -1, 3, 1538,
-       95, 0, 1298
+       1,
+       -1, 1, 529
 };
 static int parser_action_row1540[] = {
        1,
-       -1, 1, 35
+       -1, 1, 532
 };
 static int parser_action_row1541[] = {
-       1,
-       -1, 1, 1046
+       2,
+       -1, 3, 1540,
+       96, 0, 1636
 };
 static int parser_action_row1542[] = {
        2,
-       -1, 3, 1541,
-       55, 0, 1604
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1543[] = {
-       23,
-       -1, 3, 1542,
-       54, 0, 627,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 48,
-       96, 0, 647
+       1,
+       -1, 1, 543
 };
 static int parser_action_row1544[] = {
        2,
-       -1, 3, 1543,
-       95, 0, 1606
+       -1, 1, 545,
+       81, 0, 1288
 };
 static int parser_action_row1545[] = {
-       27,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 814,
-       54, 0, 627,
-       57, 0, 815,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 48,
-       96, 0, 647
+       2,
+       -1, 1, 536,
+       80, 0, 1280
 };
 static int parser_action_row1546[] = {
        2,
-       -1, 3, 1545,
-       96, 0, 1609
+       -1, 1, 537,
+       80, 0, 1280
 };
 static int parser_action_row1547[] = {
-       27,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 814,
-       54, 0, 627,
-       57, 0, 815,
-       74, 0, 628,
-       75, 0, 629,
-       76, 0, 630,
-       77, 0, 631,
-       78, 0, 632,
-       79, 0, 633,
-       80, 0, 634,
-       81, 0, 635,
-       82, 0, 636,
-       83, 0, 637,
-       84, 0, 638,
-       85, 0, 639,
-       86, 0, 640,
-       87, 0, 641,
-       88, 0, 642,
-       89, 0, 643,
-       90, 0, 644,
-       91, 0, 645,
-       92, 0, 646,
-       95, 0, 48,
-       96, 0, 647
+       2,
+       -1, 1, 538,
+       80, 0, 1280
 };
 static int parser_action_row1548[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 539,
+       80, 0, 1280
 };
 static int parser_action_row1549[] = {
-       1,
-       -1, 1, 992
+       2,
+       -1, 1, 540,
+       80, 0, 1280
 };
 static int parser_action_row1550[] = {
-       1,
-       -1, 1, 997
+       2,
+       -1, 1, 541,
+       80, 0, 1280
 };
 static int parser_action_row1551[] = {
-       1,
-       -1, 1, 994
+       2,
+       -1, 1, 542,
+       80, 0, 1280
 };
 static int parser_action_row1552[] = {
-       3,
-       -1, 3, 1551,
-       47, 0, 384,
-       95, 0, 385
+       2,
+       -1, 1, 547,
+       82, 0, 1289
 };
 static int parser_action_row1553[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 549,
+       88, 0, 1290,
+       91, 0, 1291
 };
 static int parser_action_row1554[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 551,
+       74, 0, 1292,
+       75, 0, 1293
 };
 static int parser_action_row1555[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 552,
+       74, 0, 1292,
+       75, 0, 1293
 };
 static int parser_action_row1556[] = {
-       13,
-       -1, 1, 743,
-       59, 0, 1617,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       4,
+       -1, 1, 554,
+       76, 0, 1294,
+       78, 0, 1295,
+       79, 0, 1296
 };
 static int parser_action_row1557[] = {
-       13,
-       -1, 1, 734,
-       59, 0, 1619,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       4,
+       -1, 1, 555,
+       76, 0, 1294,
+       78, 0, 1295,
+       79, 0, 1296
 };
 static int parser_action_row1558[] = {
-       14,
-       -1, 1, 746,
-       52, 0, 265,
-       59, 0, 1621,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 557
 };
 static int parser_action_row1559[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 558
 };
 static int parser_action_row1560[] = {
-       13,
-       -1, 1, 757,
-       59, 0, 1625,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 559
 };
 static int parser_action_row1561[] = {
-       2,
-       -1, 1, 789,
-       56, 0, 1353
+       1,
+       -1, 1, 561
 };
 static int parser_action_row1562[] = {
-       15,
-       -1, 1, 750,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 1627,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       2,
+       -1, 1, 595,
+       52, 0, 277
 };
 static int parser_action_row1563[] = {
-       22,
-       -1, 1, 454,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 1630
-};
-static int parser_action_row1564[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1564[] = {
+       3,
+       -1, 1, 577,
+       52, 0, 277,
+       58, 0, 215
+};
 static int parser_action_row1565[] = {
-       1,
-       -1, 1, 359
+       2,
+       -1, 3, 1564,
+       98, 0, 1641
 };
 static int parser_action_row1566[] = {
-       22,
-       -1, 1, 456,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 1, 455,
+       97, 0, 1642
 };
 static int parser_action_row1567[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 457,
+       96, 0, 53,
+       97, 0, 1643
 };
 static int parser_action_row1568[] = {
        1,
-       -1, 1, 766
+       -1, 1, 584
 };
 static int parser_action_row1569[] = {
-       2,
+       4,
        -1, 3, 1568,
-       24, 0, 1634
+       6, 0, 792,
+       17, 0, 793,
+       97, 0, 794
 };
 static int parser_action_row1570[] = {
        1,
-       -1, 1, 926
+       -1, 1, 121
 };
 static int parser_action_row1571[] = {
-       2,
-       -1, 3, 1570,
-       49, 0, 188
+       1,
+       -1, 1, 109
 };
 static int parser_action_row1572[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 116
 };
 static int parser_action_row1573[] = {
-       1,
-       -1, 1, 930
+       25,
+       -1, 3, 1572,
+       41, 0, 1313,
+       47, 0, 396,
+       54, 0, 640,
+       74, 0, 641,
+       75, 0, 642,
+       76, 0, 643,
+       77, 0, 644,
+       78, 0, 645,
+       79, 0, 646,
+       80, 0, 647,
+       81, 0, 648,
+       82, 0, 649,
+       83, 0, 650,
+       84, 0, 651,
+       85, 0, 652,
+       86, 0, 653,
+       87, 0, 654,
+       88, 0, 655,
+       89, 0, 656,
+       90, 0, 657,
+       91, 0, 658,
+       92, 0, 659,
+       96, 0, 424,
+       97, 0, 660
 };
 static int parser_action_row1574[] = {
-       2,
-       -1, 3, 1573,
-       49, 0, 188
+       1,
+       -1, 1, 1069
 };
 static int parser_action_row1575[] = {
-       2,
-       -1, 1, 192,
-       24, 1, 913
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
-static int parser_action_row1576[] = {
-       2,
-       -1, 1, 182,
-       24, 1, 903
+static int parser_action_row1576[] = {
+       1,
+       -1, 1, 130
 };
 static int parser_action_row1577[] = {
-       2,
-       -1, 1, 194,
-       24, 1, 915
+       1,
+       -1, 1, 41
 };
 static int parser_action_row1578[] = {
-       2,
-       -1, 1, 184,
-       24, 1, 905
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1579[] = {
-       25,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 474,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       2,
+       -1, 3, 1578,
+       9, 0, 1649
 };
 static int parser_action_row1580[] = {
-       39,
-       -1, 1, 440,
-       12, 0, 107,
-       22, 0, 108,
-       31, 0, 109,
-       38, 0, 110,
-       40, 0, 111,
-       41, 1, 456,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       48, 0, 116,
-       52, 0, 117,
-       54, 1, 333,
-       59, 0, 1162,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218,
-       73, 1, 333,
-       74, 0, 118,
-       75, 0, 119,
-       83, 0, 120,
-       95, 0, 48,
-       96, 0, 121,
-       97, 1, 456,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1581[] = {
-       1,
-       -1, 1, 267
+       2,
+       -1, 3, 1580,
+       96, 0, 1324
 };
 static int parser_action_row1582[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1061
 };
 static int parser_action_row1583[] = {
-       2,
-       -1, 3, 1582,
-       53, 0, 1641
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row1584[] = {
-       1,
-       -1, 1, 403
+       2,
+       -1, 3, 1583,
+       57, 0, 829
 };
 static int parser_action_row1585[] = {
-       1,
-       -1, 1, 425
+       3,
+       -1, 3, 1584,
+       14, 0, 1654,
+       15, 0, 1655
 };
 static int parser_action_row1586[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 434,
-       27, 0, 435,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row1587[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 155,
+       57, 0, 333
 };
 static int parser_action_row1588[] = {
-       1,
-       -1, 1, 796
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 1659
 };
 static int parser_action_row1589[] = {
-       3,
-       -1, 3, 1588,
-       95, 0, 48,
-       96, 0, 1644
+       5,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       52, 0, 828,
+       57, 0, 829
 };
 static int parser_action_row1590[] = {
-       2,
+       3,
        -1, 3, 1589,
-       97, 0, 1647
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1591[] = {
-       1,
-       -1, 1, 519
+       2,
+       -1, 3, 1590,
+       57, 0, 1665
 };
 static int parser_action_row1592[] = {
        2,
-       -1, 1, 401,
-       94, 0, 195
+       -1, 3, 1591,
+       53, 0, 1666
 };
 static int parser_action_row1593[] = {
        1,
-       -1, 1, 512
+       -1, 1, 671
 };
 static int parser_action_row1594[] = {
        1,
-       -1, 1, 581
+       -1, 1, 690
 };
 static int parser_action_row1595[] = {
-       3,
-       -1, 3, 1594,
-       31, 0, 1649,
-       52, 0, 1650
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1596[] = {
-       1,
-       -1, 1, 563
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1597[] = {
-       1,
-       -1, 1, 561
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1598[] = {
-       2,
-       -1, 1, 569,
-       52, 0, 265
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1599[] = {
-       3,
-       -1, 1, 577,
-       52, 0, 265,
-       58, 0, 206
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1600[] = {
-       2,
-       -1, 1, 454,
-       96, 0, 1653
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1601[] = {
-       56,
-       -1, 1, 456,
-       0, 0, 83,
-       1, 0, 84,
-       12, 0, 107,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 108,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 109,
-       33, 0, 1425,
-       34, 0, 1426,
-       35, 0, 1427,
-       36, 0, 1428,
-       37, 0, 38,
-       38, 0, 110,
-       40, 0, 111,
-       42, 0, 112,
-       43, 0, 113,
-       44, 0, 114,
-       45, 0, 115,
-       47, 0, 384,
-       48, 0, 116,
-       50, 0, 44,
-       51, 0, 1429,
-       52, 0, 1654,
-       54, 0, 606,
-       74, 0, 1431,
-       75, 0, 1432,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 1433,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 1434,
-       98, 0, 122,
-       99, 0, 123,
-       100, 0, 124,
-       101, 0, 125,
-       102, 0, 54,
-       105, 0, 126
+       13,
+       -1, 1, 757,
+       59, 0, 1673,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1602[] = {
-       1,
-       -1, 1, 123
+       25,
+       -1, 1, 458,
+       12, 0, 730,
+       46, 0, 731,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1675
 };
 static int parser_action_row1603[] = {
-       5,
-       -1, 3, 1602,
-       31, 0, 1658,
-       47, 0, 1659,
-       52, 0, 1660,
-       95, 0, 385
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1604[] = {
-       1,
-       -1, 1, 38
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1605[] = {
-       1,
-       -1, 1, 36
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1606[] = {
-       5,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       52, 0, 814,
-       57, 0, 815
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1607[] = {
-       2,
-       -1, 3, 1606,
-       57, 0, 815
+       13,
+       -1, 1, 761,
+       59, 0, 1684,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1608[] = {
-       3,
-       -1, 3, 1607,
-       14, 0, 1664,
-       15, 0, 1665
+       14,
+       -1, 1, 760,
+       52, 0, 277,
+       59, 0, 1686,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1609[] = {
-       5,
-       -1, 1, 474,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       52, 0, 814,
-       57, 0, 815
+       1, 0, 2
 };
 static int parser_action_row1610[] = {
-       2,
-       -1, 1, 153,
-       57, 0, 321
+       1,
+       -1, 1, 363
 };
 static int parser_action_row1611[] = {
-       4,
-       -1, 1, 122,
-       4, 0, 963,
-       14, 0, 964,
-       15, 0, 1669
+       22,
+       -1, 1, 458,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1612[] = {
-       5,
-       -1, 1, 474,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       52, 0, 814,
-       57, 0, 815
+       1, 0, 2
 };
 static int parser_action_row1613[] = {
-       3,
-       -1, 3, 1612,
-       47, 0, 384,
-       95, 0, 385
+       1,
+       -1, 1, 778
 };
 static int parser_action_row1614[] = {
        2,
        -1, 3, 1613,
-       57, 0, 1675
+       24, 0, 1692
 };
 static int parser_action_row1615[] = {
-       2,
-       -1, 3, 1614,
-       53, 0, 1676
+       1,
+       -1, 1, 938
 };
 static int parser_action_row1616[] = {
-       1,
-       -1, 1, 659
+       2,
+       -1, 3, 1615,
+       49, 0, 197
 };
 static int parser_action_row1617[] = {
-       1,
-       -1, 1, 678
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1618[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 942
 };
 static int parser_action_row1619[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1618,
+       49, 0, 197
 };
 static int parser_action_row1620[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 194,
+       24, 1, 925
 };
 static int parser_action_row1621[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 184,
+       24, 1, 915
 };
 static int parser_action_row1622[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 196,
+       24, 1, 927
 };
 static int parser_action_row1623[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 186,
+       24, 1, 917
 };
 static int parser_action_row1624[] = {
-       13,
-       -1, 1, 745,
-       59, 0, 1683,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       25,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 486,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1625[] = {
-       25,
-       -1, 1, 456,
-       12, 0, 716,
-       46, 0, 717,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       95, 0, 48,
-       96, 0, 1685
+       39,
+       -1, 1, 442,
+       12, 0, 116,
+       22, 0, 117,
+       31, 0, 118,
+       38, 0, 119,
+       40, 0, 120,
+       41, 1, 458,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       48, 0, 125,
+       52, 0, 126,
+       54, 1, 337,
+       59, 0, 1187,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227,
+       73, 1, 337,
+       74, 0, 127,
+       75, 0, 128,
+       83, 0, 129,
+       96, 0, 53,
+       97, 0, 130,
+       98, 1, 458,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1626[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 271
 };
 static int parser_action_row1627[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1628[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1627,
+       53, 0, 1699
 };
 static int parser_action_row1629[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 407
 };
 static int parser_action_row1630[] = {
-       13,
-       -1, 1, 749,
-       59, 0, 1694,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 427
 };
 static int parser_action_row1631[] = {
-       14,
-       -1, 1, 748,
-       52, 0, 265,
-       59, 0, 1696,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       25,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 446,
+       27, 0, 447,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1632[] = {
-       2,
-       -1, 3, 1631,
-       53, 0, 1699
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1633[] = {
        1,
-       -1, 1, 687
+       -1, 1, 808
 };
 static int parser_action_row1634[] = {
-       2,
+       3,
        -1, 3, 1633,
-       53, 0, 1700
+       96, 0, 53,
+       97, 0, 1702
 };
 static int parser_action_row1635[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1333,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1634,
+       98, 0, 1705
 };
 static int parser_action_row1636[] = {
-       2,
-       -1, 1, 265,
-       24, 1, 925
+       1,
+       -1, 1, 531
 };
 static int parser_action_row1637[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1638[] = {
-       2,
-       -1, 1, 269,
-       24, 1, 929
+       1,
+       -1, 1, 524
 };
 static int parser_action_row1639[] = {
-       2,
-       -1, 1, 193,
-       24, 1, 914
+       1,
+       -1, 1, 593
 };
 static int parser_action_row1640[] = {
-       2,
-       -1, 1, 183,
-       24, 1, 904
+       3,
+       -1, 3, 1639,
+       31, 0, 1707,
+       52, 0, 1708
 };
 static int parser_action_row1641[] = {
        1,
-       -1, 1, 280
+       -1, 1, 575
 };
 static int parser_action_row1642[] = {
-       2,
-       -1, 1, 401,
-       94, 0, 195
+       1,
+       -1, 1, 573
 };
 static int parser_action_row1643[] = {
-       1,
-       -1, 1, 387
+       2,
+       -1, 1, 581,
+       52, 0, 277
 };
 static int parser_action_row1644[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 589,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1645[] = {
-       3,
-       -1, 1, 586,
-       52, 0, 265,
-       58, 0, 206
+       2,
+       -1, 1, 456,
+       97, 0, 1711
 };
 static int parser_action_row1646[] = {
-       2,
-       -1, 3, 1645,
-       96, 0, 1706
+       57,
+       -1, 1, 458,
+       0, 0, 88,
+       1, 0, 89,
+       12, 0, 116,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 117,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 118,
+       33, 0, 1329,
+       34, 0, 1330,
+       35, 0, 1331,
+       36, 0, 1332,
+       37, 0, 43,
+       38, 0, 119,
+       40, 0, 120,
+       42, 0, 121,
+       43, 0, 122,
+       44, 0, 123,
+       45, 0, 124,
+       47, 0, 396,
+       48, 0, 125,
+       50, 0, 49,
+       51, 0, 1333,
+       52, 0, 1712,
+       54, 0, 619,
+       74, 0, 1335,
+       75, 0, 1336,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 1337,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       95, 0, 90,
+       96, 0, 424,
+       97, 0, 1338,
+       99, 0, 131,
+       100, 0, 132,
+       101, 0, 133,
+       102, 0, 134,
+       103, 0, 59,
+       106, 0, 135
 };
 static int parser_action_row1647[] = {
-       3,
-       -1, 3, 1646,
-       95, 0, 48,
-       96, 0, 1707
+       1,
+       -1, 1, 125
 };
 static int parser_action_row1648[] = {
-       2,
-       -1, 1, 558,
-       73, 1, 561
+       5,
+       -1, 3, 1647,
+       31, 0, 1716,
+       47, 0, 1717,
+       52, 0, 1718,
+       96, 0, 397
 };
 static int parser_action_row1649[] = {
        1,
-       -1, 1, 513
+       -1, 1, 42
 };
 static int parser_action_row1650[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 28
 };
 static int parser_action_row1651[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       2,
+       -1, 3, 1650,
+       9, 0, 1720
 };
 static int parser_action_row1652[] = {
        1,
-       -1, 1, 567
+       -1, 1, 40
 };
 static int parser_action_row1653[] = {
-       1,
-       -1, 1, 575
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 1721
 };
 static int parser_action_row1654[] = {
        2,
-       -1, 1, 573,
-       52, 0, 265
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row1655[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row1656[] = {
-       3,
-       -1, 3, 1655,
-       0, 0, 83,
-       1, 0, 84
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1657[] = {
-       1,
-       -1, 1, 413
+       2,
+       -1, 3, 1656,
+       15, 0, 1729
 };
 static int parser_action_row1658[] = {
        3,
        -1, 3, 1657,
-       0, 0, 83,
-       1, 0, 84
+       14, 0, 1654,
+       15, 0, 1730
 };
 static int parser_action_row1659[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       4,
+       -1, 1, 78,
+       14, 0, 1732,
+       15, 0, 1733,
+       59, 0, 1734
 };
 static int parser_action_row1660[] = {
-       2,
-       -1, 1, 133,
-       95, 0, 590
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1661[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1738
 };
 static int parser_action_row1662[] = {
-       1,
-       -1, 1, 131
+       3,
+       -1, 3, 1661,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1663[] = {
-       4,
-       -1, 1, 122,
-       4, 0, 963,
-       14, 0, 964,
-       15, 0, 1717
+       1,
+       -1, 1, 51
 };
 static int parser_action_row1664[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 955
+       4,
+       -1, 1, 124,
+       4, 0, 977,
+       14, 0, 978,
+       15, 0, 1741
 };
 static int parser_action_row1665[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       2,
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row1666[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1667[] = {
        2,
-       -1, 3, 1666,
-       15, 0, 1725
+       -1, 1, 422,
+       94, 0, 204
 };
 static int parser_action_row1668[] = {
-       3,
-       -1, 3, 1667,
-       14, 0, 1664,
-       15, 0, 1726
+       1,
+       -1, 1, 670
 };
 static int parser_action_row1669[] = {
-       4,
-       -1, 1, 76,
-       14, 0, 1728,
-       15, 0, 1729,
-       59, 0, 1730
+       1,
+       -1, 1, 689
 };
 static int parser_action_row1670[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 661
 };
 static int parser_action_row1671[] = {
-       3,
-       -1, 1, 122,
-       4, 0, 963,
-       15, 0, 1734
+       1,
+       -1, 1, 680
 };
 static int parser_action_row1672[] = {
-       3,
-       -1, 3, 1671,
-       28, 0, 33,
-       108, 0, 56
+       1,
+       -1, 1, 673
 };
 static int parser_action_row1673[] = {
        1,
-       -1, 1, 49
+       -1, 1, 692
 };
 static int parser_action_row1674[] = {
-       4,
-       -1, 1, 122,
-       4, 0, 963,
-       14, 0, 964,
-       15, 0, 1737
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1675[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 955
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1676[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       15,
+       -1, 1, 748,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1750,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1677[] = {
        2,
-       -1, 1, 420,
-       94, 0, 195
+       -1, 3, 1676,
+       98, 0, 1753
 };
 static int parser_action_row1678[] = {
-       1,
-       -1, 1, 658
+       22,
+       -1, 1, 455,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1754
 };
 static int parser_action_row1679[] = {
        1,
-       -1, 1, 677
+       -1, 1, 805
 };
 static int parser_action_row1680[] = {
-       1,
-       -1, 1, 649
+       23,
+       -1, 1, 457,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       96, 0, 53,
+       97, 0, 1755
 };
 static int parser_action_row1681[] = {
        1,
-       -1, 1, 668
+       -1, 1, 678
 };
 static int parser_action_row1682[] = {
        1,
-       -1, 1, 661
+       -1, 1, 697
 };
 static int parser_action_row1683[] = {
        1,
-       -1, 1, 680
+       -1, 1, 677
 };
 static int parser_action_row1684[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 696
 };
 static int parser_action_row1685[] = {
        24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1686[] = {
-       15,
-       -1, 1, 736,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 1746,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1687[] = {
-       2,
-       -1, 3, 1686,
-       97, 0, 1749
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1688[] = {
-       22,
-       -1, 1, 453,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 1750
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1689[] = {
-       1,
-       -1, 1, 793
+       13,
+       -1, 1, 759,
+       59, 0, 1761,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1690[] = {
-       23,
-       -1, 1, 455,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       95, 0, 48,
-       96, 0, 1751
+       2,
+       -1, 3, 1689,
+       53, 0, 1763
 };
 static int parser_action_row1691[] = {
        1,
-       -1, 1, 666
+       -1, 1, 699
 };
 static int parser_action_row1692[] = {
-       1,
-       -1, 1, 685
+       2,
+       -1, 3, 1691,
+       53, 0, 1764
 };
 static int parser_action_row1693[] = {
-       1,
-       -1, 1, 665
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1381,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1694[] = {
-       1,
-       -1, 1, 684
+       2,
+       -1, 1, 269,
+       24, 1, 937
 };
 static int parser_action_row1695[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1696[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 273,
+       24, 1, 941
 };
 static int parser_action_row1697[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 195,
+       24, 1, 926
 };
 static int parser_action_row1698[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 185,
+       24, 1, 916
 };
 static int parser_action_row1699[] = {
-       13,
-       -1, 1, 747,
-       59, 0, 1757,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 284
 };
 static int parser_action_row1700[] = {
-       1,
-       -1, 1, 360
+       2,
+       -1, 1, 405,
+       94, 0, 204
 };
 static int parser_action_row1701[] = {
        1,
-       -1, 1, 767
+       -1, 1, 391
 };
 static int parser_action_row1702[] = {
-       1,
-       -1, 1, 922
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1703[] = {
-       2,
-       -1, 3, 1702,
-       15, 0, 1759
+       3,
+       -1, 1, 598,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1704[] = {
-       1,
-       -1, 1, 408
+       2,
+       -1, 3, 1703,
+       97, 0, 1770
 };
 static int parser_action_row1705[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1704,
+       96, 0, 53,
+       97, 0, 1771
 };
 static int parser_action_row1706[] = {
-       1,
-       -1, 1, 585
+       2,
+       -1, 1, 570,
+       73, 1, 573
 };
 static int parser_action_row1707[] = {
-       2,
-       -1, 1, 588,
-       52, 0, 265
+       1,
+       -1, 1, 525
 };
 static int parser_action_row1708[] = {
        3,
-       -1, 1, 592,
-       52, 0, 265,
-       58, 0, 206
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1709[] = {
-       2,
-       -1, 3, 1708,
-       96, 0, 1763
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1710[] = {
-       2,
-       -1, 3, 1709,
-       45, 0, 1764
+       1,
+       -1, 1, 579
 };
 static int parser_action_row1711[] = {
-       4,
-       -1, 3, 1710,
-       31, 0, 1765,
-       47, 0, 384,
-       95, 0, 385
+       1,
+       -1, 1, 587
 };
 static int parser_action_row1712[] = {
-       1,
-       -1, 1, 571
+       2,
+       -1, 1, 585,
+       52, 0, 277
 };
 static int parser_action_row1713[] = {
-       54,
-       -1, 1, 456,
-       12, 0, 161,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 162,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       31, 0, 163,
-       33, 0, 387,
-       34, 0, 388,
-       35, 0, 389,
-       36, 0, 390,
-       37, 0, 38,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       47, 0, 384,
-       48, 0, 166,
-       50, 0, 44,
-       51, 0, 391,
-       52, 0, 46,
-       54, 0, 392,
-       74, 0, 393,
-       75, 0, 394,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 402,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       94, 0, 195,
-       95, 0, 412,
-       96, 0, 413,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1714[] = {
-       1,
-       -1, 1, 414
+       4,
+       -1, 3, 1713,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row1715[] = {
        1,
-       -1, 1, 417
+       -1, 1, 415
 };
 static int parser_action_row1716[] = {
-       2,
+       4,
        -1, 3, 1715,
-       47, 0, 1768
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
 };
 static int parser_action_row1717[] = {
-       4,
-       -1, 3, 1716,
-       31, 0, 1769,
-       47, 0, 1770,
-       95, 0, 385
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1718[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 135,
+       96, 0, 603
 };
 static int parser_action_row1719[] = {
        3,
-       -1, 1, 122,
-       4, 0, 963,
-       15, 0, 1773
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1720[] = {
-       3,
-       -1, 3, 1719,
-       28, 0, 33,
-       108, 0, 56
+       1,
+       -1, 1, 133
 };
 static int parser_action_row1721[] = {
        1,
-       -1, 1, 48
+       -1, 1, 29
 };
 static int parser_action_row1722[] = {
-       1,
-       -1, 1, 67
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1723[] = {
-       1,
-       -1, 1, 77
+       3,
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1782
 };
 static int parser_action_row1724[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 3, 1723,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1725[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       1,
+       -1, 1, 50
 };
 static int parser_action_row1726[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 69
 };
 static int parser_action_row1727[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 79
 };
 static int parser_action_row1728[] = {
-       2,
-       -1, 3, 1727,
-       15, 0, 1780
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1729[] = {
-       4,
-       -1, 1, 28,
-       0, 0, 83,
-       1, 0, 84,
-       13, 0, 26
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1730[] = {
-       33,
-       -1, 1, 456,
+       34,
+       -1, 1, 458,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1731[] = {
-       3,
-       -1, 1, 474,
+       34,
+       -1, 1, 458,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1732[] = {
-       1,
-       -1, 1, 57
+       2,
+       -1, 3, 1731,
+       15, 0, 1789
 };
 static int parser_action_row1733[] = {
-       2,
-       -1, 3, 1732,
-       15, 0, 1785
+       5,
+       -1, 1, 30,
+       0, 0, 88,
+       1, 0, 89,
+       13, 0, 32,
+       95, 0, 90
 };
 static int parser_action_row1734[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1735[] = {
-       33,
-       -1, 1, 456,
+       3,
+       -1, 1, 487,
        0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1, 0, 2
 };
 static int parser_action_row1736[] = {
-       3,
-       -1, 3, 1735,
-       28, 0, 33,
-       108, 0, 56
+       1,
+       -1, 1, 59
 };
 static int parser_action_row1737[] = {
-       1,
-       -1, 1, 68
+       2,
+       -1, 3, 1736,
+       15, 0, 1794
 };
 static int parser_action_row1738[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1739[] = {
-       3,
-       -1, 1, 122,
-       4, 0, 963,
-       15, 0, 1790
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1740[] = {
        3,
        -1, 3, 1739,
-       28, 0, 33,
-       108, 0, 56
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1741[] = {
        1,
-       -1, 1, 50
+       -1, 1, 70
 };
 static int parser_action_row1742[] = {
-       1,
-       -1, 1, 41
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1743[] = {
-       1,
-       -1, 1, 1004
+       3,
+       -1, 1, 124,
+       4, 0, 977,
+       15, 0, 1799
 };
 static int parser_action_row1744[] = {
-       1,
-       -1, 1, 421
+       3,
+       -1, 3, 1743,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1745[] = {
        1,
-       -1, 1, 660
+       -1, 1, 52
 };
 static int parser_action_row1746[] = {
        1,
-       -1, 1, 679
+       -1, 1, 43
 };
 static int parser_action_row1747[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 1016
 };
 static int parser_action_row1748[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 423
 };
 static int parser_action_row1749[] = {
-       13,
-       -1, 1, 735,
-       59, 0, 1795,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 672
 };
 static int parser_action_row1750[] = {
-       13,
-       -1, 1, 733,
-       59, 0, 1797,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 691
 };
 static int parser_action_row1751[] = {
-       14,
-       -1, 1, 738,
-       52, 0, 265,
-       59, 0, 1799,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1752[] = {
-       15,
-       -1, 1, 742,
-       52, 0, 265,
-       58, 0, 206,
-       59, 0, 1802,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1753[] = {
-       22,
-       -1, 1, 454,
-       54, 0, 606,
-       74, 0, 607,
-       75, 0, 608,
-       76, 0, 395,
-       77, 0, 396,
-       78, 0, 397,
-       79, 0, 398,
-       80, 0, 399,
-       81, 0, 400,
-       82, 0, 401,
-       83, 0, 609,
-       84, 0, 403,
-       85, 0, 404,
-       86, 0, 405,
-       87, 0, 406,
-       88, 0, 407,
-       89, 0, 408,
-       90, 0, 409,
-       91, 0, 410,
-       92, 0, 411,
-       96, 0, 1805
+       13,
+       -1, 1, 747,
+       59, 0, 1804,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1754[] = {
-       1,
-       -1, 1, 664
+       13,
+       -1, 1, 745,
+       59, 0, 1806,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1755[] = {
-       1,
-       -1, 1, 683
+       14,
+       -1, 1, 750,
+       52, 0, 277,
+       59, 0, 1808,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1756[] = {
-       1,
-       -1, 1, 663
+       15,
+       -1, 1, 754,
+       52, 0, 277,
+       58, 0, 215,
+       59, 0, 1811,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1757[] = {
-       1,
-       -1, 1, 682
+       22,
+       -1, 1, 456,
+       54, 0, 619,
+       74, 0, 620,
+       75, 0, 621,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 622,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       97, 0, 1814
 };
 static int parser_action_row1758[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 676
 };
 static int parser_action_row1759[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 695
 };
 static int parser_action_row1760[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 1013,
-       12, 0, 873,
-       15, 0, 874,
-       16, 0, 28,
-       22, 0, 875,
-       25, 0, 877,
-       26, 0, 878,
-       27, 0, 879,
-       33, 0, 880,
-       34, 0, 881,
-       35, 0, 882,
-       36, 0, 883,
-       37, 0, 884,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 885,
-       51, 0, 886,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 887,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 675
 };
 static int parser_action_row1761[] = {
-       2,
-       -1, 3, 1760,
-       24, 0, 1810
+       1,
+       -1, 1, 694
 };
 static int parser_action_row1762[] = {
-       1,
-       -1, 1, 587
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1763[] = {
-       1,
-       -1, 1, 591
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1764[] = {
-       2,
-       -1, 1, 590,
-       52, 0, 265
+       1,
+       -1, 1, 364
 };
 static int parser_action_row1765[] = {
        1,
-       -1, 1, 595
+       -1, 1, 779
 };
 static int parser_action_row1766[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 934
 };
 static int parser_action_row1767[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
-};
-static int parser_action_row1768[] = {
        2,
-       -1, 3, 1767,
-       53, 0, 1814
+       -1, 3, 1766,
+       15, 0, 1817
 };
-static int parser_action_row1769[] = {
+static int parser_action_row1768[] = {
        1,
-       -1, 1, 135
+       -1, 1, 411
 };
-static int parser_action_row1770[] = {
+static int parser_action_row1769[] = {
        3,
-       -1, 1, 474,
+       -1, 1, 487,
        0, 0, 1,
        1, 0, 2
 };
+static int parser_action_row1770[] = {
+       1,
+       -1, 1, 597
+};
 static int parser_action_row1771[] = {
-       4,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2,
-       95, 0, 590
+       2,
+       -1, 1, 600,
+       52, 0, 277
 };
 static int parser_action_row1772[] = {
        3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       -1, 1, 604,
+       52, 0, 277,
+       58, 0, 215
 };
 static int parser_action_row1773[] = {
        2,
-       -1, 1, 467,
-       9, 0, 1294
+       -1, 3, 1772,
+       97, 0, 1821
 };
 static int parser_action_row1774[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1773,
+       45, 0, 1822
 };
 static int parser_action_row1775[] = {
-       3,
+       4,
        -1, 3, 1774,
-       28, 0, 33,
-       108, 0, 56
+       31, 0, 1823,
+       47, 0, 396,
+       96, 0, 397
 };
 static int parser_action_row1776[] = {
        1,
-       -1, 1, 55
+       -1, 1, 583
 };
 static int parser_action_row1777[] = {
-       1,
-       -1, 1, 78
+       54,
+       -1, 1, 458,
+       12, 0, 170,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 171,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       31, 0, 172,
+       33, 0, 399,
+       34, 0, 400,
+       35, 0, 401,
+       36, 0, 402,
+       37, 0, 43,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       47, 0, 396,
+       48, 0, 175,
+       50, 0, 49,
+       51, 0, 403,
+       52, 0, 51,
+       54, 0, 404,
+       74, 0, 405,
+       75, 0, 406,
+       76, 0, 407,
+       77, 0, 408,
+       78, 0, 409,
+       79, 0, 410,
+       80, 0, 411,
+       81, 0, 412,
+       82, 0, 413,
+       83, 0, 414,
+       84, 0, 415,
+       85, 0, 416,
+       86, 0, 417,
+       87, 0, 418,
+       88, 0, 419,
+       89, 0, 420,
+       90, 0, 421,
+       91, 0, 422,
+       92, 0, 423,
+       94, 0, 204,
+       96, 0, 424,
+       97, 0, 425,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1778[] = {
        1,
-       -1, 1, 63
+       -1, 1, 416
 };
 static int parser_action_row1779[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       1,
+       -1, 1, 419
 };
 static int parser_action_row1780[] = {
        2,
-       -1, 1, 467,
-       9, 0, 1294
+       -1, 3, 1779,
+       47, 0, 1826
 };
 static int parser_action_row1781[] = {
-       33,
-       -1, 1, 456,
-       0, 0, 1,
-       1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       4,
+       -1, 3, 1780,
+       31, 0, 1827,
+       47, 0, 1828,
+       96, 0, 397
 };
 static int parser_action_row1782[] = {
        2,
-       -1, 1, 74,
-       15, 1, 77
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1783[] = {
-       3,
-       -1, 1, 474,
+       34,
+       -1, 1, 458,
        0, 0, 1,
-       1, 0, 2
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1784[] = {
-       2,
-       -1, 1, 59,
-       9, 0, 1825
+       3,
+       -1, 3, 1783,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1785[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 57
 };
 static int parser_action_row1786[] = {
-       33,
-       -1, 1, 456,
+       5,
+       -1, 1, 485,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       15, 1, 80,
+       95, 0, 3
 };
 static int parser_action_row1787[] = {
        1,
-       -1, 1, 51
+       -1, 1, 65
 };
 static int parser_action_row1788[] = {
        2,
-       -1, 1, 467,
-       9, 0, 1294
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1789[] = {
-       1,
-       -1, 1, 70
-};
-static int parser_action_row1790[] = {
        2,
-       -1, 1, 467,
-       9, 0, 1294
+       -1, 1, 469,
+       9, 0, 1320
 };
-static int parser_action_row1791[] = {
-       33,
-       -1, 1, 456,
+static int parser_action_row1790[] = {
+       34,
+       -1, 1, 458,
        0, 0, 1,
        1, 0, 2,
-       9, 0, 576,
-       12, 0, 25,
-       15, 0, 27,
-       16, 0, 28,
-       22, 0, 29,
-       25, 0, 30,
-       26, 0, 31,
-       27, 0, 32,
-       33, 0, 34,
-       34, 0, 35,
-       35, 0, 36,
-       36, 0, 37,
-       37, 0, 38,
-       38, 0, 39,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       50, 0, 44,
-       51, 0, 45,
-       52, 0, 46,
-       54, 0, 47,
-       95, 0, 48,
-       96, 0, 49,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1791[] = {
+       2,
+       -1, 1, 76,
+       15, 1, 79
 };
 static int parser_action_row1792[] = {
-       3,
-       -1, 3, 1791,
-       28, 0, 33,
-       108, 0, 56
+       4,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       95, 0, 3
 };
 static int parser_action_row1793[] = {
-       1,
-       -1, 1, 69
+       2,
+       -1, 1, 61,
+       9, 0, 1837
 };
 static int parser_action_row1794[] = {
-       1,
-       -1, 1, 651
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1795[] = {
-       1,
-       -1, 1, 670
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1796[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 53
 };
 static int parser_action_row1797[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1798[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 72
 };
 static int parser_action_row1799[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1800[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 589,
+       12, 0, 31,
+       15, 0, 33,
+       16, 0, 34,
+       22, 0, 35,
+       25, 0, 36,
+       26, 0, 37,
+       27, 0, 38,
+       33, 0, 39,
+       34, 0, 40,
+       35, 0, 41,
+       36, 0, 42,
+       37, 0, 43,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 49,
+       51, 0, 50,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 54,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1801[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       3,
+       -1, 3, 1800,
+       28, 0, 84,
+       109, 0, 85
 };
 static int parser_action_row1802[] = {
-       13,
-       -1, 1, 737,
-       59, 0, 1838,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 71
 };
 static int parser_action_row1803[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 663
 };
 static int parser_action_row1804[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 682
 };
 static int parser_action_row1805[] = {
-       13,
-       -1, 1, 741,
-       59, 0, 1842,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1806[] = {
-       14,
-       -1, 1, 740,
-       52, 0, 265,
-       59, 0, 1844,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1807[] = {
-       1,
-       -1, 1, 662
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1808[] = {
-       1,
-       -1, 1, 681
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1809[] = {
-       1,
-       -1, 1, 928
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1810[] = {
-       2,
-       -1, 3, 1809,
-       49, 0, 188
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1811[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       13,
+       -1, 1, 749,
+       59, 0, 1850,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1812[] = {
-       1,
-       -1, 1, 589
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1813[] = {
-       2,
-       -1, 3, 1812,
-       45, 0, 1849
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1814[] = {
-       2,
-       -1, 3, 1813,
-       53, 0, 1850
+       13,
+       -1, 1, 753,
+       59, 0, 1854,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1815[] = {
-       4,
-       -1, 3, 1814,
-       0, 0, 83,
-       1, 0, 84,
-       94, 0, 195
+       14,
+       -1, 1, 752,
+       52, 0, 277,
+       59, 0, 1856,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1816[] = {
-       2,
-       -1, 3, 1815,
-       47, 0, 1853
+       1,
+       -1, 1, 674
 };
 static int parser_action_row1817[] = {
-       2,
-       -1, 3, 1816,
-       53, 0, 1854
+       1,
+       -1, 1, 693
 };
 static int parser_action_row1818[] = {
-       2,
-       -1, 3, 1817,
-       53, 0, 1855
+       34,
+       -1, 1, 458,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1035,
+       12, 0, 887,
+       15, 0, 888,
+       16, 0, 34,
+       22, 0, 889,
+       25, 0, 891,
+       26, 0, 892,
+       27, 0, 893,
+       33, 0, 894,
+       34, 0, 895,
+       35, 0, 896,
+       36, 0, 897,
+       37, 0, 898,
+       38, 0, 44,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       50, 0, 899,
+       51, 0, 900,
+       52, 0, 51,
+       54, 0, 52,
+       95, 0, 3,
+       96, 0, 53,
+       97, 0, 901,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1819[] = {
-       1,
-       -1, 1, 46
+       2,
+       -1, 3, 1818,
+       24, 0, 1861
 };
 static int parser_action_row1820[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       1,
+       -1, 1, 599
 };
 static int parser_action_row1821[] = {
        1,
-       -1, 1, 56
+       -1, 1, 603
 };
 static int parser_action_row1822[] = {
-       1,
-       -1, 1, 65
+       2,
+       -1, 1, 602,
+       52, 0, 277
 };
 static int parser_action_row1823[] = {
        1,
-       -1, 1, 64
+       -1, 1, 607
 };
 static int parser_action_row1824[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1825[] = {
-       2,
-       -1, 1, 78,
-       9, 0, 1401
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1826[] = {
-       1,
-       -1, 1, 61
+       2,
+       -1, 3, 1825,
+       53, 0, 1865
 };
 static int parser_action_row1827[] = {
-       2,
-       -1, 1, 76,
-       14, 0, 955
+       1,
+       -1, 1, 137
 };
 static int parser_action_row1828[] = {
-       2,
-       -1, 1, 60,
-       9, 0, 1859
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1829[] = {
-       1,
-       -1, 1, 53
+       4,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2,
+       96, 0, 603
 };
 static int parser_action_row1830[] = {
-       1,
-       -1, 1, 52
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1831[] = {
-       2,
-       -1, 1, 467,
-       9, 0, 1294
+       1,
+       -1, 1, 48
 };
 static int parser_action_row1832[] = {
-       1,
-       -1, 1, 71
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1833[] = {
        1,
-       -1, 1, 650
+       -1, 1, 58
 };
 static int parser_action_row1834[] = {
        1,
-       -1, 1, 669
+       -1, 1, 67
 };
 static int parser_action_row1835[] = {
        1,
-       -1, 1, 648
+       -1, 1, 66
 };
 static int parser_action_row1836[] = {
-       1,
-       -1, 1, 667
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1837[] = {
-       1,
-       -1, 1, 653
+       6,
+       -1, 1, 485,
+       0, 0, 1,
+       1, 0, 2,
+       9, 0, 1451,
+       15, 1, 80,
+       95, 0, 3
 };
 static int parser_action_row1838[] = {
        1,
-       -1, 1, 672
+       -1, 1, 63
 };
 static int parser_action_row1839[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 78,
+       14, 0, 969
 };
 static int parser_action_row1840[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 62,
+       9, 0, 1872
 };
 static int parser_action_row1841[] = {
        1,
-       -1, 1, 657
+       -1, 1, 55
 };
 static int parser_action_row1842[] = {
        1,
-       -1, 1, 676
+       -1, 1, 54
 };
 static int parser_action_row1843[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 1, 469,
+       9, 0, 1320
 };
 static int parser_action_row1844[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 73
 };
 static int parser_action_row1845[] = {
-       26,
-       -1, 1, 506,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       41, 1, 456,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       97, 1, 456,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 662
 };
 static int parser_action_row1846[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       1,
+       -1, 1, 681
 };
 static int parser_action_row1847[] = {
-       13,
-       -1, 1, 739,
-       59, 0, 1867,
-       60, 0, 208,
-       61, 0, 209,
-       62, 0, 210,
-       63, 0, 211,
-       64, 0, 212,
-       65, 0, 213,
-       66, 0, 214,
-       67, 0, 215,
-       68, 0, 216,
-       69, 0, 217,
-       70, 0, 218
+       1,
+       -1, 1, 660
 };
 static int parser_action_row1848[] = {
-       2,
-       -1, 1, 267,
-       24, 1, 927
+       1,
+       -1, 1, 679
 };
 static int parser_action_row1849[] = {
-       23,
-       -1, 1, 456,
-       12, 0, 1079,
-       22, 0, 1080,
-       31, 0, 1081,
-       38, 0, 1082,
-       40, 0, 1083,
-       42, 0, 1084,
-       43, 0, 1085,
-       44, 0, 1086,
-       45, 0, 1087,
-       48, 0, 1088,
-       52, 0, 46,
-       74, 0, 1089,
-       75, 0, 1090,
-       83, 0, 1091,
-       95, 0, 48,
-       96, 0, 1092,
-       98, 0, 1093,
-       99, 0, 1094,
-       100, 0, 1095,
-       101, 0, 1096,
-       102, 0, 54,
-       105, 0, 1097
+       1,
+       -1, 1, 665
 };
 static int parser_action_row1850[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 684
 };
 static int parser_action_row1851[] = {
-       1,
-       -1, 1, 593
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1852[] = {
-       3,
-       -1, 3, 1851,
-       0, 0, 83,
-       1, 0, 84
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1853[] = {
        1,
-       -1, 1, 415
+       -1, 1, 669
 };
 static int parser_action_row1854[] = {
-       3,
-       -1, 1, 474,
-       0, 0, 1,
-       1, 0, 2
+       1,
+       -1, 1, 688
 };
 static int parser_action_row1855[] = {
-       1,
-       -1, 1, 132
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1856[] = {
-       1,
-       -1, 1, 130
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1857[] = {
-       1,
-       -1, 1, 47
+       26,
+       -1, 1, 518,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       41, 1, 458,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       98, 1, 458,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1858[] = {
-       1,
-       -1, 1, 66
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
 };
 static int parser_action_row1859[] = {
-       1,
-       -1, 1, 58
+       13,
+       -1, 1, 751,
+       59, 0, 1880,
+       60, 0, 217,
+       61, 0, 218,
+       62, 0, 219,
+       63, 0, 220,
+       64, 0, 221,
+       65, 0, 222,
+       66, 0, 223,
+       67, 0, 224,
+       68, 0, 225,
+       69, 0, 226,
+       70, 0, 227
 };
 static int parser_action_row1860[] = {
        1,
-       -1, 1, 62
+       -1, 1, 940
 };
 static int parser_action_row1861[] = {
-       1,
-       -1, 1, 54
+       2,
+       -1, 3, 1860,
+       49, 0, 197
 };
 static int parser_action_row1862[] = {
-       1,
-       -1, 1, 652
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
 };
 static int parser_action_row1863[] = {
        1,
-       -1, 1, 671
+       -1, 1, 601
 };
 static int parser_action_row1864[] = {
-       1,
-       -1, 1, 656
+       2,
+       -1, 3, 1863,
+       45, 0, 1884
 };
 static int parser_action_row1865[] = {
-       1,
-       -1, 1, 675
+       2,
+       -1, 3, 1864,
+       53, 0, 1885
 };
 static int parser_action_row1866[] = {
-       1,
-       -1, 1, 655
+       5,
+       -1, 3, 1865,
+       0, 0, 88,
+       1, 0, 89,
+       94, 0, 204,
+       95, 0, 90
 };
 static int parser_action_row1867[] = {
-       1,
-       -1, 1, 674
+       2,
+       -1, 3, 1866,
+       47, 0, 1888
 };
 static int parser_action_row1868[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1867,
+       53, 0, 1889
 };
 static int parser_action_row1869[] = {
-       24,
-       -1, 1, 456,
-       12, 0, 161,
-       22, 0, 162,
-       31, 0, 163,
-       38, 0, 164,
-       40, 0, 165,
-       42, 0, 40,
-       43, 0, 41,
-       44, 0, 42,
-       45, 0, 43,
-       48, 0, 166,
-       52, 0, 46,
-       54, 0, 47,
-       74, 0, 167,
-       75, 0, 168,
-       83, 0, 169,
-       95, 0, 48,
-       96, 0, 170,
-       98, 0, 50,
-       99, 0, 51,
-       100, 0, 52,
-       101, 0, 53,
-       102, 0, 54,
-       105, 0, 55
+       2,
+       -1, 3, 1868,
+       53, 0, 1890
 };
 static int parser_action_row1870[] = {
        1,
-       -1, 1, 515
+       -1, 1, 49
 };
 static int parser_action_row1871[] = {
-       2,
-       -1, 3, 1870,
-       53, 0, 1875
+       1,
+       -1, 1, 68
 };
 static int parser_action_row1872[] = {
        1,
-       -1, 1, 416
+       -1, 1, 60
 };
 static int parser_action_row1873[] = {
-       2,
-       -1, 3, 1872,
-       53, 0, 1876
+       1,
+       -1, 1, 64
 };
 static int parser_action_row1874[] = {
        1,
-       -1, 1, 654
+       -1, 1, 56
 };
 static int parser_action_row1875[] = {
        1,
-       -1, 1, 673
+       -1, 1, 664
 };
 static int parser_action_row1876[] = {
        1,
-       -1, 1, 594
+       -1, 1, 683
 };
 static int parser_action_row1877[] = {
        1,
+       -1, 1, 668
+};
+static int parser_action_row1878[] = {
+       1,
+       -1, 1, 687
+};
+static int parser_action_row1879[] = {
+       1,
+       -1, 1, 667
+};
+static int parser_action_row1880[] = {
+       1,
+       -1, 1, 686
+};
+static int parser_action_row1881[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1882[] = {
+       24,
+       -1, 1, 458,
+       12, 0, 170,
+       22, 0, 171,
+       31, 0, 172,
+       38, 0, 173,
+       40, 0, 174,
+       42, 0, 45,
+       43, 0, 46,
+       44, 0, 47,
+       45, 0, 48,
+       48, 0, 175,
+       52, 0, 51,
+       54, 0, 52,
+       74, 0, 176,
+       75, 0, 177,
+       83, 0, 178,
+       96, 0, 53,
+       97, 0, 179,
+       99, 0, 55,
+       100, 0, 56,
+       101, 0, 57,
+       102, 0, 58,
+       103, 0, 59,
+       106, 0, 60
+};
+static int parser_action_row1883[] = {
+       2,
+       -1, 1, 271,
+       24, 1, 939
+};
+static int parser_action_row1884[] = {
+       23,
+       -1, 1, 458,
+       12, 0, 1102,
+       22, 0, 1103,
+       31, 0, 1104,
+       38, 0, 1105,
+       40, 0, 1106,
+       42, 0, 1107,
+       43, 0, 1108,
+       44, 0, 1109,
+       45, 0, 1110,
+       48, 0, 1111,
+       52, 0, 51,
+       74, 0, 1112,
+       75, 0, 1113,
+       83, 0, 1114,
+       96, 0, 53,
+       97, 0, 1115,
+       99, 0, 1116,
+       100, 0, 1117,
+       101, 0, 1118,
+       102, 0, 1119,
+       103, 0, 59,
+       106, 0, 1120
+};
+static int parser_action_row1885[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1886[] = {
+       1,
+       -1, 1, 605
+};
+static int parser_action_row1887[] = {
+       4,
+       -1, 3, 1886,
+       0, 0, 88,
+       1, 0, 89,
+       95, 0, 90
+};
+static int parser_action_row1888[] = {
+       1,
+       -1, 1, 417
+};
+static int parser_action_row1889[] = {
+       3,
+       -1, 1, 487,
+       0, 0, 1,
+       1, 0, 2
+};
+static int parser_action_row1890[] = {
+       1,
        -1, 1, 134
 };
+static int parser_action_row1891[] = {
+       1,
+       -1, 1, 132
+};
+static int parser_action_row1892[] = {
+       1,
+       -1, 1, 666
+};
+static int parser_action_row1893[] = {
+       1,
+       -1, 1, 685
+};
+static int parser_action_row1894[] = {
+       1,
+       -1, 1, 527
+};
+static int parser_action_row1895[] = {
+       2,
+       -1, 3, 1894,
+       53, 0, 1897
+};
+static int parser_action_row1896[] = {
+       1,
+       -1, 1, 418
+};
+static int parser_action_row1897[] = {
+       2,
+       -1, 3, 1896,
+       53, 0, 1898
+};
+static int parser_action_row1898[] = {
+       1,
+       -1, 1, 606
+};
+static int parser_action_row1899[] = {
+       1,
+       -1, 1, 136
+};
 
 const int* const parser_action_table[] = {
        parser_action_row1,
@@ -22174,200 +22446,223 @@ const int* const parser_action_table[] = {
        parser_action_row1874,
        parser_action_row1875,
        parser_action_row1876,
-       parser_action_row1877
+       parser_action_row1877,
+       parser_action_row1878,
+       parser_action_row1879,
+       parser_action_row1880,
+       parser_action_row1881,
+       parser_action_row1882,
+       parser_action_row1883,
+       parser_action_row1884,
+       parser_action_row1885,
+       parser_action_row1886,
+       parser_action_row1887,
+       parser_action_row1888,
+       parser_action_row1889,
+       parser_action_row1890,
+       parser_action_row1891,
+       parser_action_row1892,
+       parser_action_row1893,
+       parser_action_row1894,
+       parser_action_row1895,
+       parser_action_row1896,
+       parser_action_row1897,
+       parser_action_row1898,
+       parser_action_row1899
 };
 
 static int parser_goto_row1[] = {
        1,
-       -1, 3
+       -1, 4
 };
 static int parser_goto_row2[] = {
        1,
-       -1, 4
+       -1, 5
 };
 static int parser_goto_row3[] = {
        3,
-       -1, 5,
-       15, 86,
-       22, 86
+       -1, 6,
+       18, 92,
+       28, 92
 };
 static int parser_goto_row4[] = {
        9,
-       -1, 6,
-       17, 94,
-       24, 94,
-       89, 94,
-       93, 94,
-       103, 94,
-       105, 94,
-       256, 94,
-       262, 94
+       -1, 7,
+       20, 100,
+       30, 100,
+       95, 100,
+       99, 100,
+       112, 100,
+       114, 100,
+       265, 100,
+       274, 100
 };
 static int parser_goto_row5[] = {
        16,
-       -1, 7,
-       4, 20,
-       15, 87,
-       16, 90,
-       17, 95,
-       22, 101,
-       23, 104,
-       24, 106,
-       88, 255,
-       89, 257,
-       93, 259,
-       102, 261,
-       103, 263,
-       105, 264,
-       256, 487,
-       262, 489
+       -1, 8,
+       5, 26,
+       18, 93,
+       19, 96,
+       20, 101,
+       28, 110,
+       29, 113,
+       30, 115,
+       94, 264,
+       95, 266,
+       99, 268,
+       111, 273,
+       112, 275,
+       114, 276,
+       265, 500,
+       274, 503
 };
 static int parser_goto_row6[] = {
        1,
-       -1, 8
+       -1, 9
 };
 static int parser_goto_row7[] = {
        1,
-       -1, 9
+       -1, 10
 };
 static int parser_goto_row8[] = {
-       10,
-       -1, 775,
-       12, 57,
-       21, 100,
-       92, 258,
-       96, 258,
-       195, 379,
-       581, 772,
-       1144, 1305,
-       1277, 1402,
-       1309, 1305
+       9,
+       -1, 789,
+       13, 61,
+       27, 109,
+       98, 267,
+       204, 391,
+       594, 786,
+       993, 1165,
+       1169, 1165,
+       1303, 1450
 };
 static int parser_goto_row9[] = {
        1,
-       -1, 457
+       -1, 469
 };
 static int parser_goto_row10[] = {
        1,
-       -1, 972
+       -1, 1325
 };
 static int parser_goto_row11[] = {
        2,
-       -1, 1420,
-       1422, 1540
+       -1, 1470,
+       1471, 1581
 };
 static int parser_goto_row12[] = {
        2,
-       -1, 1299,
-       1538, 1603
+       -1, 1326,
+       1580, 1651
 };
 static int parser_goto_row13[] = {
        2,
-       -1, 1138,
-       1145, 1307
+       -1, 986,
+       994, 1167
 };
 static int parser_goto_row14[] = {
-       2,
-       -1, 1139,
-       1142, 1302
+       4,
+       -1, 987,
+       990, 1162,
+       1468, 1578,
+       1579, 1650
 };
 static int parser_goto_row15[] = {
        2,
-       -1, 1140,
-       1145, 1308
+       -1, 988,
+       994, 1168
 };
 static int parser_goto_row16[] = {
        1,
-       -1, 1141
+       -1, 989
 };
 static int parser_goto_row17[] = {
        6,
-       -1, 956,
-       811, 959,
-       1663, 1721,
-       1668, 1731,
-       1674, 1741,
-       1826, 1858
+       -1, 970,
+       825, 973,
+       1653, 1725,
+       1658, 1735,
+       1664, 1745,
+       1838, 1871
 };
 static int parser_goto_row18[] = {
        7,
-       -1, 966,
-       1607, 1666,
-       1610, 1670,
-       1662, 1718,
-       1667, 1727,
-       1668, 1732,
-       1673, 1738
+       -1, 980,
+       1584, 1656,
+       1587, 1660,
+       1652, 1722,
+       1657, 1731,
+       1658, 1736,
+       1663, 1742
 };
 static int parser_goto_row19[] = {
        8,
-       -1, 231,
-       100, 260,
-       258, 488,
-       379, 586,
-       772, 922,
-       775, 926,
-       1305, 1424,
-       1402, 1529
+       -1, 240,
+       109, 272,
+       267, 501,
+       391, 599,
+       786, 936,
+       789, 940,
+       1165, 1328,
+       1450, 1568
 };
 static int parser_goto_row20[] = {
        4,
-       -1, 648,
-       650, 820,
-       651, 821,
-       822, 970
+       -1, 661,
+       663, 834,
+       664, 835,
+       836, 984
 };
 static int parser_goto_row21[] = {
        6,
-       -1, 816,
-       1544, 1607,
-       1546, 1610,
-       1605, 1662,
-       1608, 1667,
-       1611, 1673
+       -1, 830,
+       1474, 1584,
+       1476, 1587,
+       1582, 1652,
+       1585, 1657,
+       1588, 1663
 };
 static int parser_goto_row22[] = {
        1,
-       -1, 1127
+       -1, 1149
 };
 static int parser_goto_row23[] = {
        2,
-       -1, 1284,
-       1286, 1409
+       -1, 1310,
+       1312, 1458
 };
 static int parser_goto_row24[] = {
        2,
-       -1, 1128,
-       1408, 1532
+       -1, 1150,
+       1457, 1571
 };
 static int parser_goto_row25[] = {
        8,
-       -1, 967,
-       966, 1135,
-       1610, 1671,
-       1662, 1719,
-       1670, 1735,
-       1673, 1739,
-       1718, 1774,
-       1738, 1791
+       -1, 981,
+       980, 1157,
+       1587, 1661,
+       1652, 1723,
+       1660, 1739,
+       1663, 1743,
+       1722, 1783,
+       1742, 1800
 };
 static int parser_goto_row26[] = {
        2,
-       -1, 1412,
-       1413, 1534
+       -1, 1461,
+       1462, 1573
 };
 static int parser_goto_row27[] = {
        2,
-       -1, 1288,
-       1533, 1601
+       -1, 1314,
+       1572, 1646
 };
 static int parser_goto_row28[] = {
        1,
-       -1, 1289
+       -1, 1315
 };
 static int parser_goto_row29[] = {
        1,
-       -1, 1290
+       -1, 1316
 };
 static int parser_goto_row30[] = {
        1,
@@ -22375,20 +22670,21 @@ static int parser_goto_row30[] = {
 };
 static int parser_goto_row31[] = {
        1,
-       -1, 58
+       -1, 86
 };
 static int parser_goto_row32[] = {
-       10,
-       -1, 59,
-       967, 1136,
-       972, 1142,
-       1135, 1297,
-       1671, 1736,
-       1719, 1775,
-       1735, 1788,
-       1739, 1792,
-       1774, 1820,
-       1791, 1831
+       11,
+       -1, 87,
+       839, 990,
+       981, 1158,
+       1157, 1323,
+       1468, 1579,
+       1661, 1740,
+       1723, 1784,
+       1739, 1797,
+       1743, 1801,
+       1783, 1832,
+       1800, 1843
 };
 static int parser_goto_row33[] = {
        1,
@@ -22396,2153 +22692,2161 @@ static int parser_goto_row33[] = {
 };
 static int parser_goto_row34[] = {
        5,
-       -1, 10,
-       16, 91,
-       23, 91,
-       88, 91,
-       102, 91
+       -1, 11,
+       19, 97,
+       29, 97,
+       94, 97,
+       111, 97
 };
 static int parser_goto_row35[] = {
        24,
-       -1, 414,
-       202, 386,
-       509, 697,
-       533, 725,
-       552, 740,
-       597, 789,
-       770, 919,
-       787, 919,
-       918, 919,
-       937, 919,
-       962, 1129,
-       1030, 1185,
-       1130, 1291,
-       1148, 1312,
-       1173, 1328,
-       1201, 1347,
-       1306, 1435,
-       1533, 1291,
-       1551, 1613,
-       1600, 1435,
-       1602, 1661,
-       1612, 1674,
-       1710, 1766,
-       1716, 1771
+       -1, 426,
+       211, 398,
+       523, 711,
+       547, 739,
+       565, 754,
+       610, 803,
+       784, 933,
+       801, 933,
+       932, 933,
+       951, 933,
+       976, 1151,
+       1052, 1210,
+       1152, 1317,
+       1166, 1339,
+       1173, 1360,
+       1198, 1376,
+       1228, 1396,
+       1481, 1590,
+       1572, 1317,
+       1589, 1664,
+       1645, 1339,
+       1647, 1719,
+       1774, 1824,
+       1780, 1829
 };
 static int parser_goto_row36[] = {
        4,
-       -1, 920,
-       787, 938,
-       918, 1051,
-       937, 1070
+       -1, 934,
+       801, 952,
+       932, 1074,
+       951, 1093
 };
 static int parser_goto_row37[] = {
        2,
-       -1, 1053,
-       1054, 1202
+       -1, 1076,
+       1077, 1229
 };
 static int parser_goto_row38[] = {
        5,
-       -1, 817,
-       1126, 1279,
-       1280, 1405,
-       1282, 1406,
-       1606, 1663
+       -1, 831,
+       1148, 1305,
+       1306, 1454,
+       1308, 1455,
+       1583, 1653
 };
 static int parser_goto_row39[] = {
        8,
-       -1, 322,
-       323, 535,
-       381, 587,
-       437, 618,
-       588, 783,
-       1298, 1417,
-       1418, 1537,
-       1609, 1668
+       -1, 334,
+       335, 549,
+       393, 600,
+       449, 631,
+       601, 797,
+       1324, 1466,
+       1467, 1577,
+       1586, 1658
 };
 static int parser_goto_row40[] = {
-       30,
-       -1, 149,
-       31, 157,
-       374, 577,
-       575, 765,
-       729, 905,
-       784, 935,
-       876, 1019,
-       878, 157,
-       965, 1133,
-       1039, 1192,
-       1134, 1296,
-       1183, 577,
-       1332, 765,
-       1344, 1477,
-       1463, 905,
-       1468, 935,
-       1634, 1192,
-       1665, 1724,
-       1669, 1733,
-       1717, 1772,
-       1725, 1778,
-       1726, 1779,
-       1729, 1783,
-       1734, 1787,
-       1737, 1789,
-       1759, 1477,
-       1773, 1819,
-       1780, 1823,
-       1785, 1827,
-       1790, 1830
+       32,
+       -1, 158,
+       37, 167,
+       386, 590,
+       588, 779,
+       743, 919,
+       798, 949,
+       890, 1041,
+       892, 167,
+       979, 1155,
+       1058, 1215,
+       1062, 1219,
+       1156, 1322,
+       1208, 590,
+       1216, 1390,
+       1380, 779,
+       1393, 1516,
+       1502, 919,
+       1507, 949,
+       1655, 1728,
+       1659, 1737,
+       1692, 1219,
+       1721, 1781,
+       1729, 1787,
+       1730, 1788,
+       1733, 1792,
+       1738, 1796,
+       1741, 1798,
+       1782, 1831,
+       1789, 1835,
+       1794, 1839,
+       1799, 1842,
+       1817, 1516
 };
 static int parser_goto_row41[] = {
        1,
-       -1, 60
+       -1, 62
 };
 static int parser_goto_row42[] = {
        2,
-       -1, 61,
-       895, 1036
+       -1, 63,
+       909, 1059
 };
 static int parser_goto_row43[] = {
        4,
-       -1, 318,
-       578, 767,
-       1014, 1176,
-       1334, 1467
+       -1, 330,
+       591, 781,
+       1036, 1201,
+       1382, 1506
 };
 static int parser_goto_row44[] = {
        4,
-       -1, 233,
-       235, 459,
-       532, 459,
-       1191, 459
+       -1, 241,
+       243, 471,
+       546, 471,
+       1218, 471
 };
 static int parser_goto_row45[] = {
-       16,
-       -1, 150,
-       12, 62,
-       21, 62,
-       92, 62,
-       96, 62,
-       151, 319,
-       234, 458,
-       460, 458,
-       531, 458,
-       578, 319,
-       724, 458,
-       728, 888,
-       895, 1037,
-       1014, 319,
-       1334, 319,
-       1462, 888
+       15,
+       -1, 159,
+       13, 64,
+       27, 64,
+       98, 64,
+       160, 331,
+       242, 470,
+       472, 470,
+       545, 470,
+       591, 331,
+       738, 470,
+       742, 902,
+       909, 1060,
+       1036, 331,
+       1382, 331,
+       1501, 902
 };
 static int parser_goto_row46[] = {
        18,
-       -1, 189,
-       36, 190,
-       152, 320,
-       158, 326,
-       388, 595,
-       389, 596,
-       881, 1025,
-       882, 1026,
-       906, 1043,
-       936, 1069,
-       1017, 1177,
-       1022, 1180,
-       1426, 1549,
-       1427, 1550,
-       1478, 1580,
-       1570, 1635,
-       1573, 1637,
-       1809, 1847
+       -1, 198,
+       41, 199,
+       161, 332,
+       168, 339,
+       400, 608,
+       401, 609,
+       895, 1047,
+       896, 1048,
+       920, 1066,
+       950, 1092,
+       1039, 1202,
+       1044, 1205,
+       1330, 1479,
+       1331, 1480,
+       1517, 1625,
+       1615, 1693,
+       1618, 1695,
+       1860, 1882
 };
 static int parser_goto_row47[] = {
        20,
-       -1, 63,
-       203, 415,
-       728, 889,
-       793, 415,
-       874, 889,
-       878, 889,
-       1066, 415,
-       1183, 889,
-       1306, 1436,
-       1332, 889,
-       1351, 415,
-       1462, 889,
-       1463, 889,
-       1468, 889,
-       1483, 415,
-       1552, 415,
-       1600, 1436,
-       1634, 889,
-       1712, 415,
-       1759, 889
+       -1, 65,
+       212, 427,
+       742, 903,
+       807, 427,
+       888, 903,
+       892, 903,
+       1089, 427,
+       1166, 1340,
+       1208, 903,
+       1380, 903,
+       1400, 427,
+       1482, 427,
+       1501, 903,
+       1502, 903,
+       1507, 903,
+       1522, 427,
+       1645, 1340,
+       1692, 903,
+       1776, 427,
+       1817, 903
 };
 static int parser_goto_row48[] = {
        18,
-       -1, 64,
-       203, 416,
-       728, 890,
-       793, 416,
-       874, 890,
-       878, 890,
-       1066, 416,
-       1183, 890,
-       1332, 890,
-       1351, 416,
-       1462, 890,
-       1463, 890,
-       1468, 890,
-       1483, 416,
-       1552, 416,
-       1634, 890,
-       1712, 416,
-       1759, 890
+       -1, 66,
+       212, 428,
+       742, 904,
+       807, 428,
+       888, 904,
+       892, 904,
+       1089, 428,
+       1208, 904,
+       1380, 904,
+       1400, 428,
+       1482, 428,
+       1501, 904,
+       1502, 904,
+       1507, 904,
+       1522, 428,
+       1692, 904,
+       1776, 428,
+       1817, 904
 };
 static int parser_goto_row49[] = {
        52,
-       -1, 219,
-       220, 444,
-       238, 464,
-       247, 473,
-       249, 477,
-       251, 482,
-       478, 672,
-       483, 676,
-       486, 679,
-       610, 477,
-       612, 482,
-       657, 833,
-       680, 852,
-       798, 679,
-       834, 981,
-       836, 983,
-       838, 986,
-       840, 991,
-       940, 833,
-       987, 1156,
-       992, 1160,
-       995, 1163,
-       1035, 477,
-       1041, 482,
-       1074, 986,
-       1075, 991,
-       1164, 1320,
-       1196, 679,
-       1221, 1163,
-       1339, 833,
-       1434, 1554,
-       1473, 986,
-       1475, 991,
-       1555, 1618,
-       1556, 1620,
-       1557, 1622,
-       1559, 1626,
-       1561, 1628,
-       1579, 1163,
-       1623, 1684,
-       1629, 1695,
-       1630, 1697,
-       1685, 1747,
-       1698, 1758,
-       1748, 1796,
-       1749, 1798,
-       1750, 1800,
-       1751, 1803,
-       1801, 1839,
-       1804, 1843,
-       1805, 1845,
-       1846, 1868
+       -1, 228,
+       229, 456,
+       246, 476,
+       255, 485,
+       257, 489,
+       259, 494,
+       490, 685,
+       495, 689,
+       498, 692,
+       623, 489,
+       625, 494,
+       670, 847,
+       693, 866,
+       812, 692,
+       848, 1003,
+       850, 1005,
+       852, 1008,
+       854, 1013,
+       954, 847,
+       1009, 1181,
+       1014, 1185,
+       1017, 1188,
+       1057, 489,
+       1064, 494,
+       1097, 1008,
+       1098, 1013,
+       1189, 1368,
+       1223, 692,
+       1248, 1188,
+       1338, 1484,
+       1387, 847,
+       1485, 1595,
+       1486, 1597,
+       1487, 1599,
+       1489, 1603,
+       1491, 1605,
+       1512, 1008,
+       1514, 1013,
+       1600, 1674,
+       1606, 1685,
+       1607, 1687,
+       1624, 1188,
+       1675, 1751,
+       1688, 1762,
+       1752, 1805,
+       1753, 1807,
+       1754, 1809,
+       1755, 1812,
+       1810, 1851,
+       1813, 1855,
+       1814, 1857,
+       1858, 1881
 };
 static int parser_goto_row50[] = {
        10,
-       -1, 65,
-       203, 417,
-       793, 417,
-       1066, 417,
-       1306, 1437,
-       1351, 417,
-       1483, 417,
-       1552, 417,
-       1600, 1437,
-       1712, 417
+       -1, 67,
+       212, 429,
+       807, 429,
+       1089, 429,
+       1166, 1341,
+       1400, 429,
+       1482, 429,
+       1522, 429,
+       1645, 1341,
+       1776, 429
 };
 static int parser_goto_row51[] = {
        1,
-       -1, 66
+       -1, 68
 };
 static int parser_goto_row52[] = {
        3,
-       -1, 891,
-       895, 1038,
-       1036, 1190
+       -1, 905,
+       909, 1061,
+       1059, 1217
 };
 static int parser_goto_row53[] = {
        10,
-       -1, 67,
-       203, 418,
-       793, 418,
-       1066, 418,
-       1306, 1438,
-       1351, 418,
-       1483, 418,
-       1552, 418,
-       1600, 1438,
-       1712, 418
+       -1, 69,
+       212, 430,
+       807, 430,
+       1089, 430,
+       1166, 1342,
+       1400, 430,
+       1482, 430,
+       1522, 430,
+       1645, 1342,
+       1776, 430
 };
 static int parser_goto_row54[] = {
        10,
-       -1, 68,
-       203, 419,
-       793, 419,
-       1066, 419,
-       1306, 1439,
-       1351, 419,
-       1483, 419,
-       1552, 419,
-       1600, 1439,
-       1712, 419
+       -1, 70,
+       212, 431,
+       807, 431,
+       1089, 431,
+       1166, 1343,
+       1400, 431,
+       1482, 431,
+       1522, 431,
+       1645, 1343,
+       1776, 431
 };
 static int parser_goto_row55[] = {
        10,
-       -1, 69,
-       203, 420,
-       793, 420,
-       1066, 420,
-       1306, 1440,
-       1351, 420,
-       1483, 420,
-       1552, 420,
-       1600, 1440,
-       1712, 420
+       -1, 71,
+       212, 432,
+       807, 432,
+       1089, 432,
+       1166, 1344,
+       1400, 432,
+       1482, 432,
+       1522, 432,
+       1645, 1344,
+       1776, 432
 };
 static int parser_goto_row56[] = {
        10,
-       -1, 70,
-       203, 421,
-       793, 421,
-       1066, 421,
-       1306, 1441,
-       1351, 421,
-       1483, 421,
-       1552, 421,
-       1600, 1441,
-       1712, 421
+       -1, 72,
+       212, 433,
+       807, 433,
+       1089, 433,
+       1166, 1345,
+       1400, 433,
+       1482, 433,
+       1522, 433,
+       1645, 1345,
+       1776, 433
 };
 static int parser_goto_row57[] = {
        2,
-       -1, 382,
-       1029, 1184
+       -1, 394,
+       1051, 1209
 };
 static int parser_goto_row58[] = {
        10,
-       -1, 71,
-       203, 422,
-       793, 422,
-       1066, 422,
-       1306, 1442,
-       1351, 422,
-       1483, 422,
-       1552, 422,
-       1600, 1442,
-       1712, 422
+       -1, 73,
+       212, 434,
+       807, 434,
+       1089, 434,
+       1166, 1346,
+       1400, 434,
+       1482, 434,
+       1522, 434,
+       1645, 1346,
+       1776, 434
 };
 static int parser_goto_row59[] = {
        2,
-       -1, 192,
-       884, 1027
+       -1, 201,
+       898, 1049
 };
 static int parser_goto_row60[] = {
        131,
-       -1, 423,
-       34, 171,
-       38, 193,
-       155, 324,
-       156, 325,
-       192, 373,
-       201, 383,
-       204, 436,
-       207, 441,
-       219, 442,
-       245, 469,
-       267, 491,
-       278, 500,
-       332, 542,
-       387, 594,
-       443, 622,
-       444, 623,
-       461, 500,
-       463, 661,
-       464, 662,
-       465, 663,
-       472, 666,
-       473, 667,
-       476, 669,
-       477, 670,
-       481, 673,
-       482, 674,
-       490, 500,
-       593, 788,
-       599, 441,
-       615, 800,
-       668, 500,
-       671, 845,
-       672, 846,
-       675, 847,
-       676, 848,
-       678, 849,
-       679, 850,
-       689, 857,
-       726, 870,
-       796, 669,
-       797, 673,
-       804, 952,
-       832, 978,
-       833, 979,
-       851, 997,
-       852, 998,
-       871, 1011,
-       880, 1024,
-       884, 1028,
-       908, 1045,
-       933, 1067,
-       939, 1072,
-       947, 849,
-       980, 1149,
-       981, 1150,
-       982, 1151,
-       983, 1152,
-       985, 1153,
-       986, 1154,
-       990, 1157,
-       991, 1158,
-       999, 1166,
-       1004, 500,
-       1018, 1178,
-       1020, 1179,
-       1027, 1182,
-       1029, 383,
-       1046, 1198,
-       1068, 1216,
-       1073, 978,
-       1155, 1313,
-       1156, 1314,
-       1159, 1315,
-       1160, 1316,
-       1162, 1317,
-       1163, 1318,
-       1219, 1153,
-       1220, 1157,
-       1222, 1359,
-       1223, 1361,
-       1225, 1362,
-       1319, 1456,
-       1320, 1457,
-       1337, 1469,
-       1358, 1317,
-       1425, 1548,
-       1553, 1615,
-       1554, 1616,
-       1571, 1636,
-       1581, 1640,
-       1585, 952,
-       1617, 1677,
-       1618, 1678,
-       1619, 1679,
-       1620, 1680,
-       1621, 1681,
-       1622, 1682,
-       1625, 1690,
-       1626, 1691,
-       1627, 1692,
-       1628, 1693,
-       1643, 1704,
-       1675, 1742,
-       1683, 1744,
-       1684, 1745,
-       1694, 1753,
-       1695, 1754,
-       1696, 1755,
-       1697, 1756,
-       1746, 1793,
-       1747, 1794,
-       1757, 1806,
-       1758, 1807,
-       1784, 1826,
-       1795, 1832,
-       1796, 1833,
-       1797, 1834,
-       1798, 1835,
-       1799, 1836,
-       1800, 1837,
-       1802, 1840,
-       1803, 1841,
-       1838, 1861,
-       1839, 1862,
-       1842, 1863,
-       1843, 1864,
-       1844, 1865,
-       1845, 1866,
-       1867, 1873,
-       1868, 1874
+       -1, 435,
+       39, 180,
+       43, 202,
+       163, 336,
+       166, 338,
+       201, 385,
+       210, 395,
+       213, 448,
+       216, 453,
+       228, 454,
+       253, 481,
+       279, 505,
+       290, 514,
+       344, 555,
+       399, 607,
+       455, 635,
+       456, 636,
+       473, 514,
+       475, 674,
+       476, 675,
+       477, 676,
+       484, 679,
+       485, 680,
+       488, 682,
+       489, 683,
+       493, 686,
+       494, 687,
+       504, 514,
+       606, 802,
+       612, 453,
+       628, 814,
+       681, 514,
+       684, 859,
+       685, 860,
+       688, 861,
+       689, 862,
+       691, 863,
+       692, 864,
+       703, 871,
+       740, 884,
+       810, 682,
+       811, 686,
+       818, 966,
+       846, 1000,
+       847, 1001,
+       865, 1019,
+       866, 1020,
+       885, 1033,
+       894, 1046,
+       898, 1050,
+       922, 1068,
+       947, 1090,
+       953, 1095,
+       961, 863,
+       1002, 1174,
+       1003, 1175,
+       1004, 1176,
+       1005, 1177,
+       1007, 1178,
+       1008, 1179,
+       1012, 1182,
+       1013, 1183,
+       1021, 1191,
+       1026, 514,
+       1040, 1203,
+       1042, 1204,
+       1049, 1207,
+       1051, 395,
+       1069, 1225,
+       1091, 1243,
+       1096, 1000,
+       1180, 1361,
+       1181, 1362,
+       1184, 1363,
+       1185, 1364,
+       1187, 1365,
+       1188, 1366,
+       1246, 1178,
+       1247, 1182,
+       1249, 1408,
+       1250, 1410,
+       1252, 1411,
+       1329, 1478,
+       1367, 1495,
+       1368, 1496,
+       1385, 1508,
+       1407, 1365,
+       1483, 1592,
+       1484, 1593,
+       1594, 1667,
+       1595, 1668,
+       1596, 1669,
+       1597, 1670,
+       1598, 1671,
+       1599, 1672,
+       1602, 1680,
+       1603, 1681,
+       1604, 1682,
+       1605, 1683,
+       1616, 1694,
+       1626, 1698,
+       1630, 966,
+       1665, 1746,
+       1673, 1748,
+       1674, 1749,
+       1684, 1757,
+       1685, 1758,
+       1686, 1759,
+       1687, 1760,
+       1701, 1768,
+       1750, 1802,
+       1751, 1803,
+       1761, 1815,
+       1762, 1816,
+       1793, 1838,
+       1804, 1844,
+       1805, 1845,
+       1806, 1846,
+       1807, 1847,
+       1808, 1848,
+       1809, 1849,
+       1811, 1852,
+       1812, 1853,
+       1850, 1874,
+       1851, 1875,
+       1854, 1876,
+       1855, 1877,
+       1856, 1878,
+       1857, 1879,
+       1880, 1891,
+       1881, 1892
 };
 static int parser_goto_row61[] = {
        1,
-       -1, 172
+       -1, 181
 };
 static int parser_goto_row62[] = {
        6,
-       -1, 173,
-       333, 543,
-       548, 736,
-       550, 738,
-       551, 739,
-       737, 912
+       -1, 182,
+       345, 556,
+       561, 750,
+       563, 752,
+       564, 753,
+       751, 926
 };
 static int parser_goto_row63[] = {
        1,
-       -1, 174
+       -1, 183
 };
 static int parser_goto_row64[] = {
        8,
-       -1, 175,
-       554, 742,
-       555, 743,
-       556, 744,
-       557, 745,
-       558, 746,
-       559, 747,
-       560, 748
+       -1, 184,
+       567, 756,
+       568, 757,
+       569, 758,
+       570, 759,
+       571, 760,
+       572, 761,
+       573, 762
 };
 static int parser_goto_row65[] = {
        2,
-       -1, 176,
-       553, 741
+       -1, 185,
+       566, 755
 };
 static int parser_goto_row66[] = {
        2,
-       -1, 177,
-       561, 749
+       -1, 186,
+       574, 763
 };
 static int parser_goto_row67[] = {
        2,
-       -1, 178,
-       562, 750
+       -1, 187,
+       575, 764
 };
 static int parser_goto_row68[] = {
        3,
-       -1, 179,
-       563, 751,
-       564, 752
+       -1, 188,
+       576, 765,
+       577, 766
 };
 static int parser_goto_row69[] = {
        3,
-       -1, 180,
-       565, 753,
-       566, 754
+       -1, 189,
+       578, 767,
+       579, 768
 };
 static int parser_goto_row70[] = {
        5,
-       -1, 181,
-       567, 755,
-       568, 756,
-       569, 757,
-       570, 758
+       -1, 190,
+       580, 769,
+       581, 770,
+       582, 771,
+       583, 772
 };
 static int parser_goto_row71[] = {
        15,
-       -1, 182,
-       118, 279,
-       119, 280,
-       120, 281,
-       167, 338,
-       168, 339,
-       169, 340,
-       270, 494,
-       335, 545,
-       393, 338,
-       394, 339,
-       402, 340,
-       1431, 279,
-       1432, 280,
-       1433, 281
+       -1, 191,
+       127, 291,
+       128, 292,
+       129, 293,
+       176, 350,
+       177, 351,
+       178, 352,
+       282, 508,
+       347, 558,
+       405, 350,
+       406, 351,
+       414, 352,
+       1335, 291,
+       1336, 292,
+       1337, 293
 };
 static int parser_goto_row72[] = {
        1,
-       -1, 183
+       -1, 192
 };
 static int parser_goto_row73[] = {
-       55,
-       -1, 184,
-       12, 72,
-       21, 72,
-       27, 72,
-       31, 72,
-       92, 72,
-       96, 72,
-       151, 72,
-       166, 336,
-       203, 424,
-       234, 72,
-       374, 72,
-       460, 72,
-       531, 72,
-       575, 72,
-       578, 72,
-       724, 72,
-       728, 892,
-       729, 72,
-       784, 72,
-       793, 424,
-       874, 892,
-       876, 72,
-       878, 892,
-       895, 72,
-       965, 72,
-       1014, 72,
-       1039, 72,
-       1066, 424,
-       1134, 72,
-       1183, 892,
-       1332, 892,
-       1334, 72,
-       1344, 72,
-       1351, 424,
-       1462, 892,
-       1463, 892,
-       1468, 892,
-       1483, 424,
-       1552, 424,
-       1634, 892,
-       1665, 72,
-       1669, 72,
-       1712, 424,
-       1717, 72,
-       1725, 72,
-       1726, 72,
-       1729, 72,
-       1734, 72,
-       1737, 72,
-       1759, 892,
-       1773, 72,
-       1780, 72,
-       1785, 72,
-       1790, 72
+       56,
+       -1, 193,
+       13, 74,
+       27, 74,
+       33, 74,
+       37, 74,
+       98, 74,
+       160, 74,
+       175, 348,
+       212, 436,
+       242, 74,
+       386, 74,
+       472, 74,
+       545, 74,
+       588, 74,
+       591, 74,
+       738, 74,
+       742, 906,
+       743, 74,
+       798, 74,
+       807, 436,
+       888, 906,
+       890, 74,
+       892, 906,
+       909, 74,
+       979, 74,
+       1036, 74,
+       1058, 74,
+       1062, 74,
+       1089, 436,
+       1156, 74,
+       1208, 906,
+       1216, 74,
+       1380, 906,
+       1382, 74,
+       1393, 74,
+       1400, 436,
+       1482, 436,
+       1501, 906,
+       1502, 906,
+       1507, 906,
+       1522, 436,
+       1655, 74,
+       1659, 74,
+       1692, 906,
+       1721, 74,
+       1729, 74,
+       1730, 74,
+       1733, 74,
+       1738, 74,
+       1741, 74,
+       1776, 436,
+       1782, 74,
+       1789, 74,
+       1794, 74,
+       1799, 74,
+       1817, 906
 };
 static int parser_goto_row74[] = {
        2,
-       -1, 501,
-       1004, 1171
+       -1, 515,
+       1026, 1196
 };
 static int parser_goto_row75[] = {
        1,
-       -1, 73
+       -1, 75
 };
 static int parser_goto_row76[] = {
        31,
-       -1, 74,
-       950, 1098,
-       1088, 1098,
-       1089, 1098,
-       1090, 1098,
-       1091, 1098,
-       1226, 1098,
-       1228, 1098,
-       1375, 1098,
-       1377, 1098,
-       1378, 1098,
-       1380, 1098,
-       1381, 1098,
-       1382, 1098,
-       1383, 1098,
-       1384, 1098,
-       1385, 1098,
-       1386, 1098,
-       1387, 1098,
-       1388, 1098,
-       1389, 1098,
-       1390, 1098,
-       1391, 1098,
-       1392, 1098,
-       1393, 1098,
-       1394, 1098,
-       1395, 1098,
-       1396, 1098,
-       1397, 1098,
-       1498, 1098,
-       1848, 1098
+       -1, 76,
+       964, 1121,
+       1111, 1121,
+       1112, 1121,
+       1113, 1121,
+       1114, 1121,
+       1253, 1121,
+       1255, 1121,
+       1424, 1121,
+       1426, 1121,
+       1427, 1121,
+       1429, 1121,
+       1430, 1121,
+       1431, 1121,
+       1432, 1121,
+       1433, 1121,
+       1434, 1121,
+       1435, 1121,
+       1436, 1121,
+       1437, 1121,
+       1438, 1121,
+       1439, 1121,
+       1440, 1121,
+       1441, 1121,
+       1442, 1121,
+       1443, 1121,
+       1444, 1121,
+       1445, 1121,
+       1446, 1121,
+       1537, 1121,
+       1883, 1121
 };
 static int parser_goto_row77[] = {
        1,
-       -1, 425
+       -1, 437
 };
 static int parser_goto_row78[] = {
        2,
-       -1, 603,
-       605, 795
+       -1, 616,
+       618, 809
 };
 static int parser_goto_row79[] = {
        1,
-       -1, 437
+       -1, 449
 };
 static int parser_goto_row80[] = {
        2,
-       -1, 620,
-       621, 805
+       -1, 633,
+       634, 819
 };
 static int parser_goto_row81[] = {
        4,
-       -1, 438,
-       804, 953,
-       1222, 1360,
-       1585, 1642
+       -1, 450,
+       818, 967,
+       1249, 1409,
+       1630, 1700
 };
 static int parser_goto_row82[] = {
        93,
-       -1, 75,
-       25, 127,
-       49, 127,
-       116, 127,
-       246, 127,
-       248, 127,
-       249, 127,
-       250, 127,
-       251, 127,
-       268, 127,
-       485, 127,
-       486, 127,
-       505, 127,
-       507, 127,
-       508, 127,
-       510, 127,
-       511, 127,
-       512, 127,
-       513, 127,
-       514, 127,
-       515, 127,
-       516, 127,
-       517, 127,
-       518, 127,
-       519, 127,
-       520, 127,
-       521, 127,
-       522, 127,
-       523, 127,
-       524, 127,
-       525, 127,
-       526, 127,
-       527, 127,
-       655, 127,
-       657, 127,
-       694, 127,
-       837, 127,
-       838, 127,
-       839, 127,
-       840, 127,
-       873, 127,
-       887, 127,
-       950, 1099,
-       994, 127,
-       995, 127,
-       1033, 127,
-       1034, 127,
-       1035, 127,
-       1040, 127,
-       1041, 127,
-       1062, 127,
-       1088, 1099,
-       1089, 1099,
-       1090, 1099,
-       1091, 1099,
-       1195, 127,
-       1196, 127,
-       1226, 1099,
-       1228, 1099,
-       1306, 127,
-       1338, 127,
-       1339, 127,
-       1375, 1099,
-       1377, 1099,
-       1378, 1099,
-       1380, 1099,
-       1381, 1099,
-       1382, 1099,
-       1383, 1099,
-       1384, 1099,
-       1385, 1099,
-       1386, 1099,
-       1387, 1099,
-       1388, 1099,
-       1389, 1099,
-       1390, 1099,
-       1391, 1099,
-       1392, 1099,
-       1393, 1099,
-       1394, 1099,
-       1395, 1099,
-       1396, 1099,
-       1397, 1099,
-       1472, 127,
-       1473, 127,
-       1474, 127,
-       1475, 127,
-       1498, 1099,
-       1565, 127,
-       1578, 127,
-       1579, 127,
-       1600, 127,
-       1848, 1099
+       -1, 77,
+       31, 136,
+       54, 136,
+       125, 136,
+       254, 136,
+       256, 136,
+       257, 136,
+       258, 136,
+       259, 136,
+       280, 136,
+       497, 136,
+       498, 136,
+       519, 136,
+       521, 136,
+       522, 136,
+       524, 136,
+       525, 136,
+       526, 136,
+       527, 136,
+       528, 136,
+       529, 136,
+       530, 136,
+       531, 136,
+       532, 136,
+       533, 136,
+       534, 136,
+       535, 136,
+       536, 136,
+       537, 136,
+       538, 136,
+       539, 136,
+       540, 136,
+       541, 136,
+       668, 136,
+       670, 136,
+       708, 136,
+       851, 136,
+       852, 136,
+       853, 136,
+       854, 136,
+       887, 136,
+       901, 136,
+       964, 1122,
+       1016, 136,
+       1017, 136,
+       1055, 136,
+       1056, 136,
+       1057, 136,
+       1063, 136,
+       1064, 136,
+       1085, 136,
+       1111, 1122,
+       1112, 1122,
+       1113, 1122,
+       1114, 1122,
+       1166, 136,
+       1222, 136,
+       1223, 136,
+       1253, 1122,
+       1255, 1122,
+       1386, 136,
+       1387, 136,
+       1424, 1122,
+       1426, 1122,
+       1427, 1122,
+       1429, 1122,
+       1430, 1122,
+       1431, 1122,
+       1432, 1122,
+       1433, 1122,
+       1434, 1122,
+       1435, 1122,
+       1436, 1122,
+       1437, 1122,
+       1438, 1122,
+       1439, 1122,
+       1440, 1122,
+       1441, 1122,
+       1442, 1122,
+       1443, 1122,
+       1444, 1122,
+       1445, 1122,
+       1446, 1122,
+       1511, 136,
+       1512, 136,
+       1513, 136,
+       1514, 136,
+       1537, 1122,
+       1610, 136,
+       1623, 136,
+       1624, 136,
+       1645, 136,
+       1883, 1122
 };
 static int parser_goto_row83[] = {
        1,
-       -1, 76
+       -1, 78
 };
 static int parser_goto_row84[] = {
        1,
-       -1, 77
+       -1, 79
 };
 static int parser_goto_row85[] = {
        2,
-       -1, 241,
-       244, 467
+       -1, 249,
+       252, 479
 };
 static int parser_goto_row86[] = {
        1,
-       -1, 242
+       -1, 250
 };
 static int parser_goto_row87[] = {
        2,
-       -1, 243,
-       244, 468
+       -1, 251,
+       252, 480
 };
 static int parser_goto_row88[] = {
        16,
-       -1, 196,
-       153, 323,
-       203, 426,
-       381, 588,
-       793, 426,
-       1066, 426,
-       1126, 1280,
-       1298, 1418,
-       1306, 1443,
-       1351, 426,
-       1483, 426,
-       1552, 426,
-       1600, 1655,
-       1676, 1743,
-       1712, 426,
-       1814, 1851
+       -1, 205,
+       162, 335,
+       212, 438,
+       393, 601,
+       807, 438,
+       1089, 438,
+       1148, 1306,
+       1166, 1347,
+       1324, 1467,
+       1400, 438,
+       1482, 438,
+       1522, 438,
+       1645, 1713,
+       1666, 1747,
+       1776, 438,
+       1865, 1886
 };
 static int parser_goto_row89[] = {
        45,
-       -1, 592,
-       40, 197,
-       41, 198,
-       42, 199,
-       43, 200,
-       50, 222,
-       51, 223,
-       52, 224,
-       53, 225,
-       55, 226,
-       112, 271,
-       113, 272,
-       114, 273,
-       115, 274,
-       122, 283,
-       123, 284,
-       124, 285,
-       125, 286,
-       126, 287,
-       243, 466,
-       468, 664,
-       590, 786,
-       781, 932,
-       792, 944,
-       794, 946,
-       803, 951,
-       1062, 1210,
-       1084, 1229,
-       1085, 1230,
-       1086, 1231,
-       1087, 1232,
-       1093, 1240,
-       1094, 1241,
-       1095, 1242,
-       1096, 1243,
-       1097, 1244,
-       1126, 1281,
-       1218, 1357,
-       1356, 1485,
-       1373, 1495,
-       1374, 1496,
-       1482, 1583,
-       1502, 1592,
-       1591, 1648,
-       1641, 1703
+       -1, 605,
+       45, 206,
+       46, 207,
+       47, 208,
+       48, 209,
+       55, 231,
+       56, 232,
+       57, 233,
+       58, 234,
+       60, 235,
+       121, 283,
+       122, 284,
+       123, 285,
+       124, 286,
+       131, 295,
+       132, 296,
+       133, 297,
+       134, 298,
+       135, 299,
+       251, 478,
+       480, 677,
+       603, 800,
+       795, 946,
+       806, 958,
+       808, 960,
+       817, 965,
+       1085, 1237,
+       1107, 1256,
+       1108, 1257,
+       1109, 1258,
+       1110, 1259,
+       1116, 1267,
+       1117, 1268,
+       1118, 1269,
+       1119, 1270,
+       1120, 1271,
+       1148, 1307,
+       1245, 1406,
+       1405, 1524,
+       1422, 1534,
+       1423, 1535,
+       1521, 1628,
+       1541, 1637,
+       1636, 1706,
+       1699, 1767
 };
 static int parser_goto_row90[] = {
        1,
-       -1, 380
+       -1, 392
 };
 static int parser_goto_row91[] = {
-       4,
-       -1, 1121,
-       964, 1131,
-       1664, 1722,
-       1728, 1781
+       6,
+       -1, 790,
+       935, 1079,
+       969, 1144,
+       978, 1153,
+       1654, 1726,
+       1732, 1790
 };
 static int parser_goto_row92[] = {
-       3,
-       -1, 1122,
-       585, 776,
-       921, 1056
+       2,
+       -1, 791,
+       1087, 1240
 };
 static int parser_goto_row93[] = {
-       2,
-       -1, 777,
-       1064, 1213
+       1,
+       -1, 1238
 };
 static int parser_goto_row94[] = {
-       1,
-       -1, 1211
+       2,
+       -1, 943,
+       944, 1088
 };
 static int parser_goto_row95[] = {
-       2,
-       -1, 929,
-       930, 1065
+       5,
+       -1, 1302,
+       1304, 1452,
+       1319, 1452,
+       1785, 1452,
+       1836, 1452
 };
 static int parser_goto_row96[] = {
-       4,
-       -1, 1275,
-       1132, 1293,
-       1723, 1776,
-       1782, 1824
+       1,
+       -1, 991
 };
 static int parser_goto_row97[] = {
-       2,
-       -1, 1276,
-       1278, 1403
+       4,
+       -1, 1241,
+       1400, 1520,
+       1482, 1591,
+       1776, 1825
 };
 static int parser_goto_row98[] = {
-       1,
-       -1, 1143
+       3,
+       -1, 1403,
+       1404, 1523,
+       1490, 1523
 };
 static int parser_goto_row99[] = {
        4,
-       -1, 1214,
-       1351, 1481,
-       1552, 1614,
-       1712, 1767
+       -1, 1242,
+       212, 439,
+       807, 959,
+       1522, 1629
 };
 static int parser_goto_row100[] = {
-       3,
-       -1, 1354,
-       1355, 1484,
-       1560, 1484
+       4,
+       -1, 795,
+       936, 1080,
+       940, 1085,
+       1568, 1645
 };
 static int parser_goto_row101[] = {
-       4,
-       -1, 1215,
-       203, 427,
-       793, 945,
-       1483, 1584
+       86,
+       -1, 353,
+       31, 137,
+       54, 229,
+       116, 278,
+       130, 294,
+       170, 137,
+       254, 482,
+       257, 490,
+       259, 495,
+       300, 517,
+       302, 518,
+       327, 543,
+       378, 482,
+       380, 585,
+       381, 586,
+       425, 229,
+       498, 693,
+       507, 700,
+       544, 736,
+       557, 748,
+       587, 778,
+       623, 490,
+       625, 495,
+       668, 843,
+       670, 848,
+       730, 876,
+       732, 878,
+       773, 843,
+       774, 927,
+       812, 693,
+       852, 1009,
+       854, 1014,
+       880, 1030,
+       881, 1031,
+       887, 137,
+       901, 229,
+       929, 1071,
+       930, 1072,
+       937, 1081,
+       954, 848,
+       1017, 1189,
+       1022, 1192,
+       1032, 1199,
+       1055, 482,
+       1057, 490,
+       1064, 495,
+       1073, 1226,
+       1082, 1233,
+       1083, 1234,
+       1097, 1009,
+       1098, 1014,
+       1102, 1251,
+       1115, 1266,
+       1193, 1370,
+       1194, 1371,
+       1223, 693,
+       1235, 1399,
+       1248, 1189,
+       1272, 1420,
+       1274, 1421,
+       1299, 1448,
+       1338, 1485,
+       1372, 1498,
+       1386, 843,
+       1387, 848,
+       1415, 1531,
+       1449, 1567,
+       1487, 1600,
+       1491, 1606,
+       1512, 1009,
+       1514, 1014,
+       1561, 1638,
+       1563, 1640,
+       1607, 1688,
+       1624, 1189,
+       1642, 1709,
+       1643, 1710,
+       1675, 1752,
+       1702, 1769,
+       1711, 1775,
+       1754, 1810,
+       1755, 1813,
+       1770, 1819,
+       1771, 1820,
+       1814, 1858,
+       1821, 1862
 };
 static int parser_goto_row102[] = {
-       4,
-       -1, 781,
-       922, 1057,
-       926, 1062,
-       1529, 1600
+       34,
+       -1, 138,
+       54, 230,
+       254, 483,
+       256, 487,
+       257, 491,
+       258, 492,
+       259, 496,
+       497, 690,
+       498, 694,
+       668, 844,
+       670, 849,
+       851, 1006,
+       852, 1010,
+       853, 1011,
+       854, 1015,
+       887, 1034,
+       901, 1053,
+       1016, 1186,
+       1017, 1190,
+       1055, 1212,
+       1056, 1213,
+       1057, 1214,
+       1063, 1220,
+       1064, 1221,
+       1222, 1391,
+       1223, 1392,
+       1386, 1509,
+       1387, 1510,
+       1511, 1619,
+       1512, 1620,
+       1513, 1621,
+       1514, 1622,
+       1623, 1696,
+       1624, 1697
 };
 static int parser_goto_row103[] = {
-       86,
-       -1, 341,
-       25, 128,
-       49, 220,
-       107, 266,
-       121, 282,
-       161, 128,
-       246, 470,
-       249, 478,
-       251, 483,
-       288, 503,
-       290, 504,
-       315, 529,
-       366, 470,
-       368, 572,
-       369, 573,
-       413, 220,
-       486, 680,
-       493, 686,
-       530, 722,
-       544, 734,
-       574, 764,
-       610, 478,
-       612, 483,
-       655, 829,
-       657, 834,
-       716, 862,
-       718, 864,
-       759, 829,
-       760, 913,
-       798, 680,
-       838, 987,
-       840, 992,
-       866, 1008,
-       867, 1009,
-       873, 128,
-       887, 220,
-       915, 1048,
-       916, 1049,
-       923, 1058,
-       940, 834,
-       995, 1164,
-       1000, 1167,
-       1010, 1174,
-       1033, 470,
-       1035, 478,
-       1041, 483,
-       1050, 1199,
-       1059, 1206,
-       1060, 1207,
-       1074, 987,
-       1075, 992,
-       1079, 1224,
-       1092, 1239,
-       1168, 1322,
-       1169, 1323,
-       1196, 680,
-       1208, 1350,
-       1221, 1164,
-       1245, 1371,
-       1247, 1372,
-       1272, 1399,
-       1324, 1459,
-       1338, 829,
-       1339, 834,
-       1366, 1492,
-       1400, 1528,
-       1434, 1555,
-       1473, 987,
-       1475, 992,
-       1522, 1593,
-       1524, 1595,
-       1557, 1623,
-       1561, 1629,
-       1579, 1164,
-       1597, 1651,
-       1598, 1652,
-       1630, 1698,
-       1644, 1705,
-       1653, 1711,
-       1685, 1748,
-       1706, 1761,
-       1707, 1762,
-       1750, 1801,
-       1751, 1804,
-       1763, 1811,
-       1805, 1846
+       6,
+       -1, 246,
+       154, 326,
+       193, 377,
+       289, 326,
+       348, 377,
+       1353, 1489
 };
 static int parser_goto_row104[] = {
-       34,
-       -1, 129,
-       49, 221,
-       246, 471,
-       248, 475,
-       249, 479,
-       250, 480,
-       251, 484,
-       485, 677,
-       486, 681,
-       655, 830,
-       657, 835,
-       837, 984,
-       838, 988,
-       839, 989,
-       840, 993,
-       873, 1012,
-       887, 1031,
-       994, 1161,
-       995, 1165,
-       1033, 1187,
-       1034, 1188,
-       1035, 1189,
-       1040, 1193,
-       1041, 1194,
-       1195, 1342,
-       1196, 1343,
-       1338, 1470,
-       1339, 1471,
-       1472, 1574,
-       1473, 1575,
-       1474, 1576,
-       1475, 1577,
-       1578, 1638,
-       1579, 1639
+       4,
+       -1, 516,
+       473, 667,
+       504, 697,
+       681, 858
 };
 static int parser_goto_row105[] = {
-       6,
-       -1, 238,
-       145, 314,
-       184, 365,
-       277, 314,
-       336, 365,
-       1449, 1559
+       2,
+       -1, 873,
+       874, 1027
 };
 static int parser_goto_row106[] = {
-       4,
-       -1, 502,
-       461, 654,
-       490, 683,
-       668, 844
+       3,
+       -1, 342,
+       629, 815,
+       1045, 1206
 };
 static int parser_goto_row107[] = {
        2,
-       -1, 859,
-       860, 1005
+       -1, 343,
+       552, 744
 };
 static int parser_goto_row108[] = {
-       3,
-       -1, 329,
-       616, 801,
-       1023, 1181
+       2,
+       -1, 822,
+       638, 825
 };
 static int parser_goto_row109[] = {
-       2,
-       -1, 330,
-       538, 730
+       157,
+       -1, 194,
+       13, 80,
+       27, 80,
+       31, 139,
+       33, 80,
+       37, 80,
+       54, 139,
+       98, 80,
+       125, 288,
+       160, 80,
+       175, 349,
+       212, 440,
+       242, 80,
+       254, 139,
+       256, 139,
+       257, 139,
+       258, 139,
+       259, 139,
+       280, 139,
+       386, 80,
+       472, 80,
+       474, 671,
+       497, 139,
+       498, 139,
+       519, 139,
+       521, 139,
+       522, 139,
+       524, 139,
+       525, 139,
+       526, 139,
+       527, 139,
+       528, 139,
+       529, 139,
+       530, 139,
+       531, 139,
+       532, 139,
+       533, 139,
+       534, 139,
+       535, 139,
+       536, 139,
+       537, 139,
+       538, 139,
+       539, 139,
+       540, 139,
+       541, 139,
+       542, 733,
+       545, 80,
+       584, 775,
+       588, 80,
+       591, 80,
+       668, 139,
+       670, 139,
+       702, 870,
+       708, 139,
+       738, 80,
+       742, 907,
+       743, 80,
+       749, 925,
+       798, 80,
+       805, 671,
+       807, 440,
+       851, 139,
+       852, 139,
+       853, 139,
+       854, 139,
+       887, 139,
+       888, 907,
+       890, 80,
+       892, 907,
+       901, 139,
+       909, 80,
+       964, 1123,
+       979, 80,
+       1016, 139,
+       1017, 139,
+       1036, 80,
+       1055, 139,
+       1056, 139,
+       1057, 139,
+       1058, 80,
+       1062, 80,
+       1063, 139,
+       1064, 139,
+       1089, 440,
+       1111, 1261,
+       1112, 1123,
+       1113, 1123,
+       1114, 1123,
+       1156, 80,
+       1166, 1348,
+       1208, 907,
+       1211, 671,
+       1216, 80,
+       1222, 139,
+       1223, 139,
+       1253, 1123,
+       1255, 1123,
+       1380, 907,
+       1382, 80,
+       1386, 139,
+       1387, 139,
+       1393, 80,
+       1400, 440,
+       1424, 1123,
+       1426, 1123,
+       1427, 1123,
+       1429, 1123,
+       1430, 1123,
+       1431, 1123,
+       1432, 1123,
+       1433, 1123,
+       1434, 1123,
+       1435, 1123,
+       1436, 1123,
+       1437, 1123,
+       1438, 1123,
+       1439, 1123,
+       1440, 1123,
+       1441, 1123,
+       1442, 1123,
+       1443, 1123,
+       1444, 1123,
+       1445, 1123,
+       1446, 1123,
+       1447, 1564,
+       1482, 440,
+       1501, 907,
+       1502, 907,
+       1507, 907,
+       1511, 139,
+       1512, 139,
+       1513, 139,
+       1514, 139,
+       1522, 440,
+       1533, 1634,
+       1537, 1123,
+       1601, 1676,
+       1610, 139,
+       1623, 139,
+       1624, 139,
+       1645, 1348,
+       1655, 80,
+       1659, 80,
+       1692, 907,
+       1721, 80,
+       1729, 80,
+       1730, 80,
+       1733, 80,
+       1738, 80,
+       1741, 80,
+       1776, 440,
+       1782, 80,
+       1789, 80,
+       1794, 80,
+       1799, 80,
+       1817, 907,
+       1883, 1123
 };
 static int parser_goto_row110[] = {
-       2,
-       -1, 808,
-       625, 811
+       1,
+       -1, 839
 };
 static int parser_goto_row111[] = {
-       156,
-       -1, 185,
-       12, 78,
-       21, 78,
-       25, 130,
-       27, 78,
-       31, 78,
-       49, 130,
-       92, 78,
-       96, 78,
-       116, 276,
-       151, 78,
-       166, 337,
-       203, 428,
-       234, 78,
-       246, 130,
-       248, 130,
-       249, 130,
-       250, 130,
-       251, 130,
-       268, 130,
-       374, 78,
-       460, 78,
-       462, 658,
-       485, 130,
-       486, 130,
-       505, 130,
-       507, 130,
-       508, 130,
-       510, 130,
-       511, 130,
-       512, 130,
-       513, 130,
-       514, 130,
-       515, 130,
-       516, 130,
-       517, 130,
-       518, 130,
-       519, 130,
-       520, 130,
-       521, 130,
-       522, 130,
-       523, 130,
-       524, 130,
-       525, 130,
-       526, 130,
-       527, 130,
-       528, 719,
-       531, 78,
-       571, 761,
-       575, 78,
-       578, 78,
-       655, 130,
-       657, 130,
-       688, 856,
-       694, 130,
-       724, 78,
-       728, 893,
-       729, 78,
-       735, 911,
-       784, 78,
-       791, 658,
-       793, 428,
-       837, 130,
-       838, 130,
-       839, 130,
-       840, 130,
-       873, 130,
-       874, 893,
-       876, 78,
-       878, 893,
-       887, 130,
-       895, 78,
-       950, 1100,
-       965, 78,
-       994, 130,
-       995, 130,
-       1014, 78,
-       1033, 130,
-       1034, 130,
-       1035, 130,
-       1039, 78,
-       1040, 130,
-       1041, 130,
-       1066, 428,
-       1088, 1234,
-       1089, 1100,
-       1090, 1100,
-       1091, 1100,
-       1134, 78,
-       1183, 893,
-       1186, 658,
-       1195, 130,
-       1196, 130,
-       1226, 1100,
-       1228, 1100,
-       1306, 1444,
-       1332, 893,
-       1334, 78,
-       1338, 130,
-       1339, 130,
-       1344, 78,
-       1351, 428,
-       1375, 1100,
-       1377, 1100,
-       1378, 1100,
-       1380, 1100,
-       1381, 1100,
-       1382, 1100,
-       1383, 1100,
-       1384, 1100,
-       1385, 1100,
-       1386, 1100,
-       1387, 1100,
-       1388, 1100,
-       1389, 1100,
-       1390, 1100,
-       1391, 1100,
-       1392, 1100,
-       1393, 1100,
-       1394, 1100,
-       1395, 1100,
-       1396, 1100,
-       1397, 1100,
-       1398, 1525,
-       1462, 893,
-       1463, 893,
-       1468, 893,
-       1472, 130,
-       1473, 130,
-       1474, 130,
-       1475, 130,
-       1483, 428,
-       1494, 1589,
-       1498, 1100,
-       1552, 428,
-       1565, 130,
-       1578, 130,
-       1579, 130,
-       1600, 1444,
-       1624, 1686,
-       1634, 893,
-       1665, 78,
-       1669, 78,
-       1712, 428,
-       1717, 78,
-       1725, 78,
-       1726, 78,
-       1729, 78,
-       1734, 78,
-       1737, 78,
-       1759, 893,
-       1773, 78,
-       1780, 78,
-       1785, 78,
-       1790, 78,
-       1848, 1100
+       6,
+       -1, 1318,
+       467, 662,
+       1463, 1575,
+       1472, 1582,
+       1474, 1585,
+       1476, 1588
 };
 static int parser_goto_row112[] = {
-       1,
-       -1, 825
+       22,
+       -1, 81,
+       83, 260,
+       156, 260,
+       196, 260,
+       445, 260,
+       664, 260,
+       673, 260,
+       735, 260,
+       777, 260,
+       823, 260,
+       841, 260,
+       918, 260,
+       939, 260,
+       957, 260,
+       1024, 260,
+       1140, 260,
+       1143, 260,
+       1357, 260,
+       1389, 260,
+       1566, 260,
+       1679, 260,
+       1704, 260
 };
 static int parser_goto_row113[] = {
-       6,
-       -1, 1292,
-       455, 649,
-       1414, 1536,
-       1542, 1605,
-       1544, 1608,
-       1546, 1611
+       186,
+       -1, 195,
+       13, 82,
+       27, 82,
+       31, 140,
+       33, 82,
+       37, 82,
+       54, 140,
+       83, 261,
+       98, 82,
+       125, 140,
+       156, 328,
+       160, 82,
+       196, 382,
+       212, 441,
+       242, 82,
+       254, 140,
+       256, 140,
+       257, 140,
+       258, 140,
+       259, 140,
+       280, 140,
+       386, 82,
+       445, 626,
+       467, 663,
+       472, 82,
+       474, 672,
+       497, 140,
+       498, 140,
+       519, 140,
+       521, 140,
+       522, 140,
+       524, 140,
+       525, 140,
+       526, 140,
+       527, 140,
+       528, 140,
+       529, 140,
+       530, 140,
+       531, 140,
+       532, 140,
+       533, 140,
+       534, 140,
+       535, 140,
+       536, 140,
+       537, 140,
+       538, 140,
+       539, 140,
+       540, 140,
+       541, 140,
+       542, 734,
+       545, 82,
+       584, 776,
+       588, 82,
+       591, 82,
+       664, 836,
+       666, 840,
+       668, 140,
+       670, 140,
+       673, 855,
+       702, 734,
+       708, 140,
+       735, 882,
+       738, 82,
+       742, 908,
+       743, 82,
+       749, 776,
+       777, 931,
+       788, 938,
+       798, 82,
+       805, 955,
+       807, 441,
+       841, 997,
+       851, 140,
+       852, 140,
+       853, 140,
+       854, 140,
+       869, 1023,
+       887, 140,
+       888, 908,
+       890, 82,
+       892, 908,
+       901, 140,
+       909, 82,
+       918, 1065,
+       939, 1084,
+       957, 1099,
+       964, 1124,
+       979, 82,
+       1016, 140,
+       1017, 140,
+       1024, 1195,
+       1036, 82,
+       1055, 140,
+       1056, 140,
+       1057, 140,
+       1058, 82,
+       1062, 82,
+       1063, 140,
+       1064, 140,
+       1089, 441,
+       1111, 1124,
+       1112, 1124,
+       1113, 1124,
+       1114, 1124,
+       1140, 1300,
+       1152, 663,
+       1156, 82,
+       1166, 1349,
+       1208, 908,
+       1211, 1388,
+       1216, 82,
+       1222, 140,
+       1223, 140,
+       1253, 1124,
+       1255, 1124,
+       1357, 1492,
+       1380, 908,
+       1382, 82,
+       1386, 140,
+       1387, 140,
+       1389, 1515,
+       1393, 82,
+       1400, 441,
+       1424, 1124,
+       1426, 1124,
+       1427, 1124,
+       1429, 1124,
+       1430, 1124,
+       1431, 1124,
+       1432, 1124,
+       1433, 1124,
+       1434, 1124,
+       1435, 1124,
+       1436, 1124,
+       1437, 1124,
+       1438, 1124,
+       1439, 1124,
+       1440, 1124,
+       1441, 1124,
+       1442, 1124,
+       1443, 1124,
+       1444, 1124,
+       1445, 1124,
+       1446, 1124,
+       1447, 1565,
+       1463, 663,
+       1472, 663,
+       1474, 663,
+       1476, 663,
+       1482, 441,
+       1501, 908,
+       1502, 908,
+       1507, 908,
+       1511, 140,
+       1512, 140,
+       1513, 140,
+       1514, 140,
+       1522, 441,
+       1533, 1565,
+       1537, 1124,
+       1566, 1644,
+       1572, 663,
+       1601, 1677,
+       1610, 140,
+       1623, 140,
+       1624, 140,
+       1633, 1703,
+       1645, 1349,
+       1655, 82,
+       1659, 82,
+       1679, 1756,
+       1692, 908,
+       1704, 1772,
+       1721, 82,
+       1729, 82,
+       1730, 82,
+       1733, 82,
+       1738, 82,
+       1741, 82,
+       1776, 441,
+       1782, 82,
+       1789, 82,
+       1794, 82,
+       1799, 82,
+       1817, 908,
+       1883, 1124
 };
 static int parser_goto_row114[] = {
-       22,
-       -1, 79,
-       81, 252,
-       147, 252,
-       187, 252,
-       433, 252,
-       651, 252,
-       660, 252,
-       721, 252,
-       763, 252,
-       809, 252,
-       827, 252,
-       904, 252,
-       925, 252,
-       943, 252,
-       1002, 252,
-       1117, 252,
-       1120, 252,
-       1341, 252,
-       1453, 252,
-       1527, 252,
-       1646, 252,
-       1689, 252
+       12,
+       -1, 1321,
+       1322, 1465,
+       1728, 1786,
+       1737, 1795,
+       1781, 1830,
+       1787, 1833,
+       1788, 1834,
+       1796, 1840,
+       1798, 1841,
+       1831, 1869,
+       1835, 1870,
+       1842, 1873
 };
 static int parser_goto_row115[] = {
-       185,
-       -1, 186,
-       12, 80,
-       21, 80,
-       25, 131,
-       27, 80,
-       31, 80,
-       49, 131,
-       81, 253,
-       92, 80,
-       96, 80,
-       116, 131,
-       147, 316,
-       151, 80,
-       187, 370,
-       203, 429,
-       234, 80,
-       246, 131,
-       248, 131,
-       249, 131,
-       250, 131,
-       251, 131,
-       268, 131,
-       374, 80,
-       433, 613,
-       455, 650,
-       460, 80,
-       462, 659,
-       485, 131,
-       486, 131,
-       505, 131,
-       507, 131,
-       508, 131,
-       510, 131,
-       511, 131,
-       512, 131,
-       513, 131,
-       514, 131,
-       515, 131,
-       516, 131,
-       517, 131,
-       518, 131,
-       519, 131,
-       520, 131,
-       521, 131,
-       522, 131,
-       523, 131,
-       524, 131,
-       525, 131,
-       526, 131,
-       527, 131,
-       528, 720,
-       531, 80,
-       571, 762,
-       575, 80,
-       578, 80,
-       651, 822,
-       653, 826,
-       655, 131,
-       657, 131,
-       660, 841,
-       688, 720,
-       694, 131,
-       721, 868,
-       724, 80,
-       728, 894,
-       729, 80,
-       735, 762,
-       763, 917,
-       774, 924,
-       784, 80,
-       791, 941,
-       793, 429,
-       827, 975,
-       837, 131,
-       838, 131,
-       839, 131,
-       840, 131,
-       855, 1001,
-       873, 131,
-       874, 894,
-       876, 80,
-       878, 894,
-       887, 131,
-       895, 80,
-       904, 1042,
-       925, 1061,
-       943, 1076,
-       950, 1101,
-       965, 80,
-       994, 131,
-       995, 131,
-       1002, 1170,
-       1014, 80,
-       1033, 131,
-       1034, 131,
-       1035, 131,
-       1039, 80,
-       1040, 131,
-       1041, 131,
-       1066, 429,
-       1088, 1101,
-       1089, 1101,
-       1090, 1101,
-       1091, 1101,
-       1117, 1273,
-       1130, 650,
-       1134, 80,
-       1183, 894,
-       1186, 1340,
-       1195, 131,
-       1196, 131,
-       1226, 1101,
-       1228, 1101,
-       1306, 1445,
-       1332, 894,
-       1334, 80,
-       1338, 131,
-       1339, 131,
-       1341, 1476,
-       1344, 80,
-       1351, 429,
-       1375, 1101,
-       1377, 1101,
-       1378, 1101,
-       1380, 1101,
-       1381, 1101,
-       1382, 1101,
-       1383, 1101,
-       1384, 1101,
-       1385, 1101,
-       1386, 1101,
-       1387, 1101,
-       1388, 1101,
-       1389, 1101,
-       1390, 1101,
-       1391, 1101,
-       1392, 1101,
-       1393, 1101,
-       1394, 1101,
-       1395, 1101,
-       1396, 1101,
-       1397, 1101,
-       1398, 1526,
-       1414, 650,
-       1453, 1562,
-       1462, 894,
-       1463, 894,
-       1468, 894,
-       1472, 131,
-       1473, 131,
-       1474, 131,
-       1475, 131,
-       1483, 429,
-       1494, 1526,
-       1498, 1101,
-       1527, 1599,
-       1533, 650,
-       1542, 650,
-       1544, 650,
-       1546, 650,
-       1552, 429,
-       1565, 131,
-       1578, 131,
-       1579, 131,
-       1588, 1645,
-       1600, 1445,
-       1624, 1687,
-       1634, 894,
-       1646, 1708,
-       1665, 80,
-       1669, 80,
-       1689, 1752,
-       1712, 429,
-       1717, 80,
-       1725, 80,
-       1726, 80,
-       1729, 80,
-       1734, 80,
-       1737, 80,
-       1759, 894,
-       1773, 80,
-       1780, 80,
-       1785, 80,
-       1790, 80,
-       1848, 1101
+       14,
+       -1, 91,
+       824, 972,
+       969, 1145,
+       970, 1146,
+       973, 1147,
+       978, 1154,
+       989, 1161,
+       1645, 1714,
+       1654, 1727,
+       1713, 1777,
+       1715, 1778,
+       1732, 1791,
+       1865, 1887,
+       1886, 1895
 };
 static int parser_goto_row116[] = {
-       12,
-       -1, 1295,
-       1296, 1416,
-       1724, 1777,
-       1733, 1786,
-       1772, 1818,
-       1778, 1821,
-       1779, 1822,
-       1787, 1828,
-       1789, 1829,
-       1819, 1856,
-       1823, 1857,
-       1830, 1860
+       55,
+       -1, 591,
+       0, 12,
+       3, 23,
+       5, 12,
+       18, 12,
+       19, 12,
+       20, 12,
+       28, 12,
+       29, 12,
+       30, 12,
+       33, 160,
+       37, 160,
+       64, 242,
+       94, 12,
+       95, 12,
+       99, 12,
+       104, 269,
+       105, 270,
+       111, 12,
+       112, 12,
+       114, 12,
+       243, 472,
+       265, 12,
+       271, 502,
+       274, 12,
+       331, 545,
+       546, 738,
+       742, 909,
+       743, 160,
+       798, 160,
+       839, 992,
+       888, 1036,
+       892, 1036,
+       990, 992,
+       994, 992,
+       1060, 242,
+       1145, 992,
+       1154, 992,
+       1208, 1382,
+       1218, 472,
+       1304, 992,
+       1319, 992,
+       1380, 1382,
+       1393, 160,
+       1468, 992,
+       1501, 909,
+       1502, 1036,
+       1507, 1036,
+       1579, 992,
+       1692, 1382,
+       1727, 992,
+       1785, 992,
+       1791, 992,
+       1817, 1036,
+       1836, 992
 };
 static int parser_goto_row117[] = {
-       14,
-       -1, 85,
-       810, 958,
-       955, 1123,
-       956, 1124,
-       959, 1125,
-       964, 1132,
-       1141, 1301,
-       1600, 1656,
-       1655, 1713,
-       1657, 1714,
-       1664, 1723,
-       1728, 1782,
-       1814, 1852,
-       1851, 1871
+       18,
+       -1, 98,
+       0, 13,
+       5, 27,
+       18, 27,
+       28, 27,
+       839, 993,
+       990, 993,
+       994, 1169,
+       1145, 1303,
+       1154, 1303,
+       1304, 1303,
+       1319, 1303,
+       1468, 993,
+       1579, 993,
+       1727, 1303,
+       1785, 1303,
+       1791, 1303,
+       1836, 1303
 };
 static int parser_goto_row118[] = {
-       56,
-       -1, 154,
-       0, 11,
-       4, 11,
-       15, 11,
-       16, 11,
-       17, 11,
-       22, 11,
-       23, 11,
-       24, 11,
-       27, 151,
-       31, 151,
-       62, 234,
-       88, 11,
-       89, 11,
-       93, 11,
-       102, 11,
-       103, 11,
-       105, 11,
-       235, 460,
-       256, 11,
-       262, 11,
-       319, 531,
-       374, 578,
-       532, 724,
-       575, 578,
-       728, 895,
-       729, 151,
-       784, 151,
-       874, 1014,
-       876, 578,
-       878, 1014,
-       965, 578,
-       1037, 234,
-       1039, 578,
-       1134, 578,
-       1183, 1334,
-       1191, 460,
-       1332, 1334,
-       1344, 151,
-       1462, 895,
-       1463, 1014,
-       1468, 1014,
-       1634, 1334,
-       1665, 578,
-       1669, 578,
-       1717, 578,
-       1725, 578,
-       1726, 578,
-       1729, 578,
-       1734, 578,
-       1737, 578,
-       1759, 1014,
-       1773, 578,
-       1780, 578,
-       1785, 578,
-       1790, 578
+       249,
+       -1, 14,
+       35, 163,
+       36, 166,
+       38, 169,
+       44, 203,
+       49, 210,
+       51, 212,
+       52, 213,
+       79, 253,
+       84, 262,
+       117, 279,
+       118, 280,
+       119, 281,
+       120, 282,
+       126, 290,
+       171, 344,
+       172, 345,
+       173, 346,
+       174, 347,
+       214, 451,
+       215, 452,
+       236, 457,
+       237, 458,
+       238, 459,
+       239, 460,
+       244, 473,
+       245, 474,
+       250, 477,
+       277, 504,
+       287, 509,
+       303, 519,
+       304, 521,
+       305, 522,
+       306, 523,
+       307, 524,
+       308, 525,
+       309, 526,
+       310, 527,
+       311, 528,
+       312, 529,
+       313, 530,
+       314, 531,
+       315, 532,
+       316, 533,
+       317, 534,
+       318, 535,
+       319, 536,
+       320, 537,
+       321, 538,
+       322, 539,
+       323, 540,
+       324, 541,
+       325, 542,
+       333, 547,
+       336, 550,
+       338, 551,
+       340, 552,
+       342, 553,
+       354, 561,
+       355, 563,
+       356, 564,
+       357, 565,
+       358, 566,
+       359, 567,
+       360, 568,
+       361, 569,
+       362, 570,
+       363, 571,
+       364, 572,
+       365, 573,
+       366, 574,
+       367, 575,
+       368, 576,
+       369, 577,
+       370, 578,
+       371, 579,
+       372, 580,
+       373, 581,
+       374, 582,
+       375, 583,
+       376, 584,
+       390, 598,
+       394, 602,
+       404, 213,
+       437, 614,
+       439, 617,
+       446, 628,
+       447, 629,
+       448, 630,
+       461, 637,
+       462, 638,
+       469, 666,
+       481, 678,
+       486, 681,
+       499, 695,
+       505, 698,
+       511, 702,
+       515, 705,
+       520, 708,
+       548, 740,
+       554, 746,
+       555, 747,
+       559, 749,
+       562, 751,
+       593, 784,
+       597, 788,
+       604, 801,
+       613, 805,
+       615, 807,
+       632, 818,
+       662, 832,
+       669, 845,
+       676, 856,
+       699, 869,
+       731, 877,
+       741, 885,
+       744, 921,
+       745, 922,
+       782, 932,
+       785, 935,
+       790, 941,
+       796, 947,
+       799, 951,
+       814, 962,
+       815, 963,
+       816, 964,
+       820, 968,
+       828, 975,
+       829, 976,
+       831, 983,
+       868, 1021,
+       872, 1026,
+       889, 1040,
+       891, 1042,
+       893, 1045,
+       899, 1051,
+       924, 1069,
+       934, 1078,
+       942, 1087,
+       945, 1089,
+       948, 1091,
+       952, 1094,
+       966, 1141,
+       977, 1152,
+       985, 1159,
+       994, 1170,
+       998, 1172,
+       999, 1173,
+       1028, 1197,
+       1029, 1198,
+       1054, 1211,
+       1068, 1224,
+       1074, 1227,
+       1075, 1228,
+       1079, 1231,
+       1093, 1244,
+       1100, 1249,
+       1101, 1250,
+       1103, 1252,
+       1104, 1253,
+       1105, 1254,
+       1106, 1255,
+       1125, 1275,
+       1150, 1311,
+       1191, 1369,
+       1196, 1373,
+       1203, 1377,
+       1204, 1378,
+       1206, 1379,
+       1209, 1384,
+       1225, 1394,
+       1236, 1400,
+       1241, 1401,
+       1260, 1417,
+       1276, 1424,
+       1277, 1426,
+       1278, 1427,
+       1279, 1428,
+       1280, 1429,
+       1281, 1430,
+       1282, 1431,
+       1283, 1432,
+       1284, 1433,
+       1285, 1434,
+       1286, 1435,
+       1287, 1436,
+       1288, 1437,
+       1289, 1438,
+       1290, 1439,
+       1291, 1440,
+       1292, 1441,
+       1293, 1442,
+       1294, 1443,
+       1295, 1444,
+       1296, 1445,
+       1297, 1446,
+       1298, 1447,
+       1308, 1456,
+       1309, 1457,
+       1312, 1459,
+       1334, 1482,
+       1359, 1493,
+       1360, 1494,
+       1375, 1499,
+       1376, 1500,
+       1402, 1522,
+       1408, 1525,
+       1410, 1526,
+       1411, 1527,
+       1419, 1533,
+       1425, 1537,
+       1455, 1570,
+       1460, 1572,
+       1466, 1576,
+       1469, 1580,
+       1474, 832,
+       1476, 832,
+       1477, 1589,
+       1488, 1601,
+       1497, 1610,
+       1503, 1616,
+       1518, 1626,
+       1520, 1627,
+       1530, 1633,
+       1562, 1639,
+       1574, 1647,
+       1577, 1648,
+       1582, 832,
+       1585, 832,
+       1588, 832,
+       1608, 1689,
+       1611, 1691,
+       1631, 1701,
+       1694, 1766,
+       1707, 1773,
+       1708, 1774,
+       1712, 1776,
+       1716, 1779,
+       1718, 1780,
+       1734, 1793,
+       1768, 1818,
+       1823, 1863,
+       1824, 1864,
+       1827, 1866,
+       1828, 1867,
+       1829, 1868,
+       1861, 1883,
+       1884, 1894,
+       1888, 1896
 };
 static int parser_goto_row119[] = {
-       264,
-       -1, 96,
-       0, 12,
-       4, 21,
-       15, 21,
-       16, 92,
-       22, 21,
-       23, 92,
-       29, 155,
-       30, 156,
-       32, 159,
-       33, 160,
-       39, 194,
-       44, 201,
-       46, 203,
-       47, 204,
-       77, 245,
-       88, 92,
-       102, 92,
-       108, 267,
-       109, 268,
-       110, 269,
-       111, 270,
-       117, 278,
-       162, 332,
-       163, 333,
-       164, 334,
-       165, 335,
-       205, 439,
-       206, 440,
-       227, 445,
-       228, 446,
-       229, 447,
-       230, 448,
-       236, 461,
-       237, 462,
-       242, 465,
-       265, 490,
-       275, 495,
-       291, 505,
-       292, 507,
-       293, 508,
-       294, 509,
-       295, 510,
-       296, 511,
-       297, 512,
-       298, 513,
-       299, 514,
-       300, 515,
-       301, 516,
-       302, 517,
-       303, 518,
-       304, 519,
-       305, 520,
-       306, 521,
-       307, 522,
-       308, 523,
-       309, 524,
-       310, 525,
-       311, 526,
-       312, 527,
-       313, 528,
-       321, 533,
-       324, 536,
-       325, 537,
-       327, 538,
-       329, 539,
-       331, 541,
-       342, 548,
-       343, 550,
-       344, 551,
-       345, 552,
-       346, 553,
-       347, 554,
-       348, 555,
-       349, 556,
-       350, 557,
-       351, 558,
-       352, 559,
-       353, 560,
-       354, 561,
-       355, 562,
-       356, 563,
-       357, 564,
-       358, 565,
-       359, 566,
-       360, 567,
-       361, 568,
-       362, 569,
-       363, 570,
-       364, 571,
-       378, 585,
-       382, 589,
-       392, 204,
-       425, 601,
-       427, 604,
-       434, 615,
-       435, 616,
-       436, 617,
-       449, 624,
-       450, 625,
-       457, 653,
-       469, 665,
-       474, 668,
-       491, 684,
-       497, 688,
-       501, 691,
-       506, 694,
-       534, 726,
-       540, 732,
-       542, 733,
-       546, 735,
-       549, 737,
-       580, 770,
-       584, 774,
-       591, 787,
-       600, 791,
-       602, 793,
-       619, 804,
-       649, 818,
-       656, 831,
-       663, 842,
-       685, 855,
-       717, 863,
-       727, 871,
-       730, 907,
-       731, 908,
-       768, 918,
-       771, 921,
-       776, 927,
-       782, 933,
-       785, 937,
-       800, 948,
-       801, 949,
-       802, 950,
-       806, 954,
-       814, 961,
-       815, 962,
-       817, 969,
-       854, 999,
-       858, 1004,
-       875, 1018,
-       877, 1020,
-       879, 1023,
-       885, 1029,
-       910, 1046,
-       920, 1055,
-       928, 1064,
-       931, 1066,
-       934, 1068,
-       938, 1071,
-       952, 1118,
-       963, 1130,
-       971, 1137,
-       972, 1144,
-       976, 1147,
-       977, 1148,
-       1006, 1172,
-       1007, 1173,
-       1032, 1186,
-       1045, 1197,
-       1051, 1200,
-       1052, 1201,
-       1056, 1204,
-       1070, 1217,
-       1077, 1222,
-       1078, 1223,
-       1080, 1225,
-       1081, 1226,
-       1082, 1227,
-       1083, 1228,
-       1102, 1248,
-       1123, 1277,
-       1128, 1285,
-       1132, 1277,
-       1142, 1144,
-       1145, 1309,
-       1166, 1321,
-       1171, 1325,
-       1178, 1329,
-       1179, 1330,
-       1181, 1331,
-       1184, 1336,
-       1198, 1345,
-       1209, 1351,
-       1214, 1352,
-       1233, 1368,
-       1249, 1375,
-       1250, 1377,
-       1251, 1378,
-       1252, 1379,
-       1253, 1380,
-       1254, 1381,
-       1255, 1382,
-       1256, 1383,
-       1257, 1384,
-       1258, 1385,
-       1259, 1386,
-       1260, 1387,
-       1261, 1388,
-       1262, 1389,
-       1263, 1390,
-       1264, 1391,
-       1265, 1392,
-       1266, 1393,
-       1267, 1394,
-       1268, 1395,
-       1269, 1396,
-       1270, 1397,
-       1271, 1398,
-       1278, 1277,
-       1282, 1407,
-       1283, 1408,
-       1286, 1410,
-       1299, 1421,
-       1311, 1454,
-       1312, 1455,
-       1327, 1460,
-       1328, 1461,
-       1353, 1483,
-       1359, 1486,
-       1361, 1487,
-       1362, 1488,
-       1370, 1494,
-       1376, 1498,
-       1406, 1531,
-       1411, 1533,
-       1419, 1538,
-       1422, 1541,
-       1430, 1552,
-       1458, 1565,
-       1464, 1571,
-       1479, 1581,
-       1481, 1582,
-       1491, 1588,
-       1523, 1594,
-       1535, 1602,
-       1544, 818,
-       1546, 818,
-       1547, 1612,
-       1558, 1624,
-       1563, 1631,
-       1566, 1633,
-       1586, 1643,
-       1605, 818,
-       1608, 818,
-       1611, 818,
-       1636, 1702,
-       1649, 1709,
-       1650, 1710,
-       1654, 1712,
-       1658, 1715,
-       1660, 1716,
-       1704, 1760,
-       1723, 1277,
-       1730, 1784,
-       1765, 1812,
-       1766, 1813,
-       1769, 1815,
-       1770, 1816,
-       1771, 1817,
-       1782, 1277,
-       1810, 1848,
-       1849, 1870,
-       1853, 1872
+       4,
+       -1, 15,
+       22, 106,
+       25, 106,
+       165, 106
 };
 static int parser_goto_row120[] = {
        1,
-       -1, 13
+       -1, 16
 };
 static int parser_goto_row121[] = {
-       1,
-       -1, 14
+       4,
+       -1, 982,
+       1587, 1662,
+       1652, 1724,
+       1663, 1744
 };
 static int parser_goto_row122[] = {
-       4,
-       -1, 968,
-       1610, 1672,
-       1662, 1720,
-       1673, 1740
+       13,
+       -1, 442,
+       441, 624,
+       445, 627,
+       626, 813,
+       955, 624,
+       957, 627,
+       1099, 813,
+       1349, 624,
+       1357, 627,
+       1492, 813,
+       1677, 624,
+       1679, 627,
+       1756, 813
 };
 static int parser_goto_row123[] = {
-       13,
-       -1, 430,
-       429, 611,
-       433, 614,
-       613, 799,
-       941, 611,
-       943, 614,
-       1076, 799,
-       1445, 611,
-       1453, 614,
-       1562, 799,
-       1687, 611,
-       1689, 614,
-       1752, 799
+       5,
+       -1, 443,
+       805, 956,
+       1166, 1350,
+       1601, 1678,
+       1645, 1350
 };
 static int parser_goto_row124[] = {
-       5,
-       -1, 431,
-       791, 942,
-       1306, 1446,
-       1600, 1446,
-       1624, 1688
+       1,
+       -1, 1542
 };
 static int parser_goto_row125[] = {
-       1,
-       -1, 1503
+       2,
+       -1, 1125,
+       1883, 1893
 };
 static int parser_goto_row126[] = {
-       2,
-       -1, 1102,
-       1848, 1869
+       1,
+       -1, 1126
 };
 static int parser_goto_row127[] = {
-       1,
-       -1, 1103
+       6,
+       -1, 1127,
+       1253, 1412,
+       1424, 1536,
+       1426, 1538,
+       1427, 1539,
+       1537, 1635
 };
 static int parser_goto_row128[] = {
-       6,
-       -1, 1104,
-       1226, 1363,
-       1375, 1497,
-       1377, 1499,
-       1378, 1500,
-       1498, 1590
+       1,
+       -1, 1128
 };
 static int parser_goto_row129[] = {
-       1,
-       -1, 1105
+       8,
+       -1, 1129,
+       1430, 1544,
+       1431, 1545,
+       1432, 1546,
+       1433, 1547,
+       1434, 1548,
+       1435, 1549,
+       1436, 1550
 };
 static int parser_goto_row130[] = {
-       8,
-       -1, 1106,
-       1381, 1505,
-       1382, 1506,
-       1383, 1507,
-       1384, 1508,
-       1385, 1509,
-       1386, 1510,
-       1387, 1511
+       2,
+       -1, 1130,
+       1429, 1543
 };
 static int parser_goto_row131[] = {
        2,
-       -1, 1107,
-       1380, 1504
+       -1, 1131,
+       1437, 1551
 };
 static int parser_goto_row132[] = {
        2,
-       -1, 1108,
-       1388, 1512
+       -1, 1132,
+       1438, 1552
 };
 static int parser_goto_row133[] = {
-       2,
-       -1, 1109,
-       1389, 1513
+       3,
+       -1, 1133,
+       1439, 1553,
+       1440, 1554
 };
 static int parser_goto_row134[] = {
        3,
-       -1, 1110,
-       1390, 1514,
-       1391, 1515
+       -1, 1134,
+       1441, 1555,
+       1442, 1556
 };
 static int parser_goto_row135[] = {
-       3,
-       -1, 1111,
-       1392, 1516,
-       1393, 1517
+       5,
+       -1, 1135,
+       1443, 1557,
+       1444, 1558,
+       1445, 1559,
+       1446, 1560
 };
 static int parser_goto_row136[] = {
        5,
-       -1, 1112,
-       1394, 1518,
-       1395, 1519,
-       1396, 1520,
-       1397, 1521
+       -1, 1136,
+       1112, 1263,
+       1113, 1264,
+       1114, 1265,
+       1255, 1416
 };
 static int parser_goto_row137[] = {
-       5,
-       -1, 1113,
-       1089, 1236,
-       1090, 1237,
-       1091, 1238,
-       1228, 1367
+       1,
+       -1, 1137
 };
 static int parser_goto_row138[] = {
-       1,
-       -1, 1114
+       2,
+       -1, 1138,
+       1111, 1262
 };
 static int parser_goto_row139[] = {
-       2,
-       -1, 1115,
-       1088, 1235
+       1,
+       -1, -1
 };
 static int parser_goto_row140[] = {
        1,
-       -1, -1
+       -1, 1139
 };
 static int parser_goto_row141[] = {
-       1,
-       -1, 1116
+       4,
+       -1, 389,
+       281, 507,
+       346, 557,
+       509, 701
 };
 static int parser_goto_row142[] = {
-       4,
-       -1, 377,
-       269, 493,
-       334, 544,
-       495, 687
+       1,
+       -1, -1
 };
 static int parser_goto_row143[] = {
        1,
-       -1, -1
+       -1, 1351
 };
 static int parser_goto_row144[] = {
-       1,
-       -1, 1447
+       4,
+       -1, 141,
+       1166, 1352,
+       1610, 1690,
+       1645, 1352
 };
 static int parser_goto_row145[] = {
-       4,
-       -1, 132,
-       1306, 1448,
-       1565, 1632,
-       1600, 1448
+       1,
+       -1, 142
 };
 static int parser_goto_row146[] = {
-       1,
-       -1, 133
+       6,
+       -1, 143,
+       280, 506,
+       519, 707,
+       521, 709,
+       522, 710,
+       708, 875
 };
 static int parser_goto_row147[] = {
-       6,
-       -1, 134,
-       268, 492,
-       505, 693,
-       507, 695,
-       508, 696,
-       694, 861
+       1,
+       -1, 144
 };
 static int parser_goto_row148[] = {
-       1,
-       -1, 135
+       8,
+       -1, 145,
+       525, 713,
+       526, 714,
+       527, 715,
+       528, 716,
+       529, 717,
+       530, 718,
+       531, 719
 };
 static int parser_goto_row149[] = {
-       8,
-       -1, 136,
-       511, 699,
-       512, 700,
-       513, 701,
-       514, 702,
-       515, 703,
-       516, 704,
-       517, 705
+       2,
+       -1, 146,
+       524, 712
 };
 static int parser_goto_row150[] = {
        2,
-       -1, 137,
-       510, 698
+       -1, 147,
+       532, 720
 };
 static int parser_goto_row151[] = {
        2,
-       -1, 138,
-       518, 706
+       -1, 148,
+       533, 721
 };
 static int parser_goto_row152[] = {
-       2,
-       -1, 139,
-       519, 707
+       3,
+       -1, 149,
+       534, 722,
+       535, 723
 };
 static int parser_goto_row153[] = {
        3,
-       -1, 140,
-       520, 708,
-       521, 709
+       -1, 150,
+       536, 724,
+       537, 725
 };
 static int parser_goto_row154[] = {
-       3,
-       -1, 141,
-       522, 710,
-       523, 711
+       5,
+       -1, 151,
+       538, 726,
+       539, 727,
+       540, 728,
+       541, 729
 };
 static int parser_goto_row155[] = {
-       5,
-       -1, 142,
-       524, 712,
-       525, 713,
-       526, 714,
-       527, 715
+       1,
+       -1, 152
 };
 static int parser_goto_row156[] = {
        1,
-       -1, 143
+       -1, 153
 };
 static int parser_goto_row157[] = {
-       1,
-       -1, 144
-};
-static int parser_goto_row158[] = {
        4,
-       -1, 145,
-       116, 277,
-       1306, 1449,
-       1600, 1449
+       -1, 154,
+       125, 289,
+       1166, 1353,
+       1645, 1353
 };
-static int parser_goto_row159[] = {
+static int parser_goto_row158[] = {
        1,
        -1, -1
 };
-static int parser_goto_row160[] = {
+static int parser_goto_row159[] = {
        2,
-       -1, 146,
-       1062, 1212
+       -1, 155,
+       1085, 1239
 };
-static int parser_goto_row161[] = {
+static int parser_goto_row160[] = {
        1,
-       -1, 582
+       -1, 595
 };
-static int parser_goto_row162[] = {
+static int parser_goto_row161[] = {
        7,
-       -1, 583,
-       579, 769,
-       1057, 1205,
-       1203, 1348,
-       1346, 1480,
-       1365, 1490,
-       1489, 1587
+       -1, 596,
+       592, 783,
+       1080, 1232,
+       1230, 1397,
+       1395, 1519,
+       1414, 1529,
+       1528, 1632
 };
-static int parser_goto_row163[] = {
+static int parser_goto_row162[] = {
        1,
-       -1, 773
+       -1, 787
 };
-static int parser_goto_row164[] = {
+static int parser_goto_row163[] = {
        1,
        -1, -1
 };
-static int parser_goto_row165[] = {
+static int parser_goto_row164[] = {
        2,
-       -1, 1450,
-       1600, 1657
+       -1, 1354,
+       1645, 1715
 };
-static int parser_goto_row166[] = {
+static int parser_goto_row165[] = {
        1,
-       -1, 1451
+       -1, 1355
 };
-static int parser_goto_row167[] = {
+static int parser_goto_row166[] = {
        2,
-       -1, 1366,
-       1368, 1493
+       -1, 1415,
+       1417, 1532
+};
+static int parser_goto_row167[] = {
+       1,
+       -1, -1
 };
 static int parser_goto_row168[] = {
        1,
@@ -24609,82 +24913,82 @@ static int parser_goto_row183[] = {
        -1, -1
 };
 static int parser_goto_row184[] = {
-       1,
-       -1, -1
+       8,
+       -1, 1037,
+       892, 1043,
+       1208, 1383,
+       1380, 1504,
+       1502, 1614,
+       1507, 1617,
+       1692, 1765,
+       1817, 1859
 };
 static int parser_goto_row185[] = {
-       8,
-       -1, 1015,
-       878, 1021,
-       1183, 1335,
-       1332, 1465,
-       1463, 1569,
-       1468, 1572,
-       1634, 1701,
-       1759, 1808
+       3,
+       -1, 1038,
+       742, 910,
+       1501, 1613
 };
 static int parser_goto_row186[] = {
-       3,
-       -1, 1016,
-       728, 896,
-       1462, 1568
+       1,
+       -1, 911
 };
 static int parser_goto_row187[] = {
        1,
-       -1, 897
+       -1, 912
 };
 static int parser_goto_row188[] = {
        1,
-       -1, 898
+       -1, 913
 };
 static int parser_goto_row189[] = {
        1,
-       -1, 899
+       -1, 914
 };
 static int parser_goto_row190[] = {
        1,
-       -1, 900
+       -1, 915
 };
 static int parser_goto_row191[] = {
        1,
-       -1, 901
+       -1, 916
 };
 static int parser_goto_row192[] = {
        1,
-       -1, 902
+       -1, 917
 };
 static int parser_goto_row193[] = {
        1,
-       -1, 903
+       -1, -1
 };
 static int parser_goto_row194[] = {
-       1,
-       -1, -1
+       10,
+       -1, 161,
+       37, 168,
+       743, 920,
+       798, 950,
+       888, 1039,
+       892, 1044,
+       1393, 1517,
+       1502, 1615,
+       1507, 1618,
+       1817, 1860
 };
 static int parser_goto_row195[] = {
-       10,
-       -1, 152,
-       31, 158,
-       729, 906,
-       784, 936,
-       874, 1017,
-       878, 1022,
-       1344, 1478,
-       1463, 1570,
-       1468, 1573,
-       1759, 1809
+       1,
+       -1, -1
 };
 static int parser_goto_row196[] = {
        1,
-       -1, -1
+       -1, 444
 };
 static int parser_goto_row197[] = {
        1,
-       -1, 432
+       -1, 1356
 };
 static int parser_goto_row198[] = {
        1,
-       -1, 1452
+       -1, -1
 };
 static int parser_goto_row199[] = {
        1,
@@ -24692,272 +24996,424 @@ static int parser_goto_row199[] = {
 };
 static int parser_goto_row200[] = {
        1,
-       -1, -1
+       -1, 1166
 };
 static int parser_goto_row201[] = {
        1,
-       -1, 1306
+       -1, 17
 };
 static int parser_goto_row202[] = {
        2,
-       -1, 15,
-       4, 22
+       -1, 18,
+       5, 28
 };
 static int parser_goto_row203[] = {
        4,
-       -1, 16,
-       4, 23,
-       15, 88,
-       22, 102
+       -1, 19,
+       5, 29,
+       18, 94,
+       28, 111
 };
 static int parser_goto_row204[] = {
        8,
-       -1, 17,
-       4, 24,
-       15, 89,
-       16, 93,
-       22, 103,
-       23, 105,
-       88, 256,
-       102, 262
+       -1, 20,
+       5, 30,
+       18, 95,
+       19, 99,
+       28, 112,
+       29, 114,
+       94, 265,
+       111, 274
 };
 static int parser_goto_row205[] = {
        1,
-       -1, 1422
+       -1, 1471
 };
 static int parser_goto_row206[] = {
        1,
-       -1, 1145
+       -1, 994
 };
 static int parser_goto_row207[] = {
-       1,
-       -1, 1286
+       4,
+       -1, 1304,
+       1154, 1319,
+       1727, 1785,
+       1791, 1836
 };
 static int parser_goto_row208[] = {
        1,
-       -1, 1413
+       -1, 1312
 };
 static int parser_goto_row209[] = {
        1,
-       -1, 1054
+       -1, 1462
 };
 static int parser_goto_row210[] = {
-       3,
-       -1, 235,
-       319, 532,
-       1037, 1191
+       1,
+       -1, 1077
 };
 static int parser_goto_row211[] = {
-       1,
-       -1, 605
+       3,
+       -1, 243,
+       331, 546,
+       1060, 1218
 };
 static int parser_goto_row212[] = {
        1,
-       -1, 621
+       -1, 618
 };
 static int parser_goto_row213[] = {
        1,
-       -1, 244
+       -1, 634
 };
 static int parser_goto_row214[] = {
        1,
-       -1, 930
+       -1, 252
 };
 static int parser_goto_row215[] = {
        1,
-       -1, 1278
+       -1, 944
 };
 static int parser_goto_row216[] = {
        2,
-       -1, 1355,
-       1451, 1560
+       -1, 1404,
+       1355, 1490
 };
 static int parser_goto_row217[] = {
        1,
-       -1, 860
+       -1, 874
 };
 static int parser_goto_row218[] = {
-       169,
-       -1, 187,
-       12, 81,
-       21, 81,
-       25, 147,
-       27, 81,
-       31, 81,
-       49, 147,
-       92, 81,
-       96, 81,
-       116, 147,
-       151, 81,
-       203, 433,
-       234, 81,
-       246, 147,
-       248, 147,
-       249, 147,
-       250, 147,
-       251, 147,
-       268, 147,
-       374, 81,
-       455, 651,
-       460, 81,
-       462, 660,
-       485, 147,
-       486, 147,
-       505, 147,
-       507, 147,
-       508, 147,
-       510, 147,
-       511, 147,
-       512, 147,
-       513, 147,
-       514, 147,
-       515, 147,
-       516, 147,
-       517, 147,
-       518, 147,
-       519, 147,
-       520, 147,
-       521, 147,
-       522, 147,
-       523, 147,
-       524, 147,
-       525, 147,
-       526, 147,
-       527, 147,
-       528, 721,
-       531, 81,
-       571, 763,
-       575, 81,
-       578, 81,
-       624, 809,
-       625, 809,
-       653, 827,
-       655, 147,
-       657, 147,
-       688, 721,
-       694, 147,
-       724, 81,
-       728, 904,
-       729, 81,
-       735, 763,
-       774, 925,
-       784, 81,
-       791, 943,
-       793, 433,
-       837, 147,
-       838, 147,
-       839, 147,
-       840, 147,
-       855, 1002,
-       873, 147,
-       874, 904,
-       876, 81,
-       878, 904,
-       887, 147,
-       895, 81,
-       950, 1117,
-       954, 1120,
-       965, 81,
-       994, 147,
-       995, 147,
-       1014, 81,
-       1033, 147,
-       1034, 147,
-       1035, 147,
-       1039, 81,
-       1040, 147,
-       1041, 147,
-       1066, 433,
-       1088, 1117,
-       1089, 1117,
-       1090, 1117,
-       1091, 1117,
-       1130, 651,
-       1134, 81,
-       1183, 904,
-       1186, 1341,
-       1195, 147,
-       1196, 147,
-       1226, 1117,
-       1228, 1117,
-       1306, 1453,
-       1332, 904,
-       1334, 81,
-       1338, 147,
-       1339, 147,
-       1344, 81,
-       1351, 433,
-       1375, 1117,
-       1377, 1117,
-       1378, 1117,
-       1380, 1117,
-       1381, 1117,
-       1382, 1117,
-       1383, 1117,
-       1384, 1117,
-       1385, 1117,
-       1386, 1117,
-       1387, 1117,
-       1388, 1117,
-       1389, 1117,
-       1390, 1117,
-       1391, 1117,
-       1392, 1117,
-       1393, 1117,
-       1394, 1117,
-       1395, 1117,
-       1396, 1117,
-       1397, 1117,
-       1398, 1527,
-       1414, 651,
-       1462, 904,
-       1463, 904,
-       1468, 904,
-       1472, 147,
-       1473, 147,
-       1474, 147,
-       1475, 147,
-       1483, 433,
-       1494, 1527,
-       1498, 1117,
-       1533, 651,
-       1542, 651,
-       1544, 651,
-       1546, 651,
-       1552, 433,
-       1565, 147,
-       1578, 147,
-       1579, 147,
-       1588, 1646,
-       1600, 1453,
-       1624, 1689,
-       1634, 904,
-       1665, 81,
-       1669, 81,
-       1712, 433,
-       1717, 81,
-       1725, 81,
-       1726, 81,
-       1729, 81,
-       1734, 81,
-       1737, 81,
-       1759, 904,
-       1773, 81,
-       1780, 81,
-       1785, 81,
-       1790, 81,
-       1848, 1117
+       170,
+       -1, 196,
+       13, 83,
+       27, 83,
+       31, 156,
+       33, 83,
+       37, 83,
+       54, 156,
+       98, 83,
+       125, 156,
+       160, 83,
+       212, 445,
+       242, 83,
+       254, 156,
+       256, 156,
+       257, 156,
+       258, 156,
+       259, 156,
+       280, 156,
+       386, 83,
+       467, 664,
+       472, 83,
+       474, 673,
+       497, 156,
+       498, 156,
+       519, 156,
+       521, 156,
+       522, 156,
+       524, 156,
+       525, 156,
+       526, 156,
+       527, 156,
+       528, 156,
+       529, 156,
+       530, 156,
+       531, 156,
+       532, 156,
+       533, 156,
+       534, 156,
+       535, 156,
+       536, 156,
+       537, 156,
+       538, 156,
+       539, 156,
+       540, 156,
+       541, 156,
+       542, 735,
+       545, 83,
+       584, 777,
+       588, 83,
+       591, 83,
+       637, 823,
+       638, 823,
+       666, 841,
+       668, 156,
+       670, 156,
+       702, 735,
+       708, 156,
+       738, 83,
+       742, 918,
+       743, 83,
+       749, 777,
+       788, 939,
+       798, 83,
+       805, 957,
+       807, 445,
+       851, 156,
+       852, 156,
+       853, 156,
+       854, 156,
+       869, 1024,
+       887, 156,
+       888, 918,
+       890, 83,
+       892, 918,
+       901, 156,
+       909, 83,
+       964, 1140,
+       968, 1143,
+       979, 83,
+       1016, 156,
+       1017, 156,
+       1036, 83,
+       1055, 156,
+       1056, 156,
+       1057, 156,
+       1058, 83,
+       1062, 83,
+       1063, 156,
+       1064, 156,
+       1089, 445,
+       1111, 1140,
+       1112, 1140,
+       1113, 1140,
+       1114, 1140,
+       1152, 664,
+       1156, 83,
+       1166, 1357,
+       1208, 918,
+       1211, 1389,
+       1216, 83,
+       1222, 156,
+       1223, 156,
+       1253, 1140,
+       1255, 1140,
+       1380, 918,
+       1382, 83,
+       1386, 156,
+       1387, 156,
+       1393, 83,
+       1400, 445,
+       1424, 1140,
+       1426, 1140,
+       1427, 1140,
+       1429, 1140,
+       1430, 1140,
+       1431, 1140,
+       1432, 1140,
+       1433, 1140,
+       1434, 1140,
+       1435, 1140,
+       1436, 1140,
+       1437, 1140,
+       1438, 1140,
+       1439, 1140,
+       1440, 1140,
+       1441, 1140,
+       1442, 1140,
+       1443, 1140,
+       1444, 1140,
+       1445, 1140,
+       1446, 1140,
+       1447, 1566,
+       1463, 664,
+       1472, 664,
+       1474, 664,
+       1476, 664,
+       1482, 445,
+       1501, 918,
+       1502, 918,
+       1507, 918,
+       1511, 156,
+       1512, 156,
+       1513, 156,
+       1514, 156,
+       1522, 445,
+       1533, 1566,
+       1537, 1140,
+       1572, 664,
+       1601, 1679,
+       1610, 156,
+       1623, 156,
+       1624, 156,
+       1633, 1704,
+       1645, 1357,
+       1655, 83,
+       1659, 83,
+       1692, 918,
+       1721, 83,
+       1729, 83,
+       1730, 83,
+       1733, 83,
+       1738, 83,
+       1741, 83,
+       1776, 445,
+       1782, 83,
+       1789, 83,
+       1794, 83,
+       1799, 83,
+       1817, 918,
+       1883, 1140
 };
 static int parser_goto_row219[] = {
-       2,
-       -1, 18,
-       13, 82
+       78,
+       -1, 164,
+       0, 21,
+       3, 24,
+       5, 21,
+       18, 21,
+       19, 21,
+       20, 24,
+       22, 107,
+       25, 108,
+       28, 21,
+       29, 21,
+       30, 24,
+       33, 24,
+       37, 24,
+       64, 24,
+       94, 21,
+       95, 24,
+       99, 24,
+       104, 24,
+       105, 24,
+       111, 21,
+       112, 24,
+       114, 24,
+       165, 337,
+       243, 24,
+       265, 24,
+       271, 24,
+       274, 24,
+       331, 24,
+       386, 24,
+       546, 24,
+       588, 24,
+       742, 24,
+       743, 24,
+       798, 24,
+       839, 24,
+       888, 24,
+       890, 24,
+       892, 24,
+       979, 24,
+       990, 24,
+       994, 21,
+       1058, 24,
+       1060, 24,
+       1062, 24,
+       1145, 24,
+       1154, 24,
+       1156, 24,
+       1208, 24,
+       1216, 24,
+       1218, 24,
+       1304, 24,
+       1319, 24,
+       1380, 24,
+       1393, 24,
+       1468, 24,
+       1501, 24,
+       1502, 24,
+       1507, 24,
+       1579, 24,
+       1655, 24,
+       1659, 24,
+       1692, 24,
+       1721, 24,
+       1727, 24,
+       1729, 24,
+       1730, 24,
+       1733, 24,
+       1738, 24,
+       1741, 24,
+       1782, 24,
+       1785, 24,
+       1789, 24,
+       1791, 24,
+       1794, 24,
+       1799, 24,
+       1817, 24,
+       1836, 24
 };
 static int parser_goto_row220[] = {
-       3,
-       -1, 19,
-       18, 98,
-       82, 254
+       75,
+       -1, 165,
+       0, 22,
+       3, 25,
+       5, 22,
+       18, 22,
+       19, 22,
+       20, 25,
+       28, 22,
+       29, 22,
+       30, 25,
+       33, 25,
+       37, 25,
+       64, 25,
+       94, 22,
+       95, 25,
+       99, 25,
+       104, 25,
+       105, 25,
+       111, 22,
+       112, 25,
+       114, 25,
+       243, 25,
+       265, 25,
+       271, 25,
+       274, 25,
+       331, 25,
+       386, 25,
+       546, 25,
+       588, 25,
+       742, 25,
+       743, 25,
+       798, 25,
+       839, 25,
+       888, 25,
+       890, 25,
+       892, 25,
+       979, 25,
+       990, 25,
+       994, 22,
+       1058, 25,
+       1060, 25,
+       1062, 25,
+       1145, 25,
+       1154, 25,
+       1156, 25,
+       1208, 25,
+       1216, 25,
+       1218, 25,
+       1304, 25,
+       1319, 25,
+       1380, 25,
+       1393, 25,
+       1468, 25,
+       1501, 25,
+       1502, 25,
+       1507, 25,
+       1579, 25,
+       1655, 25,
+       1659, 25,
+       1692, 25,
+       1721, 25,
+       1727, 25,
+       1729, 25,
+       1730, 25,
+       1733, 25,
+       1738, 25,
+       1741, 25,
+       1782, 25,
+       1785, 25,
+       1789, 25,
+       1791, 25,
+       1794, 25,
+       1799, 25,
+       1817, 25,
+       1836, 25
 };
 
 const int* const parser_goto_table[] = {
index 347c4dc..1f83e61 100644 (file)
@@ -46,7 +46,7 @@ class AndroidProject
 
        init
        do
-               var annots = modelbuilder.collect_annotations_on_modules("min_api_version", mainmodule)
+               var annots = modelbuilder.collect_annotations_on_modules("android_api_min", mainmodule)
                if not annots.is_empty then
                        var i = annots.pop.arg_as_int(modelbuilder)
                        if i == null then i = 0
@@ -58,7 +58,7 @@ class AndroidProject
                        end
                end
 
-               annots = modelbuilder.collect_annotations_on_modules("max_api_version", mainmodule)
+               annots = modelbuilder.collect_annotations_on_modules("android_api_max", mainmodule)
                if not annots.is_empty then
                        var i = annots.pop.arg_as_int(modelbuilder)
                        if i == null then i = 0
@@ -70,7 +70,7 @@ class AndroidProject
                        end
                end
 
-               var annot = modelbuilder.lookup_annotation_on_modules("target_api_version", mainmodule)
+               var annot = modelbuilder.lookup_annotation_on_modules("android_api_target", mainmodule)
                if annot != null then target_api = annot.arg_as_int(modelbuilder) or else 0
 
                annots = modelbuilder.collect_annotations_on_modules("android_manifest", mainmodule)
diff --git a/tests/base_attr_abstract2.nit b/tests/base_attr_abstract2.nit
new file mode 100644 (file)
index 0000000..931f334
--- /dev/null
@@ -0,0 +1,28 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import standard::kernel
+
+abstract class A
+       var x: Int
+       var y: Int is abstract
+end
+
+class B
+       super A
+       redef fun y=(v) do v.output
+end
+
+var b = new B(1,2)
+b.x.output
diff --git a/tests/base_primitive_recv.nit b/tests/base_primitive_recv.nit
new file mode 100644 (file)
index 0000000..a409bd5
--- /dev/null
@@ -0,0 +1,39 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import standard::kernel
+
+
+redef class Int
+       fun foo do self.output
+end
+
+fun bar(i: nullable Int) do i.foo
+
+redef class Float
+       fun foo do self.output
+end
+
+fun baz(i: nullable Float) do i.foo
+
+bar(1)
+baz(1.0)
+
+var a: nullable Object
+
+a = 1
+a.foo
+
+a = 1.0
+a.foo
index 0bd73fd..7a9e9bd 100644 (file)
@@ -23,17 +23,16 @@ var l = 0
 var inw = false
 while not stdin.eof do
        var i = stdin.read_char
-       if i >= 0 then
-               var x = i.ascii
+       if i != null then
                c = c + 1
-               if x > ' ' then
+               if i > ' ' then
                        if not inw then
                                inw = true
                                w = w + 1
                        end
                else
                        inw = false
-                       if x == '\n' then
+                       if i == '\n' then
                                l = l + 1
                        end
                end
index 49599a2..42fe68f 100644 (file)
@@ -4,3 +4,5 @@ websocket_server
 converter
 show_basedir
 langannot
+loops_infinite
+read_entire_file
diff --git a/tests/sav/balanced_brackets.res b/tests/sav/balanced_brackets.res
new file mode 100644 (file)
index 0000000..ea08659
--- /dev/null
@@ -0,0 +1,10 @@
+][[]][ is not well-balanced
+[[]][] is well-balanced
+[]][][ is not well-balanced
+[[[]]] is well-balanced
+[][]][ is not well-balanced
+]][[][ is not well-balanced
+[]]][[ is not well-balanced
+[]][][ is not well-balanced
+[][][] is well-balanced
+][]][[ is not well-balanced
diff --git a/tests/sav/base_attr_abstract2.res b/tests/sav/base_attr_abstract2.res
new file mode 100644 (file)
index 0000000..5f1d0ec
--- /dev/null
@@ -0,0 +1,2 @@
+2
+1
index 5ff1d37..5865ea3 100644 (file)
@@ -9,22 +9,22 @@ base_formal_subtype.nit:58,10--19: Warning: expression is already a `VE` since i
 base_formal_subtype.nit:59,10--18: Warning: expression is already a `E` since it is a `VVE`.
 base_formal_subtype.nit:60,10--23: Warning: expression is already a `Object` since it is a `VVE`.
 base_formal_subtype.nit:62,10--20: Warning: expression is already a `VGE`.
-base_formal_subtype.nit:63,10--20: Warning: expression is already a `G[E]` since it is a `VGE`.
-base_formal_subtype.nit:64,10--25: Warning: expression is already a `G[Object]` since it is a `VGE`.
+base_formal_subtype.nit:63,10--21: Warning: expression is already a `G[E]` since it is a `VGE`.
+base_formal_subtype.nit:64,10--26: Warning: expression is already a `G[Object]` since it is a `VGE`.
 base_formal_subtype.nit:65,10--23: Warning: expression is already a `Object` since it is a `VGE`.
 base_formal_subtype.nit:67,10--22: Warning: expression is already a `VVGE`.
 base_formal_subtype.nit:68,10--21: Warning: expression is already a `VGE` since it is a `VVGE`.
-base_formal_subtype.nit:69,10--21: Warning: expression is already a `G[E]` since it is a `VVGE`.
-base_formal_subtype.nit:70,10--26: Warning: expression is already a `G[Object]` since it is a `VVGE`.
+base_formal_subtype.nit:69,10--22: Warning: expression is already a `G[E]` since it is a `VVGE`.
+base_formal_subtype.nit:70,10--27: Warning: expression is already a `G[Object]` since it is a `VVGE`.
 base_formal_subtype.nit:71,10--24: Warning: expression is already a `Object` since it is a `VVGE`.
 base_formal_subtype.nit:73,10--22: Warning: expression is already a `VGVE`.
-base_formal_subtype.nit:74,10--22: Warning: expression is already a `G[VE]` since it is a `VGVE`.
-base_formal_subtype.nit:75,10--21: Warning: expression is already a `G[E]` since it is a `VGVE`.
-base_formal_subtype.nit:76,10--26: Warning: expression is already a `G[Object]` since it is a `VGVE`.
+base_formal_subtype.nit:74,10--23: Warning: expression is already a `G[VE]` since it is a `VGVE`.
+base_formal_subtype.nit:75,10--22: Warning: expression is already a `G[E]` since it is a `VGVE`.
+base_formal_subtype.nit:76,10--27: Warning: expression is already a `G[Object]` since it is a `VGVE`.
 base_formal_subtype.nit:77,10--24: Warning: expression is already a `Object` since it is a `VGVE`.
 base_formal_subtype.nit:79,10--24: Warning: expression is already a `VGVVE`.
-base_formal_subtype.nit:80,10--24: Warning: expression is already a `G[VVE]` since it is a `VGVVE`.
-base_formal_subtype.nit:81,10--23: Warning: expression is already a `G[VE]` since it is a `VGVVE`.
-base_formal_subtype.nit:82,10--22: Warning: expression is already a `G[E]` since it is a `VGVVE`.
-base_formal_subtype.nit:83,10--27: Warning: expression is already a `G[Object]` since it is a `VGVVE`.
+base_formal_subtype.nit:80,10--25: Warning: expression is already a `G[VVE]` since it is a `VGVVE`.
+base_formal_subtype.nit:81,10--24: Warning: expression is already a `G[VE]` since it is a `VGVVE`.
+base_formal_subtype.nit:82,10--23: Warning: expression is already a `G[E]` since it is a `VGVVE`.
+base_formal_subtype.nit:83,10--28: Warning: expression is already a `G[Object]` since it is a `VGVVE`.
 base_formal_subtype.nit:84,10--25: Warning: expression is already a `Object` since it is a `VGVVE`.
index ab2b981..1c07e6e 100644 (file)
@@ -1 +1 @@
-alt/base_gen2_alt1.nit:61,13--17: Type Error: `A` is not a generic class.
+alt/base_gen2_alt1.nit:61,13--18: Type Error: `A` is not a generic class.
index 08000b1..5693f2b 100644 (file)
@@ -1 +1 @@
-alt/base_gen2_alt3.nit:63,13--22: Type Error: expected 1 formal argument(s) for `B[E: nullable Object]`; got 2.
+alt/base_gen2_alt3.nit:63,13--23: Type Error: expected 1 formal argument(s) for `B[E: nullable Object]`; got 2.
index 77eb2ca..eaad7c9 100644 (file)
@@ -1 +1 @@
-alt/base_gen2_alt5.nit:65,13--17: Type Error: expected 2 formal argument(s) for `C[F: nullable Object, G: nullable Object]`; got 1.
+alt/base_gen2_alt5.nit:65,13--18: Type Error: expected 2 formal argument(s) for `C[F: nullable Object, G: nullable Object]`; got 1.
index e8ade92..989bc61 100644 (file)
@@ -1,4 +1,4 @@
 base_isa_gen1.nit:62,8--14: Warning: expression is already a `A` since it is a `F`.
-base_isa_gen1.nit:65,8--29: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
-base_isa_gen1.nit:66,8--29: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
+base_isa_gen1.nit:65,8--30: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
+base_isa_gen1.nit:66,8--30: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
 true
index 1994474..6dde482 100644 (file)
@@ -1,5 +1,5 @@
-base_isa_gen2.nit:39,8--21: Warning: expression is already a `A[Object]`.
-base_isa_gen2.nit:41,8--21: Warning: expression is already a `A[Object]` since it is a `B[Object]`.
-base_isa_gen2.nit:44,8--21: Warning: expression is already a `A[Object]` since it is a `C[Object]`.
-base_isa_gen2.nit:48,8--21: Warning: expression is already a `A[Object]` since it is a `D[Object, Object]`.
+base_isa_gen2.nit:39,8--22: Warning: expression is already a `A[Object]`.
+base_isa_gen2.nit:41,8--22: Warning: expression is already a `A[Object]` since it is a `B[Object]`.
+base_isa_gen2.nit:44,8--22: Warning: expression is already a `A[Object]` since it is a `C[Object]`.
+base_isa_gen2.nit:48,8--22: Warning: expression is already a `A[Object]` since it is a `D[Object, Object]`.
 true
index 427c827..8725a4a 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen4.nit:34,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen4.nit:36,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen4.nit:40,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen4.nit:42,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen4.nit:36,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen4.nit:40,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen4.nit:42,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 true
index 6e347f5..c391776 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen5.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen5.nit:41,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen5.nit:46,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen5.nit:48,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen5.nit:41,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen5.nit:46,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen5.nit:48,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 true
index 1569432..0e4a6ca 100644 (file)
@@ -1,10 +1,10 @@
-base_isa_gen8.nit:49,8--17: Warning: expression is already a `A[X]`.
-base_isa_gen8.nit:50,8--17: Warning: expression is already a `A[Y]`.
-base_isa_gen8.nit:51,8--17: Warning: expression is already a `A[Z]`.
-base_isa_gen8.nit:53,8--21: Warning: expression is already a `B[Object]` since it is a `B[X]`.
-base_isa_gen8.nit:55,8--21: Warning: expression is already a `C[X, X]`.
-base_isa_gen8.nit:56,8--21: Warning: expression is already a `C[X, Y]`.
-base_isa_gen8.nit:57,8--21: Warning: expression is already a `C[X, Z]`.
-base_isa_gen8.nit:59,8--22: Warning: expression is already a `D[X, Y, Z]`.
-base_isa_gen8.nit:60,8--28: Warning: expression is already a `E[X, Y, Z, Bool]`.
+base_isa_gen8.nit:49,8--18: Warning: expression is already a `A[X]`.
+base_isa_gen8.nit:50,8--18: Warning: expression is already a `A[Y]`.
+base_isa_gen8.nit:51,8--18: Warning: expression is already a `A[Z]`.
+base_isa_gen8.nit:53,8--22: Warning: expression is already a `B[Object]` since it is a `B[X]`.
+base_isa_gen8.nit:55,8--22: Warning: expression is already a `C[X, X]`.
+base_isa_gen8.nit:56,8--22: Warning: expression is already a `C[X, Y]`.
+base_isa_gen8.nit:57,8--22: Warning: expression is already a `C[X, Z]`.
+base_isa_gen8.nit:59,8--23: Warning: expression is already a `D[X, Y, Z]`.
+base_isa_gen8.nit:60,8--29: Warning: expression is already a `E[X, Y, Z, Bool]`.
 true
index ae76751..2b455c4 100644 (file)
@@ -1,6 +1,6 @@
 base_isa_nullable1.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Integer]`.
-base_isa_nullable1.nit:41,8--24: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
-base_isa_nullable1.nit:46,8--25: Warning: expression is already a `B[B[Integer]]`.
-base_isa_nullable1.nit:48,8--26: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
-base_isa_nullable1.nit:50,8--33: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
+base_isa_nullable1.nit:41,8--25: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
+base_isa_nullable1.nit:46,8--27: Warning: expression is already a `B[B[Integer]]`.
+base_isa_nullable1.nit:48,8--28: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
+base_isa_nullable1.nit:50,8--34: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
 true
index b4b3d25..947e8c1 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_nullable2.nit:27,8--23: Warning: expression is already a `nullable A` since it is a `A`.
-base_isa_nullable2.nit:29,8--30: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
-base_isa_nullable2.nit:30,8--39: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
-base_isa_nullable2.nit:33,8--30: Warning: expression is already a `C[nullable Object]`.
+base_isa_nullable2.nit:29,8--31: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
+base_isa_nullable2.nit:30,8--40: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
+base_isa_nullable2.nit:33,8--31: Warning: expression is already a `C[nullable Object]`.
 true
index 3ba9f50..a2b07bc 100644 (file)
@@ -1,6 +1,6 @@
-base_isa_vt_gen1.nit:30,10--34: Warning: expression is already a `Triple[T, U, V]`.
-base_isa_vt_gen1.nit:54,8--52: Warning: expression is already a `Triple[String, Int, nullable Object]`.
-base_isa_vt_gen1.nit:57,8--46: Warning: expression is already a `Triple[String, String, String]`.
-base_isa_vt_gen1.nit:60,8--48: Warning: expression is already a `Triple[String, String, B[String]]`.
-base_isa_vt_gen1.nit:63,8--46: Warning: expression is already a `Triple[String, String, String]`.
+base_isa_vt_gen1.nit:30,10--35: Warning: expression is already a `Triple[T, U, V]`.
+base_isa_vt_gen1.nit:54,8--53: Warning: expression is already a `Triple[String, Int, nullable Object]`.
+base_isa_vt_gen1.nit:57,8--47: Warning: expression is already a `Triple[String, String, String]`.
+base_isa_vt_gen1.nit:60,8--50: Warning: expression is already a `Triple[String, String, B[String]]`.
+base_isa_vt_gen1.nit:63,8--47: Warning: expression is already a `Triple[String, String, String]`.
 true
diff --git a/tests/sav/base_primitive_recv.res b/tests/sav/base_primitive_recv.res
new file mode 100644 (file)
index 0000000..f70f395
--- /dev/null
@@ -0,0 +1,4 @@
+1
+1.000000
+1
+1.000000
index 319de47..bae2431 100644 (file)
@@ -1 +1 @@
-error_formal.nit:18,9--13: Type Error: formal type `T` cannot have formal parameters.
+error_formal.nit:18,9--14: Type Error: formal type `T` cannot have formal parameters.
index 623beb3..3687868 100644 (file)
@@ -1 +1 @@
-alt/error_needed_method_alt2.nit:47,10--27: Type Error: cannot instantiate interface `Collection[Int]`.
+alt/error_needed_method_alt2.nit:47,10--28: Type Error: cannot instantiate interface `Collection[Int]`.
index 1949e18..69708db 100644 (file)
@@ -23,7 +23,7 @@ error_operators.nit:46,10: Syntax Error: binary operator `>=` requires exactly o
 error_operators.nit:47,11: Syntax Error: binary operator `<=>` requires exactly one parameter; got 0.
 error_operators.nit:48,10: Syntax Error: binary operator `<<` requires exactly one parameter; got 0.
 error_operators.nit:49,10: Syntax Error: binary operator `>>` requires exactly one parameter; got 0.
-error_operators.nit:50,14: Syntax Error: `foo=` requires at least 1 parameter(s); got 0.
+error_operators.nit:50,11: Syntax Error: `foo=` requires at least 1 parameter(s); got 0.
 error_operators.nit:51,10: Syntax Error: `[]` requires at least 1 parameter(s); got 0.
 error_operators.nit:52,9--14: Syntax Error: `[]=` requires at least 2 parameter(s); got 1.
 error_operators.nit:57,7--18: Syntax Error: binary operator `+` requires exactly one parameter; got 3.
index e00f31a..8c231e7 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt2_alt1.nit:26,18: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt1::A::f1`.
+alt/error_redef_1alt2_alt1.nit:26,15: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt1::A::f1`.
index 618b516..8c19f5a 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt2_alt4.nit:29,18: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt4::A::f1`.
+alt/error_redef_1alt2_alt4.nit:29,15: Redef Error: expected 1 parameter(s) for `f1(i: Int)`; got 0. See introduction at `error_redef_1alt2_alt4::A::f1`.
index b835f2c..8af74ef 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt4_alt1.nit:26,18: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt1::A::f1`.
+alt/error_redef_1alt4_alt1.nit:26,15: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt1::A::f1`.
index f957017..4391f63 100644 (file)
@@ -1 +1 @@
-alt/error_redef_1alt4_alt4.nit:29,18: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt4::A::f1`.
+alt/error_redef_1alt4_alt4.nit:29,15: Redef Error: expected 1 parameter(s) for `f1(i: Int): Int`; got 0. See introduction at `error_redef_1alt4_alt4::A::f1`.
index d970d0e..ab9e44c 100644 (file)
@@ -1,2 +1,2 @@
 alt/error_type_unk_alt2.nit:9,8--11: Error: class `Fail` not found in module `error_type_unk_alt2`.
-alt/error_type_unk_alt2.nit:11,8--13: Error: class `Fail` not found in module `error_type_unk_alt2`.
+alt/error_type_unk_alt2.nit:11,8--14: Error: class `Fail` not found in module `error_type_unk_alt2`.
index ab1b279..92b9dfd 100644 (file)
@@ -1 +1 @@
-error_virtual_type2.nit:40,17--26: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
+error_virtual_type2.nit:40,17--27: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
index cbecfd2..102039e 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt1.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> T.
+alt/error_virtual_type2_alt1.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> T <-> T.
 alt/error_virtual_type2_alt1.nit:25,2--10: Error: circularity of virtual type definition: T <-> T.
 alt/error_virtual_type2_alt1.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt1.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt1.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt1.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 64d40fb..a591422 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt2.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> nullable T.
+alt/error_virtual_type2_alt2.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> T <-> nullable T.
 alt/error_virtual_type2_alt2.nit:25,2--26,19: Error: circularity of virtual type definition: T <-> nullable T.
 alt/error_virtual_type2_alt2.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt2.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt2.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt2.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index d0f163d..0a01c3d 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt3.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> G[T] <-> T.
-alt/error_virtual_type2_alt3.nit:25,2--27,12: Error: circularity of virtual type definition: T <-> G[T].
+alt/error_virtual_type2_alt3.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> G[T] <-> T.
+alt/error_virtual_type2_alt3.nit:25,2--27,13: Error: circularity of virtual type definition: T <-> G[T].
 alt/error_virtual_type2_alt3.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt3.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt3.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt3.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 521bd6a..4d60ab3 100644 (file)
@@ -1,4 +1,4 @@
 alt/error_virtual_type2_alt4.nit:29,10--13: Error: class `FAIL` not found in module `error_virtual_type2_alt4`.
 alt/error_virtual_type2_alt4.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt4.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt4.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt4.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 5d3086a..62974d7 100644 (file)
@@ -1,5 +1,5 @@
-alt/error_virtual_type2_alt5.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> U.
+alt/error_virtual_type2_alt5.nit:22,2--24,14: Error: circularity of virtual type definition: GT -> T <-> U.
 alt/error_virtual_type2_alt5.nit:25,2--30,10: Error: circularity of virtual type definition: T <-> U.
 alt/error_virtual_type2_alt5.nit:38,23: Redef Error: expected `Comparable` for return type; got `T`.
-alt/error_virtual_type2_alt5.nit:40,17--26: Redef Error: expected `null` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt5.nit:40,17--27: Redef Error: expected `null` bound type; got `G[Discrete]`.
 alt/error_virtual_type2_alt5.nit:42,23: Redef Error: expected `Comparable` for return type; got `T`.
index 964af31..48dc700 100644 (file)
@@ -1,2 +1,2 @@
-alt/error_virtual_type2_alt6.nit:40,17--26: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
-alt/error_virtual_type2_alt6.nit:41,2--22: Error: a property `GT` is already defined in class `B` at line 39.
+alt/error_virtual_type2_alt6.nit:40,17--27: Redef Error: expected `G[T]` bound type; got `G[Discrete]`.
+alt/error_virtual_type2_alt6.nit:41,2--23: Error: a property `GT` is already defined in class `B` at line 39.
index 359a845..7514f5f 100644 (file)
@@ -1,2 +1,2 @@
 alt/error_virtual_type_alt3.nit:25,12: Type Error: expected `Object`, got `T`.
-alt/error_virtual_type_alt3.nit:22,2--25,12: Error: circularity of virtual type definition: T <-> G[T].
+alt/error_virtual_type_alt3.nit:22,2--25,13: Error: circularity of virtual type definition: T <-> G[T].
diff --git a/tests/sav/loops_break.res b/tests/sav/loops_break.res
new file mode 100644 (file)
index 0000000..13600be
--- /dev/null
@@ -0,0 +1,31 @@
+16
+7
+15
+15
+18
+3
+6
+15
+5
+11
+9
+12
+7
+10
+19
+18
+12
+14
+2
+12
+0
+4
+2
+16
+3
+8
+2
+2
+19
+4
+10
diff --git a/tests/sav/loops_continue.res b/tests/sav/loops_continue.res
new file mode 100644 (file)
index 0000000..0865d3f
--- /dev/null
@@ -0,0 +1,2 @@
+1, 2, 3, 4, 5
+6, 7, 8, 9, 10
diff --git a/tests/sav/loops_do_while.res b/tests/sav/loops_do_while.res
new file mode 100644 (file)
index 0000000..b414108
--- /dev/null
@@ -0,0 +1,6 @@
+1
+2
+3
+4
+5
+6
diff --git a/tests/sav/loops_downward_for.res b/tests/sav/loops_downward_for.res
new file mode 100644 (file)
index 0000000..30b148d
--- /dev/null
@@ -0,0 +1,11 @@
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
+0
diff --git a/tests/sav/loops_for.res b/tests/sav/loops_for.res
new file mode 100644 (file)
index 0000000..9a639e0
--- /dev/null
@@ -0,0 +1,5 @@
+*
+**
+***
+****
+*****
diff --git a/tests/sav/loops_n_plus_one_half.res b/tests/sav/loops_n_plus_one_half.res
new file mode 100644 (file)
index 0000000..52f7392
--- /dev/null
@@ -0,0 +1,2 @@
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
diff --git a/tests/sav/loops_while.res b/tests/sav/loops_while.res
new file mode 100644 (file)
index 0000000..10dca53
--- /dev/null
@@ -0,0 +1,11 @@
+2014
+1007
+503
+251
+125
+62
+31
+15
+7
+3
+1
index b929fb0..4000211 100644 (file)
@@ -1,4 +1,4 @@
 base_isa_gen1.nit:62,8--14: Warning: expression is already a `A` since it is a `F`.
-base_isa_gen1.nit:65,8--29: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
-base_isa_gen1.nit:66,8--29: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
+base_isa_gen1.nit:65,8--30: Warning: expression is already a `D[Object, Object]` since it is a `G[Object]`.
+base_isa_gen1.nit:66,8--30: Warning: expression is already a `D[Object, Object]` since it is a `E[F]`.
 Runtime error: Assert failed (base_isa_gen1.nit:68)
index 47f5a1a..203c263 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen4.nit:34,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen4.nit:36,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen4.nit:40,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen4.nit:42,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen4.nit:36,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen4.nit:40,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen4.nit:42,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 Runtime error: Assert failed (base_isa_gen4.nit:37)
index 74ee1c6..26754cf 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_gen5.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Canard]`.
-base_isa_gen5.nit:41,8--22: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
-base_isa_gen5.nit:46,8--24: Warning: expression is already a `B[B[Canard]]`.
-base_isa_gen5.nit:48,8--24: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
+base_isa_gen5.nit:41,8--23: Warning: expression is already a `B[Animal]` since it is a `B[Canard]`.
+base_isa_gen5.nit:46,8--26: Warning: expression is already a `B[B[Canard]]`.
+base_isa_gen5.nit:48,8--26: Warning: expression is already a `B[B[Animal]]` since it is a `B[B[Canard]]`.
 Runtime error: Assert failed (base_isa_gen5.nit:42)
index 1b28872..ff43ba5 100644 (file)
@@ -1,6 +1,6 @@
 base_isa_nullable1.nit:39,8--15: Warning: expression is already a `A` since it is a `B[Integer]`.
-base_isa_nullable1.nit:41,8--24: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
-base_isa_nullable1.nit:46,8--25: Warning: expression is already a `B[B[Integer]]`.
-base_isa_nullable1.nit:48,8--26: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
-base_isa_nullable1.nit:50,8--33: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
+base_isa_nullable1.nit:41,8--25: Warning: expression is already a `B[Discrete]` since it is a `B[Integer]`.
+base_isa_nullable1.nit:46,8--27: Warning: expression is already a `B[B[Integer]]`.
+base_isa_nullable1.nit:48,8--28: Warning: expression is already a `B[B[Discrete]]` since it is a `B[B[Integer]]`.
+base_isa_nullable1.nit:50,8--34: Warning: expression is already a `B[nullable Discrete]` since it is a `B[Discrete]`.
 Runtime error: Assert failed (base_isa_nullable1.nit:42)
index 5255183..84216d5 100644 (file)
@@ -1,5 +1,5 @@
 base_isa_nullable2.nit:27,8--23: Warning: expression is already a `nullable A` since it is a `A`.
-base_isa_nullable2.nit:29,8--30: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
-base_isa_nullable2.nit:30,8--39: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
-base_isa_nullable2.nit:33,8--30: Warning: expression is already a `C[nullable Object]`.
+base_isa_nullable2.nit:29,8--31: Warning: expression is already a `nullable B[Object]` since it is a `B[Object]`.
+base_isa_nullable2.nit:30,8--40: Warning: expression is already a `nullable B[nullable Object]` since it is a `nullable B[Object]`.
+base_isa_nullable2.nit:33,8--31: Warning: expression is already a `C[nullable Object]`.
 Runtime error: Assert failed (base_isa_nullable2.nit:32)
index ff615b1..4217115 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index ff615b1..4217115 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index 195a36c..53a12e3 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index 040a8df..60bf2d1 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index efb0ccc..32f461f 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index 73ce784..c3c9801 100644 (file)
@@ -402,41 +402,41 @@ Distribution of direct smallers
   <=8: sub-population=1 (14.28%); cumulated value=6 (100.00%)
 --- AST Metrics ---
 ## All nodes of the AST
- population: 48
+ population: 50
  minimum value: 1
  maximum value: 40
- total value: 261
- average value: 5.43
+ total value: 270
+ average value: 5.40
  distribution:
-  <=1: sub-population=15 (31.25%); cumulated value=15 (5.74%)
-  <=2: sub-population=5 (10.41%); cumulated value=10 (3.83%)
-  <=4: sub-population=10 (20.83%); cumulated value=32 (12.26%)
-  <=8: sub-population=10 (20.83%); cumulated value=64 (24.52%)
-  <=16: sub-population=4 (8.33%); cumulated value=44 (16.85%)
-  <=32: sub-population=3 (6.25%); cumulated value=56 (21.45%)
-  <=64: sub-population=1 (2.08%); cumulated value=40 (15.32%)
+  <=1: sub-population=16 (32.00%); cumulated value=16 (5.92%)
+  <=2: sub-population=5 (10.00%); cumulated value=10 (3.70%)
+  <=4: sub-population=9 (18.00%); cumulated value=28 (10.37%)
+  <=8: sub-population=12 (24.00%); cumulated value=76 (28.14%)
+  <=16: sub-population=4 (8.00%); cumulated value=44 (16.29%)
+  <=32: sub-population=3 (6.00%); cumulated value=56 (20.74%)
+  <=64: sub-population=1 (2.00%); cumulated value=40 (14.81%)
  list:
-  TId: 40 (15.32%)
-  APublicVisibility: 19 (7.27%)
-  AListExprs: 19 (7.27%)
-  ACallExpr: 18 (6.89%)
-  TClassid: 15 (5.74%)
-  TNumber: 10 (3.83%)
-  ADecIntExpr: 10 (3.83%)
-  AType: 9 (3.44%)
-  TKwend: 8 (3.06%)
-  ASignature: 8 (3.06%)
+  TId: 40 (14.81%)
+  APublicVisibility: 19 (7.03%)
+  AListExprs: 19 (7.03%)
+  ACallExpr: 18 (6.66%)
+  TClassid: 15 (5.55%)
+  TNumber: 10 (3.70%)
+  ADecIntExpr: 10 (3.70%)
+  AType: 9 (3.33%)
+  TKwend: 8 (2.96%)
+  ASignature: 8 (2.96%)
   ...
-  ACallAssignExpr: 1 (0.38%)
-  AAnnotations: 1 (0.38%)
-  AReturnExpr: 1 (0.38%)
-  TKwreturn: 1 (0.38%)
-  AInterfaceClasskind: 1 (0.38%)
-  TKwinterface: 1 (0.38%)
-  ANoImport: 1 (0.38%)
-  AMainMethPropdef: 1 (0.38%)
-  AMainClassdef: 1 (0.38%)
-  TKwimport: 1 (0.38%)
+  ASelfExpr: 1 (0.37%)
+  AAnnotations: 1 (0.37%)
+  ACallAssignExpr: 1 (0.37%)
+  TKwreturn: 1 (0.37%)
+  AInterfaceClasskind: 1 (0.37%)
+  TKwinterface: 1 (0.37%)
+  ANoImport: 1 (0.37%)
+  AMainMethPropdef: 1 (0.37%)
+  AMainClassdef: 1 (0.37%)
+  TKwimport: 1 (0.37%)
 ## All identifiers of the AST
  population: 20
  minimum value: 1
index 7a8fe04..b63845a 100644 (file)
@@ -34,9 +34,8 @@ fun errno: Int is extern `{
        return errno;
 `}
 
-fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is extern `{
-        return errno;
-`}
+fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is
+       extern `{ return errno; `}
 
 private class A
        var my_attr = 1234
index b69dc33..22ebc32 100644 (file)
@@ -13,6 +13,9 @@ redef class Deserializer
                if name == "Array[nullable Object]" then return new Array[nullable Object].from_deserializer(self)
                if name == "Array[Serializable]" then return new Array[Serializable].from_deserializer(self)
                if name == "Array[String]" then return new Array[String].from_deserializer(self)
+               if name == "StrictHashMap[Serializable, Int]" then return new StrictHashMap[Serializable, Int].from_deserializer(self)
+               if name == "HashMap[Serializable, Array[Couple[Serializable, Int]]]" then return new HashMap[Serializable, Array[Couple[Serializable, Int]]].from_deserializer(self)
+               if name == "Array[Couple[Serializable, Int]]" then return new Array[Couple[Serializable, Int]].from_deserializer(self)
                return super
        end
 end
index f8d4f23..cef4d20 100644 (file)
@@ -1,4 +1,4 @@
-test_nitunit3/README.md: Error: there is a block of invalid Nit code, thus not considered a nitunit. To suppress this warning, enclose the block with a fence tagged `nitish` or `raw` (see `man nitdoc`). At 1,1: Syntax Error: unknown token `;`..
+test_nitunit3/README.md: Error: there is a block of invalid Nit code, thus not considered a nitunit. To suppress this warning, enclose the block with a fence tagged `nitish` or `raw` (see `man nitdoc`). At 1,2--4: Syntax Error: unexpected malformed character '\]..
 test_nitunit3/README.md: ERROR: nitunit.test_nitunit3.<group> (in .nitunit/test_nitunit3-0.nit): Runtime error: Assert failed (.nitunit/test_nitunit3-0.nit:7)
 
 DocUnits:
@@ -7,7 +7,7 @@ Entities: 2; Documented ones: 2; With nitunits: 2; Failures: 2
 TestSuites:
 No test cases found
 Class suites: 0; Test Cases: 0; Failures: 0
-<testsuites><testsuite package="test_nitunit3"><testcase classname="nitunit.test_nitunit3" name="&lt;group&gt;"><failure message="test_nitunit3&#47;README.md: Invalid block of code. At 1,1: Syntax Error: unknown token `;`.."></failure><system-err></system-err><system-out>assert false
+<testsuites><testsuite package="test_nitunit3"><testcase classname="nitunit.test_nitunit3" name="&lt;group&gt;"><failure message="test_nitunit3&#47;README.md: Invalid block of code. At 1,2--4: Syntax Error: unexpected malformed character &#39;\].."></failure><system-err></system-err><system-out>assert false
 assert true
 </system-out><error message="Runtime error: Assert failed (.nitunit&#47;test_nitunit3-0.nit:7)
 "></error></testcase></testsuite><testsuite package="test_nitunit3"><testcase classname="nitunit.test_nitunit3.&lt;module&gt;" name="&lt;module&gt;"><system-err></system-err><system-out>assert true
diff --git a/tests/sav/syntax_semi.res b/tests/sav/syntax_semi.res
new file mode 100644 (file)
index 0000000..f00c965
--- /dev/null
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
diff --git a/tests/sav/syntax_semi2.res b/tests/sav/syntax_semi2.res
new file mode 100644 (file)
index 0000000..c1f2b6c
--- /dev/null
@@ -0,0 +1,13 @@
+syntax_semi2.nit:17,9: Warning: superfluous `;`.
+syntax_semi2.nit:18,10: Warning: superfluous `;`.
+syntax_semi2.nit:19,9: Warning: superfluous `;`.
+syntax_semi2.nit:21,1: Warning: superfluous `;`.
+syntax_semi2.nit:22,1: Warning: superfluous `;`.
+syntax_semi2.nit:22,2: Warning: superfluous `;`.
+syntax_semi2.nit:24,1: Warning: superfluous `;`.
+1
+2
+3
+4
+5
+6
diff --git a/tests/sav/syntax_semi2_alt1.res b/tests/sav/syntax_semi2_alt1.res
new file mode 100644 (file)
index 0000000..782ebf0
--- /dev/null
@@ -0,0 +1 @@
+alt/syntax_semi2_alt1.nit:26,3: Syntax Error: unexpected ';'.
index 67755e7..9357190 100644 (file)
@@ -4,7 +4,7 @@ test_attr_easy.nit:19,31--39: Warning: expression is already a `Int`.
 test_attr_easy.nit:19,43--53: Warning: expression is already a `Float`.
 test_attr_easy.nit:20,5--16: Warning: expression is already a `String`.
 test_attr_easy.nit:20,20--26: Warning: expression is already a `B`.
-test_attr_easy.nit:20,44--62: Warning: expression is already a `HashMap[Int, B]`.
+test_attr_easy.nit:20,44--63: Warning: expression is already a `HashMap[Int, B]`.
 true false 12345 1.235 asdf true
 an instance of B
 true true true true
diff --git a/tests/sav/test_binary.res b/tests/sav/test_binary.res
new file mode 100644 (file)
index 0000000..f071d47
--- /dev/null
@@ -0,0 +1,7 @@
+no error
+hello
+77
+1.235
+1.235
+123456789
+no error
diff --git a/tests/sav/test_binary_alt1.res b/tests/sav/test_binary_alt1.res
new file mode 100644 (file)
index 0000000..eb0468f
--- /dev/null
@@ -0,0 +1,7 @@
+no error
+hello
+77
+144545136640.0
+0.0
+1571011930645069824
+no error
diff --git a/tests/sav/test_binary_alt2.res b/tests/sav/test_binary_alt2.res
new file mode 100644 (file)
index 0000000..eb0468f
--- /dev/null
@@ -0,0 +1,7 @@
+no error
+hello
+77
+144545136640.0
+0.0
+1571011930645069824
+no error
diff --git a/tests/sav/test_binary_alt3.res b/tests/sav/test_binary_alt3.res
new file mode 100644 (file)
index 0000000..f071d47
--- /dev/null
@@ -0,0 +1,7 @@
+no error
+hello
+77
+1.235
+1.235
+123456789
+no error
diff --git a/tests/sav/test_coll_eq.res b/tests/sav/test_coll_eq.res
new file mode 100644 (file)
index 0000000..abe1e00
--- /dev/null
@@ -0,0 +1,13 @@
+true
+true
+true
+true
+true
+true
+
+true
+true
+true
+
+true
+hello
index 189c39d..58293c5 100644 (file)
 # Back in Nit:
 <E: 33.33>
 
+# Nit:
+<G: hs: -1, 0; s: one, two; hm: one. 1, two. 2; am: three. 3, four. 4>
+
+# Json:
+{"__kind": "obj", "__id": 0, "__class": "G", "hs": {"__kind": "obj", "__id": 1, "__class": "HashSet[Int]", "__length": 2, "__items": [-1, 0]}, "s": {"__kind": "obj", "__id": 2, "__class": "ArraySet[String]", "__length": 2, "__items": ["one", "two"]}, "hm": {"__kind": "obj", "__id": 3, "__class": "HashMap[String, Int]", "__length": 2, "__keys": ["one", "two"], "__values": [1, 2]}, "am": {"__kind": "obj", "__id": 4, "__class": "ArrayMap[String, String]", "__length": 2, "__keys": ["three", "four"], "__values": ["3", "4"]}}
+
+# Back in Nit:
+<G: hs: -1, 0; s: one, two; hm: one. 1, two. 2; am: three. 3, four. 4>
+
index 1f99f54..9172e4f 100644 (file)
@@ -41,6 +41,7 @@ Start ../src/test_parser.nit:17,1--156,1
         TId "rank" ../src/test_parser.nit:27,14--17
         AType ../src/test_parser.nit:27,20--22
           TClassid "Int" ../src/test_parser.nit:27,20--22
+        TAssign "=" ../src/test_parser.nit:27,24
         ADecIntExpr ../src/test_parser.nit:27,26
           TNumber "0" ../src/test_parser.nit:27,26
       AMethPropdef ../src/test_parser.nit:28,2--38,4
@@ -54,6 +55,7 @@ Start ../src/test_parser.nit:17,1--156,1
           AParam ../src/test_parser.nit:28,18
             TId "n" ../src/test_parser.nit:28,18
           TCpar ")" ../src/test_parser.nit:28,19
+        TKwdo "do" ../src/test_parser.nit:29,2--3
         ABlockExpr ../src/test_parser.nit:30,3--38,4
           AIfExpr ../src/test_parser.nit:30,3--34,5
             TKwif "if" ../src/test_parser.nit:30,3--4
@@ -65,6 +67,7 @@ Start ../src/test_parser.nit:17,1--156,1
               TKwisa "isa" ../src/test_parser.nit:30,8--10
               AType ../src/test_parser.nit:30,12--16
                 TClassid "Token" ../src/test_parser.nit:30,12--16
+            TKwthen "then" ../src/test_parser.nit:30,18--21
             ABlockExpr ../src/test_parser.nit:31,4--88
               ACallExpr ../src/test_parser.nit:31,4--88
                 AImplicitSelfExpr ../src/test_parser.nit:31,4
@@ -110,6 +113,7 @@ Start ../src/test_parser.nit:17,1--156,1
                   AStringExpr ../src/test_parser.nit:31,84--87
                     TString "\"\\n\"" ../src/test_parser.nit:31,84--87
                   TCpar ")" ../src/test_parser.nit:31,88
+            TKwelse "else" ../src/test_parser.nit:32,3--6
             ABlockExpr ../src/test_parser.nit:33,4--34,5
               ACallExpr ../src/test_parser.nit:33,4--59
                 AImplicitSelfExpr ../src/test_parser.nit:33,4
@@ -267,6 +271,7 @@ Start ../src/test_parser.nit:17,1--156,1
                   TEq "==" ../src/test_parser.nit:49,16--17
                   AStringExpr ../src/test_parser.nit:49,19--22
                     TString "\"-n\"" ../src/test_parser.nit:49,19--22
+                TKwthen "then" ../src/test_parser.nit:49,24--27
                 ABlockExpr ../src/test_parser.nit:50,3--17
                   ACallAssignExpr ../src/test_parser.nit:50,3--17
                     AImplicitSelfExpr ../src/test_parser.nit:50,3
@@ -275,6 +280,7 @@ Start ../src/test_parser.nit:17,1--156,1
                     TAssign "=" ../src/test_parser.nit:50,12
                     ATrueExpr ../src/test_parser.nit:50,14--17
                       TKwtrue "true" ../src/test_parser.nit:50,14--17
+                TKwelse "else" ../src/test_parser.nit:51,2--5
                 AIfExpr ../src/test_parser.nit:51,7--66,4
                   TKwif "if" ../src/test_parser.nit:51,7--8
                   AEqExpr ../src/test_parser.nit:51,10--27
@@ -288,6 +294,7 @@ Start ../src/test_parser.nit:17,1--156,1
                     TEq "==" ../src/test_parser.nit:51,21--22
                     AStringExpr ../src/test_parser.nit:51,24--27
                       TString "\"-l\"" ../src/test_parser.nit:51,24--27
+                  TKwthen "then" ../src/test_parser.nit:51,29--32
                   ABlockExpr ../src/test_parser.nit:52,3--19
                     ACallAssignExpr ../src/test_parser.nit:52,3--19
                       AImplicitSelfExpr ../src/test_parser.nit:52,3
@@ -296,6 +303,7 @@ Start ../src/test_parser.nit:17,1--156,1
                       TAssign "=" ../src/test_parser.nit:52,14
                       ATrueExpr ../src/test_parser.nit:52,16--19
                         TKwtrue "true" ../src/test_parser.nit:52,16--19
+                  TKwelse "else" ../src/test_parser.nit:53,2--5
                   AIfExpr ../src/test_parser.nit:53,7--66,4
                     TKwif "if" ../src/test_parser.nit:53,7--8
                     AEqExpr ../src/test_parser.nit:53,10--27
@@ -309,6 +317,7 @@ Start ../src/test_parser.nit:17,1--156,1
                       TEq "==" ../src/test_parser.nit:53,21--22
                       AStringExpr ../src/test_parser.nit:53,24--27
                         TString "\"-p\"" ../src/test_parser.nit:53,24--27
+                    TKwthen "then" ../src/test_parser.nit:53,29--32
                     ABlockExpr ../src/test_parser.nit:54,3--20
                       ACallAssignExpr ../src/test_parser.nit:54,3--20
                         AImplicitSelfExpr ../src/test_parser.nit:54,3
@@ -317,6 +326,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TAssign "=" ../src/test_parser.nit:54,14
                         AFalseExpr ../src/test_parser.nit:54,16--20
                           TKwfalse "false" ../src/test_parser.nit:54,16--20
+                    TKwelse "else" ../src/test_parser.nit:55,2--5
                     AIfExpr ../src/test_parser.nit:55,7--66,4
                       TKwif "if" ../src/test_parser.nit:55,7--8
                       AEqExpr ../src/test_parser.nit:55,10--27
@@ -330,6 +340,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TEq "==" ../src/test_parser.nit:55,21--22
                         AStringExpr ../src/test_parser.nit:55,24--27
                           TString "\"-x\"" ../src/test_parser.nit:55,24--27
+                      TKwthen "then" ../src/test_parser.nit:55,29--32
                       ABlockExpr ../src/test_parser.nit:56,3--12
                         ACallAssignExpr ../src/test_parser.nit:56,3--12
                           AImplicitSelfExpr ../src/test_parser.nit:56,3
@@ -338,6 +349,7 @@ Start ../src/test_parser.nit:17,1--156,1
                           TAssign "=" ../src/test_parser.nit:56,7
                           ATrueExpr ../src/test_parser.nit:56,9--12
                             TKwtrue "true" ../src/test_parser.nit:56,9--12
+                      TKwelse "else" ../src/test_parser.nit:57,2--5
                       AIfExpr ../src/test_parser.nit:57,7--66,4
                         TKwif "if" ../src/test_parser.nit:57,7--8
                         AEqExpr ../src/test_parser.nit:57,10--27
@@ -351,6 +363,7 @@ Start ../src/test_parser.nit:17,1--156,1
                           TEq "==" ../src/test_parser.nit:57,21--22
                           AStringExpr ../src/test_parser.nit:57,24--27
                             TString "\"-e\"" ../src/test_parser.nit:57,24--27
+                        TKwthen "then" ../src/test_parser.nit:57,29--32
                         ABlockExpr ../src/test_parser.nit:58,3--16
                           ACallAssignExpr ../src/test_parser.nit:58,3--16
                             AImplicitSelfExpr ../src/test_parser.nit:58,3
@@ -359,6 +372,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             TAssign "=" ../src/test_parser.nit:58,11
                             ATrueExpr ../src/test_parser.nit:58,13--16
                               TKwtrue "true" ../src/test_parser.nit:58,13--16
+                        TKwelse "else" ../src/test_parser.nit:59,2--5
                         AIfExpr ../src/test_parser.nit:59,7--66,4
                           TKwif "if" ../src/test_parser.nit:59,7--8
                           AEqExpr ../src/test_parser.nit:59,10--27
@@ -372,6 +386,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             TEq "==" ../src/test_parser.nit:59,21--22
                             AStringExpr ../src/test_parser.nit:59,24--27
                               TString "\"-i\"" ../src/test_parser.nit:59,24--27
+                          TKwthen "then" ../src/test_parser.nit:59,29--32
                           ABlockExpr ../src/test_parser.nit:60,3--20
                             ACallAssignExpr ../src/test_parser.nit:60,3--20
                               AImplicitSelfExpr ../src/test_parser.nit:60,3
@@ -380,6 +395,7 @@ Start ../src/test_parser.nit:17,1--156,1
                               TAssign "=" ../src/test_parser.nit:60,15
                               ATrueExpr ../src/test_parser.nit:60,17--20
                                 TKwtrue "true" ../src/test_parser.nit:60,17--20
+                          TKwelse "else" ../src/test_parser.nit:61,2--5
                           AIfExpr ../src/test_parser.nit:61,7--66,4
                             TKwif "if" ../src/test_parser.nit:61,7--8
                             AOrExpr ../src/test_parser.nit:61,10--49
@@ -406,6 +422,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TEq "==" ../src/test_parser.nit:61,43--44
                                 AStringExpr ../src/test_parser.nit:61,46--49
                                   TString "\"-?\"" ../src/test_parser.nit:61,46--49
+                            TKwthen "then" ../src/test_parser.nit:61,51--54
                             ABlockExpr ../src/test_parser.nit:62,3--18
                               ACallAssignExpr ../src/test_parser.nit:62,3--18
                                 AImplicitSelfExpr ../src/test_parser.nit:62,3
@@ -414,6 +431,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TAssign "=" ../src/test_parser.nit:62,13
                                 ATrueExpr ../src/test_parser.nit:62,15--18
                                   TKwtrue "true" ../src/test_parser.nit:62,15--18
+                            TKwelse "else" ../src/test_parser.nit:63,2--5
                             ABlockExpr ../src/test_parser.nit:64,3--66,4
                               ACallExpr ../src/test_parser.nit:64,3--48
                                 ACallExpr ../src/test_parser.nit:64,3--8
@@ -479,6 +497,7 @@ Start ../src/test_parser.nit:17,1--156,1
                 AImplicitSelfExpr ../src/test_parser.nit:70,43
                 TId "need_help" ../src/test_parser.nit:70,43--51
                 AListExprs ../src/test_parser.nit:70,51
+            TKwthen "then" ../src/test_parser.nit:70,53--56
             ABlockExpr ../src/test_parser.nit:71,2--82,30
               ACallExpr ../src/test_parser.nit:71,2--16
                 AImplicitSelfExpr ../src/test_parser.nit:71,2
@@ -576,12 +595,14 @@ Start ../src/test_parser.nit:17,1--156,1
                   AStringExpr ../src/test_parser.nit:82,8--29
                     TString "\"  -h\tprint this help\"" ../src/test_parser.nit:82,8--29
                   TCpar ")" ../src/test_parser.nit:82,30
+            TKwelse "else" ../src/test_parser.nit:83,1--4
             AIfExpr ../src/test_parser.nit:83,6--155,3
               TKwif "if" ../src/test_parser.nit:83,6--7
               ACallExpr ../src/test_parser.nit:83,9--19
                 AImplicitSelfExpr ../src/test_parser.nit:83,9
                 TId "interactive" ../src/test_parser.nit:83,9--19
                 AListExprs ../src/test_parser.nit:83,19
+              TKwthen "then" ../src/test_parser.nit:83,21--24
               ABlockExpr ../src/test_parser.nit:84,2--117,4
                 AIfExpr ../src/test_parser.nit:84,2--93,4
                   TKwif "if" ../src/test_parser.nit:84,2--3
@@ -589,6 +610,7 @@ Start ../src/test_parser.nit:17,1--156,1
                     AImplicitSelfExpr ../src/test_parser.nit:84,5
                     TId "only_lexer" ../src/test_parser.nit:84,5--14
                     AListExprs ../src/test_parser.nit:84,14
+                  TKwthen "then" ../src/test_parser.nit:84,16--19
                   ABlockExpr ../src/test_parser.nit:85,3--86,8
                     ACallExpr ../src/test_parser.nit:85,3--43
                       AImplicitSelfExpr ../src/test_parser.nit:85,3
@@ -602,12 +624,14 @@ Start ../src/test_parser.nit:17,1--156,1
                       AListExprs ../src/test_parser.nit:86,8
                         ADecIntExpr ../src/test_parser.nit:86,8
                           TNumber "1" ../src/test_parser.nit:86,8
+                  TKwelse "else" ../src/test_parser.nit:87,2--5
                   AIfExpr ../src/test_parser.nit:87,7--93,4
                     TKwif "if" ../src/test_parser.nit:87,7--8
                     ACallExpr ../src/test_parser.nit:87,10--16
                       AImplicitSelfExpr ../src/test_parser.nit:87,10
                       TId "no_file" ../src/test_parser.nit:87,10--16
                       AListExprs ../src/test_parser.nit:87,16
+                    TKwthen "then" ../src/test_parser.nit:87,18--21
                     ABlockExpr ../src/test_parser.nit:88,3--89,8
                       ACallExpr ../src/test_parser.nit:88,3--43
                         AImplicitSelfExpr ../src/test_parser.nit:88,3
@@ -621,6 +645,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         AListExprs ../src/test_parser.nit:89,8
                           ADecIntExpr ../src/test_parser.nit:89,8
                             TNumber "1" ../src/test_parser.nit:89,8
+                    TKwelse "else" ../src/test_parser.nit:90,2--5
                     AIfExpr ../src/test_parser.nit:90,7--93,4
                       TKwif "if" ../src/test_parser.nit:90,7--8
                       ANotExpr ../src/test_parser.nit:90,10--26
@@ -632,6 +657,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             AListExprs ../src/test_parser.nit:90,17
                           TId "is_empty" ../src/test_parser.nit:90,19--26
                           AListExprs ../src/test_parser.nit:90,26
+                      TKwthen "then" ../src/test_parser.nit:90,28--31
                       ABlockExpr ../src/test_parser.nit:91,3--92,8
                         ACallExpr ../src/test_parser.nit:91,3--43
                           AImplicitSelfExpr ../src/test_parser.nit:91,3
@@ -684,6 +710,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TKwisa "isa" ../src/test_parser.nit:99,8--10
                         AType ../src/test_parser.nit:99,12--18
                           TClassid "TString" ../src/test_parser.nit:99,12--18
+                      TKwthen "then" ../src/test_parser.nit:99,20--23
                       ABlockExpr ../src/test_parser.nit:100,4--106,11
                         AVardeclExpr ../src/test_parser.nit:100,4--17
                           TKwvar "var" ../src/test_parser.nit:100,4--6
@@ -706,9 +733,11 @@ Start ../src/test_parser.nit:17,1--156,1
                             TEq "==" ../src/test_parser.nit:101,9--10
                             AStringExpr ../src/test_parser.nit:101,12--15
                               TString "\":q\"" ../src/test_parser.nit:101,12--15
+                          TKwthen "then" ../src/test_parser.nit:101,17--20
                           ABlockExpr ../src/test_parser.nit:102,5--9
                             ABreakExpr ../src/test_parser.nit:102,5--9
                               TKwbreak "break" ../src/test_parser.nit:102,5--9
+                          TKwelse "else" ../src/test_parser.nit:103,4--7
                           ABlockExpr ../src/test_parser.nit:104,5--105,6
                             ACallExpr ../src/test_parser.nit:104,5--24
                               AImplicitSelfExpr ../src/test_parser.nit:104,5
@@ -731,6 +760,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         TKwisa "isa" ../src/test_parser.nit:109,8--10
                         AType ../src/test_parser.nit:109,12--17
                           TClassid "AError" ../src/test_parser.nit:109,12--17
+                      TKwthen "then" ../src/test_parser.nit:109,19--22
                       ABlockExpr ../src/test_parser.nit:110,4--111,11
                         ACallExpr ../src/test_parser.nit:110,4--57
                           AImplicitSelfExpr ../src/test_parser.nit:110,4
@@ -776,6 +806,7 @@ Start ../src/test_parser.nit:17,1--156,1
                           AImplicitSelfExpr ../src/test_parser.nit:114,10
                           TId "no_print" ../src/test_parser.nit:114,10--17
                           AListExprs ../src/test_parser.nit:114,17
+                      TKwthen "then" ../src/test_parser.nit:114,19--22
                       ABlockExpr ../src/test_parser.nit:115,4--40
                         ACallExpr ../src/test_parser.nit:115,4--40
                           AParExpr ../src/test_parser.nit:115,4--25
@@ -797,10 +828,12 @@ Start ../src/test_parser.nit:17,1--156,1
                       ABlockExpr ../src/test_parser.nit:116,3--5
                         TKwend "end" ../src/test_parser.nit:116,3--5
                     TKwend "end" ../src/test_parser.nit:117,2--4
+              TKwelse "else" ../src/test_parser.nit:118,1--4
               ABlockExpr ../src/test_parser.nit:119,2--155,3
                 AForExpr ../src/test_parser.nit:119,2--154,4
                   TKwfor "for" ../src/test_parser.nit:119,2--4
                   TId "a" ../src/test_parser.nit:119,6
+                  TKwin "in" ../src/test_parser.nit:119,8--9
                   ACallExpr ../src/test_parser.nit:119,11--14
                     AImplicitSelfExpr ../src/test_parser.nit:119,11
                     TId "args" ../src/test_parser.nit:119,11--14
@@ -816,6 +849,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         AImplicitSelfExpr ../src/test_parser.nit:121,6
                         TId "no_file" ../src/test_parser.nit:121,6--12
                         AListExprs ../src/test_parser.nit:121,12
+                      TKwthen "then" ../src/test_parser.nit:121,14--17
                       ABlockExpr ../src/test_parser.nit:122,4--45
                         ACallAssignExpr ../src/test_parser.nit:122,4--45
                           AImplicitSelfExpr ../src/test_parser.nit:122,4
@@ -836,6 +870,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TId "a" ../src/test_parser.nit:122,44
                                 AListExprs ../src/test_parser.nit:122,44
                               TCpar ")" ../src/test_parser.nit:122,45
+                      TKwelse "else" ../src/test_parser.nit:123,3--6
                       ABlockExpr ../src/test_parser.nit:124,4--127,5
                         AVardeclExpr ../src/test_parser.nit:124,4--33
                           TKwvar "var" ../src/test_parser.nit:124,4--6
@@ -902,6 +937,7 @@ Start ../src/test_parser.nit:17,1--156,1
                         AImplicitSelfExpr ../src/test_parser.nit:129,6
                         TId "only_lexer" ../src/test_parser.nit:129,6--15
                         AListExprs ../src/test_parser.nit:129,15
+                      TKwthen "then" ../src/test_parser.nit:129,17--20
                       ABlockExpr ../src/test_parser.nit:130,4--136,6
                         AVardeclExpr ../src/test_parser.nit:130,4--25
                           TKwvar "var" ../src/test_parser.nit:130,4--6
@@ -936,6 +972,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                   AImplicitSelfExpr ../src/test_parser.nit:132,12
                                   TId "no_print" ../src/test_parser.nit:132,12--19
                                   AListExprs ../src/test_parser.nit:132,19
+                              TKwthen "then" ../src/test_parser.nit:132,21--24
                               ABlockExpr ../src/test_parser.nit:133,6--64
                                 ACallExpr ../src/test_parser.nit:133,6--64
                                   AImplicitSelfExpr ../src/test_parser.nit:133,6
@@ -979,6 +1016,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 TId "next" ../src/test_parser.nit:135,19--22
                                 AListExprs ../src/test_parser.nit:135,22
                             TKwend "end" ../src/test_parser.nit:136,4--6
+                      TKwelse "else" ../src/test_parser.nit:137,3--6
                       ABlockExpr ../src/test_parser.nit:138,4--153,5
                         AVardeclExpr ../src/test_parser.nit:138,4--33
                           TKwvar "var" ../src/test_parser.nit:138,4--6
@@ -1027,6 +1065,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             TKwisa "isa" ../src/test_parser.nit:142,13--15
                             AType ../src/test_parser.nit:142,17--22
                               TClassid "AError" ../src/test_parser.nit:142,17--22
+                          TKwthen "then" ../src/test_parser.nit:142,24--27
                           ABlockExpr ../src/test_parser.nit:143,5--144,10
                             ACallExpr ../src/test_parser.nit:143,5--58
                               AImplicitSelfExpr ../src/test_parser.nit:143,5
@@ -1065,6 +1104,7 @@ Start ../src/test_parser.nit:17,1--156,1
                             AImplicitSelfExpr ../src/test_parser.nit:147,7
                             TId "xml" ../src/test_parser.nit:147,7--9
                             AListExprs ../src/test_parser.nit:147,9
+                          TKwthen "then" ../src/test_parser.nit:147,11--14
                           ABlockExpr ../src/test_parser.nit:148,5--149,32
                             ACallExpr ../src/test_parser.nit:148,5--25
                               ACallExpr ../src/test_parser.nit:148,5--8
@@ -1089,6 +1129,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                   TId "stdout" ../src/test_parser.nit:149,26--31
                                   AListExprs ../src/test_parser.nit:149,31
                                 TCpar ")" ../src/test_parser.nit:149,32
+                          TKwelse "else" ../src/test_parser.nit:150,4--7
                           AIfExpr ../src/test_parser.nit:150,9--152,6
                             TKwif "if" ../src/test_parser.nit:150,9--10
                             ANotExpr ../src/test_parser.nit:150,12--23
@@ -1097,6 +1138,7 @@ Start ../src/test_parser.nit:17,1--156,1
                                 AImplicitSelfExpr ../src/test_parser.nit:150,16
                                 TId "no_print" ../src/test_parser.nit:150,16--23
                                 AListExprs ../src/test_parser.nit:150,23
+                            TKwthen "then" ../src/test_parser.nit:150,25--28
                             ABlockExpr ../src/test_parser.nit:151,5--44
                               ACallExpr ../src/test_parser.nit:151,5--44
                                 AParExpr ../src/test_parser.nit:151,5--26
index 34ceaf4..36683fa 100644 (file)
@@ -14,6 +14,7 @@
 --> AForExpr 1,1--15
   TKwfor "for" 1,1--3
   TId "i" 1,5
+  TKwin "in" 1,7--8
   ACallExpr 1,10
     AImplicitSelfExpr 1,10
     TId "x" 1,10
@@ -30,7 +31,8 @@
       TKwmeth "fun" 1,1--3
       AIdMethid 1,5--7
         TId "foo" 1,5--7
-      ASignature 1,12
+      ASignature 1,9
+      TKwdo "do" 1,9--10
       ACallExpr 1,12
         AImplicitSelfExpr 1,12
         TId "z" 1,12
@@ -38,6 +40,7 @@
 --> ... ... AForExpr 1,1--3,3
   TKwfor "for" 1,1--3
   TId "i" 1,5
+  TKwin "in" 1,7--8
   ACallExpr 1,10
     AImplicitSelfExpr 1,10
     TId "x" 1,10
       TKwmeth "fun" 1,1--3
       AIdMethid 1,5--7
         TId "foo" 1,5--7
-      ASignature 2,1
+      ASignature 1,9
+      TKwdo "do" 1,9--10
       ABlockExpr 2,1--5,3
         AForExpr 2,1--4,3
           TKwfor "for" 2,1--3
           TId "i" 2,5
+          TKwin "in" 2,7--8
           ACallExpr 2,10
             AImplicitSelfExpr 2,10
             TId "x" 2,10
diff --git a/tests/sav/test_peek.res b/tests/sav/test_peek.res
new file mode 100644 (file)
index 0000000..edc1121
--- /dev/null
@@ -0,0 +1,33 @@
+# Thi
+# Thi
+s file is pa
+s file is pa
+rt of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var f = new FileReader.open("test_peek.nit")
+
+print f.peek(5)
+print f.read(5)
+
+print f.peek(12)
+print f.read(12)
+
+print f.read_all
+
+print f.peek(2)
+
+f.close
+
+
index 734ad5e..3281baf 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index 734ad5e..3281baf 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index 11c2a78..797b30d 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer"}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index cb9461b..2809790 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
index f5aff78..e176977 100644 (file)
@@ -14,7 +14,7 @@
 <C: <A: true a 0.123 1234 asdf false> <B: <A: false b 123.123 2345 hjkl false> 1111 qwer>>
 
 # Json:
-{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "ref", "__id": 2}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
+{"__kind": "obj", "__id": 0, "__class": "C", "a": {"__kind": "obj", "__id": 1, "__class": "A", "b": true, "c": {"__kind": "char", "__val": "a"}, "f": 0.123, "i": 1234, "s": "asdf", "n": null, "array": {"__kind": "obj", "__id": 2, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef"}, "b": {"__kind": "obj", "__id": 3, "__class": "B", "b": false, "c": {"__kind": "char", "__val": "b"}, "f": 123.123, "i": 2345, "s": "hjkl", "n": null, "array": {"__kind": "obj", "__id": 4, "__class": "Array[nullable Object]", "__length": 3, "__items": [88, "hello", null]}, "iii": 6789, "sss": "redef", "ii": 1111, "ss": "qwer", "ffff": 6.789, "bbbb": false}, "aa": {"__kind": "ref", "__id": 1}}
 
 # Nit:
 <D: <B: <A: false b 123.123 2345 new line ->
diff --git a/tests/sav/tree_traversal.res b/tests/sav/tree_traversal.res
new file mode 100644 (file)
index 0000000..7c14034
--- /dev/null
@@ -0,0 +1,40 @@
+preorder:
+1
+2
+4
+7
+5
+3
+6
+8
+9
+inorder:
+7
+4
+2
+5
+1
+8
+6
+9
+3
+postorder:
+7
+4
+5
+2
+8
+9
+6
+3
+1
+levelorder:
+1
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/tests/syntax_semi.nit b/tests/syntax_semi.nit
new file mode 100644 (file)
index 0000000..90b0edb
--- /dev/null
@@ -0,0 +1,15 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import end;interface Object;end;enum Bool;end;enum Int;fun output is intern;end;class A;init do 5.output;fun run do 6.output;end;class B;var val: Int;init(v: Int) do;7.output;self.val = v;end;fun run do val.output;end;class C;var val1: Int;var val2: Int = 10;end;fun foo do 2.output;fun bar(i: Int) do i.output;fun baz: Int do return 4;1.output;foo;bar(3);baz.output;var a = new A;a.run;var b = new B(8);b.run;var c = new C(9);c.val1.output;c.val2.output
diff --git a/tests/syntax_semi2.nit b/tests/syntax_semi2.nit
new file mode 100644 (file)
index 0000000..8f15f4b
--- /dev/null
@@ -0,0 +1,26 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import kernel
+
+1.output;
+2.output;;
+3.output;#comment
+
+;4.output
+;;5.output
+#comment
+;6.output
+
+#alt1#7.;comment
diff --git a/tests/test_binary.nit b/tests/test_binary.nit
new file mode 100644 (file)
index 0000000..a38619b
--- /dev/null
@@ -0,0 +1,38 @@
+# This file is part of NIT (http://www.nitlanguage.org).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import binary
+
+var path = "/tmp/bin"
+var writer = new FileWriter.open(path)
+#alt1# writer.big_endian = false
+#alt3# writer.big_endian = false
+writer.write "hello"
+writer.write_byte 77
+writer.write_float 1.23456789
+writer.write_double 1.23456789
+writer.write_int64 123456789
+print writer.last_error or else "no error"
+writer.close
+
+var reader = new FileReader.open(path)
+#alt2# reader.big_endian = false
+#alt3# reader.big_endian = false
+print reader.read(5)
+print reader.read_byte or else "null"
+print reader.read_float
+print reader.read_double
+print reader.read_int64
+print reader.last_error or else "no error"
+reader.close
diff --git a/tests/test_coll_eq.nit b/tests/test_coll_eq.nit
new file mode 100644 (file)
index 0000000..bf13bd9
--- /dev/null
@@ -0,0 +1,38 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = [1,2,3]
+var l = new List[Int].from(a)
+var l2 = new List[Object].from(a)
+
+print a == l
+print a == l2
+print l == a
+print l == l2
+print l2 == a
+print l2 == l
+print ""
+
+var aa = [a]
+print aa.has(a)
+print aa.has(l)
+print aa.has(l2)
+print ""
+
+var map = new Map[List[Int], String]
+map[l] = "hello"
+
+var mapr: MapRead[Object, String] = map
+print mapr.has_key(a)
+print mapr[l2]
index deb07b7..f26bcbf 100644 (file)
@@ -98,7 +98,7 @@ class E
        redef fun to_s do return "<E: a: {a.join(", ")}; b: {b.join(", ")}>"
 end
 
-# Class with generics
+# Parameterized class
 class F[N: Numeric]
        auto_serializable
 
@@ -108,6 +108,31 @@ class F[N: Numeric]
        redef fun to_s do return "<E: {n}>"
 end
 
+# Other collections
+class G
+       auto_serializable
+
+       var hs = new HashSet[Int]
+       var s: Set[String] = new ArraySet[String]
+       var hm = new HashMap[String, Int]
+       var am = new ArrayMap[String, String]
+
+       init
+       do
+               hs.add -1
+               hs.add 0
+               s.add "one"
+               s.add "two"
+               hm["one"] = 1
+               hm["two"] = 2
+               am["three"] = 3.to_s
+               am["four"] = 4.to_s
+       end
+
+       redef fun to_s do return "<G: hs: {hs.join(", ")}; s: {s.join(", ")}; "+
+               "hm: {hm.join(", ", ". ")}; am: {am.join(", ", ". ")}>"
+end
+
 var a = new A(true, 'a', 0.1234, 1234, "asdf", null)
 var b = new B(false, 'b', 123.123, 2345, "hjkl", 12, 1111, "qwer")
 var c = new C(a, b)
@@ -116,9 +141,10 @@ d.d = d
 var e = new E
 var fi = new F[Int](2222)
 var ff = new F[Float](33.33)
+var g = new G
 
 # Default works only with Nit serial
-var tests = new Array[Serializable].with_items(a, b, c, d, e, fi, ff)
+var tests = [a, b, c, d, e, fi, ff, g: Serializable]
 
 # Alt1 should work without nitserial
 #alt1# tests = new Array[Serializable].with_items(a, b, c, d)
index 1279538..7d1d443 100644 (file)
@@ -22,16 +22,24 @@ import serialization
 redef class Deserializer
        redef fun deserialize_class(name)
        do
-                       if name == "Array[Object]" then return new Array[Object].from_deserializer(self)
-                       if name == "Array[nullable Serializable]" then return new Array[nullable Serializable].from_deserializer(self)
-                       if name == "F[Int]" then return new F[Int].from_deserializer(self)
-                       if name == "F[Float]" then return new F[Float].from_deserializer(self)
-                       if name == "Array[Serializable]" then return new Array[Serializable].from_deserializer(self)
-                       if name == "Array[String]" then return new Array[String].from_deserializer(self)
-                       if name == "Array[HashMap[String, nullable Object]]" then return new Array[HashMap[String, nullable Object]].from_deserializer(self)
-                       if name == "Array[Match]" then return new Array[Match].from_deserializer(self)
-                       if name == "Array[nullable Object]" then return new Array[nullable Object].from_deserializer(self)
-                       if name == "Array[FlatBuffer]" then return new Array[FlatBuffer].from_deserializer(self)
+               # Module: test_deserialization
+               if name == "Array[Object]" then return new Array[Object].from_deserializer(self)
+               if name == "Array[nullable Serializable]" then return new Array[nullable Serializable].from_deserializer(self)
+               if name == "F[Int]" then return new F[Int].from_deserializer(self)
+               if name == "F[Float]" then return new F[Float].from_deserializer(self)
+               if name == "HashSet[Int]" then return new HashSet[Int].from_deserializer(self)
+               if name == "ArraySet[String]" then return new ArraySet[String].from_deserializer(self)
+               if name == "HashMap[String, Int]" then return new HashMap[String, Int].from_deserializer(self)
+               if name == "ArrayMap[String, String]" then return new ArrayMap[String, String].from_deserializer(self)
+               if name == "Array[Serializable]" then return new Array[Serializable].from_deserializer(self)
+               if name == "Array[String]" then return new Array[String].from_deserializer(self)
+               if name == "HashMap[Serializable, Int]" then return new HashMap[Serializable, Int].from_deserializer(self)
+               if name == "Array[JsonObject]" then return new Array[JsonObject].from_deserializer(self)
+               if name == "HashMap[Int, Object]" then return new HashMap[Int, Object].from_deserializer(self)
+               if name == "Array[Node]" then return new Array[Node].from_deserializer(self)
+               if name == "Array[LRState]" then return new Array[LRState].from_deserializer(self)
+               if name == "Array[Couple[String, String]]" then return new Array[Couple[String, String]].from_deserializer(self)
+               if name == "Array[nullable Jsonable]" then return new Array[nullable Jsonable].from_deserializer(self)
                return super
        end
 end
index 510b5fb..4916f4b 100644 (file)
@@ -47,9 +47,10 @@ class MyApp
        do
                init_gtk
 
-               win = new GtkWindow( 0 )
+               win = new GtkWindow(new GtkWindowType.toplevel)
+               win.connect_destroy_signal_to_quit
 
-               container = new GtkGrid(2,1,true)
+               container = new GtkGrid
                win.add( container )
 
                lbl = new GtkLabel( "Hello world" )
diff --git a/tests/test_peek.nit b/tests/test_peek.nit
new file mode 100644 (file)
index 0000000..4c1d433
--- /dev/null
@@ -0,0 +1,27 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var f = new FileReader.open("test_peek.nit")
+
+print f.peek(5)
+print f.read(5)
+
+print f.peek(12)
+print f.read(12)
+
+print f.read_all
+
+print f.peek(2)
+
+f.close
index 39e0cbd..2769eba 100755 (executable)
@@ -21,7 +21,7 @@
 export LANG=C
 export LC_ALL=C
 export NIT_TESTING=true
-export MNIT_SRAND=0
+export NIT_SRAND=0
 
 unset NIT_DIR