CINXE.COM

bitcoin/src/validation.cpp at 332c6134bb15384e5b91c631e821fe52a591d3bc · bitcoin/bitcoin · GitHub

<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-3e154969b9f9.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-9c5b7a476542.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-afda8eb0fb33.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-2494e44ccdc5.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-56fff47acadc.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-71cd4cc132ec.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fd5499848985.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-31d17ba3e139.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-68d6b2c79663.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-4cf0d59ab51a.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-af846850481e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8b10f05a77e6.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-2f6e722088eb.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-9c77ed90200e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-a0610fd00b47.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["copilot_new_references_ui","copilot_beta_features_opt_in","copilot_chat_static_thread_suggestions","copilot_conversational_ux_history_refs","copilot_implicit_context","copilot_smell_icebreaker_ux","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","hovercard_accessibility","issues_react_new_timeline","issues_react_avatar_refactor","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","marketing_pages_search_explore_provider","react_keyboard_shortcuts_dialog","remove_child_patch","sample_network_conn_type","site_metered_billing_update","issues_react_first_time_contribution_banner","lifecycle_label_name_updates"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-6657579a8825.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_js-b73fdff77a4e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-aff936e590ed.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-247092-740e4ddd559d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-93b6a0551aa9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-cd35650c2e9c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-4aa4b0e95669.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-6d3967acd51c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_combobox-nav_dist_index_js-node_modules_github_g-emoji-element_di-6ce195-53781cbc550f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-3cdfa69a0406.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-f5498b8d4e5d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-492b5042c841.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-1f651a-1e3d784c897c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-7671f1-dc6cac136d88.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-71486356f507.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-e3ab8405ef80.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-634de60bacfa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-ce7225a304c5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hydro-analytics-client_dist_analytics-client_js-node_modules_gith-f3aee1-e6893db9c19e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-f8a5485c982a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-858e043fcf76.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-6cf3320416b8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_scroll-anchoring_dist_scroll-anchoring_esm_js-node_modules_stacktrace-pa-a71630-6f3c4f0189d8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-0e07cc183eed.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-0b5e12-889cec8cf448.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-eae9df0dd562.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-18d1c91a7872.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-7cbef09a422c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-0e9fa537dc4f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-c89801ebbe15.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-a6e4c4c86bfa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-3366f6b6298e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-9b97703a4e6a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-13971a40799a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lodash-es__Stack_js-node_modules_lodash-es__Uint8Array_js-node_modules_l-4faaa6-13a0602a5edf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lodash-es__baseIsEqual_js-8929eb9718d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hydro-analytics-client_dist_analytics-client_js-node_modules_gith-9002b0-8e5e346f0cbe.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_promise-with-resolvers-polyfill_promise-with-r-014121-e1792bd5a31e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-c733d4a976df.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-b10086b6761e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_utilities_web-worker_ts-ui_packages_code-view-shared_worker-jobs-7fe572-d1c1cf476cef.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_hydro-analytics_hydro-analytics_ts-ui_packages_verified-fetch_verified-fetch_ts-u-4672d1-0996d093463a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-canonical-object_ts-ui_packages_code-view-shared_utili-228da6-37a4eeff405d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-file-page-payload_ts-ui_packages_code-view-shared_comp-1beb66-b07e414af699.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_blob-anchor_ts-ui_packages_code-nav_code-nav_ts-ui_packages_filter--8253c1-87c39cb5708f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-code-view-14a709e0fc35.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-code-view.6b587a69b593e23c3657.module.css" /> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-3eda30673b32.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>bitcoin/src/validation.cpp at 332c6134bb15384e5b91c631e821fe52a591d3bc · bitcoin/bitcoin · GitHub</title> <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient> <meta name="route-controller" content="blob" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="AB9C:365052:19D78:1D9F6:67491767" data-pjax-transient="true"/><meta name="html-safe-nonce" content="04ca3d7399bbbe66f9b37124f261944c451074cb51245288cf397e6945bd1e7c" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQjlDOjM2NTA1MjoxOUQ3ODoxRDlGNjo2NzQ5MTc2NyIsInZpc2l0b3JfaWQiOiIzOTYxNDQ5MzYwNDgyOTY1MzUxIiwicmVnaW9uX2VkZ2UiOiJzb3V0aGVhc3Rhc2lhIiwicmVnaW9uX3JlbmRlciI6InNvdXRoZWFzdGFzaWEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="84a61f72860dd84d4c0edc23393cfad206400f770aa25d38ead270919487832e" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:1181927" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_source" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub."> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/79a3515aee50627878c4db2c8cb7ff0fb0fc5d9d6593e6d19602984397a8c74d/bitcoin/bitcoin" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="bitcoin/src/validation.cpp at 332c6134bb15384e5b91c631e821fe52a591d3bc · bitcoin/bitcoin" /><meta name="twitter:description" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub." /> <meta property="og:image" content="https://opengraph.githubassets.com/79a3515aee50627878c4db2c8cb7ff0fb0fc5d9d6593e6d19602984397a8c74d/bitcoin/bitcoin" /><meta property="og:image:alt" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="bitcoin/src/validation.cpp at 332c6134bb15384e5b91c631e821fe52a591d3bc · bitcoin/bitcoin" /><meta property="og:url" content="https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" /><meta property="og:description" content="Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub." /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="0361a11d6ba7285e98ad3340b1de5998c1adf9be672ff350e645684a12c5ff34" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="ace39c3b6632770952207593607e6e0be0db363435a8b877b1f96abe6430f345" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="3adbaefc258174e49a9472f62ba4ed262e7c0112f9e7266a3e927bd7b898716f" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="58069173ba3ee40a605f317588f70346d3cda2c3c32d767dd6d2909bbe343612" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta name="turbo-cache-control" content="no-cache" data-turbo-transient> <meta data-hydrostats="publish"> <meta name="go-import" content="github.com/bitcoin/bitcoin git https://github.com/bitcoin/bitcoin.git"> <meta name="octolytics-dimension-user_id" content="528860" /><meta name="octolytics-dimension-user_login" content="bitcoin" /><meta name="octolytics-dimension-repository_id" content="1181927" /><meta name="octolytics-dimension-repository_nwo" content="bitcoin/bitcoin" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1181927" /><meta name="octolytics-dimension-repository_network_root_nwo" content="bitcoin/bitcoin" /> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-f3cc184507a7.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-cf3dd69d89eb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-8fa3b694f335.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Logomark;ref_loc:Header&quot;}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fbitcoin%2Fbitcoin%2Fblob%2F332c6134bb15384e5b91c631e821fe52a591d3bc%2Fsrc%2Fvalidation.cpp" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="a147b4240151477d162a4ef381d1f21782ada940c39b3e568326f34e782144be" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to Sign in&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_copilot&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_copilot_link_product_navbar&quot;}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_product_navbar&quot;}" href="https://github.com/features/security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;actions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;actions_link_product_navbar&quot;}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;codespaces&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;codespaces_link_product_navbar&quot;}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;issues&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;issues_link_product_navbar&quot;}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_review&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_review_link_product_navbar&quot;}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;discussions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;discussions_link_product_navbar&quot;}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_search&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_search_link_product_navbar&quot;}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;all_features&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;all_features_link_product_navbar&quot;}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;documentation&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;documentation_link_product_navbar&quot;}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_skills&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_skills_link_product_navbar&quot;}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;blog&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;blog_link_product_navbar&quot;}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprises&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;startups&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}" href="https://github.com/enterprise/startups"> Startups </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devsecops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ci_cd&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ci_cd_link_solutions_navbar&quot;}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;healthcare&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;financial_services&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;manufacturing&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;government&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all_industries&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ai&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;software_development&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_link_resources_navbar&quot;}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;learning_pathways&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;learning_pathways_link_resources_navbar&quot;}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;white_papers_ebooks_webinars&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;white_papers_ebooks_webinars_link_resources_navbar&quot;}" href="https://resources.github.com"> White papers, Ebooks, Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;customer_stories&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;partners&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_sponsors&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;the_readme_project&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;the_readme_project_link_open_source_navbar&quot;}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;topics&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;trending&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;collections&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;advanced_security&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;advanced_security_link_enterprise_navbar&quot;}" href="https://github.com/enterprise/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_copilot&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_copilot_link_enterprise_navbar&quot;}" href="/features/copilot#enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;premium_support&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;pricing&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;pricing_link_global_navbar&quot;}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:bitcoin/bitcoin" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="DzyWHQwBI4fUo1jNSt4kuB5ANas-AZkhKMItUFk99J8bv7yI_fg0jLF8PT3-eahUKkz1akAQNUFGzcJgakVEyQ" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="bitcoin/bitcoin" data-current-org="bitcoin" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;searchbar&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-891cac5b-26cd-4a10-b34c-2a5a10c86683" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-891cac5b-26cd-4a10-b34c-2a5a10c86683" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2"> Search syntax tips </a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="95nGRKz/86Od7v+0ybUpnQ8ZqK7usMLB6NlFDB7CYla++PCsN6CnbrCgxmicucd6uJceFkhyB03eFXwDX3l2eQ==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="aJsoAAccTYLfhEfvhCeqhAgLECFWj2Vymskkfd4sTD2aljss4pcNTtSnrAZ390T29aqU/HiKpPQx5Mq3ROEcnA==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="F5kEX9NCSoZRMm/UJeebjnXFx0ZEQzEkEd1MH2t6U2gLGmjTtRxCDZCh2uccaqHbNFEw5k6qo5MezZQDRBuYrg==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fbitcoin%2Fbitcoin%2Fblob%2F332c6134bb15384e5b91c631e821fe52a591d3bc%2Fsrc%2Fvalidation.cpp" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="a147b4240151477d162a4ef381d1f21782ada940c39b3e568326f34e782144be" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=bitcoin%2Fbitcoin" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="a147b4240151477d162a4ef381d1f21782ada940c39b3e568326f34e782144be" data-analytics-event="{&quot;category&quot;:&quot;Sign up&quot;,&quot;action&quot;:&quot;click to sign up for account&quot;,&quot;label&quot;:&quot;ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show;ref_cta:Sign up;ref_loc:header logged out&quot;}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-10aa1ac4-c4a4-4ccf-8243-ce032e529979" aria-labelledby="tooltip-293bc90d-5c13-4623-8a89-0a55e9dfd79c" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-293bc90d-5c13-4623-8a89-0a55e9dfd79c" for="icon-button-10aa1ac4-c4a4-4ccf-8243-ce032e529979" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/bitcoin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/bitcoin"> bitcoin </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/bitcoin/bitcoin">bitcoin</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a href="/login?return_to=%2Fbitcoin%2Fbitcoin" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="ddaa7594c9e3f91a3573adbb5c56d446d649cffb71ec51fe1fff5b969bbabf66" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-e3c0d74a-b17c-451f-86fe-71623a258628" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fbitcoin%2Fbitcoin" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:1181927,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="4237ee057e2f0cdd61fb21c404eb18c75ec8b19447d6abcf9c3c9d2837454709" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="36,482" data-view-component="true" class="Counter">36.5k</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fbitcoin%2Fbitcoin" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:1181927,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="1acea2c463cce74ad0f3a3e42c04d25a61b9c2031d9a80c32b6e06ada3448eaf" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="79901 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="79,901" data-view-component="true" class="Counter js-social-count">79.9k</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/bitcoin/bitcoin" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /bitcoin/bitcoin" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/bitcoin/bitcoin/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /bitcoin/bitcoin/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="373" data-view-component="true" class="Counter">373</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/bitcoin/bitcoin/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /bitcoin/bitcoin/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="294" data-view-component="true" class="Counter">294</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/bitcoin/bitcoin/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /bitcoin/bitcoin/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/bitcoin/bitcoin/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /bitcoin/bitcoin/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="5" data-view-component="true" class="Counter">5</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/bitcoin/bitcoin/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /bitcoin/bitcoin/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/bitcoin/bitcoin/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/bitcoin/bitcoin/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /bitcoin/bitcoin/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-button" popovertarget="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-overlay" aria-controls="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-list" aria-haspopup="true" aria-labelledby="tooltip-01367e7d-ca9f-4fd2-b974-640e725e6fb8" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-01367e7d-ca9f-4fd2-b974-640e725e6fb8" for="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position id="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-overlay" anchor="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-button" id="action-menu-f78699ff-0d58-434a-937d-e87cb2bff8c6-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-90263def-f199-45cd-84be-05abf4abfd57" href="/bitcoin/bitcoin" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-afd88124-911e-40db-abf2-9ca8849a3e4a" href="/bitcoin/bitcoin/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-99a2762e-f810-4412-a843-a279e26e693a" href="/bitcoin/bitcoin/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-3e09c4b0-1d46-405d-891a-641bae8884c1" href="/bitcoin/bitcoin/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-c10d8a9f-2108-4c33-be71-7c2a21e92ab6" href="/bitcoin/bitcoin/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i5security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-a2303776-6312-45df-bdde-138cb8c54ffb" href="/bitcoin/bitcoin/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-33ddc34f-c71f-4e75-bfa9-7e6d1d8aac29" href="/bitcoin/bitcoin/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <react-app app-name="react-code-view" initial-path="/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" style="display: block; min-height: calc(100vh - 64px);" data-attempted-ssr="true" data-ssr="true" data-lazy="false" data-alternate="false" > <script type="application/json" data-target="react-app.embeddedData">{"payload":{"allShortcutsEnabled":false,"fileTree":{"src":{"items":[{"name":"bench","path":"src/bench","contentType":"directory"},{"name":"compat","path":"src/compat","contentType":"directory"},{"name":"config","path":"src/config","contentType":"directory"},{"name":"consensus","path":"src/consensus","contentType":"directory"},{"name":"crypto","path":"src/crypto","contentType":"directory"},{"name":"index","path":"src/index","contentType":"directory"},{"name":"interfaces","path":"src/interfaces","contentType":"directory"},{"name":"leveldb","path":"src/leveldb","contentType":"directory"},{"name":"node","path":"src/node","contentType":"directory"},{"name":"obj-test","path":"src/obj-test","contentType":"directory"},{"name":"obj","path":"src/obj","contentType":"directory"},{"name":"policy","path":"src/policy","contentType":"directory"},{"name":"primitives","path":"src/primitives","contentType":"directory"},{"name":"qt","path":"src/qt","contentType":"directory"},{"name":"rpc","path":"src/rpc","contentType":"directory"},{"name":"script","path":"src/script","contentType":"directory"},{"name":"secp256k1","path":"src/secp256k1","contentType":"directory"},{"name":"support","path":"src/support","contentType":"directory"},{"name":"test","path":"src/test","contentType":"directory"},{"name":"univalue","path":"src/univalue","contentType":"directory"},{"name":"util","path":"src/util","contentType":"directory"},{"name":"wallet","path":"src/wallet","contentType":"directory"},{"name":"zmq","path":"src/zmq","contentType":"directory"},{"name":".clang-format","path":"src/.clang-format","contentType":"file"},{"name":"Makefile.am","path":"src/Makefile.am","contentType":"file"},{"name":"Makefile.bench.include","path":"src/Makefile.bench.include","contentType":"file"},{"name":"Makefile.leveldb.include","path":"src/Makefile.leveldb.include","contentType":"file"},{"name":"Makefile.qt.include","path":"src/Makefile.qt.include","contentType":"file"},{"name":"Makefile.qttest.include","path":"src/Makefile.qttest.include","contentType":"file"},{"name":"Makefile.test.include","path":"src/Makefile.test.include","contentType":"file"},{"name":"addrdb.cpp","path":"src/addrdb.cpp","contentType":"file"},{"name":"addrdb.h","path":"src/addrdb.h","contentType":"file"},{"name":"addrman.cpp","path":"src/addrman.cpp","contentType":"file"},{"name":"addrman.h","path":"src/addrman.h","contentType":"file"},{"name":"amount.h","path":"src/amount.h","contentType":"file"},{"name":"arith_uint256.cpp","path":"src/arith_uint256.cpp","contentType":"file"},{"name":"arith_uint256.h","path":"src/arith_uint256.h","contentType":"file"},{"name":"attributes.h","path":"src/attributes.h","contentType":"file"},{"name":"banman.cpp","path":"src/banman.cpp","contentType":"file"},{"name":"banman.h","path":"src/banman.h","contentType":"file"},{"name":"base58.cpp","path":"src/base58.cpp","contentType":"file"},{"name":"base58.h","path":"src/base58.h","contentType":"file"},{"name":"bech32.cpp","path":"src/bech32.cpp","contentType":"file"},{"name":"bech32.h","path":"src/bech32.h","contentType":"file"},{"name":"bitcoin-cli-res.rc","path":"src/bitcoin-cli-res.rc","contentType":"file"},{"name":"bitcoin-cli.cpp","path":"src/bitcoin-cli.cpp","contentType":"file"},{"name":"bitcoin-tx-res.rc","path":"src/bitcoin-tx-res.rc","contentType":"file"},{"name":"bitcoin-tx.cpp","path":"src/bitcoin-tx.cpp","contentType":"file"},{"name":"bitcoin-wallet-res.rc","path":"src/bitcoin-wallet-res.rc","contentType":"file"},{"name":"bitcoin-wallet.cpp","path":"src/bitcoin-wallet.cpp","contentType":"file"},{"name":"bitcoind-res.rc","path":"src/bitcoind-res.rc","contentType":"file"},{"name":"bitcoind.cpp","path":"src/bitcoind.cpp","contentType":"file"},{"name":"blockencodings.cpp","path":"src/blockencodings.cpp","contentType":"file"},{"name":"blockencodings.h","path":"src/blockencodings.h","contentType":"file"},{"name":"blockfilter.cpp","path":"src/blockfilter.cpp","contentType":"file"},{"name":"blockfilter.h","path":"src/blockfilter.h","contentType":"file"},{"name":"bloom.cpp","path":"src/bloom.cpp","contentType":"file"},{"name":"bloom.h","path":"src/bloom.h","contentType":"file"},{"name":"chain.cpp","path":"src/chain.cpp","contentType":"file"},{"name":"chain.h","path":"src/chain.h","contentType":"file"},{"name":"chainparams.cpp","path":"src/chainparams.cpp","contentType":"file"},{"name":"chainparams.h","path":"src/chainparams.h","contentType":"file"},{"name":"chainparamsbase.cpp","path":"src/chainparamsbase.cpp","contentType":"file"},{"name":"chainparamsbase.h","path":"src/chainparamsbase.h","contentType":"file"},{"name":"chainparamsseeds.h","path":"src/chainparamsseeds.h","contentType":"file"},{"name":"checkqueue.h","path":"src/checkqueue.h","contentType":"file"},{"name":"clientversion.cpp","path":"src/clientversion.cpp","contentType":"file"},{"name":"clientversion.h","path":"src/clientversion.h","contentType":"file"},{"name":"coins.cpp","path":"src/coins.cpp","contentType":"file"},{"name":"coins.h","path":"src/coins.h","contentType":"file"},{"name":"compat.h","path":"src/compat.h","contentType":"file"},{"name":"compressor.cpp","path":"src/compressor.cpp","contentType":"file"},{"name":"compressor.h","path":"src/compressor.h","contentType":"file"},{"name":"core_io.h","path":"src/core_io.h","contentType":"file"},{"name":"core_memusage.h","path":"src/core_memusage.h","contentType":"file"},{"name":"core_read.cpp","path":"src/core_read.cpp","contentType":"file"},{"name":"core_write.cpp","path":"src/core_write.cpp","contentType":"file"},{"name":"cuckoocache.h","path":"src/cuckoocache.h","contentType":"file"},{"name":"dbwrapper.cpp","path":"src/dbwrapper.cpp","contentType":"file"},{"name":"dbwrapper.h","path":"src/dbwrapper.h","contentType":"file"},{"name":"dummywallet.cpp","path":"src/dummywallet.cpp","contentType":"file"},{"name":"flatfile.cpp","path":"src/flatfile.cpp","contentType":"file"},{"name":"flatfile.h","path":"src/flatfile.h","contentType":"file"},{"name":"fs.cpp","path":"src/fs.cpp","contentType":"file"},{"name":"fs.h","path":"src/fs.h","contentType":"file"},{"name":"hash.cpp","path":"src/hash.cpp","contentType":"file"},{"name":"hash.h","path":"src/hash.h","contentType":"file"},{"name":"httprpc.cpp","path":"src/httprpc.cpp","contentType":"file"},{"name":"httprpc.h","path":"src/httprpc.h","contentType":"file"},{"name":"httpserver.cpp","path":"src/httpserver.cpp","contentType":"file"},{"name":"httpserver.h","path":"src/httpserver.h","contentType":"file"},{"name":"indirectmap.h","path":"src/indirectmap.h","contentType":"file"},{"name":"init.cpp","path":"src/init.cpp","contentType":"file"},{"name":"init.h","path":"src/init.h","contentType":"file"},{"name":"key.cpp","path":"src/key.cpp","contentType":"file"},{"name":"key.h","path":"src/key.h","contentType":"file"},{"name":"key_io.cpp","path":"src/key_io.cpp","contentType":"file"},{"name":"key_io.h","path":"src/key_io.h","contentType":"file"},{"name":"keystore.cpp","path":"src/keystore.cpp","contentType":"file"},{"name":"keystore.h","path":"src/keystore.h","contentType":"file"},{"name":"limitedmap.h","path":"src/limitedmap.h","contentType":"file"},{"name":"logging.cpp","path":"src/logging.cpp","contentType":"file"},{"name":"logging.h","path":"src/logging.h","contentType":"file"},{"name":"memusage.h","path":"src/memusage.h","contentType":"file"},{"name":"merkleblock.cpp","path":"src/merkleblock.cpp","contentType":"file"},{"name":"merkleblock.h","path":"src/merkleblock.h","contentType":"file"},{"name":"miner.cpp","path":"src/miner.cpp","contentType":"file"},{"name":"miner.h","path":"src/miner.h","contentType":"file"},{"name":"net.cpp","path":"src/net.cpp","contentType":"file"},{"name":"net.h","path":"src/net.h","contentType":"file"},{"name":"net_processing.cpp","path":"src/net_processing.cpp","contentType":"file"},{"name":"net_processing.h","path":"src/net_processing.h","contentType":"file"},{"name":"netaddress.cpp","path":"src/netaddress.cpp","contentType":"file"},{"name":"netaddress.h","path":"src/netaddress.h","contentType":"file"},{"name":"netbase.cpp","path":"src/netbase.cpp","contentType":"file"},{"name":"netbase.h","path":"src/netbase.h","contentType":"file"},{"name":"netmessagemaker.h","path":"src/netmessagemaker.h","contentType":"file"},{"name":"noui.cpp","path":"src/noui.cpp","contentType":"file"},{"name":"noui.h","path":"src/noui.h","contentType":"file"},{"name":"optional.h","path":"src/optional.h","contentType":"file"},{"name":"outputtype.cpp","path":"src/outputtype.cpp","contentType":"file"},{"name":"outputtype.h","path":"src/outputtype.h","contentType":"file"},{"name":"pow.cpp","path":"src/pow.cpp","contentType":"file"},{"name":"pow.h","path":"src/pow.h","contentType":"file"},{"name":"prevector.h","path":"src/prevector.h","contentType":"file"},{"name":"protocol.cpp","path":"src/protocol.cpp","contentType":"file"},{"name":"protocol.h","path":"src/protocol.h","contentType":"file"},{"name":"psbt.cpp","path":"src/psbt.cpp","contentType":"file"},{"name":"psbt.h","path":"src/psbt.h","contentType":"file"},{"name":"pubkey.cpp","path":"src/pubkey.cpp","contentType":"file"},{"name":"pubkey.h","path":"src/pubkey.h","contentType":"file"},{"name":"random.cpp","path":"src/random.cpp","contentType":"file"},{"name":"random.h","path":"src/random.h","contentType":"file"},{"name":"rest.cpp","path":"src/rest.cpp","contentType":"file"},{"name":"reverse_iterator.h","path":"src/reverse_iterator.h","contentType":"file"},{"name":"reverselock.h","path":"src/reverselock.h","contentType":"file"},{"name":"scheduler.cpp","path":"src/scheduler.cpp","contentType":"file"},{"name":"scheduler.h","path":"src/scheduler.h","contentType":"file"},{"name":"serialize.h","path":"src/serialize.h","contentType":"file"},{"name":"shutdown.cpp","path":"src/shutdown.cpp","contentType":"file"},{"name":"shutdown.h","path":"src/shutdown.h","contentType":"file"},{"name":"span.h","path":"src/span.h","contentType":"file"},{"name":"streams.h","path":"src/streams.h","contentType":"file"},{"name":"sync.cpp","path":"src/sync.cpp","contentType":"file"},{"name":"sync.h","path":"src/sync.h","contentType":"file"},{"name":"threadinterrupt.cpp","path":"src/threadinterrupt.cpp","contentType":"file"},{"name":"threadinterrupt.h","path":"src/threadinterrupt.h","contentType":"file"},{"name":"threadsafety.h","path":"src/threadsafety.h","contentType":"file"},{"name":"timedata.cpp","path":"src/timedata.cpp","contentType":"file"},{"name":"timedata.h","path":"src/timedata.h","contentType":"file"},{"name":"tinyformat.h","path":"src/tinyformat.h","contentType":"file"},{"name":"torcontrol.cpp","path":"src/torcontrol.cpp","contentType":"file"},{"name":"torcontrol.h","path":"src/torcontrol.h","contentType":"file"},{"name":"txdb.cpp","path":"src/txdb.cpp","contentType":"file"},{"name":"txdb.h","path":"src/txdb.h","contentType":"file"},{"name":"txmempool.cpp","path":"src/txmempool.cpp","contentType":"file"},{"name":"txmempool.h","path":"src/txmempool.h","contentType":"file"},{"name":"ui_interface.cpp","path":"src/ui_interface.cpp","contentType":"file"},{"name":"ui_interface.h","path":"src/ui_interface.h","contentType":"file"},{"name":"uint256.cpp","path":"src/uint256.cpp","contentType":"file"},{"name":"uint256.h","path":"src/uint256.h","contentType":"file"},{"name":"undo.h","path":"src/undo.h","contentType":"file"},{"name":"validation.cpp","path":"src/validation.cpp","contentType":"file"},{"name":"validation.h","path":"src/validation.h","contentType":"file"},{"name":"validationinterface.cpp","path":"src/validationinterface.cpp","contentType":"file"},{"name":"validationinterface.h","path":"src/validationinterface.h","contentType":"file"},{"name":"version.h","path":"src/version.h","contentType":"file"},{"name":"versionbits.cpp","path":"src/versionbits.cpp","contentType":"file"},{"name":"versionbits.h","path":"src/versionbits.h","contentType":"file"},{"name":"versionbitsinfo.cpp","path":"src/versionbitsinfo.cpp","contentType":"file"},{"name":"versionbitsinfo.h","path":"src/versionbitsinfo.h","contentType":"file"},{"name":"walletinitinterface.h","path":"src/walletinitinterface.h","contentType":"file"},{"name":"warnings.cpp","path":"src/warnings.cpp","contentType":"file"},{"name":"warnings.h","path":"src/warnings.h","contentType":"file"}],"totalCount":174},"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":".travis","path":".travis","contentType":"directory"},{"name":".tx","path":".tx","contentType":"directory"},{"name":"build-aux","path":"build-aux","contentType":"directory"},{"name":"build_msvc","path":"build_msvc","contentType":"directory"},{"name":"contrib","path":"contrib","contentType":"directory"},{"name":"depends","path":"depends","contentType":"directory"},{"name":"doc","path":"doc","contentType":"directory"},{"name":"share","path":"share","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":"test","path":"test","contentType":"directory"},{"name":".appveyor.yml","path":".appveyor.yml","contentType":"file"},{"name":".cirrus.yml","path":".cirrus.yml","contentType":"file"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".python-version","path":".python-version","contentType":"file"},{"name":".style.yapf","path":".style.yapf","contentType":"file"},{"name":".travis.yml","path":".travis.yml","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"COPYING","path":"COPYING","contentType":"file"},{"name":"INSTALL.md","path":"INSTALL.md","contentType":"file"},{"name":"Makefile.am","path":"Makefile.am","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"autogen.sh","path":"autogen.sh","contentType":"file"},{"name":"configure.ac","path":"configure.ac","contentType":"file"},{"name":"libbitcoinconsensus.pc.in","path":"libbitcoinconsensus.pc.in","contentType":"file"}],"totalCount":27}},"fileTreeProcessingTime":22.776721,"foldersToFetch":[],"repo":{"id":1181927,"defaultBranch":"master","name":"bitcoin","ownerLogin":"bitcoin","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-12-19T15:16:43.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/528860?v=4","public":true,"private":false,"isOrgOwned":true},"codeLineWrapEnabled":false,"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"332c6134bb15384e5b91c631e821fe52a591d3bc","listCacheKey":"v0:1730382931.0","canEdit":false,"refType":"tree","currentOid":"332c6134bb15384e5b91c631e821fe52a591d3bc"},"path":"src/validation.cpp","currentUser":null,"blob":{"rawLines":["// Copyright (c) 2009-2010 Satoshi Nakamoto","// Copyright (c) 2009-2018 The Bitcoin Core developers","// Distributed under the MIT software license, see the accompanying","// file COPYING or http://www.opensource.org/licenses/mit-license.php.","","#include \u003cvalidation.h\u003e","","#include \u003carith_uint256.h\u003e","#include \u003cchain.h\u003e","#include \u003cchainparams.h\u003e","#include \u003ccheckqueue.h\u003e","#include \u003cconsensus/consensus.h\u003e","#include \u003cconsensus/merkle.h\u003e","#include \u003cconsensus/tx_check.h\u003e","#include \u003cconsensus/tx_verify.h\u003e","#include \u003cconsensus/validation.h\u003e","#include \u003ccuckoocache.h\u003e","#include \u003cflatfile.h\u003e","#include \u003chash.h\u003e","#include \u003cindex/txindex.h\u003e","#include \u003cpolicy/fees.h\u003e","#include \u003cpolicy/policy.h\u003e","#include \u003cpolicy/settings.h\u003e","#include \u003cpow.h\u003e","#include \u003cprimitives/block.h\u003e","#include \u003cprimitives/transaction.h\u003e","#include \u003crandom.h\u003e","#include \u003creverse_iterator.h\u003e","#include \u003cscript/script.h\u003e","#include \u003cscript/sigcache.h\u003e","#include \u003cscript/standard.h\u003e","#include \u003cshutdown.h\u003e","#include \u003ctimedata.h\u003e","#include \u003ctinyformat.h\u003e","#include \u003ctxdb.h\u003e","#include \u003ctxmempool.h\u003e","#include \u003cui_interface.h\u003e","#include \u003cuint256.h\u003e","#include \u003cundo.h\u003e","#include \u003cutil/moneystr.h\u003e","#include \u003cutil/rbf.h\u003e","#include \u003cutil/strencodings.h\u003e","#include \u003cutil/system.h\u003e","#include \u003cutil/validation.h\u003e","#include \u003cvalidationinterface.h\u003e","#include \u003cwarnings.h\u003e","","#include \u003cfuture\u003e","#include \u003csstream\u003e","#include \u003cstring\u003e","","#include \u003cboost/algorithm/string/replace.hpp\u003e","#include \u003cboost/thread.hpp\u003e","","#if defined(NDEBUG)","# error \"Bitcoin cannot be compiled without assertions.\"","#endif","","#define MICRO 0.000001","#define MILLI 0.001","","bool CBlockIndexWorkComparator::operator()(const CBlockIndex *pa, const CBlockIndex *pb) const {"," // First sort by most total work, ..."," if (pa-\u003enChainWork \u003e pb-\u003enChainWork) return false;"," if (pa-\u003enChainWork \u003c pb-\u003enChainWork) return true;",""," // ... then by earliest time received, ..."," if (pa-\u003enSequenceId \u003c pb-\u003enSequenceId) return false;"," if (pa-\u003enSequenceId \u003e pb-\u003enSequenceId) return true;",""," // Use pointer address as tie breaker (should only happen with blocks"," // loaded from disk, as those all have id 0)."," if (pa \u003c pb) return false;"," if (pa \u003e pb) return true;",""," // Identical blocks."," return false;","}","","static CChainState g_chainstate;","","CChainState\u0026 ChainstateActive() { return g_chainstate; }","","CChain\u0026 ChainActive() { return g_chainstate.m_chain; }","","/**"," * Mutex to guard access to validation specific variables, such as reading"," * or changing the chainstate."," *"," * This may also need to be locked when updating the transaction pool, e.g. on"," * AcceptToMemoryPool. See CTxMemPool::cs comment for details."," *"," * The transaction pool has a separate lock to allow reading from it and the"," * chainstate at the same time."," */","RecursiveMutex cs_main;","","BlockMap\u0026 mapBlockIndex = ::ChainstateActive().mapBlockIndex;","CBlockIndex *pindexBestHeader = nullptr;","Mutex g_best_block_mutex;","std::condition_variable g_best_block_cv;","uint256 g_best_block;","int nScriptCheckThreads = 0;","std::atomic_bool fImporting(false);","std::atomic_bool fReindex(false);","bool fHavePruned = false;","bool fPruneMode = false;","bool fRequireStandard = true;","bool fCheckBlockIndex = false;","bool fCheckpointsEnabled = DEFAULT_CHECKPOINTS_ENABLED;","size_t nCoinCacheUsage = 5000 * 300;","uint64_t nPruneTarget = 0;","int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE;","","uint256 hashAssumeValid;","arith_uint256 nMinimumChainWork;","","CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);","","CBlockPolicyEstimator feeEstimator;","CTxMemPool mempool(\u0026feeEstimator);","","/** Constant stuff for coinbase transactions we create: */","CScript COINBASE_FLAGS;","","// Internal stuff","namespace {"," CBlockIndex *\u0026pindexBestInvalid = ::ChainstateActive().pindexBestInvalid;",""," /** All pairs A-\u003eB, where A (or one of its ancestors) misses transactions, but B has transactions."," * Pruned nodes may have entries where B is missing data."," */"," std::multimap\u003cCBlockIndex*, CBlockIndex*\u003e\u0026 mapBlocksUnlinked = ::ChainstateActive().mapBlocksUnlinked;",""," CCriticalSection cs_LastBlockFile;"," std::vector\u003cCBlockFileInfo\u003e vinfoBlockFile;"," int nLastBlockFile = 0;"," /** Global flag to indicate we should check to see if there are"," * block/undo files that should be deleted. Set on startup"," * or if we allocate more file space when we're in prune mode"," */"," bool fCheckForPruning = false;",""," /** Dirty block index entries. */"," std::set\u003cCBlockIndex*\u003e setDirtyBlockIndex;",""," /** Dirty block file entries. */"," std::set\u003cint\u003e setDirtyFileInfo;","} // anon namespace","","CBlockIndex* FindForkInGlobalIndex(const CChain\u0026 chain, const CBlockLocator\u0026 locator)","{"," AssertLockHeld(cs_main);",""," // Find the latest block common to locator and chain - we expect that"," // locator.vHave is sorted descending by height."," for (const uint256\u0026 hash : locator.vHave) {"," CBlockIndex* pindex = LookupBlockIndex(hash);"," if (pindex) {"," if (chain.Contains(pindex))"," return pindex;"," if (pindex-\u003eGetAncestor(chain.Height()) == chain.Tip()) {"," return chain.Tip();"," }"," }"," }"," return chain.Genesis();","}","","std::unique_ptr\u003cCCoinsViewDB\u003e pcoinsdbview;","std::unique_ptr\u003cCCoinsViewCache\u003e pcoinsTip;","std::unique_ptr\u003cCBlockTreeDB\u003e pblocktree;","","// See definition for documentation","static void FindFilesToPruneManual(std::set\u003cint\u003e\u0026 setFilesToPrune, int nManualPruneHeight);","static void FindFilesToPrune(std::set\u003cint\u003e\u0026 setFilesToPrune, uint64_t nPruneAfterHeight);","bool CheckInputs(const CTransaction\u0026 tx, CValidationState \u0026state, const CCoinsViewCache \u0026inputs, bool fScriptChecks, unsigned int flags, bool cacheSigStore, bool cacheFullScriptStore, PrecomputedTransactionData\u0026 txdata, std::vector\u003cCScriptCheck\u003e *pvChecks = nullptr);","static FILE* OpenUndoFile(const FlatFilePos \u0026pos, bool fReadOnly = false);","static FlatFileSeq BlockFileSeq();","static FlatFileSeq UndoFileSeq();","","bool CheckFinalTx(const CTransaction \u0026tx, int flags)","{"," AssertLockHeld(cs_main);",""," // By convention a negative value for flags indicates that the"," // current network-enforced consensus rules should be used. In"," // a future soft-fork scenario that would mean checking which"," // rules would be enforced for the next block and setting the"," // appropriate flags. At the present time no soft-forks are"," // scheduled, so no flags are set."," flags = std::max(flags, 0);",""," // CheckFinalTx() uses ::ChainActive().Height()+1 to evaluate"," // nLockTime because when IsFinalTx() is called within"," // CBlock::AcceptBlock(), the height of the block *being*"," // evaluated is what is used. Thus if we want to know if a"," // transaction can be part of the *next* block, we need to call"," // IsFinalTx() with one more than ::ChainActive().Height()."," const int nBlockHeight = ::ChainActive().Height() + 1;",""," // BIP113 requires that time-locked transactions have nLockTime set to"," // less than the median time of the previous block they're contained in."," // When the next block is created its previous block will be the current"," // chain tip, so we use that to calculate the median time passed to"," // IsFinalTx() if LOCKTIME_MEDIAN_TIME_PAST is set."," const int64_t nBlockTime = (flags \u0026 LOCKTIME_MEDIAN_TIME_PAST)"," ? ::ChainActive().Tip()-\u003eGetMedianTimePast()"," : GetAdjustedTime();",""," return IsFinalTx(tx, nBlockHeight, nBlockTime);","}","","bool TestLockPointValidity(const LockPoints* lp)","{"," AssertLockHeld(cs_main);"," assert(lp);"," // If there are relative lock times then the maxInputBlock will be set"," // If there are no relative lock times, the LockPoints don't depend on the chain"," if (lp-\u003emaxInputBlock) {"," // Check whether ::ChainActive() is an extension of the block at which the LockPoints"," // calculation was valid. If not LockPoints are no longer valid"," if (!::ChainActive().Contains(lp-\u003emaxInputBlock)) {"," return false;"," }"," }",""," // LockPoints still valid"," return true;","}","","bool CheckSequenceLocks(const CTxMemPool\u0026 pool, const CTransaction\u0026 tx, int flags, LockPoints* lp, bool useExistingLockPoints)","{"," AssertLockHeld(cs_main);"," AssertLockHeld(pool.cs);",""," CBlockIndex* tip = ::ChainActive().Tip();"," assert(tip != nullptr);",""," CBlockIndex index;"," index.pprev = tip;"," // CheckSequenceLocks() uses ::ChainActive().Height()+1 to evaluate"," // height based locks because when SequenceLocks() is called within"," // ConnectBlock(), the height of the block *being*"," // evaluated is what is used."," // Thus if we want to know if a transaction can be part of the"," // *next* block, we need to use one more than ::ChainActive().Height()"," index.nHeight = tip-\u003enHeight + 1;",""," std::pair\u003cint, int64_t\u003e lockPair;"," if (useExistingLockPoints) {"," assert(lp);"," lockPair.first = lp-\u003eheight;"," lockPair.second = lp-\u003etime;"," }"," else {"," // pcoinsTip contains the UTXO set for ::ChainActive().Tip()"," CCoinsViewMemPool viewMemPool(pcoinsTip.get(), pool);"," std::vector\u003cint\u003e prevheights;"," prevheights.resize(tx.vin.size());"," for (size_t txinIndex = 0; txinIndex \u003c tx.vin.size(); txinIndex++) {"," const CTxIn\u0026 txin = tx.vin[txinIndex];"," Coin coin;"," if (!viewMemPool.GetCoin(txin.prevout, coin)) {"," return error(\"%s: Missing input\", __func__);"," }"," if (coin.nHeight == MEMPOOL_HEIGHT) {"," // Assume all mempool transaction confirm in the next block"," prevheights[txinIndex] = tip-\u003enHeight + 1;"," } else {"," prevheights[txinIndex] = coin.nHeight;"," }"," }"," lockPair = CalculateSequenceLocks(tx, flags, \u0026prevheights, index);"," if (lp) {"," lp-\u003eheight = lockPair.first;"," lp-\u003etime = lockPair.second;"," // Also store the hash of the block with the highest height of"," // all the blocks which have sequence locked prevouts."," // This hash needs to still be on the chain"," // for these LockPoint calculations to be valid"," // Note: It is impossible to correctly calculate a maxInputBlock"," // if any of the sequence locked inputs depend on unconfirmed txs,"," // except in the special case where the relative lock time/height"," // is 0, which is equivalent to no sequence lock. Since we assume"," // input height of tip+1 for mempool txs and test the resulting"," // lockPair from CalculateSequenceLocks against tip+1. We know"," // EvaluateSequenceLocks will fail if there was a non-zero sequence"," // lock on a mempool input, so we can use the return value of"," // CheckSequenceLocks to indicate the LockPoints validity"," int maxInputHeight = 0;"," for (const int height : prevheights) {"," // Can ignore mempool inputs since we'll fail if they had non-zero locks"," if (height != tip-\u003enHeight+1) {"," maxInputHeight = std::max(maxInputHeight, height);"," }"," }"," lp-\u003emaxInputBlock = tip-\u003eGetAncestor(maxInputHeight);"," }"," }"," return EvaluateSequenceLocks(index, lockPair);","}","","// Returns the script flags which should be checked for a given block","static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consensus::Params\u0026 chainparams);","","static void LimitMempoolSize(CTxMemPool\u0026 pool, size_t limit, unsigned long age) {"," int expired = pool.Expire(GetTime() - age);"," if (expired != 0) {"," LogPrint(BCLog::MEMPOOL, \"Expired %i transactions from the memory pool\\n\", expired);"," }",""," std::vector\u003cCOutPoint\u003e vNoSpendsRemaining;"," pool.TrimToSize(limit, \u0026vNoSpendsRemaining);"," for (const COutPoint\u0026 removed : vNoSpendsRemaining)"," pcoinsTip-\u003eUncache(removed);","}","","static bool IsCurrentForFeeEstimation() EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," AssertLockHeld(cs_main);"," if (::ChainstateActive().IsInitialBlockDownload())"," return false;"," if (::ChainActive().Tip()-\u003eGetBlockTime() \u003c (GetTime() - MAX_FEE_ESTIMATION_TIP_AGE))"," return false;"," if (::ChainActive().Height() \u003c pindexBestHeader-\u003enHeight - 1)"," return false;"," return true;","}","","/* Make mempool consistent after a reorg, by re-adding or recursively erasing"," * disconnected block transactions from the mempool, and also removing any"," * other transactions from the mempool that are no longer valid given the new"," * tip/height."," *"," * Note: we assume that disconnectpool only contains transactions that are NOT"," * confirmed in the current chain nor already in the mempool (otherwise,"," * in-mempool descendants of such transactions would be removed)."," *"," * Passing fAddToMempool=false will skip trying to add the transactions back,"," * and instead just erase from the mempool as needed."," */","","static void UpdateMempoolForReorg(DisconnectedBlockTransactions \u0026disconnectpool, bool fAddToMempool) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," AssertLockHeld(cs_main);"," std::vector\u003cuint256\u003e vHashUpdate;"," // disconnectpool's insertion_order index sorts the entries from"," // oldest to newest, but the oldest entry will be the last tx from the"," // latest mined block that was disconnected."," // Iterate disconnectpool in reverse, so that we add transactions"," // back to the mempool starting with the earliest transaction that had"," // been previously seen in a block."," auto it = disconnectpool.queuedTx.get\u003cinsertion_order\u003e().rbegin();"," while (it != disconnectpool.queuedTx.get\u003cinsertion_order\u003e().rend()) {"," // ignore validation errors in resurrected transactions"," CValidationState stateDummy;"," if (!fAddToMempool || (*it)-\u003eIsCoinBase() ||"," !AcceptToMemoryPool(mempool, stateDummy, *it, nullptr /* pfMissingInputs */,"," nullptr /* plTxnReplaced */, true /* bypass_limits */, 0 /* nAbsurdFee */)) {"," // If the transaction doesn't make it in to the mempool, remove any"," // transactions that depend on it (which would now be orphans)."," mempool.removeRecursive(**it, MemPoolRemovalReason::REORG);"," } else if (mempool.exists((*it)-\u003eGetHash())) {"," vHashUpdate.push_back((*it)-\u003eGetHash());"," }"," ++it;"," }"," disconnectpool.queuedTx.clear();"," // AcceptToMemoryPool/addUnchecked all assume that new mempool entries have"," // no in-mempool children, which is generally not true when adding"," // previously-confirmed transactions back to the mempool."," // UpdateTransactionsFromBlock finds descendants of any transactions in"," // the disconnectpool that were added back and cleans up the mempool state."," mempool.UpdateTransactionsFromBlock(vHashUpdate);",""," // We also need to remove any now-immature transactions"," mempool.removeForReorg(pcoinsTip.get(), ::ChainActive().Tip()-\u003enHeight + 1, STANDARD_LOCKTIME_VERIFY_FLAGS);"," // Re-limit mempool size, in case we added any transactions"," LimitMempoolSize(mempool, gArgs.GetArg(\"-maxmempool\", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000, gArgs.GetArg(\"-mempoolexpiry\", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60);","}","","// Used to avoid mempool polluting consensus critical paths if CCoinsViewMempool","// were somehow broken and returning the wrong scriptPubKeys","static bool CheckInputsFromMempoolAndCache(const CTransaction\u0026 tx, CValidationState\u0026 state, const CCoinsViewCache\u0026 view, const CTxMemPool\u0026 pool,"," unsigned int flags, bool cacheSigStore, PrecomputedTransactionData\u0026 txdata) EXCLUSIVE_LOCKS_REQUIRED(cs_main) {"," AssertLockHeld(cs_main);",""," // pool.cs should be locked already, but go ahead and re-take the lock here"," // to enforce that mempool doesn't change between when we check the view"," // and when we actually call through to CheckInputs"," LOCK(pool.cs);",""," assert(!tx.IsCoinBase());"," for (const CTxIn\u0026 txin : tx.vin) {"," const Coin\u0026 coin = view.AccessCoin(txin.prevout);",""," // At this point we haven't actually checked if the coins are all"," // available (or shouldn't assume we have, since CheckInputs does)."," // So we just return failure if the inputs are not available here,"," // and then only have to check equivalence for available inputs."," if (coin.IsSpent()) return false;",""," const CTransactionRef\u0026 txFrom = pool.get(txin.prevout.hash);"," if (txFrom) {"," assert(txFrom-\u003eGetHash() == txin.prevout.hash);"," assert(txFrom-\u003evout.size() \u003e txin.prevout.n);"," assert(txFrom-\u003evout[txin.prevout.n] == coin.out);"," } else {"," const Coin\u0026 coinFromDisk = pcoinsTip-\u003eAccessCoin(txin.prevout);"," assert(!coinFromDisk.IsSpent());"," assert(coinFromDisk.out == coin.out);"," }"," }",""," return CheckInputs(tx, state, view, true, flags, cacheSigStore, true, txdata);","}","","/**"," * @param[out] coins_to_uncache Return any outpoints which were not previously present in the"," * coins cache, but were added as a result of validating the tx"," * for mempool acceptance. This allows the caller to optionally"," * remove the cache additions if the associated transaction ends"," * up being rejected by the mempool."," */","static bool AcceptToMemoryPoolWorker(const CChainParams\u0026 chainparams, CTxMemPool\u0026 pool, CValidationState\u0026 state, const CTransactionRef\u0026 ptx,"," bool* pfMissingInputs, int64_t nAcceptTime, std::list\u003cCTransactionRef\u003e* plTxnReplaced,"," bool bypass_limits, const CAmount\u0026 nAbsurdFee, std::vector\u003cCOutPoint\u003e\u0026 coins_to_uncache, bool test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," const CTransaction\u0026 tx = *ptx;"," const uint256 hash = tx.GetHash();"," AssertLockHeld(cs_main);"," LOCK(pool.cs); // mempool \"read lock\" (held through GetMainSignals().TransactionAddedToMempool())"," if (pfMissingInputs) {"," *pfMissingInputs = false;"," }",""," if (!CheckTransaction(tx, state))"," return false; // state filled in by CheckTransaction",""," // Coinbase is only valid in a block, not as a loose transaction"," if (tx.IsCoinBase())"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"coinbase\");",""," // Rather not work on nonstandard transactions (unless -testnet/-regtest)"," std::string reason;"," if (fRequireStandard \u0026\u0026 !IsStandardTx(tx, reason))"," return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false, REJECT_NONSTANDARD, reason);",""," // Do not work on transactions that are too small."," // A transaction with 1 segwit input and 1 P2WPHK output has non-witness size of 82 bytes."," // Transactions smaller than this are not relayed to reduce unnecessary malloc overhead."," if (::GetSerializeSize(tx, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) \u003c MIN_STANDARD_TX_NONWITNESS_SIZE)"," return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false, REJECT_NONSTANDARD, \"tx-size-small\");",""," // Only accept nLockTime-using transactions that can be mined in the next"," // block; we don't want our mempool filled up with transactions that can't"," // be mined yet."," if (!CheckFinalTx(tx, STANDARD_LOCKTIME_VERIFY_FLAGS))"," return state.Invalid(ValidationInvalidReason::TX_PREMATURE_SPEND, false, REJECT_NONSTANDARD, \"non-final\");",""," // is it already in the memory pool?"," if (pool.exists(hash)) {"," return state.Invalid(ValidationInvalidReason::TX_CONFLICT, false, REJECT_DUPLICATE, \"txn-already-in-mempool\");"," }",""," // Check for conflicts with in-memory transactions"," std::set\u003cuint256\u003e setConflicts;"," for (const CTxIn \u0026txin : tx.vin)"," {"," const CTransaction* ptxConflicting = pool.GetConflictTx(txin.prevout);"," if (ptxConflicting) {"," if (!setConflicts.count(ptxConflicting-\u003eGetHash()))"," {"," // Allow opt-out of transaction replacement by setting"," // nSequence \u003e MAX_BIP125_RBF_SEQUENCE (SEQUENCE_FINAL-2) on all inputs."," //"," // SEQUENCE_FINAL-1 is picked to still allow use of nLockTime by"," // non-replaceable transactions. All inputs rather than just one"," // is for the sake of multi-party protocols, where we don't"," // want a single party to be able to disable replacement."," //"," // The opt-out ignores descendants as anyone relying on"," // first-seen mempool behavior should be checking all"," // unconfirmed ancestors anyway; doing otherwise is hopelessly"," // insecure."," bool fReplacementOptOut = true;"," for (const CTxIn \u0026_txin : ptxConflicting-\u003evin)"," {"," if (_txin.nSequence \u003c= MAX_BIP125_RBF_SEQUENCE)"," {"," fReplacementOptOut = false;"," break;"," }"," }"," if (fReplacementOptOut) {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_DUPLICATE, \"txn-mempool-conflict\");"," }",""," setConflicts.insert(ptxConflicting-\u003eGetHash());"," }"," }"," }",""," {"," CCoinsView dummy;"," CCoinsViewCache view(\u0026dummy);",""," LockPoints lp;"," CCoinsViewMemPool viewMemPool(pcoinsTip.get(), pool);"," view.SetBackend(viewMemPool);",""," // do all inputs exist?"," for (const CTxIn\u0026 txin : tx.vin) {"," if (!pcoinsTip-\u003eHaveCoinInCache(txin.prevout)) {"," coins_to_uncache.push_back(txin.prevout);"," }",""," // Note: this call may add txin.prevout to the coins cache"," // (pcoinsTip.cacheCoins) by way of FetchCoin(). It should be removed"," // later (via coins_to_uncache) if this tx turns out to be invalid."," if (!view.HaveCoin(txin.prevout)) {"," // Are inputs missing because we already have the tx?"," for (size_t out = 0; out \u003c tx.vout.size(); out++) {"," // Optimistically just do efficient check of cache for outputs"," if (pcoinsTip-\u003eHaveCoinInCache(COutPoint(hash, out))) {"," return state.Invalid(ValidationInvalidReason::TX_CONFLICT, false, REJECT_DUPLICATE, \"txn-already-known\");"," }"," }"," // Otherwise assume this might be an orphan tx for which we just haven't seen parents yet"," if (pfMissingInputs) {"," *pfMissingInputs = true;"," }"," return false; // fMissingInputs and !state.IsInvalid() is used to detect this condition, don't set state.Invalid()"," }"," }",""," // Bring the best block into scope"," view.GetBestBlock();",""," // we have all inputs cached now, so switch back to dummy, so we don't need to keep lock on mempool"," view.SetBackend(dummy);",""," // Only accept BIP68 sequence locked transactions that can be mined in the next"," // block; we don't want our mempool filled up with transactions that can't"," // be mined yet."," // Must keep pool.cs for this unless we change CheckSequenceLocks to take a"," // CoinsViewCache instead of create its own"," if (!CheckSequenceLocks(pool, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, \u0026lp))"," return state.Invalid(ValidationInvalidReason::TX_PREMATURE_SPEND, false, REJECT_NONSTANDARD, \"non-BIP68-final\");",""," CAmount nFees = 0;"," if (!Consensus::CheckTxInputs(tx, state, view, GetSpendHeight(view), nFees)) {"," return error(\"%s: Consensus::CheckTxInputs: %s, %s\", __func__, tx.GetHash().ToString(), FormatStateMessage(state));"," }",""," // Check for non-standard pay-to-script-hash in inputs"," if (fRequireStandard \u0026\u0026 !AreInputsStandard(tx, view))"," return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false, REJECT_NONSTANDARD, \"bad-txns-nonstandard-inputs\");",""," // Check for non-standard witness in P2WSH"," if (tx.HasWitness() \u0026\u0026 fRequireStandard \u0026\u0026 !IsWitnessStandard(tx, view))"," return state.Invalid(ValidationInvalidReason::TX_WITNESS_MUTATED, false, REJECT_NONSTANDARD, \"bad-witness-nonstandard\");",""," int64_t nSigOpsCost = GetTransactionSigOpCost(tx, view, STANDARD_SCRIPT_VERIFY_FLAGS);",""," // nModifiedFees includes any fee deltas from PrioritiseTransaction"," CAmount nModifiedFees = nFees;"," pool.ApplyDelta(hash, nModifiedFees);",""," // Keep track of transactions that spend a coinbase, which we re-scan"," // during reorgs to ensure COINBASE_MATURITY is still met."," bool fSpendsCoinbase = false;"," for (const CTxIn \u0026txin : tx.vin) {"," const Coin \u0026coin = view.AccessCoin(txin.prevout);"," if (coin.IsCoinBase()) {"," fSpendsCoinbase = true;"," break;"," }"," }",""," CTxMemPoolEntry entry(ptx, nFees, nAcceptTime, ::ChainActive().Height(),"," fSpendsCoinbase, nSigOpsCost, lp);"," unsigned int nSize = entry.GetTxSize();",""," if (nSigOpsCost \u003e MAX_STANDARD_TX_SIGOPS_COST)"," return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false, REJECT_NONSTANDARD, \"bad-txns-too-many-sigops\","," strprintf(\"%d\", nSigOpsCost));",""," CAmount mempoolRejectFee = pool.GetMinFee(gArgs.GetArg(\"-maxmempool\", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nSize);"," if (!bypass_limits \u0026\u0026 mempoolRejectFee \u003e 0 \u0026\u0026 nModifiedFees \u003c mempoolRejectFee) {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_INSUFFICIENTFEE, \"mempool min fee not met\", strprintf(\"%d \u003c %d\", nModifiedFees, mempoolRejectFee));"," }",""," // No transactions are allowed below minRelayTxFee except from disconnected blocks"," if (!bypass_limits \u0026\u0026 nModifiedFees \u003c ::minRelayTxFee.GetFee(nSize)) {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_INSUFFICIENTFEE, \"min relay fee not met\", strprintf(\"%d \u003c %d\", nModifiedFees, ::minRelayTxFee.GetFee(nSize)));"," }",""," if (nAbsurdFee \u0026\u0026 nFees \u003e nAbsurdFee)"," return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false,"," REJECT_HIGHFEE, \"absurdly-high-fee\","," strprintf(\"%d \u003e %d\", nFees, nAbsurdFee));",""," // Calculate in-mempool ancestors, up to a limit."," CTxMemPool::setEntries setAncestors;"," size_t nLimitAncestors = gArgs.GetArg(\"-limitancestorcount\", DEFAULT_ANCESTOR_LIMIT);"," size_t nLimitAncestorSize = gArgs.GetArg(\"-limitancestorsize\", DEFAULT_ANCESTOR_SIZE_LIMIT)*1000;"," size_t nLimitDescendants = gArgs.GetArg(\"-limitdescendantcount\", DEFAULT_DESCENDANT_LIMIT);"," size_t nLimitDescendantSize = gArgs.GetArg(\"-limitdescendantsize\", DEFAULT_DESCENDANT_SIZE_LIMIT)*1000;"," std::string errString;"," if (!pool.CalculateMemPoolAncestors(entry, setAncestors, nLimitAncestors, nLimitAncestorSize, nLimitDescendants, nLimitDescendantSize, errString)) {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_NONSTANDARD, \"too-long-mempool-chain\", errString);"," }",""," // A transaction that spends outputs that would be replaced by it is invalid. Now"," // that we have the set of all ancestors we can detect this"," // pathological case by making sure setConflicts and setAncestors don't"," // intersect."," for (CTxMemPool::txiter ancestorIt : setAncestors)"," {"," const uint256 \u0026hashAncestor = ancestorIt-\u003eGetTx().GetHash();"," if (setConflicts.count(hashAncestor))"," {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-txns-spends-conflicting-tx\","," strprintf(\"%s spends conflicting transaction %s\","," hash.ToString(),"," hashAncestor.ToString()));"," }"," }",""," // Check if it's economically rational to mine this transaction rather"," // than the ones it replaces."," CAmount nConflictingFees = 0;"," size_t nConflictingSize = 0;"," uint64_t nConflictingCount = 0;"," CTxMemPool::setEntries allConflicting;",""," // If we don't hold the lock allConflicting might be incomplete; the"," // subsequent RemoveStaged() and addUnchecked() calls don't guarantee"," // mempool consistency for us."," const bool fReplacementTransaction = setConflicts.size();"," if (fReplacementTransaction)"," {"," CFeeRate newFeeRate(nModifiedFees, nSize);"," std::set\u003cuint256\u003e setConflictsParents;"," const int maxDescendantsToVisit = 100;"," const CTxMemPool::setEntries setIterConflicting = pool.GetIterSet(setConflicts);"," for (const auto\u0026 mi : setIterConflicting) {"," // Don't allow the replacement to reduce the feerate of the"," // mempool."," //"," // We usually don't want to accept replacements with lower"," // feerates than what they replaced as that would lower the"," // feerate of the next block. Requiring that the feerate always"," // be increased is also an easy-to-reason about way to prevent"," // DoS attacks via replacements."," //"," // We only consider the feerates of transactions being directly"," // replaced, not their indirect descendants. While that does"," // mean high feerate children are ignored when deciding whether"," // or not to replace, we do require the replacement to pay more"," // overall fees too, mitigating most cases."," CFeeRate oldFeeRate(mi-\u003eGetModifiedFee(), mi-\u003eGetTxSize());"," if (newFeeRate \u003c= oldFeeRate)"," {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_INSUFFICIENTFEE, \"insufficient fee\","," strprintf(\"rejecting replacement %s; new feerate %s \u003c= old feerate %s\","," hash.ToString(),"," newFeeRate.ToString(),"," oldFeeRate.ToString()));"," }",""," for (const CTxIn \u0026txin : mi-\u003eGetTx().vin)"," {"," setConflictsParents.insert(txin.prevout.hash);"," }",""," nConflictingCount += mi-\u003eGetCountWithDescendants();"," }"," // This potentially overestimates the number of actual descendants"," // but we just want to be conservative to avoid doing too much"," // work."," if (nConflictingCount \u003c= maxDescendantsToVisit) {"," // If not too many to replace, then calculate the set of"," // transactions that would have to be evicted"," for (CTxMemPool::txiter it : setIterConflicting) {"," pool.CalculateDescendants(it, allConflicting);"," }"," for (CTxMemPool::txiter it : allConflicting) {"," nConflictingFees += it-\u003eGetModifiedFee();"," nConflictingSize += it-\u003eGetTxSize();"," }"," } else {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_NONSTANDARD, \"too many potential replacements\","," strprintf(\"rejecting replacement %s; too many potential replacements (%d \u003e %d)\\n\","," hash.ToString(),"," nConflictingCount,"," maxDescendantsToVisit));"," }",""," for (unsigned int j = 0; j \u003c tx.vin.size(); j++)"," {"," // We don't want to accept replacements that require low"," // feerate junk to be mined first. Ideally we'd keep track of"," // the ancestor feerates and make the decision based on that,"," // but for now requiring all new inputs to be confirmed works."," if (!setConflictsParents.count(tx.vin[j].prevout.hash))"," {"," // Rather than check the UTXO set - potentially expensive -"," // it's cheaper to just check if the new input refers to a"," // tx that's in the mempool."," if (pool.exists(tx.vin[j].prevout.hash)) {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_NONSTANDARD, \"replacement-adds-unconfirmed\","," strprintf(\"replacement %s adds unconfirmed input, idx %d\","," hash.ToString(), j));"," }"," }"," }",""," // The replacement must pay greater fees than the transactions it"," // replaces - if we did the bandwidth used by those conflicting"," // transactions would not be paid for."," if (nModifiedFees \u003c nConflictingFees)"," {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_INSUFFICIENTFEE, \"insufficient fee\","," strprintf(\"rejecting replacement %s, less fees than conflicting txs; %s \u003c %s\","," hash.ToString(), FormatMoney(nModifiedFees), FormatMoney(nConflictingFees)));"," }",""," // Finally in addition to paying more fees than the conflicts the"," // new transaction must pay for its own bandwidth."," CAmount nDeltaFees = nModifiedFees - nConflictingFees;"," if (nDeltaFees \u003c ::incrementalRelayFee.GetFee(nSize))"," {"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_INSUFFICIENTFEE, \"insufficient fee\","," strprintf(\"rejecting replacement %s, not enough additional fees to relay; %s \u003c %s\","," hash.ToString(),"," FormatMoney(nDeltaFees),"," FormatMoney(::incrementalRelayFee.GetFee(nSize))));"," }"," }",""," constexpr unsigned int scriptVerifyFlags = STANDARD_SCRIPT_VERIFY_FLAGS;",""," // Check against previous transactions"," // This is done last to help prevent CPU exhaustion denial-of-service attacks."," PrecomputedTransactionData txdata(tx);"," if (!CheckInputs(tx, state, view, true, scriptVerifyFlags, true, false, txdata)) {"," // SCRIPT_VERIFY_CLEANSTACK requires SCRIPT_VERIFY_WITNESS, so we"," // need to turn both off, and compare against just turning off CLEANSTACK"," // to see if the failure is specifically due to witness validation."," CValidationState stateDummy; // Want reported failures to be from first CheckInputs"," if (!tx.HasWitness() \u0026\u0026 CheckInputs(tx, stateDummy, view, true, scriptVerifyFlags \u0026 ~(SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_CLEANSTACK), true, false, txdata) \u0026\u0026"," !CheckInputs(tx, stateDummy, view, true, scriptVerifyFlags \u0026 ~SCRIPT_VERIFY_CLEANSTACK, true, false, txdata)) {"," // Only the witness is missing, so the transaction itself may be fine."," state.Invalid(ValidationInvalidReason::TX_WITNESS_MUTATED, false,"," state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage());"," }"," assert(IsTransactionReason(state.GetReason()));"," return false; // state filled in by CheckInputs"," }",""," // Check again against the current block tip's script verification"," // flags to cache our script execution flags. This is, of course,"," // useless if the next block has different script flags from the"," // previous one, but because the cache tracks script flags for us it"," // will auto-invalidate and we'll just have a few blocks of extra"," // misses on soft-fork activation."," //"," // This is also useful in case of bugs in the standard flags that cause"," // transactions to pass as valid when they're actually invalid. For"," // instance the STRICTENC flag was incorrectly allowing certain"," // CHECKSIG NOT scripts to pass, even though they were invalid."," //"," // There is a similar check in CreateNewBlock() to prevent creating"," // invalid blocks (using TestBlockValidity), however allowing such"," // transactions into the mempool can be exploited as a DoS attack."," unsigned int currentBlockScriptVerifyFlags = GetBlockScriptFlags(::ChainActive().Tip(), chainparams.GetConsensus());"," if (!CheckInputsFromMempoolAndCache(tx, state, view, pool, currentBlockScriptVerifyFlags, true, txdata)) {"," return error(\"%s: BUG! PLEASE REPORT THIS! CheckInputs failed against latest-block but not STANDARD flags %s, %s\","," __func__, hash.ToString(), FormatStateMessage(state));"," }",""," if (test_accept) {"," // Tx was accepted, but not added"," return true;"," }",""," // Remove conflicting transactions from the mempool"," for (CTxMemPool::txiter it : allConflicting)"," {"," LogPrint(BCLog::MEMPOOL, \"replacing tx %s with %s for %s BTC additional fees, %d delta bytes\\n\","," it-\u003eGetTx().GetHash().ToString(),"," hash.ToString(),"," FormatMoney(nModifiedFees - nConflictingFees),"," (int)nSize - (int)nConflictingSize);"," if (plTxnReplaced)"," plTxnReplaced-\u003epush_back(it-\u003eGetSharedTx());"," }"," pool.RemoveStaged(allConflicting, false, MemPoolRemovalReason::REPLACED);",""," // This transaction should only count for fee estimation if:"," // - it isn't a BIP 125 replacement transaction (may not be widely supported)"," // - it's not being re-added during a reorg which bypasses typical mempool fee limits"," // - the node is not behind"," // - the transaction is not dependent on any other transactions in the mempool"," bool validForFeeEstimation = !fReplacementTransaction \u0026\u0026 !bypass_limits \u0026\u0026 IsCurrentForFeeEstimation() \u0026\u0026 pool.HasNoInputsOf(tx);",""," // Store transaction in memory"," pool.addUnchecked(entry, setAncestors, validForFeeEstimation);",""," // trim mempool and check if tx was trimmed"," if (!bypass_limits) {"," LimitMempoolSize(pool, gArgs.GetArg(\"-maxmempool\", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000, gArgs.GetArg(\"-mempoolexpiry\", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60);"," if (!pool.exists(hash))"," return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY, false, REJECT_INSUFFICIENTFEE, \"mempool full\");"," }"," }",""," GetMainSignals().TransactionAddedToMempool(ptx);",""," return true;","}","","/** (try to) add transaction to memory pool with a specified acceptance time **/","static bool AcceptToMemoryPoolWithTime(const CChainParams\u0026 chainparams, CTxMemPool\u0026 pool, CValidationState \u0026state, const CTransactionRef \u0026tx,"," bool* pfMissingInputs, int64_t nAcceptTime, std::list\u003cCTransactionRef\u003e* plTxnReplaced,"," bool bypass_limits, const CAmount nAbsurdFee, bool test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," std::vector\u003cCOutPoint\u003e coins_to_uncache;"," bool res = AcceptToMemoryPoolWorker(chainparams, pool, state, tx, pfMissingInputs, nAcceptTime, plTxnReplaced, bypass_limits, nAbsurdFee, coins_to_uncache, test_accept);"," if (!res) {"," // Remove coins that were not present in the coins cache before calling ATMPW;"," // this is to prevent memory DoS in case we receive a large number of"," // invalid transactions that attempt to overrun the in-memory coins cache"," // (`CCoinsViewCache::cacheCoins`).",""," for (const COutPoint\u0026 hashTx : coins_to_uncache)"," pcoinsTip-\u003eUncache(hashTx);"," }"," // After we've (potentially) uncached entries, ensure our coins cache is still within its size limits"," CValidationState stateDummy;"," ::ChainstateActive().FlushStateToDisk(chainparams, stateDummy, FlushStateMode::PERIODIC);"," return res;","}","","bool AcceptToMemoryPool(CTxMemPool\u0026 pool, CValidationState \u0026state, const CTransactionRef \u0026tx,"," bool* pfMissingInputs, std::list\u003cCTransactionRef\u003e* plTxnReplaced,"," bool bypass_limits, const CAmount nAbsurdFee, bool test_accept)","{"," const CChainParams\u0026 chainparams = Params();"," return AcceptToMemoryPoolWithTime(chainparams, pool, state, tx, pfMissingInputs, GetTime(), plTxnReplaced, bypass_limits, nAbsurdFee, test_accept);","}","","/**"," * Return transaction in txOut, and if it was found inside a block, its hash is placed in hashBlock."," * If blockIndex is provided, the transaction is fetched from the corresponding block."," */","bool GetTransaction(const uint256\u0026 hash, CTransactionRef\u0026 txOut, const Consensus::Params\u0026 consensusParams, uint256\u0026 hashBlock, const CBlockIndex* const block_index)","{"," LOCK(cs_main);",""," if (!block_index) {"," CTransactionRef ptx = mempool.get(hash);"," if (ptx) {"," txOut = ptx;"," return true;"," }",""," if (g_txindex) {"," return g_txindex-\u003eFindTx(hash, hashBlock, txOut);"," }"," } else {"," CBlock block;"," if (ReadBlockFromDisk(block, block_index, consensusParams)) {"," for (const auto\u0026 tx : block.vtx) {"," if (tx-\u003eGetHash() == hash) {"," txOut = tx;"," hashBlock = block_index-\u003eGetBlockHash();"," return true;"," }"," }"," }"," }",""," return false;","}","","","","","","","//////////////////////////////////////////////////////////////////////////////","//","// CBlock and CBlockIndex","//","","static bool WriteBlockToDisk(const CBlock\u0026 block, FlatFilePos\u0026 pos, const CMessageHeader::MessageStartChars\u0026 messageStart)","{"," // Open history file to append"," CAutoFile fileout(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION);"," if (fileout.IsNull())"," return error(\"WriteBlockToDisk: OpenBlockFile failed\");",""," // Write index header"," unsigned int nSize = GetSerializeSize(block, fileout.GetVersion());"," fileout \u003c\u003c messageStart \u003c\u003c nSize;",""," // Write block"," long fileOutPos = ftell(fileout.Get());"," if (fileOutPos \u003c 0)"," return error(\"WriteBlockToDisk: ftell failed\");"," pos.nPos = (unsigned int)fileOutPos;"," fileout \u003c\u003c block;",""," return true;","}","","bool ReadBlockFromDisk(CBlock\u0026 block, const FlatFilePos\u0026 pos, const Consensus::Params\u0026 consensusParams)","{"," block.SetNull();",""," // Open history file to read"," CAutoFile filein(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION);"," if (filein.IsNull())"," return error(\"ReadBlockFromDisk: OpenBlockFile failed for %s\", pos.ToString());",""," // Read block"," try {"," filein \u003e\u003e block;"," }"," catch (const std::exception\u0026 e) {"," return error(\"%s: Deserialize or I/O error - %s at %s\", __func__, e.what(), pos.ToString());"," }",""," // Check the header"," if (!CheckProofOfWork(block.GetHash(), block.nBits, consensusParams))"," return error(\"ReadBlockFromDisk: Errors in block header at %s\", pos.ToString());",""," return true;","}","","bool ReadBlockFromDisk(CBlock\u0026 block, const CBlockIndex* pindex, const Consensus::Params\u0026 consensusParams)","{"," FlatFilePos blockPos;"," {"," LOCK(cs_main);"," blockPos = pindex-\u003eGetBlockPos();"," }",""," if (!ReadBlockFromDisk(block, blockPos, consensusParams))"," return false;"," if (block.GetHash() != pindex-\u003eGetBlockHash())"," return error(\"ReadBlockFromDisk(CBlock\u0026, CBlockIndex*): GetHash() doesn't match index for %s at %s\","," pindex-\u003eToString(), pindex-\u003eGetBlockPos().ToString());"," return true;","}","","bool ReadRawBlockFromDisk(std::vector\u003cuint8_t\u003e\u0026 block, const FlatFilePos\u0026 pos, const CMessageHeader::MessageStartChars\u0026 message_start)","{"," FlatFilePos hpos = pos;"," hpos.nPos -= 8; // Seek back 8 bytes for meta header"," CAutoFile filein(OpenBlockFile(hpos, true), SER_DISK, CLIENT_VERSION);"," if (filein.IsNull()) {"," return error(\"%s: OpenBlockFile failed for %s\", __func__, pos.ToString());"," }",""," try {"," CMessageHeader::MessageStartChars blk_start;"," unsigned int blk_size;",""," filein \u003e\u003e blk_start \u003e\u003e blk_size;",""," if (memcmp(blk_start, message_start, CMessageHeader::MESSAGE_START_SIZE)) {"," return error(\"%s: Block magic mismatch for %s: %s versus expected %s\", __func__, pos.ToString(),"," HexStr(blk_start, blk_start + CMessageHeader::MESSAGE_START_SIZE),"," HexStr(message_start, message_start + CMessageHeader::MESSAGE_START_SIZE));"," }",""," if (blk_size \u003e MAX_SIZE) {"," return error(\"%s: Block data is larger than maximum deserialization size for %s: %s versus %s\", __func__, pos.ToString(),"," blk_size, MAX_SIZE);"," }",""," block.resize(blk_size); // Zeroing of memory is intentional here"," filein.read((char*)block.data(), blk_size);"," } catch(const std::exception\u0026 e) {"," return error(\"%s: Read from block file failed: %s for %s\", __func__, e.what(), pos.ToString());"," }",""," return true;","}","","bool ReadRawBlockFromDisk(std::vector\u003cuint8_t\u003e\u0026 block, const CBlockIndex* pindex, const CMessageHeader::MessageStartChars\u0026 message_start)","{"," FlatFilePos block_pos;"," {"," LOCK(cs_main);"," block_pos = pindex-\u003eGetBlockPos();"," }",""," return ReadRawBlockFromDisk(block, block_pos, message_start);","}","","CAmount GetBlockSubsidy(int nHeight, const Consensus::Params\u0026 consensusParams)","{"," int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;"," // Force block reward to zero when right shift is undefined."," if (halvings \u003e= 64)"," return 0;",""," CAmount nSubsidy = 50 * COIN;"," // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years."," nSubsidy \u003e\u003e= halvings;"," return nSubsidy;","}","","// Note that though this is marked const, we may end up modifying `m_cached_finished_ibd`, which","// is a performance-related implementation detail. This function must be marked","// `const` so that `CValidationInterface` clients (which are given a `const CChainState*`)","// can call it.","//","bool CChainState::IsInitialBlockDownload() const","{"," // Optimization: pre-test latch before taking the lock."," if (m_cached_finished_ibd.load(std::memory_order_relaxed))"," return false;",""," LOCK(cs_main);"," if (m_cached_finished_ibd.load(std::memory_order_relaxed))"," return false;"," if (fImporting || fReindex)"," return true;"," if (m_chain.Tip() == nullptr)"," return true;"," if (m_chain.Tip()-\u003enChainWork \u003c nMinimumChainWork)"," return true;"," if (m_chain.Tip()-\u003eGetBlockTime() \u003c (GetTime() - nMaxTipAge))"," return true;"," LogPrintf(\"Leaving InitialBlockDownload (latching to false)\\n\");"," m_cached_finished_ibd.store(true, std::memory_order_relaxed);"," return false;","}","","static CBlockIndex *pindexBestForkTip = nullptr, *pindexBestForkBase = nullptr;","","static void AlertNotify(const std::string\u0026 strMessage)","{"," uiInterface.NotifyAlertChanged();"," std::string strCmd = gArgs.GetArg(\"-alertnotify\", \"\");"," if (strCmd.empty()) return;",""," // Alert text should be plain ascii coming from a trusted source, but to"," // be safe we first strip anything not in safeChars, then add single quotes around"," // the whole string before passing it to the shell:"," std::string singleQuote(\"'\");"," std::string safeStatus = SanitizeString(strMessage);"," safeStatus = singleQuote+safeStatus+singleQuote;"," boost::replace_all(strCmd, \"%s\", safeStatus);",""," std::thread t(runCommand, strCmd);"," t.detach(); // thread runs free","}","","static void CheckForkWarningConditions() EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," AssertLockHeld(cs_main);"," // Before we get past initial download, we cannot reliably alert about forks"," // (we assume we don't get stuck on a fork before finishing our initial sync)"," if (::ChainstateActive().IsInitialBlockDownload())"," return;",""," // If our best fork is no longer within 72 blocks (+/- 12 hours if no one mines it)"," // of our head, drop it"," if (pindexBestForkTip \u0026\u0026 ::ChainActive().Height() - pindexBestForkTip-\u003enHeight \u003e= 72)"," pindexBestForkTip = nullptr;",""," if (pindexBestForkTip || (pindexBestInvalid \u0026\u0026 pindexBestInvalid-\u003enChainWork \u003e ::ChainActive().Tip()-\u003enChainWork + (GetBlockProof(*::ChainActive().Tip()) * 6)))"," {"," if (!GetfLargeWorkForkFound() \u0026\u0026 pindexBestForkBase)"," {"," std::string warning = std::string(\"'Warning: Large-work fork detected, forking after block \") +"," pindexBestForkBase-\u003ephashBlock-\u003eToString() + std::string(\"'\");"," AlertNotify(warning);"," }"," if (pindexBestForkTip \u0026\u0026 pindexBestForkBase)"," {"," LogPrintf(\"%s: Warning: Large valid fork found\\n forking the chain at height %d (%s)\\n lasting to height %d (%s).\\nChain state database corruption likely.\\n\", __func__,"," pindexBestForkBase-\u003enHeight, pindexBestForkBase-\u003ephashBlock-\u003eToString(),"," pindexBestForkTip-\u003enHeight, pindexBestForkTip-\u003ephashBlock-\u003eToString());"," SetfLargeWorkForkFound(true);"," }"," else"," {"," LogPrintf(\"%s: Warning: Found invalid chain at least ~6 blocks longer than our best chain.\\nChain state database corruption likely.\\n\", __func__);"," SetfLargeWorkInvalidChainFound(true);"," }"," }"," else"," {"," SetfLargeWorkForkFound(false);"," SetfLargeWorkInvalidChainFound(false);"," }","}","","static void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," AssertLockHeld(cs_main);"," // If we are on a fork that is sufficiently large, set a warning flag"," CBlockIndex* pfork = pindexNewForkTip;"," CBlockIndex* plonger = ::ChainActive().Tip();"," while (pfork \u0026\u0026 pfork != plonger)"," {"," while (plonger \u0026\u0026 plonger-\u003enHeight \u003e pfork-\u003enHeight)"," plonger = plonger-\u003epprev;"," if (pfork == plonger)"," break;"," pfork = pfork-\u003epprev;"," }",""," // We define a condition where we should warn the user about as a fork of at least 7 blocks"," // with a tip within 72 blocks (+/- 12 hours if no one mines it) of ours"," // We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network"," // hash rate operating on the fork."," // or a chain that is entirely longer than ours and invalid (note that this should be detected by both)"," // We define it this way because it allows us to only store the highest fork tip (+ base) which meets"," // the 7-block condition and from this always have the most-likely-to-cause-warning fork"," if (pfork \u0026\u0026 (!pindexBestForkTip || pindexNewForkTip-\u003enHeight \u003e pindexBestForkTip-\u003enHeight) \u0026\u0026"," pindexNewForkTip-\u003enChainWork - pfork-\u003enChainWork \u003e (GetBlockProof(*pfork) * 7) \u0026\u0026"," ::ChainActive().Height() - pindexNewForkTip-\u003enHeight \u003c 72)"," {"," pindexBestForkTip = pindexNewForkTip;"," pindexBestForkBase = pfork;"," }",""," CheckForkWarningConditions();","}","","void static InvalidChainFound(CBlockIndex* pindexNew) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," if (!pindexBestInvalid || pindexNew-\u003enChainWork \u003e pindexBestInvalid-\u003enChainWork)"," pindexBestInvalid = pindexNew;",""," LogPrintf(\"%s: invalid block=%s height=%d log2_work=%.8g date=%s\\n\", __func__,"," pindexNew-\u003eGetBlockHash().ToString(), pindexNew-\u003enHeight,"," log(pindexNew-\u003enChainWork.getdouble())/log(2.0), FormatISO8601DateTime(pindexNew-\u003eGetBlockTime()));"," CBlockIndex *tip = ::ChainActive().Tip();"," assert (tip);"," LogPrintf(\"%s: current best=%s height=%d log2_work=%.8g date=%s\\n\", __func__,"," tip-\u003eGetBlockHash().ToString(), ::ChainActive().Height(), log(tip-\u003enChainWork.getdouble())/log(2.0),"," FormatISO8601DateTime(tip-\u003eGetBlockTime()));"," CheckForkWarningConditions();","}","","void CChainState::InvalidBlockFound(CBlockIndex *pindex, const CValidationState \u0026state) {"," if (state.GetReason() != ValidationInvalidReason::BLOCK_MUTATED) {"," pindex-\u003enStatus |= BLOCK_FAILED_VALID;"," m_failed_blocks.insert(pindex);"," setDirtyBlockIndex.insert(pindex);"," setBlockIndexCandidates.erase(pindex);"," InvalidChainFound(pindex);"," }","}","","void UpdateCoins(const CTransaction\u0026 tx, CCoinsViewCache\u0026 inputs, CTxUndo \u0026txundo, int nHeight)","{"," // mark inputs spent"," if (!tx.IsCoinBase()) {"," txundo.vprevout.reserve(tx.vin.size());"," for (const CTxIn \u0026txin : tx.vin) {"," txundo.vprevout.emplace_back();"," bool is_spent = inputs.SpendCoin(txin.prevout, \u0026txundo.vprevout.back());"," assert(is_spent);"," }"," }"," // add outputs"," AddCoins(inputs, tx, nHeight);","}","","void UpdateCoins(const CTransaction\u0026 tx, CCoinsViewCache\u0026 inputs, int nHeight)","{"," CTxUndo txundo;"," UpdateCoins(tx, inputs, txundo, nHeight);","}","","bool CScriptCheck::operator()() {"," const CScript \u0026scriptSig = ptxTo-\u003evin[nIn].scriptSig;"," const CScriptWitness *witness = \u0026ptxTo-\u003evin[nIn].scriptWitness;"," return VerifyScript(scriptSig, m_tx_out.scriptPubKey, witness, nFlags, CachingTransactionSignatureChecker(ptxTo, nIn, m_tx_out.nValue, cacheStore, *txdata), \u0026error);","}","","int GetSpendHeight(const CCoinsViewCache\u0026 inputs)","{"," LOCK(cs_main);"," CBlockIndex* pindexPrev = LookupBlockIndex(inputs.GetBestBlock());"," return pindexPrev-\u003enHeight + 1;","}","","","static CuckooCache::cache\u003cuint256, SignatureCacheHasher\u003e scriptExecutionCache;","static uint256 scriptExecutionCacheNonce(GetRandHash());","","void InitScriptExecutionCache() {"," // nMaxCacheSize is unsigned. If -maxsigcachesize is set to zero,"," // setup_bytes creates the minimum possible cache (2 elements)."," size_t nMaxCacheSize = std::min(std::max((int64_t)0, gArgs.GetArg(\"-maxsigcachesize\", DEFAULT_MAX_SIG_CACHE_SIZE) / 2), MAX_MAX_SIG_CACHE_SIZE) * ((size_t) 1 \u003c\u003c 20);"," size_t nElems = scriptExecutionCache.setup_bytes(nMaxCacheSize);"," LogPrintf(\"Using %zu MiB out of %zu/2 requested for script execution cache, able to store %zu elements\\n\","," (nElems*sizeof(uint256)) \u003e\u003e20, (nMaxCacheSize*2)\u003e\u003e20, nElems);","}","","/**"," * Check whether all inputs of this transaction are valid (no double spends, scripts \u0026 sigs, amounts)"," * This does not modify the UTXO set."," *"," * If pvChecks is not nullptr, script checks are pushed onto it instead of being performed inline. Any"," * script checks which are not necessary (eg due to script execution cache hits) are, obviously,"," * not pushed onto pvChecks/run."," *"," * Setting cacheSigStore/cacheFullScriptStore to false will remove elements from the corresponding cache"," * which are matched. This is useful for checking blocks where we will likely never need the cache"," * entry again."," *"," * Note that we may set state.reason to NOT_STANDARD for extra soft-fork flags in flags, block-checking"," * callers should probably reset it to CONSENSUS in such cases."," *"," * Non-static (and re-declared) in src/test/txvalidationcache_tests.cpp"," */","bool CheckInputs(const CTransaction\u0026 tx, CValidationState \u0026state, const CCoinsViewCache \u0026inputs, bool fScriptChecks, unsigned int flags, bool cacheSigStore, bool cacheFullScriptStore, PrecomputedTransactionData\u0026 txdata, std::vector\u003cCScriptCheck\u003e *pvChecks) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," if (!tx.IsCoinBase())"," {"," if (pvChecks)"," pvChecks-\u003ereserve(tx.vin.size());",""," // The first loop above does all the inexpensive checks."," // Only if ALL inputs pass do we perform expensive ECDSA signature checks."," // Helps prevent CPU exhaustion attacks.",""," // Skip script verification when connecting blocks under the"," // assumevalid block. Assuming the assumevalid block is valid this"," // is safe because block merkle hashes are still computed and checked,"," // Of course, if an assumed valid block is invalid due to false scriptSigs"," // this optimization would allow an invalid chain to be accepted."," if (fScriptChecks) {"," // First check if script executions have been cached with the same"," // flags. Note that this assumes that the inputs provided are"," // correct (ie that the transaction hash which is in tx's prevouts"," // properly commits to the scriptPubKey in the inputs view of that"," // transaction)."," uint256 hashCacheEntry;"," // We only use the first 19 bytes of nonce to avoid a second SHA"," // round - giving us 19 + 32 + 4 = 55 bytes (+ 8 + 1 = 64)"," static_assert(55 - sizeof(flags) - 32 \u003e= 128/8, \"Want at least 128 bits of nonce for script execution cache\");"," CSHA256().Write(scriptExecutionCacheNonce.begin(), 55 - sizeof(flags) - 32).Write(tx.GetWitnessHash().begin(), 32).Write((unsigned char*)\u0026flags, sizeof(flags)).Finalize(hashCacheEntry.begin());"," AssertLockHeld(cs_main); //TODO: Remove this requirement by making CuckooCache not require external locks"," if (scriptExecutionCache.contains(hashCacheEntry, !cacheFullScriptStore)) {"," return true;"," }",""," for (unsigned int i = 0; i \u003c tx.vin.size(); i++) {"," const COutPoint \u0026prevout = tx.vin[i].prevout;"," const Coin\u0026 coin = inputs.AccessCoin(prevout);"," assert(!coin.IsSpent());",""," // We very carefully only pass in things to CScriptCheck which"," // are clearly committed to by tx' witness hash. This provides"," // a sanity check that our caching is not introducing consensus"," // failures through additional data in, eg, the coins being"," // spent being checked as a part of CScriptCheck.",""," // Verify signature"," CScriptCheck check(coin.out, tx, i, flags, cacheSigStore, \u0026txdata);"," if (pvChecks) {"," pvChecks-\u003epush_back(CScriptCheck());"," check.swap(pvChecks-\u003eback());"," } else if (!check()) {"," if (flags \u0026 STANDARD_NOT_MANDATORY_VERIFY_FLAGS) {"," // Check whether the failure was caused by a"," // non-mandatory script verification check, such as"," // non-standard DER encodings or non-null dummy"," // arguments; if so, ensure we return NOT_STANDARD"," // instead of CONSENSUS to avoid downstream users"," // splitting the network between upgraded and"," // non-upgraded nodes by banning CONSENSUS-failing"," // data providers."," CScriptCheck check2(coin.out, tx, i,"," flags \u0026 ~STANDARD_NOT_MANDATORY_VERIFY_FLAGS, cacheSigStore, \u0026txdata);"," if (check2())"," return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false, REJECT_NONSTANDARD, strprintf(\"non-mandatory-script-verify-flag (%s)\", ScriptErrorString(check.GetScriptError())));"," }"," // MANDATORY flag failures correspond to"," // ValidationInvalidReason::CONSENSUS. Because CONSENSUS"," // failures are the most serious case of validation"," // failures, we may need to consider using"," // RECENT_CONSENSUS_CHANGE for any script failure that"," // could be due to non-upgraded nodes which we may want to"," // support, to avoid splitting the network (but this"," // depends on the details of how net_processing handles"," // such errors)."," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, strprintf(\"mandatory-script-verify-flag-failed (%s)\", ScriptErrorString(check.GetScriptError())));"," }"," }",""," if (cacheFullScriptStore \u0026\u0026 !pvChecks) {"," // We executed all of the provided scripts, and were told to"," // cache the result. Do so now."," scriptExecutionCache.insert(hashCacheEntry);"," }"," }"," }",""," return true;","}","","static bool UndoWriteToDisk(const CBlockUndo\u0026 blockundo, FlatFilePos\u0026 pos, const uint256\u0026 hashBlock, const CMessageHeader::MessageStartChars\u0026 messageStart)","{"," // Open history file to append"," CAutoFile fileout(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION);"," if (fileout.IsNull())"," return error(\"%s: OpenUndoFile failed\", __func__);",""," // Write index header"," unsigned int nSize = GetSerializeSize(blockundo, fileout.GetVersion());"," fileout \u003c\u003c messageStart \u003c\u003c nSize;",""," // Write undo data"," long fileOutPos = ftell(fileout.Get());"," if (fileOutPos \u003c 0)"," return error(\"%s: ftell failed\", __func__);"," pos.nPos = (unsigned int)fileOutPos;"," fileout \u003c\u003c blockundo;",""," // calculate \u0026 write checksum"," CHashWriter hasher(SER_GETHASH, PROTOCOL_VERSION);"," hasher \u003c\u003c hashBlock;"," hasher \u003c\u003c blockundo;"," fileout \u003c\u003c hasher.GetHash();",""," return true;","}","","bool UndoReadFromDisk(CBlockUndo\u0026 blockundo, const CBlockIndex* pindex)","{"," FlatFilePos pos = pindex-\u003eGetUndoPos();"," if (pos.IsNull()) {"," return error(\"%s: no undo data available\", __func__);"," }",""," // Open history file to read"," CAutoFile filein(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION);"," if (filein.IsNull())"," return error(\"%s: OpenUndoFile failed\", __func__);",""," // Read block"," uint256 hashChecksum;"," CHashVerifier\u003cCAutoFile\u003e verifier(\u0026filein); // We need a CHashVerifier as reserializing may lose data"," try {"," verifier \u003c\u003c pindex-\u003epprev-\u003eGetBlockHash();"," verifier \u003e\u003e blockundo;"," filein \u003e\u003e hashChecksum;"," }"," catch (const std::exception\u0026 e) {"," return error(\"%s: Deserialize or I/O error - %s\", __func__, e.what());"," }",""," // Verify checksum"," if (hashChecksum != verifier.GetHash())"," return error(\"%s: Checksum mismatch\", __func__);",""," return true;","}","","/** Abort with a message */","static bool AbortNode(const std::string\u0026 strMessage, const std::string\u0026 userMessage = \"\", unsigned int prefix = 0)","{"," SetMiscWarning(strMessage);"," LogPrintf(\"*** %s\\n\", strMessage);"," if (!userMessage.empty()) {"," uiInterface.ThreadSafeMessageBox(userMessage, \"\", CClientUIInterface::MSG_ERROR | prefix);"," } else {"," uiInterface.ThreadSafeMessageBox(_(\"Error: A fatal internal error occurred, see debug.log for details\"), \"\", CClientUIInterface::MSG_ERROR | CClientUIInterface::MSG_NOPREFIX);"," }"," StartShutdown();"," return false;","}","","static bool AbortNode(CValidationState\u0026 state, const std::string\u0026 strMessage, const std::string\u0026 userMessage = \"\", unsigned int prefix = 0)","{"," AbortNode(strMessage, userMessage, prefix);"," return state.Error(strMessage);","}","","/**"," * Restore the UTXO in a Coin at a given COutPoint"," * @param undo The Coin to be restored."," * @param view The coins view to which to apply the changes."," * @param out The out point that corresponds to the tx input."," * @return A DisconnectResult as an int"," */","int ApplyTxInUndo(Coin\u0026\u0026 undo, CCoinsViewCache\u0026 view, const COutPoint\u0026 out)","{"," bool fClean = true;",""," if (view.HaveCoin(out)) fClean = false; // overwriting transaction output",""," if (undo.nHeight == 0) {"," // Missing undo metadata (height and coinbase). Older versions included this"," // information only in undo records for the last spend of a transactions'"," // outputs. This implies that it must be present for some other output of the same tx."," const Coin\u0026 alternate = AccessByTxid(view, out.hash);"," if (!alternate.IsSpent()) {"," undo.nHeight = alternate.nHeight;"," undo.fCoinBase = alternate.fCoinBase;"," } else {"," return DISCONNECT_FAILED; // adding output for transaction without known metadata"," }"," }"," // The potential_overwrite parameter to AddCoin is only allowed to be false if we know for"," // sure that the coin did not already exist in the cache. As we have queried for that above"," // using HaveCoin, we don't need to guess. When fClean is false, a coin already existed and"," // it is an overwrite."," view.AddCoin(out, std::move(undo), !fClean);",""," return fClean ? DISCONNECT_OK : DISCONNECT_UNCLEAN;","}","","/** Undo the effects of this block (with given index) on the UTXO set represented by coins."," * When FAILED is returned, view is left in an indeterminate state. */","DisconnectResult CChainState::DisconnectBlock(const CBlock\u0026 block, const CBlockIndex* pindex, CCoinsViewCache\u0026 view)","{"," bool fClean = true;",""," CBlockUndo blockUndo;"," if (!UndoReadFromDisk(blockUndo, pindex)) {"," error(\"DisconnectBlock(): failure reading undo data\");"," return DISCONNECT_FAILED;"," }",""," if (blockUndo.vtxundo.size() + 1 != block.vtx.size()) {"," error(\"DisconnectBlock(): block and undo data inconsistent\");"," return DISCONNECT_FAILED;"," }",""," // undo transactions in reverse order"," for (int i = block.vtx.size() - 1; i \u003e= 0; i--) {"," const CTransaction \u0026tx = *(block.vtx[i]);"," uint256 hash = tx.GetHash();"," bool is_coinbase = tx.IsCoinBase();",""," // Check that all outputs are available and match the outputs in the block itself"," // exactly."," for (size_t o = 0; o \u003c tx.vout.size(); o++) {"," if (!tx.vout[o].scriptPubKey.IsUnspendable()) {"," COutPoint out(hash, o);"," Coin coin;"," bool is_spent = view.SpendCoin(out, \u0026coin);"," if (!is_spent || tx.vout[o] != coin.out || pindex-\u003enHeight != coin.nHeight || is_coinbase != coin.fCoinBase) {"," fClean = false; // transaction output mismatch"," }"," }"," }",""," // restore inputs"," if (i \u003e 0) { // not coinbases"," CTxUndo \u0026txundo = blockUndo.vtxundo[i-1];"," if (txundo.vprevout.size() != tx.vin.size()) {"," error(\"DisconnectBlock(): transaction and undo data inconsistent\");"," return DISCONNECT_FAILED;"," }"," for (unsigned int j = tx.vin.size(); j-- \u003e 0;) {"," const COutPoint \u0026out = tx.vin[j].prevout;"," int res = ApplyTxInUndo(std::move(txundo.vprevout[j]), view, out);"," if (res == DISCONNECT_FAILED) return DISCONNECT_FAILED;"," fClean = fClean \u0026\u0026 res != DISCONNECT_UNCLEAN;"," }"," // At this point, all of txundo.vprevout should have been moved out."," }"," }",""," // move best block pointer to prevout block"," view.SetBestBlock(pindex-\u003epprev-\u003eGetBlockHash());",""," return fClean ? DISCONNECT_OK : DISCONNECT_UNCLEAN;","}","","void static FlushBlockFile(bool fFinalize = false)","{"," LOCK(cs_LastBlockFile);",""," FlatFilePos block_pos_old(nLastBlockFile, vinfoBlockFile[nLastBlockFile].nSize);"," FlatFilePos undo_pos_old(nLastBlockFile, vinfoBlockFile[nLastBlockFile].nUndoSize);",""," bool status = true;"," status \u0026= BlockFileSeq().Flush(block_pos_old, fFinalize);"," status \u0026= UndoFileSeq().Flush(undo_pos_old, fFinalize);"," if (!status) {"," AbortNode(\"Flushing block file to disk failed. This is likely the result of an I/O error.\");"," }","}","","static bool FindUndoPos(CValidationState \u0026state, int nFile, FlatFilePos \u0026pos, unsigned int nAddSize);","","static bool WriteUndoDataForBlock(const CBlockUndo\u0026 blockundo, CValidationState\u0026 state, CBlockIndex* pindex, const CChainParams\u0026 chainparams)","{"," // Write undo information to disk"," if (pindex-\u003eGetUndoPos().IsNull()) {"," FlatFilePos _pos;"," if (!FindUndoPos(state, pindex-\u003enFile, _pos, ::GetSerializeSize(blockundo, CLIENT_VERSION) + 40))"," return error(\"ConnectBlock(): FindUndoPos failed\");"," if (!UndoWriteToDisk(blockundo, _pos, pindex-\u003epprev-\u003eGetBlockHash(), chainparams.MessageStart()))"," return AbortNode(state, \"Failed to write undo data\");",""," // update nUndoPos in block index"," pindex-\u003enUndoPos = _pos.nPos;"," pindex-\u003enStatus |= BLOCK_HAVE_UNDO;"," setDirtyBlockIndex.insert(pindex);"," }",""," return true;","}","","static CCheckQueue\u003cCScriptCheck\u003e scriptcheckqueue(128);","","void ThreadScriptCheck(int worker_num) {"," util::ThreadRename(strprintf(\"scriptch.%i\", worker_num));"," scriptcheckqueue.Thread();","}","","VersionBitsCache versionbitscache GUARDED_BY(cs_main);","","int32_t ComputeBlockVersion(const CBlockIndex* pindexPrev, const Consensus::Params\u0026 params)","{"," LOCK(cs_main);"," int32_t nVersion = VERSIONBITS_TOP_BITS;",""," for (int i = 0; i \u003c (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; i++) {"," ThresholdState state = VersionBitsState(pindexPrev, params, static_cast\u003cConsensus::DeploymentPos\u003e(i), versionbitscache);"," if (state == ThresholdState::LOCKED_IN || state == ThresholdState::STARTED) {"," nVersion |= VersionBitsMask(params, static_cast\u003cConsensus::DeploymentPos\u003e(i));"," }"," }",""," return nVersion;","}","","/**"," * Threshold condition checker that triggers when unknown versionbits are seen on the network."," */","class WarningBitsConditionChecker : public AbstractThresholdConditionChecker","{","private:"," int bit;","","public:"," explicit WarningBitsConditionChecker(int bitIn) : bit(bitIn) {}",""," int64_t BeginTime(const Consensus::Params\u0026 params) const override { return 0; }"," int64_t EndTime(const Consensus::Params\u0026 params) const override { return std::numeric_limits\u003cint64_t\u003e::max(); }"," int Period(const Consensus::Params\u0026 params) const override { return params.nMinerConfirmationWindow; }"," int Threshold(const Consensus::Params\u0026 params) const override { return params.nRuleChangeActivationThreshold; }",""," bool Condition(const CBlockIndex* pindex, const Consensus::Params\u0026 params) const override"," {"," return ((pindex-\u003enVersion \u0026 VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) \u0026\u0026"," ((pindex-\u003enVersion \u003e\u003e bit) \u0026 1) != 0 \u0026\u0026"," ((ComputeBlockVersion(pindex-\u003epprev, params) \u003e\u003e bit) \u0026 1) == 0;"," }","};","","static ThresholdConditionCache warningcache[VERSIONBITS_NUM_BITS] GUARDED_BY(cs_main);","","// 0.13.0 was shipped with a segwit deployment defined for testnet, but not for","// mainnet. We no longer need to support disabling the segwit deployment","// except for testing purposes, due to limitations of the functional test","// environment. See test/functional/p2p-segwit.py.","static bool IsScriptWitnessEnabled(const Consensus::Params\u0026 params)","{"," return params.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout != 0;","}","","static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consensus::Params\u0026 consensusparams) EXCLUSIVE_LOCKS_REQUIRED(cs_main) {"," AssertLockHeld(cs_main);",""," unsigned int flags = SCRIPT_VERIFY_NONE;",""," // BIP16 didn't become active until Apr 1 2012 (on mainnet, and"," // retroactively applied to testnet)"," // However, only one historical block violated the P2SH rules (on both"," // mainnet and testnet), so for simplicity, always leave P2SH"," // on except for the one violating block."," if (consensusparams.BIP16Exception.IsNull() || // no bip16 exception on this chain"," pindex-\u003ephashBlock == nullptr || // this is a new candidate block, eg from TestBlockValidity()"," *pindex-\u003ephashBlock != consensusparams.BIP16Exception) // this block isn't the historical exception"," {"," flags |= SCRIPT_VERIFY_P2SH;"," }",""," // Enforce WITNESS rules whenever P2SH is in effect (and the segwit"," // deployment is defined)."," if (flags \u0026 SCRIPT_VERIFY_P2SH \u0026\u0026 IsScriptWitnessEnabled(consensusparams)) {"," flags |= SCRIPT_VERIFY_WITNESS;"," }",""," // Start enforcing the DERSIG (BIP66) rule"," if (pindex-\u003enHeight \u003e= consensusparams.BIP66Height) {"," flags |= SCRIPT_VERIFY_DERSIG;"," }",""," // Start enforcing CHECKLOCKTIMEVERIFY (BIP65) rule"," if (pindex-\u003enHeight \u003e= consensusparams.BIP65Height) {"," flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY;"," }",""," // Start enforcing BIP68 (sequence locks) and BIP112 (CHECKSEQUENCEVERIFY) using versionbits logic."," if (VersionBitsState(pindex-\u003epprev, consensusparams, Consensus::DEPLOYMENT_CSV, versionbitscache) == ThresholdState::ACTIVE) {"," flags |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY;"," }",""," if (IsNullDummyEnabled(pindex-\u003epprev, consensusparams)) {"," flags |= SCRIPT_VERIFY_NULLDUMMY;"," }",""," return flags;","}","","","","static int64_t nTimeCheck = 0;","static int64_t nTimeForks = 0;","static int64_t nTimeVerify = 0;","static int64_t nTimeConnect = 0;","static int64_t nTimeIndex = 0;","static int64_t nTimeCallbacks = 0;","static int64_t nTimeTotal = 0;","static int64_t nBlocksTotal = 0;","","/** Apply the effects of this block (with given index) on the UTXO set represented by coins."," * Validity checks that depend on the UTXO set are also done; ConnectBlock()"," * can fail if those validity checks fail (among other reasons). */","bool CChainState::ConnectBlock(const CBlock\u0026 block, CValidationState\u0026 state, CBlockIndex* pindex,"," CCoinsViewCache\u0026 view, const CChainParams\u0026 chainparams, bool fJustCheck)","{"," AssertLockHeld(cs_main);"," assert(pindex);"," assert(*pindex-\u003ephashBlock == block.GetHash());"," int64_t nTimeStart = GetTimeMicros();",""," // Check it again in case a previous version let a bad block in"," // NOTE: We don't currently (re-)invoke ContextualCheckBlock() or"," // ContextualCheckBlockHeader() here. This means that if we add a new"," // consensus rule that is enforced in one of those two functions, then we"," // may have let in a block that violates the rule prior to updating the"," // software, and we would NOT be enforcing the rule here. Fully solving"," // upgrade from one software version to the next after a consensus rule"," // change is potentially tricky and issue-specific (see RewindBlockIndex()"," // for one general approach that was used for BIP 141 deployment)."," // Also, currently the rule against blocks more than 2 hours in the future"," // is enforced in ContextualCheckBlockHeader(); we wouldn't want to"," // re-enforce that rule here (at least until we make it impossible for"," // GetAdjustedTime() to go backward)."," if (!CheckBlock(block, state, chainparams.GetConsensus(), !fJustCheck, !fJustCheck)) {"," if (state.GetReason() == ValidationInvalidReason::BLOCK_MUTATED) {"," // We don't write down blocks to disk if they may have been"," // corrupted, so this should be impossible unless we're having hardware"," // problems."," return AbortNode(state, \"Corrupt block found indicating potential hardware failure; shutting down\");"," }"," return error(\"%s: Consensus::CheckBlock: %s\", __func__, FormatStateMessage(state));"," }",""," // verify that the view's current state corresponds to the previous block"," uint256 hashPrevBlock = pindex-\u003epprev == nullptr ? uint256() : pindex-\u003epprev-\u003eGetBlockHash();"," assert(hashPrevBlock == view.GetBestBlock());",""," // Special case for the genesis block, skipping connection of its transactions"," // (its coinbase is unspendable)"," if (block.GetHash() == chainparams.GetConsensus().hashGenesisBlock) {"," if (!fJustCheck)"," view.SetBestBlock(pindex-\u003eGetBlockHash());"," return true;"," }",""," nBlocksTotal++;",""," bool fScriptChecks = true;"," if (!hashAssumeValid.IsNull()) {"," // We've been configured with the hash of a block which has been externally verified to have a valid history."," // A suitable default value is included with the software and updated from time to time. Because validity"," // relative to a piece of software is an objective fact these defaults can be easily reviewed."," // This setting doesn't force the selection of any particular chain but makes validating some faster by"," // effectively caching the result of part of the verification."," BlockMap::const_iterator it = mapBlockIndex.find(hashAssumeValid);"," if (it != mapBlockIndex.end()) {"," if (it-\u003esecond-\u003eGetAncestor(pindex-\u003enHeight) == pindex \u0026\u0026"," pindexBestHeader-\u003eGetAncestor(pindex-\u003enHeight) == pindex \u0026\u0026"," pindexBestHeader-\u003enChainWork \u003e= nMinimumChainWork) {"," // This block is a member of the assumed verified chain and an ancestor of the best header."," // The equivalent time check discourages hash power from extorting the network via DOS attack"," // into accepting an invalid block through telling users they must manually set assumevalid."," // Requiring a software change or burying the invalid block, regardless of the setting, makes"," // it hard to hide the implication of the demand. This also avoids having release candidates"," // that are hardly doing any signature verification at all in testing without having to"," // artificially set the default assumed verified block further back."," // The test against nMinimumChainWork prevents the skipping when denied access to any chain at"," // least as good as the expected chain."," fScriptChecks = (GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, *pindexBestHeader, chainparams.GetConsensus()) \u003c= 60 * 60 * 24 * 7 * 2);"," }"," }"," }",""," int64_t nTime1 = GetTimeMicros(); nTimeCheck += nTime1 - nTimeStart;"," LogPrint(BCLog::BENCH, \" - Sanity checks: %.2fms [%.2fs (%.2fms/blk)]\\n\", MILLI * (nTime1 - nTimeStart), nTimeCheck * MICRO, nTimeCheck * MILLI / nBlocksTotal);",""," // Do not allow blocks that contain transactions which 'overwrite' older transactions,"," // unless those are already completely spent."," // If such overwrites are allowed, coinbases and transactions depending upon those"," // can be duplicated to remove the ability to spend the first instance -- even after"," // being sent to another address."," // See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information."," // This logic is not necessary for memory pool transactions, as AcceptToMemoryPool"," // already refuses previously-known transaction ids entirely."," // This rule was originally applied to all blocks with a timestamp after March 15, 2012, 0:00 UTC."," // Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the"," // two in the chain that violate it. This prevents exploiting the issue against nodes during their"," // initial block download."," bool fEnforceBIP30 = !((pindex-\u003enHeight==91842 \u0026\u0026 pindex-\u003eGetBlockHash() == uint256S(\"0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec\")) ||"," (pindex-\u003enHeight==91880 \u0026\u0026 pindex-\u003eGetBlockHash() == uint256S(\"0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721\")));",""," // Once BIP34 activated it was not possible to create new duplicate coinbases and thus other than starting"," // with the 2 existing duplicate coinbase pairs, not possible to create overwriting txs. But by the"," // time BIP34 activated, in each of the existing pairs the duplicate coinbase had overwritten the first"," // before the first had been spent. Since those coinbases are sufficiently buried it's no longer possible to create further"," // duplicate transactions descending from the known pairs either."," // If we're on the known chain at height greater than where BIP34 activated, we can save the db accesses needed for the BIP30 check.",""," // BIP34 requires that a block at height X (block X) has its coinbase"," // scriptSig start with a CScriptNum of X (indicated height X). The above"," // logic of no longer requiring BIP30 once BIP34 activates is flawed in the"," // case that there is a block X before the BIP34 height of 227,931 which has"," // an indicated height Y where Y is greater than X. The coinbase for block"," // X would also be a valid coinbase for block Y, which could be a BIP30"," // violation. An exhaustive search of all mainnet coinbases before the"," // BIP34 height which have an indicated height greater than the block height"," // reveals many occurrences. The 3 lowest indicated heights found are"," // 209,921, 490,897, and 1,983,702 and thus coinbases for blocks at these 3"," // heights would be the first opportunity for BIP30 to be violated.",""," // The search reveals a great many blocks which have an indicated height"," // greater than 1,983,702, so we simply remove the optimization to skip"," // BIP30 checking for blocks at height 1,983,702 or higher. Before we reach"," // that block in another 25 years or so, we should take advantage of a"," // future consensus change to do a new and improved version of BIP34 that"," // will actually prevent ever creating any duplicate coinbases in the"," // future."," static constexpr int BIP34_IMPLIES_BIP30_LIMIT = 1983702;",""," // There is no potential to create a duplicate coinbase at block 209,921"," // because this is still before the BIP34 height and so explicit BIP30"," // checking is still active.",""," // The final case is block 176,684 which has an indicated height of"," // 490,897. Unfortunately, this issue was not discovered until about 2 weeks"," // before block 490,897 so there was not much opportunity to address this"," // case other than to carefully analyze it and determine it would not be a"," // problem. Block 490,897 was, in fact, mined with a different coinbase than"," // block 176,684, but it is important to note that even if it hadn't been or"," // is remined on an alternate fork with a duplicate coinbase, we would still"," // not run into a BIP30 violation. This is because the coinbase for 176,684"," // is spent in block 185,956 in transaction"," // d4f7fbbf92f4a3014a230b2dc70b8058d02eb36ac06b4a0736d9d60eaa9e8781. This"," // spending transaction can't be duplicated because it also spends coinbase"," // 0328dd85c331237f18e781d692c92de57649529bd5edf1d01036daea32ffde29. This"," // coinbase has an indicated height of over 4.2 billion, and wouldn't be"," // duplicatable until that height, and it's currently impossible to create a"," // chain that long. Nevertheless we may wish to consider a future soft fork"," // which retroactively prevents block 490,897 from creating a duplicate"," // coinbase. The two historical BIP30 violations often provide a confusing"," // edge case when manipulating the UTXO and it would be simpler not to have"," // another edge case to deal with.",""," // testnet3 has no blocks before the BIP34 height with indicated heights"," // post BIP34 before approximately height 486,000,000 and presumably will"," // be reset before it reaches block 1,983,702 and starts doing unnecessary"," // BIP30 checking again."," assert(pindex-\u003epprev);"," CBlockIndex *pindexBIP34height = pindex-\u003epprev-\u003eGetAncestor(chainparams.GetConsensus().BIP34Height);"," //Only continue to enforce if we're below BIP34 activation height or the block hash at that height doesn't correspond."," fEnforceBIP30 = fEnforceBIP30 \u0026\u0026 (!pindexBIP34height || !(pindexBIP34height-\u003eGetBlockHash() == chainparams.GetConsensus().BIP34Hash));",""," // TODO: Remove BIP30 checking from block height 1,983,702 on, once we have a"," // consensus change that ensures coinbases at those heights can not"," // duplicate earlier coinbases."," if (fEnforceBIP30 || pindex-\u003enHeight \u003e= BIP34_IMPLIES_BIP30_LIMIT) {"," for (const auto\u0026 tx : block.vtx) {"," for (size_t o = 0; o \u003c tx-\u003evout.size(); o++) {"," if (view.HaveCoin(COutPoint(tx-\u003eGetHash(), o))) {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, error(\"ConnectBlock(): tried to overwrite transaction\"),"," REJECT_INVALID, \"bad-txns-BIP30\");"," }"," }"," }"," }",""," // Start enforcing BIP68 (sequence locks) and BIP112 (CHECKSEQUENCEVERIFY) using versionbits logic."," int nLockTimeFlags = 0;"," if (VersionBitsState(pindex-\u003epprev, chainparams.GetConsensus(), Consensus::DEPLOYMENT_CSV, versionbitscache) == ThresholdState::ACTIVE) {"," nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE;"," }",""," // Get the script flags for this block"," unsigned int flags = GetBlockScriptFlags(pindex, chainparams.GetConsensus());",""," int64_t nTime2 = GetTimeMicros(); nTimeForks += nTime2 - nTime1;"," LogPrint(BCLog::BENCH, \" - Fork checks: %.2fms [%.2fs (%.2fms/blk)]\\n\", MILLI * (nTime2 - nTime1), nTimeForks * MICRO, nTimeForks * MILLI / nBlocksTotal);",""," CBlockUndo blockundo;",""," CCheckQueueControl\u003cCScriptCheck\u003e control(fScriptChecks \u0026\u0026 nScriptCheckThreads ? \u0026scriptcheckqueue : nullptr);",""," std::vector\u003cint\u003e prevheights;"," CAmount nFees = 0;"," int nInputs = 0;"," int64_t nSigOpsCost = 0;"," blockundo.vtxundo.reserve(block.vtx.size() - 1);"," std::vector\u003cPrecomputedTransactionData\u003e txdata;"," txdata.reserve(block.vtx.size()); // Required so that pointers to individual PrecomputedTransactionData don't get invalidated"," for (unsigned int i = 0; i \u003c block.vtx.size(); i++)"," {"," const CTransaction \u0026tx = *(block.vtx[i]);",""," nInputs += tx.vin.size();",""," if (!tx.IsCoinBase())"," {"," CAmount txfee = 0;"," if (!Consensus::CheckTxInputs(tx, state, view, pindex-\u003enHeight, txfee)) {"," if (!IsBlockReason(state.GetReason())) {"," // CheckTxInputs may return MISSING_INPUTS or"," // PREMATURE_SPEND but we can't return that, as it's not"," // defined for a block, so we reset the reason flag to"," // CONSENSUS here."," state.Invalid(ValidationInvalidReason::CONSENSUS, false,"," state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage());"," }"," return error(\"%s: Consensus::CheckTxInputs: %s, %s\", __func__, tx.GetHash().ToString(), FormatStateMessage(state));"," }"," nFees += txfee;"," if (!MoneyRange(nFees)) {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, error(\"%s: accumulated fee in the block out of range.\", __func__),"," REJECT_INVALID, \"bad-txns-accumulated-fee-outofrange\");"," }",""," // Check that transaction is BIP68 final"," // BIP68 lock checks (as opposed to nLockTime checks) must"," // be in ConnectBlock because they require the UTXO set"," prevheights.resize(tx.vin.size());"," for (size_t j = 0; j \u003c tx.vin.size(); j++) {"," prevheights[j] = view.AccessCoin(tx.vin[j].prevout).nHeight;"," }",""," if (!SequenceLocks(tx, nLockTimeFlags, \u0026prevheights, *pindex)) {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, error(\"%s: contains a non-BIP68-final transaction\", __func__),"," REJECT_INVALID, \"bad-txns-nonfinal\");"," }"," }",""," // GetTransactionSigOpCost counts 3 types of sigops:"," // * legacy (always)"," // * p2sh (when P2SH enabled in flags and excludes coinbase)"," // * witness (when witness enabled in flags and excludes coinbase)"," nSigOpsCost += GetTransactionSigOpCost(tx, view, flags);"," if (nSigOpsCost \u003e MAX_BLOCK_SIGOPS_COST)"," return state.Invalid(ValidationInvalidReason::CONSENSUS, error(\"ConnectBlock(): too many sigops\"),"," REJECT_INVALID, \"bad-blk-sigops\");",""," txdata.emplace_back(tx);"," if (!tx.IsCoinBase())"," {"," std::vector\u003cCScriptCheck\u003e vChecks;"," bool fCacheResults = fJustCheck; /* Don't cache results if we're actually connecting blocks (still consult the cache, though) */"," if (!CheckInputs(tx, state, view, fScriptChecks, flags, fCacheResults, fCacheResults, txdata[i], nScriptCheckThreads ? \u0026vChecks : nullptr)) {"," if (state.GetReason() == ValidationInvalidReason::TX_NOT_STANDARD) {"," // CheckInputs may return NOT_STANDARD for extra flags we passed,"," // but we can't return that, as it's not defined for a block, so"," // we reset the reason flag to CONSENSUS here."," // In the event of a future soft-fork, we may need to"," // consider whether rewriting to CONSENSUS or"," // RECENT_CONSENSUS_CHANGE would be more appropriate."," state.Invalid(ValidationInvalidReason::CONSENSUS, false,"," state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage());"," }"," return error(\"ConnectBlock(): CheckInputs on %s failed with %s\","," tx.GetHash().ToString(), FormatStateMessage(state));"," }"," control.Add(vChecks);"," }",""," CTxUndo undoDummy;"," if (i \u003e 0) {"," blockundo.vtxundo.push_back(CTxUndo());"," }"," UpdateCoins(tx, view, i == 0 ? undoDummy : blockundo.vtxundo.back(), pindex-\u003enHeight);"," }"," int64_t nTime3 = GetTimeMicros(); nTimeConnect += nTime3 - nTime2;"," LogPrint(BCLog::BENCH, \" - Connect %u transactions: %.2fms (%.3fms/tx, %.3fms/txin) [%.2fs (%.2fms/blk)]\\n\", (unsigned)block.vtx.size(), MILLI * (nTime3 - nTime2), MILLI * (nTime3 - nTime2) / block.vtx.size(), nInputs \u003c= 1 ? 0 : MILLI * (nTime3 - nTime2) / (nInputs-1), nTimeConnect * MICRO, nTimeConnect * MILLI / nBlocksTotal);",""," CAmount blockReward = nFees + GetBlockSubsidy(pindex-\u003enHeight, chainparams.GetConsensus());"," if (block.vtx[0]-\u003eGetValueOut() \u003e blockReward)"," return state.Invalid(ValidationInvalidReason::CONSENSUS,"," error(\"ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)\","," block.vtx[0]-\u003eGetValueOut(), blockReward),"," REJECT_INVALID, \"bad-cb-amount\");",""," if (!control.Wait())"," return state.Invalid(ValidationInvalidReason::CONSENSUS, error(\"%s: CheckQueue failed\", __func__), REJECT_INVALID, \"block-validation-failed\");"," int64_t nTime4 = GetTimeMicros(); nTimeVerify += nTime4 - nTime2;"," LogPrint(BCLog::BENCH, \" - Verify %u txins: %.2fms (%.3fms/txin) [%.2fs (%.2fms/blk)]\\n\", nInputs - 1, MILLI * (nTime4 - nTime2), nInputs \u003c= 1 ? 0 : MILLI * (nTime4 - nTime2) / (nInputs-1), nTimeVerify * MICRO, nTimeVerify * MILLI / nBlocksTotal);",""," if (fJustCheck)"," return true;",""," if (!WriteUndoDataForBlock(blockundo, state, pindex, chainparams))"," return false;",""," if (!pindex-\u003eIsValid(BLOCK_VALID_SCRIPTS)) {"," pindex-\u003eRaiseValidity(BLOCK_VALID_SCRIPTS);"," setDirtyBlockIndex.insert(pindex);"," }",""," assert(pindex-\u003ephashBlock);"," // add this block to the view's block chain"," view.SetBestBlock(pindex-\u003eGetBlockHash());",""," int64_t nTime5 = GetTimeMicros(); nTimeIndex += nTime5 - nTime4;"," LogPrint(BCLog::BENCH, \" - Index writing: %.2fms [%.2fs (%.2fms/blk)]\\n\", MILLI * (nTime5 - nTime4), nTimeIndex * MICRO, nTimeIndex * MILLI / nBlocksTotal);",""," int64_t nTime6 = GetTimeMicros(); nTimeCallbacks += nTime6 - nTime5;"," LogPrint(BCLog::BENCH, \" - Callbacks: %.2fms [%.2fs (%.2fms/blk)]\\n\", MILLI * (nTime6 - nTime5), nTimeCallbacks * MICRO, nTimeCallbacks * MILLI / nBlocksTotal);",""," return true;","}","","bool CChainState::FlushStateToDisk("," const CChainParams\u0026 chainparams,"," CValidationState \u0026state,"," FlushStateMode mode,"," int nManualPruneHeight)","{"," int64_t nMempoolUsage = mempool.DynamicMemoryUsage();"," LOCK(cs_main);"," static int64_t nLastWrite = 0;"," static int64_t nLastFlush = 0;"," std::set\u003cint\u003e setFilesToPrune;"," bool full_flush_completed = false;"," try {"," {"," bool fFlushForPrune = false;"," bool fDoFullFlush = false;"," LOCK(cs_LastBlockFile);"," if (fPruneMode \u0026\u0026 (fCheckForPruning || nManualPruneHeight \u003e 0) \u0026\u0026 !fReindex) {"," if (nManualPruneHeight \u003e 0) {"," FindFilesToPruneManual(setFilesToPrune, nManualPruneHeight);"," } else {"," FindFilesToPrune(setFilesToPrune, chainparams.PruneAfterHeight());"," fCheckForPruning = false;"," }"," if (!setFilesToPrune.empty()) {"," fFlushForPrune = true;"," if (!fHavePruned) {"," pblocktree-\u003eWriteFlag(\"prunedblockfiles\", true);"," fHavePruned = true;"," }"," }"," }"," int64_t nNow = GetTimeMicros();"," // Avoid writing/flushing immediately after startup."," if (nLastWrite == 0) {"," nLastWrite = nNow;"," }"," if (nLastFlush == 0) {"," nLastFlush = nNow;"," }"," int64_t nMempoolSizeMax = gArgs.GetArg(\"-maxmempool\", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;"," int64_t cacheSize = pcoinsTip-\u003eDynamicMemoryUsage();"," int64_t nTotalSpace = nCoinCacheUsage + std::max\u003cint64_t\u003e(nMempoolSizeMax - nMempoolUsage, 0);"," // The cache is large and we're within 10% and 10 MiB of the limit, but we have time now (not in the middle of a block processing)."," bool fCacheLarge = mode == FlushStateMode::PERIODIC \u0026\u0026 cacheSize \u003e std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024);"," // The cache is over the limit, we have to write now."," bool fCacheCritical = mode == FlushStateMode::IF_NEEDED \u0026\u0026 cacheSize \u003e nTotalSpace;"," // It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash."," bool fPeriodicWrite = mode == FlushStateMode::PERIODIC \u0026\u0026 nNow \u003e nLastWrite + (int64_t)DATABASE_WRITE_INTERVAL * 1000000;"," // It's been very long since we flushed the cache. Do this infrequently, to optimize cache usage."," bool fPeriodicFlush = mode == FlushStateMode::PERIODIC \u0026\u0026 nNow \u003e nLastFlush + (int64_t)DATABASE_FLUSH_INTERVAL * 1000000;"," // Combine all conditions that result in a full cache flush."," fDoFullFlush = (mode == FlushStateMode::ALWAYS) || fCacheLarge || fCacheCritical || fPeriodicFlush || fFlushForPrune;"," // Write blocks and block index to disk."," if (fDoFullFlush || fPeriodicWrite) {"," // Depend on nMinDiskSpace to ensure we can write block index"," if (!CheckDiskSpace(GetBlocksDir())) {"," return AbortNode(state, \"Disk space is too low!\", _(\"Error: Disk space is too low!\"), CClientUIInterface::MSG_NOPREFIX);"," }"," // First make sure all block and undo data is flushed to disk."," FlushBlockFile();"," // Then update all block file information (which may refer to block and undo files)."," {"," std::vector\u003cstd::pair\u003cint, const CBlockFileInfo*\u003e \u003e vFiles;"," vFiles.reserve(setDirtyFileInfo.size());"," for (std::set\u003cint\u003e::iterator it = setDirtyFileInfo.begin(); it != setDirtyFileInfo.end(); ) {"," vFiles.push_back(std::make_pair(*it, \u0026vinfoBlockFile[*it]));"," setDirtyFileInfo.erase(it++);"," }"," std::vector\u003cconst CBlockIndex*\u003e vBlocks;"," vBlocks.reserve(setDirtyBlockIndex.size());"," for (std::set\u003cCBlockIndex*\u003e::iterator it = setDirtyBlockIndex.begin(); it != setDirtyBlockIndex.end(); ) {"," vBlocks.push_back(*it);"," setDirtyBlockIndex.erase(it++);"," }"," if (!pblocktree-\u003eWriteBatchSync(vFiles, nLastBlockFile, vBlocks)) {"," return AbortNode(state, \"Failed to write to block index database\");"," }"," }"," // Finally remove any pruned files"," if (fFlushForPrune)"," UnlinkPrunedFiles(setFilesToPrune);"," nLastWrite = nNow;"," }"," // Flush best chain related state. This can only be done if the blocks / block index write was also done."," if (fDoFullFlush \u0026\u0026 !pcoinsTip-\u003eGetBestBlock().IsNull()) {"," // Typical Coin structures on disk are around 48 bytes in size."," // Pushing a new one to the database can cause it to be written"," // twice (once in the log, and once in the tables). This is already"," // an overestimation, as most will delete an existing entry or"," // overwrite one. Still, use a conservative safety factor of 2."," if (!CheckDiskSpace(GetDataDir(), 48 * 2 * 2 * pcoinsTip-\u003eGetCacheSize())) {"," return AbortNode(state, \"Disk space is too low!\", _(\"Error: Disk space is too low!\"), CClientUIInterface::MSG_NOPREFIX);"," }"," // Flush the chainstate (which may refer to block index entries)."," if (!pcoinsTip-\u003eFlush())"," return AbortNode(state, \"Failed to write to coin database\");"," nLastFlush = nNow;"," full_flush_completed = true;"," }"," }"," if (full_flush_completed) {"," // Update best block in wallet (so we can detect restored wallets)."," GetMainSignals().ChainStateFlushed(m_chain.GetLocator());"," }"," } catch (const std::runtime_error\u0026 e) {"," return AbortNode(state, std::string(\"System error while flushing: \") + e.what());"," }"," return true;","}","","void CChainState::ForceFlushStateToDisk() {"," CValidationState state;"," const CChainParams\u0026 chainparams = Params();"," if (!this-\u003eFlushStateToDisk(chainparams, state, FlushStateMode::ALWAYS)) {"," LogPrintf(\"%s: failed to flush state (%s)\\n\", __func__, FormatStateMessage(state));"," }","}","","void CChainState::PruneAndFlush() {"," CValidationState state;"," fCheckForPruning = true;"," const CChainParams\u0026 chainparams = Params();",""," if (!this-\u003eFlushStateToDisk(chainparams, state, FlushStateMode::NONE)) {"," LogPrintf(\"%s: failed to flush state (%s)\\n\", __func__, FormatStateMessage(state));"," }","}","","static void DoWarning(const std::string\u0026 strWarning)","{"," static bool fWarned = false;"," SetMiscWarning(strWarning);"," if (!fWarned) {"," AlertNotify(strWarning);"," fWarned = true;"," }","}","","/** Private helper function that concatenates warning messages. */","static void AppendWarning(std::string\u0026 res, const std::string\u0026 warn)","{"," if (!res.empty()) res += \", \";"," res += warn;","}","","/** Check warning conditions and do some notifications on new chain tip set. */","void static UpdateTip(const CBlockIndex *pindexNew, const CChainParams\u0026 chainParams) {"," // New best block"," mempool.AddTransactionsUpdated(1);",""," {"," LOCK(g_best_block_mutex);"," g_best_block = pindexNew-\u003eGetBlockHash();"," g_best_block_cv.notify_all();"," }",""," std::string warningMessages;"," if (!::ChainstateActive().IsInitialBlockDownload())"," {"," int nUpgraded = 0;"," const CBlockIndex* pindex = pindexNew;"," for (int bit = 0; bit \u003c VERSIONBITS_NUM_BITS; bit++) {"," WarningBitsConditionChecker checker(bit);"," ThresholdState state = checker.GetStateFor(pindex, chainParams.GetConsensus(), warningcache[bit]);"," if (state == ThresholdState::ACTIVE || state == ThresholdState::LOCKED_IN) {"," const std::string strWarning = strprintf(_(\"Warning: unknown new rules activated (versionbit %i)\"), bit);"," if (state == ThresholdState::ACTIVE) {"," DoWarning(strWarning);"," } else {"," AppendWarning(warningMessages, strWarning);"," }"," }"," }"," // Check the version of the last 100 blocks to see if we need to upgrade:"," for (int i = 0; i \u003c 100 \u0026\u0026 pindex != nullptr; i++)"," {"," int32_t nExpectedVersion = ComputeBlockVersion(pindex-\u003epprev, chainParams.GetConsensus());"," if (pindex-\u003enVersion \u003e VERSIONBITS_LAST_OLD_BLOCK_VERSION \u0026\u0026 (pindex-\u003enVersion \u0026 ~nExpectedVersion) != 0)"," ++nUpgraded;"," pindex = pindex-\u003epprev;"," }"," if (nUpgraded \u003e 0)"," AppendWarning(warningMessages, strprintf(_(\"%d of last 100 blocks have unexpected version\"), nUpgraded));"," }"," LogPrintf(\"%s: new best=%s height=%d version=0x%08x log2_work=%.8g tx=%lu date='%s' progress=%f cache=%.1fMiB(%utxo)\", __func__, /* Continued */"," pindexNew-\u003eGetBlockHash().ToString(), pindexNew-\u003enHeight, pindexNew-\u003enVersion,"," log(pindexNew-\u003enChainWork.getdouble())/log(2.0), (unsigned long)pindexNew-\u003enChainTx,"," FormatISO8601DateTime(pindexNew-\u003eGetBlockTime()),"," GuessVerificationProgress(chainParams.TxData(), pindexNew), pcoinsTip-\u003eDynamicMemoryUsage() * (1.0 / (1\u003c\u003c20)), pcoinsTip-\u003eGetCacheSize());"," if (!warningMessages.empty())"," LogPrintf(\" warning='%s'\", warningMessages); /* Continued */"," LogPrintf(\"\\n\");","","}","","/** Disconnect m_chain's tip."," * After calling, the mempool will be in an inconsistent state, with"," * transactions from disconnected blocks being added to disconnectpool. You"," * should make the mempool consistent again by calling UpdateMempoolForReorg."," * with cs_main held."," *"," * If disconnectpool is nullptr, then no disconnected transactions are added to"," * disconnectpool (note that the caller is responsible for mempool consistency"," * in any case)."," */","bool CChainState::DisconnectTip(CValidationState\u0026 state, const CChainParams\u0026 chainparams, DisconnectedBlockTransactions *disconnectpool)","{"," CBlockIndex *pindexDelete = m_chain.Tip();"," assert(pindexDelete);"," // Read block from disk."," std::shared_ptr\u003cCBlock\u003e pblock = std::make_shared\u003cCBlock\u003e();"," CBlock\u0026 block = *pblock;"," if (!ReadBlockFromDisk(block, pindexDelete, chainparams.GetConsensus()))"," return AbortNode(state, \"Failed to read block\");"," // Apply the block atomically to the chain state."," int64_t nStart = GetTimeMicros();"," {"," CCoinsViewCache view(pcoinsTip.get());"," assert(view.GetBestBlock() == pindexDelete-\u003eGetBlockHash());"," if (DisconnectBlock(block, pindexDelete, view) != DISCONNECT_OK)"," return error(\"DisconnectTip(): DisconnectBlock %s failed\", pindexDelete-\u003eGetBlockHash().ToString());"," bool flushed = view.Flush();"," assert(flushed);"," }"," LogPrint(BCLog::BENCH, \"- Disconnect block: %.2fms\\n\", (GetTimeMicros() - nStart) * MILLI);"," // Write the chain state to disk, if necessary."," if (!FlushStateToDisk(chainparams, state, FlushStateMode::IF_NEEDED))"," return false;",""," if (disconnectpool) {"," // Save transactions to re-add to mempool at end of reorg"," for (auto it = block.vtx.rbegin(); it != block.vtx.rend(); ++it) {"," disconnectpool-\u003eaddTransaction(*it);"," }"," while (disconnectpool-\u003eDynamicMemoryUsage() \u003e MAX_DISCONNECTED_TX_POOL_SIZE * 1000) {"," // Drop the earliest entry, and remove its children from the mempool."," auto it = disconnectpool-\u003equeuedTx.get\u003cinsertion_order\u003e().begin();"," mempool.removeRecursive(**it, MemPoolRemovalReason::REORG);"," disconnectpool-\u003eremoveEntry(it);"," }"," }",""," m_chain.SetTip(pindexDelete-\u003epprev);",""," UpdateTip(pindexDelete-\u003epprev, chainparams);"," // Let wallets know transactions went from 1-confirmed to"," // 0-confirmed or conflicted:"," GetMainSignals().BlockDisconnected(pblock);"," return true;","}","","static int64_t nTimeReadFromDisk = 0;","static int64_t nTimeConnectTotal = 0;","static int64_t nTimeFlush = 0;","static int64_t nTimeChainState = 0;","static int64_t nTimePostConnect = 0;","","struct PerBlockConnectTrace {"," CBlockIndex* pindex = nullptr;"," std::shared_ptr\u003cconst CBlock\u003e pblock;"," std::shared_ptr\u003cstd::vector\u003cCTransactionRef\u003e\u003e conflictedTxs;"," PerBlockConnectTrace() : conflictedTxs(std::make_shared\u003cstd::vector\u003cCTransactionRef\u003e\u003e()) {}","};","/**"," * Used to track blocks whose transactions were applied to the UTXO state as a"," * part of a single ActivateBestChainStep call."," *"," * This class also tracks transactions that are removed from the mempool as"," * conflicts (per block) and can be used to pass all those transactions"," * through SyncTransaction."," *"," * This class assumes (and asserts) that the conflicted transactions for a given"," * block are added via mempool callbacks prior to the BlockConnected() associated"," * with those transactions. If any transactions are marked conflicted, it is"," * assumed that an associated block will always be added."," *"," * This class is single-use, once you call GetBlocksConnected() you have to throw"," * it away and make a new one."," */","class ConnectTrace {","private:"," std::vector\u003cPerBlockConnectTrace\u003e blocksConnected;"," CTxMemPool \u0026pool;"," boost::signals2::scoped_connection m_connNotifyEntryRemoved;","","public:"," explicit ConnectTrace(CTxMemPool \u0026_pool) : blocksConnected(1), pool(_pool) {"," m_connNotifyEntryRemoved = pool.NotifyEntryRemoved.connect(std::bind(\u0026ConnectTrace::NotifyEntryRemoved, this, std::placeholders::_1, std::placeholders::_2));"," }",""," void BlockConnected(CBlockIndex* pindex, std::shared_ptr\u003cconst CBlock\u003e pblock) {"," assert(!blocksConnected.back().pindex);"," assert(pindex);"," assert(pblock);"," blocksConnected.back().pindex = pindex;"," blocksConnected.back().pblock = std::move(pblock);"," blocksConnected.emplace_back();"," }",""," std::vector\u003cPerBlockConnectTrace\u003e\u0026 GetBlocksConnected() {"," // We always keep one extra block at the end of our list because"," // blocks are added after all the conflicted transactions have"," // been filled in. Thus, the last entry should always be an empty"," // one waiting for the transactions from the next block. We pop"," // the last entry here to make sure the list we return is sane."," assert(!blocksConnected.back().pindex);"," assert(blocksConnected.back().conflictedTxs-\u003eempty());"," blocksConnected.pop_back();"," return blocksConnected;"," }",""," void NotifyEntryRemoved(CTransactionRef txRemoved, MemPoolRemovalReason reason) {"," assert(!blocksConnected.back().pindex);"," if (reason == MemPoolRemovalReason::CONFLICT) {"," blocksConnected.back().conflictedTxs-\u003eemplace_back(std::move(txRemoved));"," }"," }","};","","/**"," * Connect a new block to m_chain. pblock is either nullptr or a pointer to a CBlock"," * corresponding to pindexNew, to bypass loading it again from disk."," *"," * The block is added to connectTrace if connection succeeds."," */","bool CChainState::ConnectTip(CValidationState\u0026 state, const CChainParams\u0026 chainparams, CBlockIndex* pindexNew, const std::shared_ptr\u003cconst CBlock\u003e\u0026 pblock, ConnectTrace\u0026 connectTrace, DisconnectedBlockTransactions \u0026disconnectpool)","{"," assert(pindexNew-\u003epprev == m_chain.Tip());"," // Read block from disk."," int64_t nTime1 = GetTimeMicros();"," std::shared_ptr\u003cconst CBlock\u003e pthisBlock;"," if (!pblock) {"," std::shared_ptr\u003cCBlock\u003e pblockNew = std::make_shared\u003cCBlock\u003e();"," if (!ReadBlockFromDisk(*pblockNew, pindexNew, chainparams.GetConsensus()))"," return AbortNode(state, \"Failed to read block\");"," pthisBlock = pblockNew;"," } else {"," pthisBlock = pblock;"," }"," const CBlock\u0026 blockConnecting = *pthisBlock;"," // Apply the block atomically to the chain state."," int64_t nTime2 = GetTimeMicros(); nTimeReadFromDisk += nTime2 - nTime1;"," int64_t nTime3;"," LogPrint(BCLog::BENCH, \" - Load block from disk: %.2fms [%.2fs]\\n\", (nTime2 - nTime1) * MILLI, nTimeReadFromDisk * MICRO);"," {"," CCoinsViewCache view(pcoinsTip.get());"," bool rv = ConnectBlock(blockConnecting, state, pindexNew, view, chainparams);"," GetMainSignals().BlockChecked(blockConnecting, state);"," if (!rv) {"," if (state.IsInvalid())"," InvalidBlockFound(pindexNew, state);"," return error(\"%s: ConnectBlock %s failed, %s\", __func__, pindexNew-\u003eGetBlockHash().ToString(), FormatStateMessage(state));"," }"," nTime3 = GetTimeMicros(); nTimeConnectTotal += nTime3 - nTime2;"," LogPrint(BCLog::BENCH, \" - Connect total: %.2fms [%.2fs (%.2fms/blk)]\\n\", (nTime3 - nTime2) * MILLI, nTimeConnectTotal * MICRO, nTimeConnectTotal * MILLI / nBlocksTotal);"," bool flushed = view.Flush();"," assert(flushed);"," }"," int64_t nTime4 = GetTimeMicros(); nTimeFlush += nTime4 - nTime3;"," LogPrint(BCLog::BENCH, \" - Flush: %.2fms [%.2fs (%.2fms/blk)]\\n\", (nTime4 - nTime3) * MILLI, nTimeFlush * MICRO, nTimeFlush * MILLI / nBlocksTotal);"," // Write the chain state to disk, if necessary."," if (!FlushStateToDisk(chainparams, state, FlushStateMode::IF_NEEDED))"," return false;"," int64_t nTime5 = GetTimeMicros(); nTimeChainState += nTime5 - nTime4;"," LogPrint(BCLog::BENCH, \" - Writing chainstate: %.2fms [%.2fs (%.2fms/blk)]\\n\", (nTime5 - nTime4) * MILLI, nTimeChainState * MICRO, nTimeChainState * MILLI / nBlocksTotal);"," // Remove conflicting transactions from the mempool.;"," mempool.removeForBlock(blockConnecting.vtx, pindexNew-\u003enHeight);"," disconnectpool.removeForBlock(blockConnecting.vtx);"," // Update m_chain \u0026 related variables."," m_chain.SetTip(pindexNew);"," UpdateTip(pindexNew, chainparams);",""," int64_t nTime6 = GetTimeMicros(); nTimePostConnect += nTime6 - nTime5; nTimeTotal += nTime6 - nTime1;"," LogPrint(BCLog::BENCH, \" - Connect postprocess: %.2fms [%.2fs (%.2fms/blk)]\\n\", (nTime6 - nTime5) * MILLI, nTimePostConnect * MICRO, nTimePostConnect * MILLI / nBlocksTotal);"," LogPrint(BCLog::BENCH, \"- Connect block: %.2fms [%.2fs (%.2fms/blk)]\\n\", (nTime6 - nTime1) * MILLI, nTimeTotal * MICRO, nTimeTotal * MILLI / nBlocksTotal);",""," connectTrace.BlockConnected(pindexNew, std::move(pthisBlock));"," return true;","}","","/**"," * Return the tip of the chain with the most work in it, that isn't"," * known to be invalid (it's however far from certain to be valid)."," */","CBlockIndex* CChainState::FindMostWorkChain() {"," do {"," CBlockIndex *pindexNew = nullptr;",""," // Find the best candidate header."," {"," std::set\u003cCBlockIndex*, CBlockIndexWorkComparator\u003e::reverse_iterator it = setBlockIndexCandidates.rbegin();"," if (it == setBlockIndexCandidates.rend())"," return nullptr;"," pindexNew = *it;"," }",""," // Check whether all blocks on the path between the currently active chain and the candidate are valid."," // Just going until the active chain is an optimization, as we know all blocks in it are valid already."," CBlockIndex *pindexTest = pindexNew;"," bool fInvalidAncestor = false;"," while (pindexTest \u0026\u0026 !m_chain.Contains(pindexTest)) {"," assert(pindexTest-\u003eHaveTxsDownloaded() || pindexTest-\u003enHeight == 0);",""," // Pruned nodes may have entries in setBlockIndexCandidates for"," // which block files have been deleted. Remove those as candidates"," // for the most work chain if we come across them; we can't switch"," // to a chain unless we have all the non-active-chain parent blocks."," bool fFailedChain = pindexTest-\u003enStatus \u0026 BLOCK_FAILED_MASK;"," bool fMissingData = !(pindexTest-\u003enStatus \u0026 BLOCK_HAVE_DATA);"," if (fFailedChain || fMissingData) {"," // Candidate chain is not usable (either invalid or missing data)"," if (fFailedChain \u0026\u0026 (pindexBestInvalid == nullptr || pindexNew-\u003enChainWork \u003e pindexBestInvalid-\u003enChainWork))"," pindexBestInvalid = pindexNew;"," CBlockIndex *pindexFailed = pindexNew;"," // Remove the entire chain from the set."," while (pindexTest != pindexFailed) {"," if (fFailedChain) {"," pindexFailed-\u003enStatus |= BLOCK_FAILED_CHILD;"," } else if (fMissingData) {"," // If we're missing data, then add back to mapBlocksUnlinked,"," // so that if the block arrives in the future we can try adding"," // to setBlockIndexCandidates again."," mapBlocksUnlinked.insert(std::make_pair(pindexFailed-\u003epprev, pindexFailed));"," }"," setBlockIndexCandidates.erase(pindexFailed);"," pindexFailed = pindexFailed-\u003epprev;"," }"," setBlockIndexCandidates.erase(pindexTest);"," fInvalidAncestor = true;"," break;"," }"," pindexTest = pindexTest-\u003epprev;"," }"," if (!fInvalidAncestor)"," return pindexNew;"," } while(true);","}","","/** Delete all entries in setBlockIndexCandidates that are worse than the current tip. */","void CChainState::PruneBlockIndexCandidates() {"," // Note that we can't delete the current block itself, as we may need to return to it later in case a"," // reorganization to a better block fails."," std::set\u003cCBlockIndex*, CBlockIndexWorkComparator\u003e::iterator it = setBlockIndexCandidates.begin();"," while (it != setBlockIndexCandidates.end() \u0026\u0026 setBlockIndexCandidates.value_comp()(*it, m_chain.Tip())) {"," setBlockIndexCandidates.erase(it++);"," }"," // Either the current tip or a successor of it we're working towards is left in setBlockIndexCandidates."," assert(!setBlockIndexCandidates.empty());","}","","/**"," * Try to make some progress towards making pindexMostWork the active block."," * pblock is either nullptr or a pointer to a CBlock corresponding to pindexMostWork."," */","bool CChainState::ActivateBestChainStep(CValidationState\u0026 state, const CChainParams\u0026 chainparams, CBlockIndex* pindexMostWork, const std::shared_ptr\u003cconst CBlock\u003e\u0026 pblock, bool\u0026 fInvalidFound, ConnectTrace\u0026 connectTrace)","{"," AssertLockHeld(cs_main);",""," const CBlockIndex *pindexOldTip = m_chain.Tip();"," const CBlockIndex *pindexFork = m_chain.FindFork(pindexMostWork);",""," // Disconnect active blocks which are no longer in the best chain."," bool fBlocksDisconnected = false;"," DisconnectedBlockTransactions disconnectpool;"," while (m_chain.Tip() \u0026\u0026 m_chain.Tip() != pindexFork) {"," if (!DisconnectTip(state, chainparams, \u0026disconnectpool)) {"," // This is likely a fatal error, but keep the mempool consistent,"," // just in case. Only remove from the mempool in this case."," UpdateMempoolForReorg(disconnectpool, false);"," return false;"," }"," fBlocksDisconnected = true;"," }",""," // Build list of new blocks to connect."," std::vector\u003cCBlockIndex*\u003e vpindexToConnect;"," bool fContinue = true;"," int nHeight = pindexFork ? pindexFork-\u003enHeight : -1;"," while (fContinue \u0026\u0026 nHeight != pindexMostWork-\u003enHeight) {"," // Don't iterate the entire list of potential improvements toward the best tip, as we likely only need"," // a few blocks along the way."," int nTargetHeight = std::min(nHeight + 32, pindexMostWork-\u003enHeight);"," vpindexToConnect.clear();"," vpindexToConnect.reserve(nTargetHeight - nHeight);"," CBlockIndex *pindexIter = pindexMostWork-\u003eGetAncestor(nTargetHeight);"," while (pindexIter \u0026\u0026 pindexIter-\u003enHeight != nHeight) {"," vpindexToConnect.push_back(pindexIter);"," pindexIter = pindexIter-\u003epprev;"," }"," nHeight = nTargetHeight;",""," // Connect new blocks."," for (CBlockIndex *pindexConnect : reverse_iterate(vpindexToConnect)) {"," if (!ConnectTip(state, chainparams, pindexConnect, pindexConnect == pindexMostWork ? pblock : std::shared_ptr\u003cconst CBlock\u003e(), connectTrace, disconnectpool)) {"," if (state.IsInvalid()) {"," // The block violates a consensus rule."," if (state.GetReason() != ValidationInvalidReason::BLOCK_MUTATED) {"," InvalidChainFound(vpindexToConnect.front());"," }"," state = CValidationState();"," fInvalidFound = true;"," fContinue = false;"," break;"," } else {"," // A system error occurred (disk space, database error, ...)."," // Make the mempool consistent with the current tip, just in case"," // any observers try to use it before shutdown."," UpdateMempoolForReorg(disconnectpool, false);"," return false;"," }"," } else {"," PruneBlockIndexCandidates();"," if (!pindexOldTip || m_chain.Tip()-\u003enChainWork \u003e pindexOldTip-\u003enChainWork) {"," // We're in a better position than we were. Return temporarily to release the lock."," fContinue = false;"," break;"," }"," }"," }"," }",""," if (fBlocksDisconnected) {"," // If any blocks were disconnected, disconnectpool may be non empty. Add"," // any disconnected transactions back to the mempool."," UpdateMempoolForReorg(disconnectpool, true);"," }"," mempool.check(pcoinsTip.get());",""," // Callbacks/notifications for a new best chain."," if (fInvalidFound)"," CheckForkWarningConditionsOnNewFork(vpindexToConnect.back());"," else"," CheckForkWarningConditions();",""," return true;","}","","static void NotifyHeaderTip() LOCKS_EXCLUDED(cs_main) {"," bool fNotify = false;"," bool fInitialBlockDownload = false;"," static CBlockIndex* pindexHeaderOld = nullptr;"," CBlockIndex* pindexHeader = nullptr;"," {"," LOCK(cs_main);"," pindexHeader = pindexBestHeader;",""," if (pindexHeader != pindexHeaderOld) {"," fNotify = true;"," fInitialBlockDownload = ::ChainstateActive().IsInitialBlockDownload();"," pindexHeaderOld = pindexHeader;"," }"," }"," // Send block tip changed notifications without cs_main"," if (fNotify) {"," uiInterface.NotifyHeaderTip(fInitialBlockDownload, pindexHeader);"," }","}","","static void LimitValidationInterfaceQueue() LOCKS_EXCLUDED(cs_main) {"," AssertLockNotHeld(cs_main);",""," if (GetMainSignals().CallbacksPending() \u003e 10) {"," SyncWithValidationInterfaceQueue();"," }","}","","/**"," * Make the best chain active, in multiple steps. The result is either failure"," * or an activated best chain. pblock is either nullptr or a pointer to a block"," * that is already loaded (to avoid loading it again from disk)."," *"," * ActivateBestChain is split into steps (see ActivateBestChainStep) so that"," * we avoid holding cs_main for an extended period of time; the length of this"," * call may be quite long during reindexing or a substantial reorg."," */","bool CChainState::ActivateBestChain(CValidationState \u0026state, const CChainParams\u0026 chainparams, std::shared_ptr\u003cconst CBlock\u003e pblock) {"," // Note that while we're often called here from ProcessNewBlock, this is"," // far from a guarantee. Things in the P2P/RPC will often end up calling"," // us in the middle of ProcessNewBlock - do not assume pblock is set"," // sanely for performance or correctness!"," AssertLockNotHeld(cs_main);",""," // ABC maintains a fair degree of expensive-to-calculate internal state"," // because this function periodically releases cs_main so that it does not lock up other threads for too long"," // during large connects - and to allow for e.g. the callback queue to drain"," // we use m_cs_chainstate to enforce mutual exclusion so that only one caller may execute this function at a time"," LOCK(m_cs_chainstate);",""," CBlockIndex *pindexMostWork = nullptr;"," CBlockIndex *pindexNewTip = nullptr;"," int nStopAtHeight = gArgs.GetArg(\"-stopatheight\", DEFAULT_STOPATHEIGHT);"," do {"," boost::this_thread::interruption_point();",""," // Block until the validation queue drains. This should largely"," // never happen in normal operation, however may happen during"," // reindex, causing memory blowup if we run too far ahead."," // Note that if a validationinterface callback ends up calling"," // ActivateBestChain this may lead to a deadlock! We should"," // probably have a DEBUG_LOCKORDER test for this in the future."," LimitValidationInterfaceQueue();",""," {"," LOCK(cs_main);"," CBlockIndex* starting_tip = m_chain.Tip();"," bool blocks_connected = false;"," do {"," // We absolutely may not unlock cs_main until we've made forward progress"," // (with the exception of shutdown due to hardware issues, low disk space, etc)."," ConnectTrace connectTrace(mempool); // Destructed before cs_main is unlocked",""," if (pindexMostWork == nullptr) {"," pindexMostWork = FindMostWorkChain();"," }",""," // Whether we have anything to do at all."," if (pindexMostWork == nullptr || pindexMostWork == m_chain.Tip()) {"," break;"," }",""," bool fInvalidFound = false;"," std::shared_ptr\u003cconst CBlock\u003e nullBlockPtr;"," if (!ActivateBestChainStep(state, chainparams, pindexMostWork, pblock \u0026\u0026 pblock-\u003eGetHash() == pindexMostWork-\u003eGetBlockHash() ? pblock : nullBlockPtr, fInvalidFound, connectTrace))"," return false;"," blocks_connected = true;",""," if (fInvalidFound) {"," // Wipe cache, we may need another branch now."," pindexMostWork = nullptr;"," }"," pindexNewTip = m_chain.Tip();",""," for (const PerBlockConnectTrace\u0026 trace : connectTrace.GetBlocksConnected()) {"," assert(trace.pblock \u0026\u0026 trace.pindex);"," GetMainSignals().BlockConnected(trace.pblock, trace.pindex, trace.conflictedTxs);"," }"," } while (!m_chain.Tip() || (starting_tip \u0026\u0026 CBlockIndexWorkComparator()(m_chain.Tip(), starting_tip)));"," if (!blocks_connected) return true;",""," const CBlockIndex* pindexFork = m_chain.FindFork(starting_tip);"," bool fInitialDownload = IsInitialBlockDownload();",""," // Notify external listeners about the new tip."," // Enqueue while holding cs_main to ensure that UpdatedBlockTip is called in the order in which blocks are connected"," if (pindexFork != pindexNewTip) {"," // Notify ValidationInterface subscribers"," GetMainSignals().UpdatedBlockTip(pindexNewTip, pindexFork, fInitialDownload);",""," // Always notify the UI if a new block tip was connected"," uiInterface.NotifyBlockTip(fInitialDownload, pindexNewTip);"," }"," }"," // When we reach this point, we switched to a new tip (stored in pindexNewTip).",""," if (nStopAtHeight \u0026\u0026 pindexNewTip \u0026\u0026 pindexNewTip-\u003enHeight \u003e= nStopAtHeight) StartShutdown();",""," // We check shutdown only after giving ActivateBestChainStep a chance to run once so that we"," // never shutdown before connecting the genesis block during LoadChainTip(). Previously this"," // caused an assert() failure during shutdown in such cases as the UTXO DB flushing checks"," // that the best block hash is non-null."," if (ShutdownRequested())"," break;"," } while (pindexNewTip != pindexMostWork);"," CheckBlockIndex(chainparams.GetConsensus());",""," // Write changes periodically to disk, after relay."," if (!FlushStateToDisk(chainparams, state, FlushStateMode::PERIODIC)) {"," return false;"," }",""," return true;","}","","bool ActivateBestChain(CValidationState \u0026state, const CChainParams\u0026 chainparams, std::shared_ptr\u003cconst CBlock\u003e pblock) {"," return ::ChainstateActive().ActivateBestChain(state, chainparams, std::move(pblock));","}","","bool CChainState::PreciousBlock(CValidationState\u0026 state, const CChainParams\u0026 params, CBlockIndex *pindex)","{"," {"," LOCK(cs_main);"," if (pindex-\u003enChainWork \u003c m_chain.Tip()-\u003enChainWork) {"," // Nothing to do, this block is not at the tip."," return true;"," }"," if (m_chain.Tip()-\u003enChainWork \u003e nLastPreciousChainwork) {"," // The chain has been extended since the last call, reset the counter."," nBlockReverseSequenceId = -1;"," }"," nLastPreciousChainwork = m_chain.Tip()-\u003enChainWork;"," setBlockIndexCandidates.erase(pindex);"," pindex-\u003enSequenceId = nBlockReverseSequenceId;"," if (nBlockReverseSequenceId \u003e std::numeric_limits\u003cint32_t\u003e::min()) {"," // We can't keep reducing the counter if somebody really wants to"," // call preciousblock 2**31-1 times on the same set of tips..."," nBlockReverseSequenceId--;"," }"," if (pindex-\u003eIsValid(BLOCK_VALID_TRANSACTIONS) \u0026\u0026 pindex-\u003eHaveTxsDownloaded()) {"," setBlockIndexCandidates.insert(pindex);"," PruneBlockIndexCandidates();"," }"," }",""," return ActivateBestChain(state, params, std::shared_ptr\u003cconst CBlock\u003e());","}","bool PreciousBlock(CValidationState\u0026 state, const CChainParams\u0026 params, CBlockIndex *pindex) {"," return ::ChainstateActive().PreciousBlock(state, params, pindex);","}","","bool CChainState::InvalidateBlock(CValidationState\u0026 state, const CChainParams\u0026 chainparams, CBlockIndex *pindex)","{"," CBlockIndex* to_mark_failed = pindex;"," bool pindex_was_in_chain = false;"," int disconnected = 0;",""," // Disconnect (descendants of) pindex, and mark them invalid."," while (true) {"," if (ShutdownRequested()) break;",""," // Make sure the queue of validation callbacks doesn't grow unboundedly."," LimitValidationInterfaceQueue();",""," LOCK(cs_main);"," if (!m_chain.Contains(pindex)) break;"," pindex_was_in_chain = true;"," CBlockIndex *invalid_walk_tip = m_chain.Tip();",""," // ActivateBestChain considers blocks already in m_chain"," // unconditionally valid already, so force disconnect away from it."," DisconnectedBlockTransactions disconnectpool;"," bool ret = DisconnectTip(state, chainparams, \u0026disconnectpool);"," // DisconnectTip will add transactions to disconnectpool."," // Adjust the mempool to be consistent with the new tip, adding"," // transactions back to the mempool if disconnecting was successful,"," // and we're not doing a very deep invalidation (in which case"," // keeping the mempool up to date is probably futile anyway)."," UpdateMempoolForReorg(disconnectpool, /* fAddToMempool = */ (++disconnected \u003c= 10) \u0026\u0026 ret);"," if (!ret) return false;"," assert(invalid_walk_tip-\u003epprev == m_chain.Tip());",""," // We immediately mark the disconnected blocks as invalid."," // This prevents a case where pruned nodes may fail to invalidateblock"," // and be left unable to start as they have no tip candidates (as there"," // are no blocks that meet the \"have data and are not invalid per"," // nStatus\" criteria for inclusion in setBlockIndexCandidates)."," invalid_walk_tip-\u003enStatus |= BLOCK_FAILED_VALID;"," setDirtyBlockIndex.insert(invalid_walk_tip);"," setBlockIndexCandidates.erase(invalid_walk_tip);"," setBlockIndexCandidates.insert(invalid_walk_tip-\u003epprev);"," if (invalid_walk_tip-\u003epprev == to_mark_failed \u0026\u0026 (to_mark_failed-\u003enStatus \u0026 BLOCK_FAILED_VALID)) {"," // We only want to mark the last disconnected block as BLOCK_FAILED_VALID; its children"," // need to be BLOCK_FAILED_CHILD instead."," to_mark_failed-\u003enStatus = (to_mark_failed-\u003enStatus ^ BLOCK_FAILED_VALID) | BLOCK_FAILED_CHILD;"," setDirtyBlockIndex.insert(to_mark_failed);"," }",""," // Track the last disconnected block, so we can correct its BLOCK_FAILED_CHILD status in future"," // iterations, or, if it's the last one, call InvalidChainFound on it."," to_mark_failed = invalid_walk_tip;"," }",""," {"," LOCK(cs_main);"," if (m_chain.Contains(to_mark_failed)) {"," // If the to-be-marked invalid block is in the active chain, something is interfering and we can't proceed."," return false;"," }",""," // Mark pindex (or the last disconnected block) as invalid, even when it never was in the main chain"," to_mark_failed-\u003enStatus |= BLOCK_FAILED_VALID;"," setDirtyBlockIndex.insert(to_mark_failed);"," setBlockIndexCandidates.erase(to_mark_failed);"," m_failed_blocks.insert(to_mark_failed);",""," // The resulting new best tip may not be in setBlockIndexCandidates anymore, so"," // add it again."," BlockMap::iterator it = mapBlockIndex.begin();"," while (it != mapBlockIndex.end()) {"," if (it-\u003esecond-\u003eIsValid(BLOCK_VALID_TRANSACTIONS) \u0026\u0026 it-\u003esecond-\u003eHaveTxsDownloaded() \u0026\u0026 !setBlockIndexCandidates.value_comp()(it-\u003esecond, m_chain.Tip())) {"," setBlockIndexCandidates.insert(it-\u003esecond);"," }"," it++;"," }",""," InvalidChainFound(to_mark_failed);"," }",""," // Only notify about a new block tip if the active chain was modified."," if (pindex_was_in_chain) {"," uiInterface.NotifyBlockTip(IsInitialBlockDownload(), to_mark_failed-\u003epprev);"," }"," return true;","}","","bool InvalidateBlock(CValidationState\u0026 state, const CChainParams\u0026 chainparams, CBlockIndex *pindex) {"," return ::ChainstateActive().InvalidateBlock(state, chainparams, pindex);","}","","void CChainState::ResetBlockFailureFlags(CBlockIndex *pindex) {"," AssertLockHeld(cs_main);",""," int nHeight = pindex-\u003enHeight;",""," // Remove the invalidity flag from this block and all its descendants."," BlockMap::iterator it = mapBlockIndex.begin();"," while (it != mapBlockIndex.end()) {"," if (!it-\u003esecond-\u003eIsValid() \u0026\u0026 it-\u003esecond-\u003eGetAncestor(nHeight) == pindex) {"," it-\u003esecond-\u003enStatus \u0026= ~BLOCK_FAILED_MASK;"," setDirtyBlockIndex.insert(it-\u003esecond);"," if (it-\u003esecond-\u003eIsValid(BLOCK_VALID_TRANSACTIONS) \u0026\u0026 it-\u003esecond-\u003eHaveTxsDownloaded() \u0026\u0026 setBlockIndexCandidates.value_comp()(m_chain.Tip(), it-\u003esecond)) {"," setBlockIndexCandidates.insert(it-\u003esecond);"," }"," if (it-\u003esecond == pindexBestInvalid) {"," // Reset invalid block marker if it was pointing to one of those."," pindexBestInvalid = nullptr;"," }"," m_failed_blocks.erase(it-\u003esecond);"," }"," it++;"," }",""," // Remove the invalidity flag from all ancestors too."," while (pindex != nullptr) {"," if (pindex-\u003enStatus \u0026 BLOCK_FAILED_MASK) {"," pindex-\u003enStatus \u0026= ~BLOCK_FAILED_MASK;"," setDirtyBlockIndex.insert(pindex);"," m_failed_blocks.erase(pindex);"," }"," pindex = pindex-\u003epprev;"," }","}","","void ResetBlockFailureFlags(CBlockIndex *pindex) {"," return ::ChainstateActive().ResetBlockFailureFlags(pindex);","}","","CBlockIndex* CChainState::AddToBlockIndex(const CBlockHeader\u0026 block)","{"," AssertLockHeld(cs_main);",""," // Check for duplicate"," uint256 hash = block.GetHash();"," BlockMap::iterator it = mapBlockIndex.find(hash);"," if (it != mapBlockIndex.end())"," return it-\u003esecond;",""," // Construct new block index object"," CBlockIndex* pindexNew = new CBlockIndex(block);"," // We assign the sequence id to blocks only when the full data is available,"," // to avoid miners withholding blocks but broadcasting headers, to get a"," // competitive advantage."," pindexNew-\u003enSequenceId = 0;"," BlockMap::iterator mi = mapBlockIndex.insert(std::make_pair(hash, pindexNew)).first;"," pindexNew-\u003ephashBlock = \u0026((*mi).first);"," BlockMap::iterator miPrev = mapBlockIndex.find(block.hashPrevBlock);"," if (miPrev != mapBlockIndex.end())"," {"," pindexNew-\u003epprev = (*miPrev).second;"," pindexNew-\u003enHeight = pindexNew-\u003epprev-\u003enHeight + 1;"," pindexNew-\u003eBuildSkip();"," }"," pindexNew-\u003enTimeMax = (pindexNew-\u003epprev ? std::max(pindexNew-\u003epprev-\u003enTimeMax, pindexNew-\u003enTime) : pindexNew-\u003enTime);"," pindexNew-\u003enChainWork = (pindexNew-\u003epprev ? pindexNew-\u003epprev-\u003enChainWork : 0) + GetBlockProof(*pindexNew);"," pindexNew-\u003eRaiseValidity(BLOCK_VALID_TREE);"," if (pindexBestHeader == nullptr || pindexBestHeader-\u003enChainWork \u003c pindexNew-\u003enChainWork)"," pindexBestHeader = pindexNew;",""," setDirtyBlockIndex.insert(pindexNew);",""," return pindexNew;","}","","/** Mark a block as having its data received and checked (up to BLOCK_VALID_TRANSACTIONS). */","void CChainState::ReceivedBlockTransactions(const CBlock\u0026 block, CBlockIndex* pindexNew, const FlatFilePos\u0026 pos, const Consensus::Params\u0026 consensusParams)","{"," pindexNew-\u003enTx = block.vtx.size();"," pindexNew-\u003enChainTx = 0;"," pindexNew-\u003enFile = pos.nFile;"," pindexNew-\u003enDataPos = pos.nPos;"," pindexNew-\u003enUndoPos = 0;"," pindexNew-\u003enStatus |= BLOCK_HAVE_DATA;"," if (IsWitnessEnabled(pindexNew-\u003epprev, consensusParams)) {"," pindexNew-\u003enStatus |= BLOCK_OPT_WITNESS;"," }"," pindexNew-\u003eRaiseValidity(BLOCK_VALID_TRANSACTIONS);"," setDirtyBlockIndex.insert(pindexNew);",""," if (pindexNew-\u003epprev == nullptr || pindexNew-\u003epprev-\u003eHaveTxsDownloaded()) {"," // If pindexNew is the genesis block or all parents are BLOCK_VALID_TRANSACTIONS."," std::deque\u003cCBlockIndex*\u003e queue;"," queue.push_back(pindexNew);",""," // Recursively process any descendant blocks that now may be eligible to be connected."," while (!queue.empty()) {"," CBlockIndex *pindex = queue.front();"," queue.pop_front();"," pindex-\u003enChainTx = (pindex-\u003epprev ? pindex-\u003epprev-\u003enChainTx : 0) + pindex-\u003enTx;"," {"," LOCK(cs_nBlockSequenceId);"," pindex-\u003enSequenceId = nBlockSequenceId++;"," }"," if (m_chain.Tip() == nullptr || !setBlockIndexCandidates.value_comp()(pindex, m_chain.Tip())) {"," setBlockIndexCandidates.insert(pindex);"," }"," std::pair\u003cstd::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator, std::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator\u003e range = mapBlocksUnlinked.equal_range(pindex);"," while (range.first != range.second) {"," std::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator it = range.first;"," queue.push_back(it-\u003esecond);"," range.first++;"," mapBlocksUnlinked.erase(it);"," }"," }"," } else {"," if (pindexNew-\u003epprev \u0026\u0026 pindexNew-\u003epprev-\u003eIsValid(BLOCK_VALID_TREE)) {"," mapBlocksUnlinked.insert(std::make_pair(pindexNew-\u003epprev, pindexNew));"," }"," }","}","","static bool FindBlockPos(FlatFilePos \u0026pos, unsigned int nAddSize, unsigned int nHeight, uint64_t nTime, bool fKnown = false)","{"," LOCK(cs_LastBlockFile);",""," unsigned int nFile = fKnown ? pos.nFile : nLastBlockFile;"," if (vinfoBlockFile.size() \u003c= nFile) {"," vinfoBlockFile.resize(nFile + 1);"," }",""," if (!fKnown) {"," while (vinfoBlockFile[nFile].nSize + nAddSize \u003e= MAX_BLOCKFILE_SIZE) {"," nFile++;"," if (vinfoBlockFile.size() \u003c= nFile) {"," vinfoBlockFile.resize(nFile + 1);"," }"," }"," pos.nFile = nFile;"," pos.nPos = vinfoBlockFile[nFile].nSize;"," }",""," if ((int)nFile != nLastBlockFile) {"," if (!fKnown) {"," LogPrintf(\"Leaving block file %i: %s\\n\", nLastBlockFile, vinfoBlockFile[nLastBlockFile].ToString());"," }"," FlushBlockFile(!fKnown);"," nLastBlockFile = nFile;"," }",""," vinfoBlockFile[nFile].AddBlock(nHeight, nTime);"," if (fKnown)"," vinfoBlockFile[nFile].nSize = std::max(pos.nPos + nAddSize, vinfoBlockFile[nFile].nSize);"," else"," vinfoBlockFile[nFile].nSize += nAddSize;",""," if (!fKnown) {"," bool out_of_space;"," size_t bytes_allocated = BlockFileSeq().Allocate(pos, nAddSize, out_of_space);"," if (out_of_space) {"," return AbortNode(\"Disk space is too low!\", _(\"Error: Disk space is too low!\"), CClientUIInterface::MSG_NOPREFIX);"," }"," if (bytes_allocated != 0 \u0026\u0026 fPruneMode) {"," fCheckForPruning = true;"," }"," }",""," setDirtyFileInfo.insert(nFile);"," return true;","}","","static bool FindUndoPos(CValidationState \u0026state, int nFile, FlatFilePos \u0026pos, unsigned int nAddSize)","{"," pos.nFile = nFile;",""," LOCK(cs_LastBlockFile);",""," pos.nPos = vinfoBlockFile[nFile].nUndoSize;"," vinfoBlockFile[nFile].nUndoSize += nAddSize;"," setDirtyFileInfo.insert(nFile);",""," bool out_of_space;"," size_t bytes_allocated = UndoFileSeq().Allocate(pos, nAddSize, out_of_space);"," if (out_of_space) {"," return AbortNode(state, \"Disk space is too low!\", _(\"Error: Disk space is too low!\"), CClientUIInterface::MSG_NOPREFIX);"," }"," if (bytes_allocated != 0 \u0026\u0026 fPruneMode) {"," fCheckForPruning = true;"," }",""," return true;","}","","static bool CheckBlockHeader(const CBlockHeader\u0026 block, CValidationState\u0026 state, const Consensus::Params\u0026 consensusParams, bool fCheckPOW = true)","{"," // Check proof of work matches claimed amount"," if (fCheckPOW \u0026\u0026 !CheckProofOfWork(block.GetHash(), block.nBits, consensusParams))"," return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER, false, REJECT_INVALID, \"high-hash\", \"proof of work failed\");",""," return true;","}","","bool CheckBlock(const CBlock\u0026 block, CValidationState\u0026 state, const Consensus::Params\u0026 consensusParams, bool fCheckPOW, bool fCheckMerkleRoot)","{"," // These are checks that are independent of context.",""," if (block.fChecked)"," return true;",""," // Check that the header is valid (particularly PoW). This is mostly"," // redundant with the call in AcceptBlockHeader."," if (!CheckBlockHeader(block, state, consensusParams, fCheckPOW))"," return false;",""," // Check the merkle root."," if (fCheckMerkleRoot) {"," bool mutated;"," uint256 hashMerkleRoot2 = BlockMerkleRoot(block, \u0026mutated);"," if (block.hashMerkleRoot != hashMerkleRoot2)"," return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false, REJECT_INVALID, \"bad-txnmrklroot\", \"hashMerkleRoot mismatch\");",""," // Check for merkle tree malleability (CVE-2012-2459): repeating sequences"," // of transactions in a block without affecting the merkle root of a block,"," // while still invalidating it."," if (mutated)"," return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false, REJECT_INVALID, \"bad-txns-duplicate\", \"duplicate transaction\");"," }",""," // All potential-corruption validation must be done before we do any"," // transaction validation, as otherwise we may mark the header as invalid"," // because we receive the wrong transactions for it."," // Note that witness malleability is checked in ContextualCheckBlock, so no"," // checks that use witness data may be performed here.",""," // Size limits"," if (block.vtx.empty() || block.vtx.size() * WITNESS_SCALE_FACTOR \u003e MAX_BLOCK_WEIGHT || ::GetSerializeSize(block, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * WITNESS_SCALE_FACTOR \u003e MAX_BLOCK_WEIGHT)"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-blk-length\", \"size limits failed\");",""," // First transaction must be coinbase, the rest must not be"," if (block.vtx.empty() || !block.vtx[0]-\u003eIsCoinBase())"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-cb-missing\", \"first tx is not coinbase\");"," for (unsigned int i = 1; i \u003c block.vtx.size(); i++)"," if (block.vtx[i]-\u003eIsCoinBase())"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-cb-multiple\", \"more than one coinbase\");",""," // Check transactions"," for (const auto\u0026 tx : block.vtx)"," if (!CheckTransaction(*tx, state, true))"," return state.Invalid(state.GetReason(), false, state.GetRejectCode(), state.GetRejectReason(),"," strprintf(\"Transaction check failed (tx hash %s) %s\", tx-\u003eGetHash().ToString(), state.GetDebugMessage()));",""," unsigned int nSigOps = 0;"," for (const auto\u0026 tx : block.vtx)"," {"," nSigOps += GetLegacySigOpCount(*tx);"," }"," if (nSigOps * WITNESS_SCALE_FACTOR \u003e MAX_BLOCK_SIGOPS_COST)"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-blk-sigops\", \"out-of-bounds SigOpCount\");",""," if (fCheckPOW \u0026\u0026 fCheckMerkleRoot)"," block.fChecked = true;",""," return true;","}","","bool IsWitnessEnabled(const CBlockIndex* pindexPrev, const Consensus::Params\u0026 params)","{"," LOCK(cs_main);"," return (VersionBitsState(pindexPrev, params, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == ThresholdState::ACTIVE);","}","","bool IsNullDummyEnabled(const CBlockIndex* pindexPrev, const Consensus::Params\u0026 params)","{"," LOCK(cs_main);"," return (VersionBitsState(pindexPrev, params, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == ThresholdState::ACTIVE);","}","","// Compute at which vout of the block's coinbase transaction the witness","// commitment occurs, or -1 if not found.","static int GetWitnessCommitmentIndex(const CBlock\u0026 block)","{"," int commitpos = -1;"," if (!block.vtx.empty()) {"," for (size_t o = 0; o \u003c block.vtx[0]-\u003evout.size(); o++) {"," if (block.vtx[0]-\u003evout[o].scriptPubKey.size() \u003e= 38 \u0026\u0026 block.vtx[0]-\u003evout[o].scriptPubKey[0] == OP_RETURN \u0026\u0026 block.vtx[0]-\u003evout[o].scriptPubKey[1] == 0x24 \u0026\u0026 block.vtx[0]-\u003evout[o].scriptPubKey[2] == 0xaa \u0026\u0026 block.vtx[0]-\u003evout[o].scriptPubKey[3] == 0x21 \u0026\u0026 block.vtx[0]-\u003evout[o].scriptPubKey[4] == 0xa9 \u0026\u0026 block.vtx[0]-\u003evout[o].scriptPubKey[5] == 0xed) {"," commitpos = o;"," }"," }"," }"," return commitpos;","}","","void UpdateUncommittedBlockStructures(CBlock\u0026 block, const CBlockIndex* pindexPrev, const Consensus::Params\u0026 consensusParams)","{"," int commitpos = GetWitnessCommitmentIndex(block);"," static const std::vector\u003cunsigned char\u003e nonce(32, 0x00);"," if (commitpos != -1 \u0026\u0026 IsWitnessEnabled(pindexPrev, consensusParams) \u0026\u0026 !block.vtx[0]-\u003eHasWitness()) {"," CMutableTransaction tx(*block.vtx[0]);"," tx.vin[0].scriptWitness.stack.resize(1);"," tx.vin[0].scriptWitness.stack[0] = nonce;"," block.vtx[0] = MakeTransactionRef(std::move(tx));"," }","}","","std::vector\u003cunsigned char\u003e GenerateCoinbaseCommitment(CBlock\u0026 block, const CBlockIndex* pindexPrev, const Consensus::Params\u0026 consensusParams)","{"," std::vector\u003cunsigned char\u003e commitment;"," int commitpos = GetWitnessCommitmentIndex(block);"," std::vector\u003cunsigned char\u003e ret(32, 0x00);"," if (consensusParams.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout != 0) {"," if (commitpos == -1) {"," uint256 witnessroot = BlockWitnessMerkleRoot(block, nullptr);"," CHash256().Write(witnessroot.begin(), 32).Write(ret.data(), 32).Finalize(witnessroot.begin());"," CTxOut out;"," out.nValue = 0;"," out.scriptPubKey.resize(38);"," out.scriptPubKey[0] = OP_RETURN;"," out.scriptPubKey[1] = 0x24;"," out.scriptPubKey[2] = 0xaa;"," out.scriptPubKey[3] = 0x21;"," out.scriptPubKey[4] = 0xa9;"," out.scriptPubKey[5] = 0xed;"," memcpy(\u0026out.scriptPubKey[6], witnessroot.begin(), 32);"," commitment = std::vector\u003cunsigned char\u003e(out.scriptPubKey.begin(), out.scriptPubKey.end());"," CMutableTransaction tx(*block.vtx[0]);"," tx.vout.push_back(out);"," block.vtx[0] = MakeTransactionRef(std::move(tx));"," }"," }"," UpdateUncommittedBlockStructures(block, pindexPrev, consensusParams);"," return commitment;","}","","//! Returns last CBlockIndex* that is a checkpoint","static CBlockIndex* GetLastCheckpoint(const CCheckpointData\u0026 data) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," const MapCheckpoints\u0026 checkpoints = data.mapCheckpoints;",""," for (const MapCheckpoints::value_type\u0026 i : reverse_iterate(checkpoints))"," {"," const uint256\u0026 hash = i.second;"," CBlockIndex* pindex = LookupBlockIndex(hash);"," if (pindex) {"," return pindex;"," }"," }"," return nullptr;","}","","/** Context-dependent validity checks."," * By \"context\", we mean only the previous block headers, but not the UTXO"," * set; UTXO-related validity checks are done in ConnectBlock()."," * NOTE: This function is not currently invoked by ConnectBlock(), so we"," * should consider upgrade issues if we change which consensus rules are"," * enforced in this function (eg by adding a new consensus rule). See comment"," * in ConnectBlock()."," * Note that -reindex-chainstate skips the validation that happens here!"," */","static bool ContextualCheckBlockHeader(const CBlockHeader\u0026 block, CValidationState\u0026 state, const CChainParams\u0026 params, const CBlockIndex* pindexPrev, int64_t nAdjustedTime) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," assert(pindexPrev != nullptr);"," const int nHeight = pindexPrev-\u003enHeight + 1;",""," // Check proof of work"," const Consensus::Params\u0026 consensusParams = params.GetConsensus();"," if (block.nBits != GetNextWorkRequired(pindexPrev, \u0026block, consensusParams))"," return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER, false, REJECT_INVALID, \"bad-diffbits\", \"incorrect proof of work\");",""," // Check against checkpoints"," if (fCheckpointsEnabled) {"," // Don't accept any forks from the main chain prior to last checkpoint."," // GetLastCheckpoint finds the last checkpoint in MapCheckpoints that's in our"," // MapBlockIndex."," CBlockIndex* pcheckpoint = GetLastCheckpoint(params.Checkpoints());"," if (pcheckpoint \u0026\u0026 nHeight \u003c pcheckpoint-\u003enHeight)"," return state.Invalid(ValidationInvalidReason::BLOCK_CHECKPOINT, error(\"%s: forked chain older than last checkpoint (height %d)\", __func__, nHeight), REJECT_CHECKPOINT, \"bad-fork-prior-to-checkpoint\");"," }",""," // Check timestamp against prev"," if (block.GetBlockTime() \u003c= pindexPrev-\u003eGetMedianTimePast())"," return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER, false, REJECT_INVALID, \"time-too-old\", \"block's timestamp is too early\");",""," // Check timestamp"," if (block.GetBlockTime() \u003e nAdjustedTime + MAX_FUTURE_BLOCK_TIME)"," return state.Invalid(ValidationInvalidReason::BLOCK_TIME_FUTURE, false, REJECT_INVALID, \"time-too-new\", \"block timestamp too far in the future\");",""," // Reject outdated version blocks when 95% (75% on testnet) of the network has upgraded:"," // check for version 2, 3 and 4 upgrades"," if((block.nVersion \u003c 2 \u0026\u0026 nHeight \u003e= consensusParams.BIP34Height) ||"," (block.nVersion \u003c 3 \u0026\u0026 nHeight \u003e= consensusParams.BIP66Height) ||"," (block.nVersion \u003c 4 \u0026\u0026 nHeight \u003e= consensusParams.BIP65Height))"," return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER, false, REJECT_OBSOLETE, strprintf(\"bad-version(0x%08x)\", block.nVersion),"," strprintf(\"rejected nVersion=0x%08x block\", block.nVersion));",""," return true;","}","","/** NOTE: This function is not currently invoked by ConnectBlock(), so we"," * should consider upgrade issues if we change which consensus rules are"," * enforced in this function (eg by adding a new consensus rule). See comment"," * in ConnectBlock()."," * Note that -reindex-chainstate skips the validation that happens here!"," */","static bool ContextualCheckBlock(const CBlock\u0026 block, CValidationState\u0026 state, const Consensus::Params\u0026 consensusParams, const CBlockIndex* pindexPrev)","{"," const int nHeight = pindexPrev == nullptr ? 0 : pindexPrev-\u003enHeight + 1;",""," // Start enforcing BIP113 (Median Time Past) using versionbits logic."," int nLockTimeFlags = 0;"," if (VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_CSV, versionbitscache) == ThresholdState::ACTIVE) {"," assert(pindexPrev != nullptr);"," nLockTimeFlags |= LOCKTIME_MEDIAN_TIME_PAST;"," }",""," int64_t nLockTimeCutoff = (nLockTimeFlags \u0026 LOCKTIME_MEDIAN_TIME_PAST)"," ? pindexPrev-\u003eGetMedianTimePast()"," : block.GetBlockTime();",""," // Check that all transactions are finalized"," for (const auto\u0026 tx : block.vtx) {"," if (!IsFinalTx(*tx, nHeight, nLockTimeCutoff)) {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-txns-nonfinal\", \"non-final transaction\");"," }"," }",""," // Enforce rule that the coinbase starts with serialized block height"," if (nHeight \u003e= consensusParams.BIP34Height)"," {"," CScript expect = CScript() \u003c\u003c nHeight;"," if (block.vtx[0]-\u003evin[0].scriptSig.size() \u003c expect.size() ||"," !std::equal(expect.begin(), expect.end(), block.vtx[0]-\u003evin[0].scriptSig.begin())) {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-cb-height\", \"block height mismatch in coinbase\");"," }"," }",""," // Validation for witness commitments."," // * We compute the witness hash (which is the hash including witnesses) of all the block's transactions, except the"," // coinbase (where 0x0000....0000 is used instead)."," // * The coinbase scriptWitness is a stack of a single 32-byte vector, containing a witness reserved value (unconstrained)."," // * We build a merkle tree with all those witness hashes as leaves (similar to the hashMerkleRoot in the block header)."," // * There must be at least one output whose scriptPubKey is a single 36-byte push, the first 4 bytes of which are"," // {0xaa, 0x21, 0xa9, 0xed}, and the following 32 bytes are SHA256^2(witness root, witness reserved value). In case there are"," // multiple, the last one is used."," bool fHaveWitness = false;"," if (VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == ThresholdState::ACTIVE) {"," int commitpos = GetWitnessCommitmentIndex(block);"," if (commitpos != -1) {"," bool malleated = false;"," uint256 hashWitness = BlockWitnessMerkleRoot(block, \u0026malleated);"," // The malleation check is ignored; as the transaction tree itself"," // already does not permit it, it is impossible to trigger in the"," // witness tree."," if (block.vtx[0]-\u003evin[0].scriptWitness.stack.size() != 1 || block.vtx[0]-\u003evin[0].scriptWitness.stack[0].size() != 32) {"," return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false, REJECT_INVALID, \"bad-witness-nonce-size\", strprintf(\"%s : invalid witness reserved value size\", __func__));"," }"," CHash256().Write(hashWitness.begin(), 32).Write(\u0026block.vtx[0]-\u003evin[0].scriptWitness.stack[0][0], 32).Finalize(hashWitness.begin());"," if (memcmp(hashWitness.begin(), \u0026block.vtx[0]-\u003evout[commitpos].scriptPubKey[6], 32)) {"," return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false, REJECT_INVALID, \"bad-witness-merkle-match\", strprintf(\"%s : witness merkle commitment mismatch\", __func__));"," }"," fHaveWitness = true;"," }"," }",""," // No witness data is allowed in blocks that don't commit to witness data, as this would otherwise leave room for spam"," if (!fHaveWitness) {"," for (const auto\u0026 tx : block.vtx) {"," if (tx-\u003eHasWitness()) {"," return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false, REJECT_INVALID, \"unexpected-witness\", strprintf(\"%s : unexpected witness data found\", __func__));"," }"," }"," }",""," // After the coinbase witness reserved value and commitment are verified,"," // we can check if the block weight passes (before we've checked the"," // coinbase witness, it would be possible for the weight to be too"," // large by filling up the coinbase witness, which doesn't change"," // the block hash, so we couldn't mark the block as permanently"," // failed)."," if (GetBlockWeight(block) \u003e MAX_BLOCK_WEIGHT) {"," return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, \"bad-blk-weight\", strprintf(\"%s : weight limit failed\", __func__));"," }",""," return true;","}","","bool CChainState::AcceptBlockHeader(const CBlockHeader\u0026 block, CValidationState\u0026 state, const CChainParams\u0026 chainparams, CBlockIndex** ppindex)","{"," AssertLockHeld(cs_main);"," // Check for duplicate"," uint256 hash = block.GetHash();"," BlockMap::iterator miSelf = mapBlockIndex.find(hash);"," CBlockIndex *pindex = nullptr;"," if (hash != chainparams.GetConsensus().hashGenesisBlock) {"," if (miSelf != mapBlockIndex.end()) {"," // Block header is already known."," pindex = miSelf-\u003esecond;"," if (ppindex)"," *ppindex = pindex;"," if (pindex-\u003enStatus \u0026 BLOCK_FAILED_MASK)"," return state.Invalid(ValidationInvalidReason::CACHED_INVALID, error(\"%s: block %s is marked invalid\", __func__, hash.ToString()), 0, \"duplicate\");"," return true;"," }",""," if (!CheckBlockHeader(block, state, chainparams.GetConsensus()))"," return error(\"%s: Consensus::CheckBlockHeader: %s, %s\", __func__, hash.ToString(), FormatStateMessage(state));",""," // Get prev block index"," CBlockIndex* pindexPrev = nullptr;"," BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);"," if (mi == mapBlockIndex.end())"," return state.Invalid(ValidationInvalidReason::BLOCK_MISSING_PREV, error(\"%s: prev block not found\", __func__), 0, \"prev-blk-not-found\");"," pindexPrev = (*mi).second;"," if (pindexPrev-\u003enStatus \u0026 BLOCK_FAILED_MASK)"," return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_PREV, error(\"%s: prev block invalid\", __func__), REJECT_INVALID, \"bad-prevblk\");"," if (!ContextualCheckBlockHeader(block, state, chainparams, pindexPrev, GetAdjustedTime()))"," return error(\"%s: Consensus::ContextualCheckBlockHeader: %s, %s\", __func__, hash.ToString(), FormatStateMessage(state));",""," /* Determine if this block descends from any block which has been found"," * invalid (m_failed_blocks), then mark pindexPrev and any blocks between"," * them as failed. For example:"," *"," * D3"," * /"," * B2 - C2"," * / \\"," * A D2 - E2 - F2"," * \\"," * B1 - C1 - D1 - E1"," *"," * In the case that we attempted to reorg from E1 to F2, only to find"," * C2 to be invalid, we would mark D2, E2, and F2 as BLOCK_FAILED_CHILD"," * but NOT D3 (it was not in any of our candidate sets at the time)."," *"," * In any case D3 will also be marked as BLOCK_FAILED_CHILD at restart"," * in LoadBlockIndex."," */"," if (!pindexPrev-\u003eIsValid(BLOCK_VALID_SCRIPTS)) {"," // The above does not mean \"invalid\": it checks if the previous block"," // hasn't been validated up to BLOCK_VALID_SCRIPTS. This is a performance"," // optimization, in the common case of adding a new block to the tip,"," // we don't need to iterate over the failed blocks list."," for (const CBlockIndex* failedit : m_failed_blocks) {"," if (pindexPrev-\u003eGetAncestor(failedit-\u003enHeight) == failedit) {"," assert(failedit-\u003enStatus \u0026 BLOCK_FAILED_VALID);"," CBlockIndex* invalid_walk = pindexPrev;"," while (invalid_walk != failedit) {"," invalid_walk-\u003enStatus |= BLOCK_FAILED_CHILD;"," setDirtyBlockIndex.insert(invalid_walk);"," invalid_walk = invalid_walk-\u003epprev;"," }"," return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_PREV, error(\"%s: prev block invalid\", __func__), REJECT_INVALID, \"bad-prevblk\");"," }"," }"," }"," }"," if (pindex == nullptr)"," pindex = AddToBlockIndex(block);",""," if (ppindex)"," *ppindex = pindex;",""," CheckBlockIndex(chainparams.GetConsensus());",""," return true;","}","","// Exposed wrapper for AcceptBlockHeader","bool ProcessNewBlockHeaders(const std::vector\u003cCBlockHeader\u003e\u0026 headers, CValidationState\u0026 state, const CChainParams\u0026 chainparams, const CBlockIndex** ppindex, CBlockHeader *first_invalid)","{"," if (first_invalid != nullptr) first_invalid-\u003eSetNull();"," {"," LOCK(cs_main);"," for (const CBlockHeader\u0026 header : headers) {"," CBlockIndex *pindex = nullptr; // Use a temp pindex instead of ppindex to avoid a const_cast"," if (!::ChainstateActive().AcceptBlockHeader(header, state, chainparams, \u0026pindex)) {"," if (first_invalid) *first_invalid = header;"," return false;"," }"," if (ppindex) {"," *ppindex = pindex;"," }"," }"," }"," NotifyHeaderTip();"," return true;","}","","/** Store block on disk. If dbp is non-nullptr, the file is known to already reside on disk */","static FlatFilePos SaveBlockToDisk(const CBlock\u0026 block, int nHeight, const CChainParams\u0026 chainparams, const FlatFilePos* dbp) {"," unsigned int nBlockSize = ::GetSerializeSize(block, CLIENT_VERSION);"," FlatFilePos blockPos;"," if (dbp != nullptr)"," blockPos = *dbp;"," if (!FindBlockPos(blockPos, nBlockSize+8, nHeight, block.GetBlockTime(), dbp != nullptr)) {"," error(\"%s: FindBlockPos failed\", __func__);"," return FlatFilePos();"," }"," if (dbp == nullptr) {"," if (!WriteBlockToDisk(block, blockPos, chainparams.MessageStart())) {"," AbortNode(\"Failed to write block\");"," return FlatFilePos();"," }"," }"," return blockPos;","}","","/** Store block on disk. If dbp is non-nullptr, the file is known to already reside on disk */","bool CChainState::AcceptBlock(const std::shared_ptr\u003cconst CBlock\u003e\u0026 pblock, CValidationState\u0026 state, const CChainParams\u0026 chainparams, CBlockIndex** ppindex, bool fRequested, const FlatFilePos* dbp, bool* fNewBlock)","{"," const CBlock\u0026 block = *pblock;",""," if (fNewBlock) *fNewBlock = false;"," AssertLockHeld(cs_main);",""," CBlockIndex *pindexDummy = nullptr;"," CBlockIndex *\u0026pindex = ppindex ? *ppindex : pindexDummy;",""," if (!AcceptBlockHeader(block, state, chainparams, \u0026pindex))"," return false;",""," // Try to process all requested blocks that we don't have, but only"," // process an unrequested block if it's new and has enough work to"," // advance our tip, and isn't too many blocks ahead."," bool fAlreadyHave = pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA;"," bool fHasMoreOrSameWork = (m_chain.Tip() ? pindex-\u003enChainWork \u003e= m_chain.Tip()-\u003enChainWork : true);"," // Blocks that are too out-of-order needlessly limit the effectiveness of"," // pruning, because pruning will not delete block files that contain any"," // blocks which are too close in height to the tip. Apply this test"," // regardless of whether pruning is enabled; it should generally be safe to"," // not process unrequested blocks."," bool fTooFarAhead = (pindex-\u003enHeight \u003e int(m_chain.Height() + MIN_BLOCKS_TO_KEEP));",""," // TODO: Decouple this function from the block download logic by removing fRequested"," // This requires some new chain data structure to efficiently look up if a"," // block is in a chain leading to a candidate for best tip, despite not"," // being such a candidate itself.",""," // TODO: deal better with return value and error conditions for duplicate"," // and unrequested blocks."," if (fAlreadyHave) return true;"," if (!fRequested) { // If we didn't ask for it:"," if (pindex-\u003enTx != 0) return true; // This is a previously-processed block that was pruned"," if (!fHasMoreOrSameWork) return true; // Don't process less-work chains"," if (fTooFarAhead) return true; // Block height is too high",""," // Protect against DoS attacks from low-work chains."," // If our tip is behind, a peer could try to send us"," // low-work blocks on a fake chain that we would never"," // request; don't process these."," if (pindex-\u003enChainWork \u003c nMinimumChainWork) return true;"," }",""," if (!CheckBlock(block, state, chainparams.GetConsensus()) ||"," !ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindex-\u003epprev)) {"," assert(IsBlockReason(state.GetReason()));"," if (state.IsInvalid() \u0026\u0026 state.GetReason() != ValidationInvalidReason::BLOCK_MUTATED) {"," pindex-\u003enStatus |= BLOCK_FAILED_VALID;"," setDirtyBlockIndex.insert(pindex);"," }"," return error(\"%s: %s\", __func__, FormatStateMessage(state));"," }",""," // Header is valid/has work, merkle tree and segwit merkle tree are good...RELAY NOW"," // (but if it does not build on our best tip, let the SendMessages loop relay it)"," if (!IsInitialBlockDownload() \u0026\u0026 m_chain.Tip() == pindex-\u003epprev)"," GetMainSignals().NewPoWValidBlock(pindex, pblock);",""," // Write block to history file"," if (fNewBlock) *fNewBlock = true;"," try {"," FlatFilePos blockPos = SaveBlockToDisk(block, pindex-\u003enHeight, chainparams, dbp);"," if (blockPos.IsNull()) {"," state.Error(strprintf(\"%s: Failed to find position to write new block to disk\", __func__));"," return false;"," }"," ReceivedBlockTransactions(block, pindex, blockPos, chainparams.GetConsensus());"," } catch (const std::runtime_error\u0026 e) {"," return AbortNode(state, std::string(\"System error: \") + e.what());"," }",""," FlushStateToDisk(chainparams, state, FlushStateMode::NONE);",""," CheckBlockIndex(chainparams.GetConsensus());",""," return true;","}","","bool ProcessNewBlock(const CChainParams\u0026 chainparams, const std::shared_ptr\u003cconst CBlock\u003e pblock, bool fForceProcessing, bool *fNewBlock)","{"," AssertLockNotHeld(cs_main);",""," {"," CBlockIndex *pindex = nullptr;"," if (fNewBlock) *fNewBlock = false;"," CValidationState state;",""," // CheckBlock() does not support multi-threaded block validation because CBlock::fChecked can cause data race."," // Therefore, the following critical section must include the CheckBlock() call as well."," LOCK(cs_main);",""," // Ensure that CheckBlock() passes before calling AcceptBlock, as"," // belt-and-suspenders."," bool ret = CheckBlock(*pblock, state, chainparams.GetConsensus());"," if (ret) {"," // Store to disk"," ret = ::ChainstateActive().AcceptBlock(pblock, state, chainparams, \u0026pindex, fForceProcessing, nullptr, fNewBlock);"," }"," if (!ret) {"," GetMainSignals().BlockChecked(*pblock, state);"," return error(\"%s: AcceptBlock FAILED (%s)\", __func__, FormatStateMessage(state));"," }"," }",""," NotifyHeaderTip();",""," CValidationState state; // Only used to report errors, not invalidity - ignore it"," if (!::ChainstateActive().ActivateBestChain(state, chainparams, pblock))"," return error(\"%s: ActivateBestChain failed (%s)\", __func__, FormatStateMessage(state));",""," return true;","}","","bool TestBlockValidity(CValidationState\u0026 state, const CChainParams\u0026 chainparams, const CBlock\u0026 block, CBlockIndex* pindexPrev, bool fCheckPOW, bool fCheckMerkleRoot)","{"," AssertLockHeld(cs_main);"," assert(pindexPrev \u0026\u0026 pindexPrev == ::ChainActive().Tip());"," CCoinsViewCache viewNew(pcoinsTip.get());"," uint256 block_hash(block.GetHash());"," CBlockIndex indexDummy(block);"," indexDummy.pprev = pindexPrev;"," indexDummy.nHeight = pindexPrev-\u003enHeight + 1;"," indexDummy.phashBlock = \u0026block_hash;",""," // NOTE: CheckBlockHeader is called by CheckBlock"," if (!ContextualCheckBlockHeader(block, state, chainparams, pindexPrev, GetAdjustedTime()))"," return error(\"%s: Consensus::ContextualCheckBlockHeader: %s\", __func__, FormatStateMessage(state));"," if (!CheckBlock(block, state, chainparams.GetConsensus(), fCheckPOW, fCheckMerkleRoot))"," return error(\"%s: Consensus::CheckBlock: %s\", __func__, FormatStateMessage(state));"," if (!ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindexPrev))"," return error(\"%s: Consensus::ContextualCheckBlock: %s\", __func__, FormatStateMessage(state));"," if (!::ChainstateActive().ConnectBlock(block, state, \u0026indexDummy, viewNew, chainparams, true))"," return false;"," assert(state.IsValid());",""," return true;","}","","/**"," * BLOCK PRUNING CODE"," */","","/* Calculate the amount of disk space the block \u0026 undo files currently use */","uint64_t CalculateCurrentUsage()","{"," LOCK(cs_LastBlockFile);",""," uint64_t retval = 0;"," for (const CBlockFileInfo \u0026file : vinfoBlockFile) {"," retval += file.nSize + file.nUndoSize;"," }"," return retval;","}","","/* Prune a block file (modify associated database entries)*/","void PruneOneBlockFile(const int fileNumber)","{"," LOCK(cs_LastBlockFile);",""," for (const auto\u0026 entry : mapBlockIndex) {"," CBlockIndex* pindex = entry.second;"," if (pindex-\u003enFile == fileNumber) {"," pindex-\u003enStatus \u0026= ~BLOCK_HAVE_DATA;"," pindex-\u003enStatus \u0026= ~BLOCK_HAVE_UNDO;"," pindex-\u003enFile = 0;"," pindex-\u003enDataPos = 0;"," pindex-\u003enUndoPos = 0;"," setDirtyBlockIndex.insert(pindex);",""," // Prune from mapBlocksUnlinked -- any block we prune would have"," // to be downloaded again in order to consider its chain, at which"," // point it would be considered as a candidate for"," // mapBlocksUnlinked or setBlockIndexCandidates."," std::pair\u003cstd::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator, std::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator\u003e range = mapBlocksUnlinked.equal_range(pindex-\u003epprev);"," while (range.first != range.second) {"," std::multimap\u003cCBlockIndex *, CBlockIndex *\u003e::iterator _it = range.first;"," range.first++;"," if (_it-\u003esecond == pindex) {"," mapBlocksUnlinked.erase(_it);"," }"," }"," }"," }",""," vinfoBlockFile[fileNumber].SetNull();"," setDirtyFileInfo.insert(fileNumber);","}","","","void UnlinkPrunedFiles(const std::set\u003cint\u003e\u0026 setFilesToPrune)","{"," for (std::set\u003cint\u003e::iterator it = setFilesToPrune.begin(); it != setFilesToPrune.end(); ++it) {"," FlatFilePos pos(*it, 0);"," fs::remove(BlockFileSeq().FileName(pos));"," fs::remove(UndoFileSeq().FileName(pos));"," LogPrintf(\"Prune: %s deleted blk/rev (%05u)\\n\", __func__, *it);"," }","}","","/* Calculate the block/rev files to delete based on height specified by user with RPC command pruneblockchain */","static void FindFilesToPruneManual(std::set\u003cint\u003e\u0026 setFilesToPrune, int nManualPruneHeight)","{"," assert(fPruneMode \u0026\u0026 nManualPruneHeight \u003e 0);",""," LOCK2(cs_main, cs_LastBlockFile);"," if (::ChainActive().Tip() == nullptr)"," return;",""," // last block to prune is the lesser of (user-specified height, MIN_BLOCKS_TO_KEEP from the tip)"," unsigned int nLastBlockWeCanPrune = std::min((unsigned)nManualPruneHeight, ::ChainActive().Tip()-\u003enHeight - MIN_BLOCKS_TO_KEEP);"," int count=0;"," for (int fileNumber = 0; fileNumber \u003c nLastBlockFile; fileNumber++) {"," if (vinfoBlockFile[fileNumber].nSize == 0 || vinfoBlockFile[fileNumber].nHeightLast \u003e nLastBlockWeCanPrune)"," continue;"," PruneOneBlockFile(fileNumber);"," setFilesToPrune.insert(fileNumber);"," count++;"," }"," LogPrintf(\"Prune (Manual): prune_height=%d removed %d blk/rev pairs\\n\", nLastBlockWeCanPrune, count);","}","","/* This function is called from the RPC code for pruneblockchain */","void PruneBlockFilesManual(int nManualPruneHeight)","{"," CValidationState state;"," const CChainParams\u0026 chainparams = Params();"," if (!::ChainstateActive().FlushStateToDisk("," chainparams, state, FlushStateMode::NONE, nManualPruneHeight)) {"," LogPrintf(\"%s: failed to flush state (%s)\\n\", __func__, FormatStateMessage(state));"," }","}","","/**"," * Prune block and undo files (blk???.dat and undo???.dat) so that the disk space used is less than a user-defined target."," * The user sets the target (in MB) on the command line or in config file. This will be run on startup and whenever new"," * space is allocated in a block or undo file, staying below the target. Changing back to unpruned requires a reindex"," * (which in this case means the blockchain must be re-downloaded.)"," *"," * Pruning functions are called from FlushStateToDisk when the global fCheckForPruning flag has been set."," * Block and undo files are deleted in lock-step (when blk00003.dat is deleted, so is rev00003.dat.)"," * Pruning cannot take place until the longest chain is at least a certain length (100000 on mainnet, 1000 on testnet, 1000 on regtest)."," * Pruning will never delete a block within a defined distance (currently 288) from the active chain's tip."," * The block index is updated by unsetting HAVE_DATA and HAVE_UNDO for any blocks that were stored in the deleted files."," * A db flag records the fact that at least some block files have been pruned."," *"," * @param[out] setFilesToPrune The set of file indices that can be unlinked will be returned"," */","static void FindFilesToPrune(std::set\u003cint\u003e\u0026 setFilesToPrune, uint64_t nPruneAfterHeight)","{"," LOCK2(cs_main, cs_LastBlockFile);"," if (::ChainActive().Tip() == nullptr || nPruneTarget == 0) {"," return;"," }"," if ((uint64_t)::ChainActive().Tip()-\u003enHeight \u003c= nPruneAfterHeight) {"," return;"," }",""," unsigned int nLastBlockWeCanPrune = ::ChainActive().Tip()-\u003enHeight - MIN_BLOCKS_TO_KEEP;"," uint64_t nCurrentUsage = CalculateCurrentUsage();"," // We don't check to prune until after we've allocated new space for files"," // So we should leave a buffer under our target to account for another allocation"," // before the next pruning."," uint64_t nBuffer = BLOCKFILE_CHUNK_SIZE + UNDOFILE_CHUNK_SIZE;"," uint64_t nBytesToPrune;"," int count=0;",""," if (nCurrentUsage + nBuffer \u003e= nPruneTarget) {"," // On a prune event, the chainstate DB is flushed."," // To avoid excessive prune events negating the benefit of high dbcache"," // values, we should not prune too rapidly."," // So when pruning in IBD, increase the buffer a bit to avoid a re-prune too soon."," if (::ChainstateActive().IsInitialBlockDownload()) {"," // Since this is only relevant during IBD, we use a fixed 10%"," nBuffer += nPruneTarget / 10;"," }",""," for (int fileNumber = 0; fileNumber \u003c nLastBlockFile; fileNumber++) {"," nBytesToPrune = vinfoBlockFile[fileNumber].nSize + vinfoBlockFile[fileNumber].nUndoSize;",""," if (vinfoBlockFile[fileNumber].nSize == 0)"," continue;",""," if (nCurrentUsage + nBuffer \u003c nPruneTarget) // are we below our target?"," break;",""," // don't prune files that could have a block within MIN_BLOCKS_TO_KEEP of the main chain's tip but keep scanning"," if (vinfoBlockFile[fileNumber].nHeightLast \u003e nLastBlockWeCanPrune)"," continue;",""," PruneOneBlockFile(fileNumber);"," // Queue up the files for removal"," setFilesToPrune.insert(fileNumber);"," nCurrentUsage -= nBytesToPrune;"," count++;"," }"," }",""," LogPrint(BCLog::PRUNE, \"Prune: target=%dMiB actual=%dMiB diff=%dMiB max_prune_height=%d removed %d blk/rev pairs\\n\","," nPruneTarget/1024/1024, nCurrentUsage/1024/1024,"," ((int64_t)nPruneTarget - (int64_t)nCurrentUsage)/1024/1024,"," nLastBlockWeCanPrune, count);","}","","static FlatFileSeq BlockFileSeq()","{"," return FlatFileSeq(GetBlocksDir(), \"blk\", BLOCKFILE_CHUNK_SIZE);","}","","static FlatFileSeq UndoFileSeq()","{"," return FlatFileSeq(GetBlocksDir(), \"rev\", UNDOFILE_CHUNK_SIZE);","}","","FILE* OpenBlockFile(const FlatFilePos \u0026pos, bool fReadOnly) {"," return BlockFileSeq().Open(pos, fReadOnly);","}","","/** Open an undo file (rev?????.dat) */","static FILE* OpenUndoFile(const FlatFilePos \u0026pos, bool fReadOnly) {"," return UndoFileSeq().Open(pos, fReadOnly);","}","","fs::path GetBlockPosFilename(const FlatFilePos \u0026pos)","{"," return BlockFileSeq().FileName(pos);","}","","CBlockIndex * CChainState::InsertBlockIndex(const uint256\u0026 hash)","{"," AssertLockHeld(cs_main);",""," if (hash.IsNull())"," return nullptr;",""," // Return existing"," BlockMap::iterator mi = mapBlockIndex.find(hash);"," if (mi != mapBlockIndex.end())"," return (*mi).second;",""," // Create new"," CBlockIndex* pindexNew = new CBlockIndex();"," mi = mapBlockIndex.insert(std::make_pair(hash, pindexNew)).first;"," pindexNew-\u003ephashBlock = \u0026((*mi).first);",""," return pindexNew;","}","","bool CChainState::LoadBlockIndex(const Consensus::Params\u0026 consensus_params, CBlockTreeDB\u0026 blocktree)","{"," if (!blocktree.LoadBlockIndexGuts(consensus_params, [this](const uint256\u0026 hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main) { return this-\u003eInsertBlockIndex(hash); }))"," return false;",""," // Calculate nChainWork"," std::vector\u003cstd::pair\u003cint, CBlockIndex*\u003e \u003e vSortedByHeight;"," vSortedByHeight.reserve(mapBlockIndex.size());"," for (const std::pair\u003cconst uint256, CBlockIndex*\u003e\u0026 item : mapBlockIndex)"," {"," CBlockIndex* pindex = item.second;"," vSortedByHeight.push_back(std::make_pair(pindex-\u003enHeight, pindex));"," }"," sort(vSortedByHeight.begin(), vSortedByHeight.end());"," for (const std::pair\u003cint, CBlockIndex*\u003e\u0026 item : vSortedByHeight)"," {"," if (ShutdownRequested()) return false;"," CBlockIndex* pindex = item.second;"," pindex-\u003enChainWork = (pindex-\u003epprev ? pindex-\u003epprev-\u003enChainWork : 0) + GetBlockProof(*pindex);"," pindex-\u003enTimeMax = (pindex-\u003epprev ? std::max(pindex-\u003epprev-\u003enTimeMax, pindex-\u003enTime) : pindex-\u003enTime);"," // We can link the chain of blocks for which we've received transactions at some point."," // Pruned nodes may have deleted the block."," if (pindex-\u003enTx \u003e 0) {"," if (pindex-\u003epprev) {"," if (pindex-\u003epprev-\u003eHaveTxsDownloaded()) {"," pindex-\u003enChainTx = pindex-\u003epprev-\u003enChainTx + pindex-\u003enTx;"," } else {"," pindex-\u003enChainTx = 0;"," mapBlocksUnlinked.insert(std::make_pair(pindex-\u003epprev, pindex));"," }"," } else {"," pindex-\u003enChainTx = pindex-\u003enTx;"," }"," }"," if (!(pindex-\u003enStatus \u0026 BLOCK_FAILED_MASK) \u0026\u0026 pindex-\u003epprev \u0026\u0026 (pindex-\u003epprev-\u003enStatus \u0026 BLOCK_FAILED_MASK)) {"," pindex-\u003enStatus |= BLOCK_FAILED_CHILD;"," setDirtyBlockIndex.insert(pindex);"," }"," if (pindex-\u003eIsValid(BLOCK_VALID_TRANSACTIONS) \u0026\u0026 (pindex-\u003eHaveTxsDownloaded() || pindex-\u003epprev == nullptr))"," setBlockIndexCandidates.insert(pindex);"," if (pindex-\u003enStatus \u0026 BLOCK_FAILED_MASK \u0026\u0026 (!pindexBestInvalid || pindex-\u003enChainWork \u003e pindexBestInvalid-\u003enChainWork))"," pindexBestInvalid = pindex;"," if (pindex-\u003epprev)"," pindex-\u003eBuildSkip();"," if (pindex-\u003eIsValid(BLOCK_VALID_TREE) \u0026\u0026 (pindexBestHeader == nullptr || CBlockIndexWorkComparator()(pindexBestHeader, pindex)))"," pindexBestHeader = pindex;"," }",""," return true;","}","","bool static LoadBlockIndexDB(const CChainParams\u0026 chainparams) EXCLUSIVE_LOCKS_REQUIRED(cs_main)","{"," if (!::ChainstateActive().LoadBlockIndex(chainparams.GetConsensus(), *pblocktree))"," return false;",""," // Load block file info"," pblocktree-\u003eReadLastBlockFile(nLastBlockFile);"," vinfoBlockFile.resize(nLastBlockFile + 1);"," LogPrintf(\"%s: last block file = %i\\n\", __func__, nLastBlockFile);"," for (int nFile = 0; nFile \u003c= nLastBlockFile; nFile++) {"," pblocktree-\u003eReadBlockFileInfo(nFile, vinfoBlockFile[nFile]);"," }"," LogPrintf(\"%s: last block file info: %s\\n\", __func__, vinfoBlockFile[nLastBlockFile].ToString());"," for (int nFile = nLastBlockFile + 1; true; nFile++) {"," CBlockFileInfo info;"," if (pblocktree-\u003eReadBlockFileInfo(nFile, info)) {"," vinfoBlockFile.push_back(info);"," } else {"," break;"," }"," }",""," // Check presence of blk files"," LogPrintf(\"Checking all blk files are present...\\n\");"," std::set\u003cint\u003e setBlkDataFiles;"," for (const std::pair\u003cconst uint256, CBlockIndex*\u003e\u0026 item : mapBlockIndex)"," {"," CBlockIndex* pindex = item.second;"," if (pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA) {"," setBlkDataFiles.insert(pindex-\u003enFile);"," }"," }"," for (std::set\u003cint\u003e::iterator it = setBlkDataFiles.begin(); it != setBlkDataFiles.end(); it++)"," {"," FlatFilePos pos(*it, 0);"," if (CAutoFile(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION).IsNull()) {"," return false;"," }"," }",""," // Check whether we have ever pruned block \u0026 undo files"," pblocktree-\u003eReadFlag(\"prunedblockfiles\", fHavePruned);"," if (fHavePruned)"," LogPrintf(\"LoadBlockIndexDB(): Block files have previously been pruned\\n\");",""," // Check whether we need to continue reindexing"," bool fReindexing = false;"," pblocktree-\u003eReadReindexing(fReindexing);"," if(fReindexing) fReindex = true;",""," return true;","}","","bool LoadChainTip(const CChainParams\u0026 chainparams)","{"," AssertLockHeld(cs_main);"," assert(!pcoinsTip-\u003eGetBestBlock().IsNull()); // Never called when the coins view is empty",""," if (::ChainActive().Tip() \u0026\u0026 ::ChainActive().Tip()-\u003eGetBlockHash() == pcoinsTip-\u003eGetBestBlock()) return true;",""," // Load pointer to end of best chain"," CBlockIndex* pindex = LookupBlockIndex(pcoinsTip-\u003eGetBestBlock());"," if (!pindex) {"," return false;"," }"," ::ChainActive().SetTip(pindex);",""," ::ChainstateActive().PruneBlockIndexCandidates();",""," LogPrintf(\"Loaded best chain: hashBestChain=%s height=%d date=%s progress=%f\\n\","," ::ChainActive().Tip()-\u003eGetBlockHash().ToString(), ::ChainActive().Height(),"," FormatISO8601DateTime(::ChainActive().Tip()-\u003eGetBlockTime()),"," GuessVerificationProgress(chainparams.TxData(), ::ChainActive().Tip()));"," return true;","}","","CVerifyDB::CVerifyDB()","{"," uiInterface.ShowProgress(_(\"Verifying blocks...\"), 0, false);","}","","CVerifyDB::~CVerifyDB()","{"," uiInterface.ShowProgress(\"\", 100, false);","}","","bool CVerifyDB::VerifyDB(const CChainParams\u0026 chainparams, CCoinsView *coinsview, int nCheckLevel, int nCheckDepth)","{"," LOCK(cs_main);"," if (::ChainActive().Tip() == nullptr || ::ChainActive().Tip()-\u003epprev == nullptr)"," return true;",""," // Verify blocks in the best chain"," if (nCheckDepth \u003c= 0 || nCheckDepth \u003e ::ChainActive().Height())"," nCheckDepth = ::ChainActive().Height();"," nCheckLevel = std::max(0, std::min(4, nCheckLevel));"," LogPrintf(\"Verifying last %i blocks at level %i\\n\", nCheckDepth, nCheckLevel);"," CCoinsViewCache coins(coinsview);"," CBlockIndex* pindex;"," CBlockIndex* pindexFailure = nullptr;"," int nGoodTransactions = 0;"," CValidationState state;"," int reportDone = 0;"," LogPrintf(\"[0%%]...\"); /* Continued */"," for (pindex = ::ChainActive().Tip(); pindex \u0026\u0026 pindex-\u003epprev; pindex = pindex-\u003epprev) {"," boost::this_thread::interruption_point();"," const int percentageDone = std::max(1, std::min(99, (int)(((double)(::ChainActive().Height() - pindex-\u003enHeight)) / (double)nCheckDepth * (nCheckLevel \u003e= 4 ? 50 : 100))));"," if (reportDone \u003c percentageDone/10) {"," // report every 10% step"," LogPrintf(\"[%d%%]...\", percentageDone); /* Continued */"," reportDone = percentageDone/10;"," }"," uiInterface.ShowProgress(_(\"Verifying blocks...\"), percentageDone, false);"," if (pindex-\u003enHeight \u003c= ::ChainActive().Height()-nCheckDepth)"," break;"," if (fPruneMode \u0026\u0026 !(pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA)) {"," // If pruning, only go back as far as we have data."," LogPrintf(\"VerifyDB(): block verification stopping at height %d (pruning, no data)\\n\", pindex-\u003enHeight);"," break;"," }"," CBlock block;"," // check level 0: read from disk"," if (!ReadBlockFromDisk(block, pindex, chainparams.GetConsensus()))"," return error(\"VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s\", pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString());"," // check level 1: verify block validity"," if (nCheckLevel \u003e= 1 \u0026\u0026 !CheckBlock(block, state, chainparams.GetConsensus()))"," return error(\"%s: *** found bad block at %d, hash=%s (%s)\\n\", __func__,"," pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString(), FormatStateMessage(state));"," // check level 2: verify undo validity"," if (nCheckLevel \u003e= 2 \u0026\u0026 pindex) {"," CBlockUndo undo;"," if (!pindex-\u003eGetUndoPos().IsNull()) {"," if (!UndoReadFromDisk(undo, pindex)) {"," return error(\"VerifyDB(): *** found bad undo data at %d, hash=%s\\n\", pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString());"," }"," }"," }"," // check level 3: check for inconsistencies during memory-only disconnect of tip blocks"," if (nCheckLevel \u003e= 3 \u0026\u0026 (coins.DynamicMemoryUsage() + pcoinsTip-\u003eDynamicMemoryUsage()) \u003c= nCoinCacheUsage) {"," assert(coins.GetBestBlock() == pindex-\u003eGetBlockHash());"," DisconnectResult res = ::ChainstateActive().DisconnectBlock(block, pindex, coins);"," if (res == DISCONNECT_FAILED) {"," return error(\"VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s\", pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString());"," }"," if (res == DISCONNECT_UNCLEAN) {"," nGoodTransactions = 0;"," pindexFailure = pindex;"," } else {"," nGoodTransactions += block.vtx.size();"," }"," }"," if (ShutdownRequested())"," return true;"," }"," if (pindexFailure)"," return error(\"VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\\n\", ::ChainActive().Height() - pindexFailure-\u003enHeight + 1, nGoodTransactions);",""," // store block count as we move pindex at check level \u003e= 4"," int block_count = ::ChainActive().Height() - pindex-\u003enHeight;",""," // check level 4: try reconnecting blocks"," if (nCheckLevel \u003e= 4) {"," while (pindex != ::ChainActive().Tip()) {"," boost::this_thread::interruption_point();"," const int percentageDone = std::max(1, std::min(99, 100 - (int)(((double)(::ChainActive().Height() - pindex-\u003enHeight)) / (double)nCheckDepth * 50)));"," if (reportDone \u003c percentageDone/10) {"," // report every 10% step"," LogPrintf(\"[%d%%]...\", percentageDone); /* Continued */"," reportDone = percentageDone/10;"," }"," uiInterface.ShowProgress(_(\"Verifying blocks...\"), percentageDone, false);"," pindex = ::ChainActive().Next(pindex);"," CBlock block;"," if (!ReadBlockFromDisk(block, pindex, chainparams.GetConsensus()))"," return error(\"VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s\", pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString());"," if (!::ChainstateActive().ConnectBlock(block, state, pindex, coins, chainparams))"," return error(\"VerifyDB(): *** found unconnectable block at %d, hash=%s (%s)\", pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString(), FormatStateMessage(state));"," }"," }",""," LogPrintf(\"[DONE].\\n\");"," LogPrintf(\"No coin database inconsistencies in last %i blocks (%i transactions)\\n\", block_count, nGoodTransactions);",""," return true;","}","","/** Apply the effects of a block on the utxo cache, ignoring that it may already have been applied. */","bool CChainState::RollforwardBlock(const CBlockIndex* pindex, CCoinsViewCache\u0026 inputs, const CChainParams\u0026 params)","{"," // TODO: merge with ConnectBlock"," CBlock block;"," if (!ReadBlockFromDisk(block, pindex, params.GetConsensus())) {"," return error(\"ReplayBlock(): ReadBlockFromDisk failed at %d, hash=%s\", pindex-\u003enHeight, pindex-\u003eGetBlockHash().ToString());"," }",""," for (const CTransactionRef\u0026 tx : block.vtx) {"," if (!tx-\u003eIsCoinBase()) {"," for (const CTxIn \u0026txin : tx-\u003evin) {"," inputs.SpendCoin(txin.prevout);"," }"," }"," // Pass check = true as every addition may be an overwrite."," AddCoins(inputs, *tx, pindex-\u003enHeight, true);"," }"," return true;","}","","bool CChainState::ReplayBlocks(const CChainParams\u0026 params, CCoinsView* view)","{"," LOCK(cs_main);",""," CCoinsViewCache cache(view);",""," std::vector\u003cuint256\u003e hashHeads = view-\u003eGetHeadBlocks();"," if (hashHeads.empty()) return true; // We're already in a consistent state."," if (hashHeads.size() != 2) return error(\"ReplayBlocks(): unknown inconsistent state\");",""," uiInterface.ShowProgress(_(\"Replaying blocks...\"), 0, false);"," LogPrintf(\"Replaying blocks\\n\");",""," const CBlockIndex* pindexOld = nullptr; // Old tip during the interrupted flush."," const CBlockIndex* pindexNew; // New tip during the interrupted flush."," const CBlockIndex* pindexFork = nullptr; // Latest block common to both the old and the new tip.",""," if (mapBlockIndex.count(hashHeads[0]) == 0) {"," return error(\"ReplayBlocks(): reorganization to unknown block requested\");"," }"," pindexNew = mapBlockIndex[hashHeads[0]];",""," if (!hashHeads[1].IsNull()) { // The old tip is allowed to be 0, indicating it's the first flush."," if (mapBlockIndex.count(hashHeads[1]) == 0) {"," return error(\"ReplayBlocks(): reorganization from unknown block requested\");"," }"," pindexOld = mapBlockIndex[hashHeads[1]];"," pindexFork = LastCommonAncestor(pindexOld, pindexNew);"," assert(pindexFork != nullptr);"," }",""," // Rollback along the old branch."," while (pindexOld != pindexFork) {"," if (pindexOld-\u003enHeight \u003e 0) { // Never disconnect the genesis block."," CBlock block;"," if (!ReadBlockFromDisk(block, pindexOld, params.GetConsensus())) {"," return error(\"RollbackBlock(): ReadBlockFromDisk() failed at %d, hash=%s\", pindexOld-\u003enHeight, pindexOld-\u003eGetBlockHash().ToString());"," }"," LogPrintf(\"Rolling back %s (%i)\\n\", pindexOld-\u003eGetBlockHash().ToString(), pindexOld-\u003enHeight);"," DisconnectResult res = DisconnectBlock(block, pindexOld, cache);"," if (res == DISCONNECT_FAILED) {"," return error(\"RollbackBlock(): DisconnectBlock failed at %d, hash=%s\", pindexOld-\u003enHeight, pindexOld-\u003eGetBlockHash().ToString());"," }"," // If DISCONNECT_UNCLEAN is returned, it means a non-existing UTXO was deleted, or an existing UTXO was"," // overwritten. It corresponds to cases where the block-to-be-disconnect never had all its operations"," // applied to the UTXO set. However, as both writing a UTXO and deleting a UTXO are idempotent operations,"," // the result is still a version of the UTXO set with the effects of that block undone."," }"," pindexOld = pindexOld-\u003epprev;"," }",""," // Roll forward from the forking point to the new tip."," int nForkHeight = pindexFork ? pindexFork-\u003enHeight : 0;"," for (int nHeight = nForkHeight + 1; nHeight \u003c= pindexNew-\u003enHeight; ++nHeight) {"," const CBlockIndex* pindex = pindexNew-\u003eGetAncestor(nHeight);"," LogPrintf(\"Rolling forward %s (%i)\\n\", pindex-\u003eGetBlockHash().ToString(), nHeight);"," uiInterface.ShowProgress(_(\"Replaying blocks...\"), (int) ((nHeight - nForkHeight) * 100.0 / (pindexNew-\u003enHeight - nForkHeight)) , false);"," if (!RollforwardBlock(pindex, cache, params)) return false;"," }",""," cache.SetBestBlock(pindexNew-\u003eGetBlockHash());"," cache.Flush();"," uiInterface.ShowProgress(\"\", 100, false);"," return true;","}","","bool ReplayBlocks(const CChainParams\u0026 params, CCoinsView* view) {"," return ::ChainstateActive().ReplayBlocks(params, view);","}","","//! Helper for CChainState::RewindBlockIndex","void CChainState::EraseBlockData(CBlockIndex* index)","{"," AssertLockHeld(cs_main);"," assert(!m_chain.Contains(index)); // Make sure this block isn't active",""," // Reduce validity"," index-\u003enStatus = std::min\u003cunsigned int\u003e(index-\u003enStatus \u0026 BLOCK_VALID_MASK, BLOCK_VALID_TREE) | (index-\u003enStatus \u0026 ~BLOCK_VALID_MASK);"," // Remove have-data flags."," index-\u003enStatus \u0026= ~(BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO);"," // Remove storage location."," index-\u003enFile = 0;"," index-\u003enDataPos = 0;"," index-\u003enUndoPos = 0;"," // Remove various other things"," index-\u003enTx = 0;"," index-\u003enChainTx = 0;"," index-\u003enSequenceId = 0;"," // Make sure it gets written."," setDirtyBlockIndex.insert(index);"," // Update indexes"," setBlockIndexCandidates.erase(index);"," std::pair\u003cstd::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator, std::multimap\u003cCBlockIndex*, CBlockIndex*\u003e::iterator\u003e ret = mapBlocksUnlinked.equal_range(index-\u003epprev);"," while (ret.first != ret.second) {"," if (ret.first-\u003esecond == index) {"," mapBlocksUnlinked.erase(ret.first++);"," } else {"," ++ret.first;"," }"," }"," // Mark parent as eligible for main chain again"," if (index-\u003epprev \u0026\u0026 index-\u003epprev-\u003eIsValid(BLOCK_VALID_TRANSACTIONS) \u0026\u0026 index-\u003epprev-\u003eHaveTxsDownloaded()) {"," setBlockIndexCandidates.insert(index-\u003epprev);"," }","}","","bool CChainState::RewindBlockIndex(const CChainParams\u0026 params)","{"," // Note that during -reindex-chainstate we are called with an empty m_chain!",""," // First erase all post-segwit blocks without witness not in the main chain,"," // as this can we done without costly DisconnectTip calls. Active"," // blocks will be dealt with below (releasing cs_main in between)."," {"," LOCK(cs_main);"," for (const auto\u0026 entry : mapBlockIndex) {"," if (IsWitnessEnabled(entry.second-\u003epprev, params.GetConsensus()) \u0026\u0026 !(entry.second-\u003enStatus \u0026 BLOCK_OPT_WITNESS) \u0026\u0026 !m_chain.Contains(entry.second)) {"," EraseBlockData(entry.second);"," }"," }"," }",""," // Find what height we need to reorganize to."," CBlockIndex *tip;"," int nHeight = 1;"," {"," LOCK(cs_main);"," while (nHeight \u003c= m_chain.Height()) {"," // Although SCRIPT_VERIFY_WITNESS is now generally enforced on all"," // blocks in ConnectBlock, we don't need to go back and"," // re-download/re-verify blocks from before segwit actually activated."," if (IsWitnessEnabled(m_chain[nHeight - 1], params.GetConsensus()) \u0026\u0026 !(m_chain[nHeight]-\u003enStatus \u0026 BLOCK_OPT_WITNESS)) {"," break;"," }"," nHeight++;"," }",""," tip = m_chain.Tip();"," }"," // nHeight is now the height of the first insufficiently-validated block, or tipheight + 1",""," CValidationState state;"," // Loop until the tip is below nHeight, or we reach a pruned block."," while (!ShutdownRequested()) {"," {"," LOCK(cs_main);"," // Make sure nothing changed from under us (this won't happen because RewindBlockIndex runs before importing/network are active)"," assert(tip == m_chain.Tip());"," if (tip == nullptr || tip-\u003enHeight \u003c nHeight) break;"," if (fPruneMode \u0026\u0026 !(tip-\u003enStatus \u0026 BLOCK_HAVE_DATA)) {"," // If pruning, don't try rewinding past the HAVE_DATA point;"," // since older blocks can't be served anyway, there's"," // no need to walk further, and trying to DisconnectTip()"," // will fail (and require a needless reindex/redownload"," // of the blockchain)."," break;"," }",""," // Disconnect block"," if (!DisconnectTip(state, params, nullptr)) {"," return error(\"RewindBlockIndex: unable to disconnect block at height %i (%s)\", tip-\u003enHeight, FormatStateMessage(state));"," }",""," // Reduce validity flag and have-data flags."," // We do this after actual disconnecting, otherwise we'll end up writing the lack of data"," // to disk before writing the chainstate, resulting in a failure to continue if interrupted."," // Note: If we encounter an insufficiently validated block that"," // is on m_chain, it must be because we are a pruning node, and"," // this block or some successor doesn't HAVE_DATA, so we were unable to"," // rewind all the way. Blocks remaining on m_chain at this point"," // must not have their validity reduced."," EraseBlockData(tip);",""," tip = tip-\u003epprev;"," }"," // Make sure the queue of validation callbacks doesn't grow unboundedly."," LimitValidationInterfaceQueue();",""," // Occasionally flush state to disk."," if (!FlushStateToDisk(params, state, FlushStateMode::PERIODIC)) {"," LogPrintf(\"RewindBlockIndex: unable to flush state to disk (%s)\\n\", FormatStateMessage(state));"," return false;"," }"," }",""," {"," LOCK(cs_main);"," if (m_chain.Tip() != nullptr) {"," // We can't prune block index candidates based on our tip if we have"," // no tip due to m_chain being empty!"," PruneBlockIndexCandidates();",""," CheckBlockIndex(params.GetConsensus());"," }"," }",""," return true;","}","","bool RewindBlockIndex(const CChainParams\u0026 params) {"," if (!::ChainstateActive().RewindBlockIndex(params)) {"," return false;"," }",""," LOCK(cs_main);"," if (::ChainActive().Tip() != nullptr) {"," // FlushStateToDisk can possibly read ::ChainActive(). Be conservative"," // and skip it here, we're about to -reindex-chainstate anyway, so"," // it'll get called a bunch real soon."," CValidationState state;"," if (!::ChainstateActive().FlushStateToDisk(params, state, FlushStateMode::ALWAYS)) {"," LogPrintf(\"RewindBlockIndex: unable to flush state to disk (%s)\\n\", FormatStateMessage(state));"," return false;"," }"," }",""," return true;","}","","void CChainState::UnloadBlockIndex() {"," nBlockSequenceId = 1;"," m_failed_blocks.clear();"," setBlockIndexCandidates.clear();","}","","// May NOT be used after any connections are up as much","// of the peer-processing logic assumes a consistent","// block index state","void UnloadBlockIndex()","{"," LOCK(cs_main);"," ::ChainActive().SetTip(nullptr);"," pindexBestInvalid = nullptr;"," pindexBestHeader = nullptr;"," mempool.clear();"," mapBlocksUnlinked.clear();"," vinfoBlockFile.clear();"," nLastBlockFile = 0;"," setDirtyBlockIndex.clear();"," setDirtyFileInfo.clear();"," versionbitscache.Clear();"," for (int b = 0; b \u003c VERSIONBITS_NUM_BITS; b++) {"," warningcache[b].clear();"," }",""," for (const BlockMap::value_type\u0026 entry : mapBlockIndex) {"," delete entry.second;"," }"," mapBlockIndex.clear();"," fHavePruned = false;",""," ::ChainstateActive().UnloadBlockIndex();","}","","bool LoadBlockIndex(const CChainParams\u0026 chainparams)","{"," // Load block index from databases"," bool needs_init = fReindex;"," if (!fReindex) {"," bool ret = LoadBlockIndexDB(chainparams);"," if (!ret) return false;"," needs_init = mapBlockIndex.empty();"," }",""," if (needs_init) {"," // Everything here is for *new* reindex/DBs. Thus, though"," // LoadBlockIndexDB may have set fReindex if we shut down"," // mid-reindex previously, we don't check fReindex and"," // instead only check it prior to LoadBlockIndexDB to set"," // needs_init.",""," LogPrintf(\"Initializing databases...\\n\");"," }"," return true;","}","","bool CChainState::LoadGenesisBlock(const CChainParams\u0026 chainparams)","{"," LOCK(cs_main);",""," // Check whether we're already initialized by checking for genesis in"," // mapBlockIndex. Note that we can't use m_chain here, since it is"," // set based on the coins db, not the block index db, which is the only"," // thing loaded at this point."," if (mapBlockIndex.count(chainparams.GenesisBlock().GetHash()))"," return true;",""," try {"," const CBlock\u0026 block = chainparams.GenesisBlock();"," FlatFilePos blockPos = SaveBlockToDisk(block, 0, chainparams, nullptr);"," if (blockPos.IsNull())"," return error(\"%s: writing genesis block to disk failed\", __func__);"," CBlockIndex *pindex = AddToBlockIndex(block);"," ReceivedBlockTransactions(block, pindex, blockPos, chainparams.GetConsensus());"," } catch (const std::runtime_error\u0026 e) {"," return error(\"%s: failed to write genesis block: %s\", __func__, e.what());"," }",""," return true;","}","","bool LoadGenesisBlock(const CChainParams\u0026 chainparams)","{"," return ::ChainstateActive().LoadGenesisBlock(chainparams);","}","","bool LoadExternalBlockFile(const CChainParams\u0026 chainparams, FILE* fileIn, FlatFilePos *dbp)","{"," // Map of disk positions for blocks with unknown parent (only used for reindex)"," static std::multimap\u003cuint256, FlatFilePos\u003e mapBlocksUnknownParent;"," int64_t nStart = GetTimeMillis();",""," int nLoaded = 0;"," try {"," // This takes over fileIn and calls fclose() on it in the CBufferedFile destructor"," CBufferedFile blkdat(fileIn, 2*MAX_BLOCK_SERIALIZED_SIZE, MAX_BLOCK_SERIALIZED_SIZE+8, SER_DISK, CLIENT_VERSION);"," uint64_t nRewind = blkdat.GetPos();"," while (!blkdat.eof()) {"," boost::this_thread::interruption_point();",""," blkdat.SetPos(nRewind);"," nRewind++; // start one byte further next time, in case of failure"," blkdat.SetLimit(); // remove former limit"," unsigned int nSize = 0;"," try {"," // locate a header"," unsigned char buf[CMessageHeader::MESSAGE_START_SIZE];"," blkdat.FindByte(chainparams.MessageStart()[0]);"," nRewind = blkdat.GetPos()+1;"," blkdat \u003e\u003e buf;"," if (memcmp(buf, chainparams.MessageStart(), CMessageHeader::MESSAGE_START_SIZE))"," continue;"," // read size"," blkdat \u003e\u003e nSize;"," if (nSize \u003c 80 || nSize \u003e MAX_BLOCK_SERIALIZED_SIZE)"," continue;"," } catch (const std::exception\u0026) {"," // no valid block header found; don't complain"," break;"," }"," try {"," // read block"," uint64_t nBlockPos = blkdat.GetPos();"," if (dbp)"," dbp-\u003enPos = nBlockPos;"," blkdat.SetLimit(nBlockPos + nSize);"," blkdat.SetPos(nBlockPos);"," std::shared_ptr\u003cCBlock\u003e pblock = std::make_shared\u003cCBlock\u003e();"," CBlock\u0026 block = *pblock;"," blkdat \u003e\u003e block;"," nRewind = blkdat.GetPos();",""," uint256 hash = block.GetHash();"," {"," LOCK(cs_main);"," // detect out of order blocks, and store them for later"," if (hash != chainparams.GetConsensus().hashGenesisBlock \u0026\u0026 !LookupBlockIndex(block.hashPrevBlock)) {"," LogPrint(BCLog::REINDEX, \"%s: Out of order block %s, parent %s not known\\n\", __func__, hash.ToString(),"," block.hashPrevBlock.ToString());"," if (dbp)"," mapBlocksUnknownParent.insert(std::make_pair(block.hashPrevBlock, *dbp));"," continue;"," }",""," // process in case the block isn't known yet"," CBlockIndex* pindex = LookupBlockIndex(hash);"," if (!pindex || (pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA) == 0) {"," CValidationState state;"," if (::ChainstateActive().AcceptBlock(pblock, state, chainparams, nullptr, true, dbp, nullptr)) {"," nLoaded++;"," }"," if (state.IsError()) {"," break;"," }"," } else if (hash != chainparams.GetConsensus().hashGenesisBlock \u0026\u0026 pindex-\u003enHeight % 1000 == 0) {"," LogPrint(BCLog::REINDEX, \"Block Import: already had block %s at height %d\\n\", hash.ToString(), pindex-\u003enHeight);"," }"," }",""," // Activate the genesis block so normal node progress can continue"," if (hash == chainparams.GetConsensus().hashGenesisBlock) {"," CValidationState state;"," if (!ActivateBestChain(state, chainparams)) {"," break;"," }"," }",""," NotifyHeaderTip();",""," // Recursively process earlier encountered successors of this block"," std::deque\u003cuint256\u003e queue;"," queue.push_back(hash);"," while (!queue.empty()) {"," uint256 head = queue.front();"," queue.pop_front();"," std::pair\u003cstd::multimap\u003cuint256, FlatFilePos\u003e::iterator, std::multimap\u003cuint256, FlatFilePos\u003e::iterator\u003e range = mapBlocksUnknownParent.equal_range(head);"," while (range.first != range.second) {"," std::multimap\u003cuint256, FlatFilePos\u003e::iterator it = range.first;"," std::shared_ptr\u003cCBlock\u003e pblockrecursive = std::make_shared\u003cCBlock\u003e();"," if (ReadBlockFromDisk(*pblockrecursive, it-\u003esecond, chainparams.GetConsensus()))"," {"," LogPrint(BCLog::REINDEX, \"%s: Processing out of order child %s of %s\\n\", __func__, pblockrecursive-\u003eGetHash().ToString(),"," head.ToString());"," LOCK(cs_main);"," CValidationState dummy;"," if (::ChainstateActive().AcceptBlock(pblockrecursive, dummy, chainparams, nullptr, true, \u0026it-\u003esecond, nullptr))"," {"," nLoaded++;"," queue.push_back(pblockrecursive-\u003eGetHash());"," }"," }"," range.first++;"," mapBlocksUnknownParent.erase(it);"," NotifyHeaderTip();"," }"," }"," } catch (const std::exception\u0026 e) {"," LogPrintf(\"%s: Deserialize or I/O error - %s\\n\", __func__, e.what());"," }"," }"," } catch (const std::runtime_error\u0026 e) {"," AbortNode(std::string(\"System error: \") + e.what());"," }"," if (nLoaded \u003e 0)"," LogPrintf(\"Loaded %i blocks from external file in %dms\\n\", nLoaded, GetTimeMillis() - nStart);"," return nLoaded \u003e 0;","}","","void CChainState::CheckBlockIndex(const Consensus::Params\u0026 consensusParams)","{"," if (!fCheckBlockIndex) {"," return;"," }",""," LOCK(cs_main);",""," // During a reindex, we read the genesis block and call CheckBlockIndex before ActivateBestChain,"," // so we have the genesis block in mapBlockIndex but no active chain. (A few of the tests when"," // iterating the block tree require that m_chain has been initialized.)"," if (m_chain.Height() \u003c 0) {"," assert(mapBlockIndex.size() \u003c= 1);"," return;"," }",""," // Build forward-pointing map of the entire block tree."," std::multimap\u003cCBlockIndex*,CBlockIndex*\u003e forward;"," for (const std::pair\u003cconst uint256, CBlockIndex*\u003e\u0026 entry : mapBlockIndex) {"," forward.insert(std::make_pair(entry.second-\u003epprev, entry.second));"," }",""," assert(forward.size() == mapBlockIndex.size());",""," std::pair\u003cstd::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator,std::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator\u003e rangeGenesis = forward.equal_range(nullptr);"," CBlockIndex *pindex = rangeGenesis.first-\u003esecond;"," rangeGenesis.first++;"," assert(rangeGenesis.first == rangeGenesis.second); // There is only one index entry with parent nullptr.",""," // Iterate over the entire block tree, using depth-first search."," // Along the way, remember whether there are blocks on the path from genesis"," // block being explored which are the first to have certain properties."," size_t nNodes = 0;"," int nHeight = 0;"," CBlockIndex* pindexFirstInvalid = nullptr; // Oldest ancestor of pindex which is invalid."," CBlockIndex* pindexFirstMissing = nullptr; // Oldest ancestor of pindex which does not have BLOCK_HAVE_DATA."," CBlockIndex* pindexFirstNeverProcessed = nullptr; // Oldest ancestor of pindex for which nTx == 0."," CBlockIndex* pindexFirstNotTreeValid = nullptr; // Oldest ancestor of pindex which does not have BLOCK_VALID_TREE (regardless of being valid or not)."," CBlockIndex* pindexFirstNotTransactionsValid = nullptr; // Oldest ancestor of pindex which does not have BLOCK_VALID_TRANSACTIONS (regardless of being valid or not)."," CBlockIndex* pindexFirstNotChainValid = nullptr; // Oldest ancestor of pindex which does not have BLOCK_VALID_CHAIN (regardless of being valid or not)."," CBlockIndex* pindexFirstNotScriptsValid = nullptr; // Oldest ancestor of pindex which does not have BLOCK_VALID_SCRIPTS (regardless of being valid or not)."," while (pindex != nullptr) {"," nNodes++;"," if (pindexFirstInvalid == nullptr \u0026\u0026 pindex-\u003enStatus \u0026 BLOCK_FAILED_VALID) pindexFirstInvalid = pindex;"," if (pindexFirstMissing == nullptr \u0026\u0026 !(pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA)) pindexFirstMissing = pindex;"," if (pindexFirstNeverProcessed == nullptr \u0026\u0026 pindex-\u003enTx == 0) pindexFirstNeverProcessed = pindex;"," if (pindex-\u003epprev != nullptr \u0026\u0026 pindexFirstNotTreeValid == nullptr \u0026\u0026 (pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003c BLOCK_VALID_TREE) pindexFirstNotTreeValid = pindex;"," if (pindex-\u003epprev != nullptr \u0026\u0026 pindexFirstNotTransactionsValid == nullptr \u0026\u0026 (pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003c BLOCK_VALID_TRANSACTIONS) pindexFirstNotTransactionsValid = pindex;"," if (pindex-\u003epprev != nullptr \u0026\u0026 pindexFirstNotChainValid == nullptr \u0026\u0026 (pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003c BLOCK_VALID_CHAIN) pindexFirstNotChainValid = pindex;"," if (pindex-\u003epprev != nullptr \u0026\u0026 pindexFirstNotScriptsValid == nullptr \u0026\u0026 (pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003c BLOCK_VALID_SCRIPTS) pindexFirstNotScriptsValid = pindex;",""," // Begin: actual consistency checks."," if (pindex-\u003epprev == nullptr) {"," // Genesis block checks."," assert(pindex-\u003eGetBlockHash() == consensusParams.hashGenesisBlock); // Genesis block's hash must match."," assert(pindex == m_chain.Genesis()); // The current active chain's genesis block must be this block."," }"," if (!pindex-\u003eHaveTxsDownloaded()) assert(pindex-\u003enSequenceId \u003c= 0); // nSequenceId can't be set positive for blocks that aren't linked (negative is used for preciousblock)"," // VALID_TRANSACTIONS is equivalent to nTx \u003e 0 for all nodes (whether or not pruning has occurred)."," // HAVE_DATA is only equivalent to nTx \u003e 0 (or VALID_TRANSACTIONS) if no pruning has occurred."," if (!fHavePruned) {"," // If we've never pruned, then HAVE_DATA should be equivalent to nTx \u003e 0"," assert(!(pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA) == (pindex-\u003enTx == 0));"," assert(pindexFirstMissing == pindexFirstNeverProcessed);"," } else {"," // If we have pruned, then we can only say that HAVE_DATA implies nTx \u003e 0"," if (pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA) assert(pindex-\u003enTx \u003e 0);"," }"," if (pindex-\u003enStatus \u0026 BLOCK_HAVE_UNDO) assert(pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA);"," assert(((pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003e= BLOCK_VALID_TRANSACTIONS) == (pindex-\u003enTx \u003e 0)); // This is pruning-independent."," // All parents having had data (at some point) is equivalent to all parents being VALID_TRANSACTIONS, which is equivalent to HaveTxsDownloaded()."," assert((pindexFirstNeverProcessed == nullptr) == pindex-\u003eHaveTxsDownloaded());"," assert((pindexFirstNotTransactionsValid == nullptr) == pindex-\u003eHaveTxsDownloaded());"," assert(pindex-\u003enHeight == nHeight); // nHeight must be consistent."," assert(pindex-\u003epprev == nullptr || pindex-\u003enChainWork \u003e= pindex-\u003epprev-\u003enChainWork); // For every block except the genesis block, the chainwork must be larger than the parent's."," assert(nHeight \u003c 2 || (pindex-\u003epskip \u0026\u0026 (pindex-\u003epskip-\u003enHeight \u003c nHeight))); // The pskip pointer must point back for all but the first 2 blocks."," assert(pindexFirstNotTreeValid == nullptr); // All mapBlockIndex entries must at least be TREE valid"," if ((pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003e= BLOCK_VALID_TREE) assert(pindexFirstNotTreeValid == nullptr); // TREE valid implies all parents are TREE valid"," if ((pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003e= BLOCK_VALID_CHAIN) assert(pindexFirstNotChainValid == nullptr); // CHAIN valid implies all parents are CHAIN valid"," if ((pindex-\u003enStatus \u0026 BLOCK_VALID_MASK) \u003e= BLOCK_VALID_SCRIPTS) assert(pindexFirstNotScriptsValid == nullptr); // SCRIPTS valid implies all parents are SCRIPTS valid"," if (pindexFirstInvalid == nullptr) {"," // Checks for not-invalid blocks."," assert((pindex-\u003enStatus \u0026 BLOCK_FAILED_MASK) == 0); // The failed mask cannot be set for blocks without invalid parents."," }"," if (!CBlockIndexWorkComparator()(pindex, m_chain.Tip()) \u0026\u0026 pindexFirstNeverProcessed == nullptr) {"," if (pindexFirstInvalid == nullptr) {"," // If this block sorts at least as good as the current tip and"," // is valid and we have all data for its parents, it must be in"," // setBlockIndexCandidates. m_chain.Tip() must also be there"," // even if some data has been pruned."," if (pindexFirstMissing == nullptr || pindex == m_chain.Tip()) {"," assert(setBlockIndexCandidates.count(pindex));"," }"," // If some parent is missing, then it could be that this block was in"," // setBlockIndexCandidates but had to be removed because of the missing data."," // In this case it must be in mapBlocksUnlinked -- see test below."," }"," } else { // If this block sorts worse than the current tip or some ancestor's block has never been seen, it cannot be in setBlockIndexCandidates."," assert(setBlockIndexCandidates.count(pindex) == 0);"," }"," // Check whether this block is in mapBlocksUnlinked."," std::pair\u003cstd::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator,std::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator\u003e rangeUnlinked = mapBlocksUnlinked.equal_range(pindex-\u003epprev);"," bool foundInUnlinked = false;"," while (rangeUnlinked.first != rangeUnlinked.second) {"," assert(rangeUnlinked.first-\u003efirst == pindex-\u003epprev);"," if (rangeUnlinked.first-\u003esecond == pindex) {"," foundInUnlinked = true;"," break;"," }"," rangeUnlinked.first++;"," }"," if (pindex-\u003epprev \u0026\u0026 (pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA) \u0026\u0026 pindexFirstNeverProcessed != nullptr \u0026\u0026 pindexFirstInvalid == nullptr) {"," // If this block has block data available, some parent was never received, and has no invalid parents, it must be in mapBlocksUnlinked."," assert(foundInUnlinked);"," }"," if (!(pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA)) assert(!foundInUnlinked); // Can't be in mapBlocksUnlinked if we don't HAVE_DATA"," if (pindexFirstMissing == nullptr) assert(!foundInUnlinked); // We aren't missing data for any parent -- cannot be in mapBlocksUnlinked."," if (pindex-\u003epprev \u0026\u0026 (pindex-\u003enStatus \u0026 BLOCK_HAVE_DATA) \u0026\u0026 pindexFirstNeverProcessed == nullptr \u0026\u0026 pindexFirstMissing != nullptr) {"," // We HAVE_DATA for this block, have received data for all parents at some point, but we're currently missing data for some parent."," assert(fHavePruned); // We must have pruned."," // This block may have entered mapBlocksUnlinked if:"," // - it has a descendant that at some point had more work than the"," // tip, and"," // - we tried switching to that descendant but were missing"," // data for some intermediate block between m_chain and the"," // tip."," // So if this block is itself better than m_chain.Tip() and it wasn't in"," // setBlockIndexCandidates, then it must be in mapBlocksUnlinked."," if (!CBlockIndexWorkComparator()(pindex, m_chain.Tip()) \u0026\u0026 setBlockIndexCandidates.count(pindex) == 0) {"," if (pindexFirstInvalid == nullptr) {"," assert(foundInUnlinked);"," }"," }"," }"," // assert(pindex-\u003eGetBlockHash() == pindex-\u003eGetBlockHeader().GetHash()); // Perhaps too slow"," // End: actual consistency checks.",""," // Try descending into the first subnode."," std::pair\u003cstd::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator,std::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator\u003e range = forward.equal_range(pindex);"," if (range.first != range.second) {"," // A subnode was found."," pindex = range.first-\u003esecond;"," nHeight++;"," continue;"," }"," // This is a leaf node."," // Move upwards until we reach a node of which we have not yet visited the last child."," while (pindex) {"," // We are going to either move to a parent or a sibling of pindex."," // If pindex was the first with a certain property, unset the corresponding variable."," if (pindex == pindexFirstInvalid) pindexFirstInvalid = nullptr;"," if (pindex == pindexFirstMissing) pindexFirstMissing = nullptr;"," if (pindex == pindexFirstNeverProcessed) pindexFirstNeverProcessed = nullptr;"," if (pindex == pindexFirstNotTreeValid) pindexFirstNotTreeValid = nullptr;"," if (pindex == pindexFirstNotTransactionsValid) pindexFirstNotTransactionsValid = nullptr;"," if (pindex == pindexFirstNotChainValid) pindexFirstNotChainValid = nullptr;"," if (pindex == pindexFirstNotScriptsValid) pindexFirstNotScriptsValid = nullptr;"," // Find our parent."," CBlockIndex* pindexPar = pindex-\u003epprev;"," // Find which child we just visited."," std::pair\u003cstd::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator,std::multimap\u003cCBlockIndex*,CBlockIndex*\u003e::iterator\u003e rangePar = forward.equal_range(pindexPar);"," while (rangePar.first-\u003esecond != pindex) {"," assert(rangePar.first != rangePar.second); // Our parent must have at least the node we're coming from as child."," rangePar.first++;"," }"," // Proceed to the next one."," rangePar.first++;"," if (rangePar.first != rangePar.second) {"," // Move to the sibling."," pindex = rangePar.first-\u003esecond;"," break;"," } else {"," // Move up further."," pindex = pindexPar;"," nHeight--;"," continue;"," }"," }"," }",""," // Check that we actually traversed the entire map."," assert(nNodes == forward.size());","}","","std::string CBlockFileInfo::ToString() const","{"," return strprintf(\"CBlockFileInfo(blocks=%u, size=%u, heights=%u...%u, time=%s...%s)\", nBlocks, nSize, nHeightFirst, nHeightLast, FormatISO8601Date(nTimeFirst), FormatISO8601Date(nTimeLast));","}","","CBlockFileInfo* GetBlockFileInfo(size_t n)","{"," LOCK(cs_LastBlockFile);",""," return \u0026vinfoBlockFile.at(n);","}","","ThresholdState VersionBitsTipState(const Consensus::Params\u0026 params, Consensus::DeploymentPos pos)","{"," LOCK(cs_main);"," return VersionBitsState(::ChainActive().Tip(), params, pos, versionbitscache);","}","","BIP9Stats VersionBitsTipStatistics(const Consensus::Params\u0026 params, Consensus::DeploymentPos pos)","{"," LOCK(cs_main);"," return VersionBitsStatistics(::ChainActive().Tip(), params, pos);","}","","int VersionBitsTipStateSinceHeight(const Consensus::Params\u0026 params, Consensus::DeploymentPos pos)","{"," LOCK(cs_main);"," return VersionBitsStateSinceHeight(::ChainActive().Tip(), params, pos, versionbitscache);","}","","static const uint64_t MEMPOOL_DUMP_VERSION = 1;","","bool LoadMempool(CTxMemPool\u0026 pool)","{"," const CChainParams\u0026 chainparams = Params();"," int64_t nExpiryTimeout = gArgs.GetArg(\"-mempoolexpiry\", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60;"," FILE* filestr = fsbridge::fopen(GetDataDir() / \"mempool.dat\", \"rb\");"," CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);"," if (file.IsNull()) {"," LogPrintf(\"Failed to open mempool file from disk. Continuing anyway.\\n\");"," return false;"," }",""," int64_t count = 0;"," int64_t expired = 0;"," int64_t failed = 0;"," int64_t already_there = 0;"," int64_t nNow = GetTime();",""," try {"," uint64_t version;"," file \u003e\u003e version;"," if (version != MEMPOOL_DUMP_VERSION) {"," return false;"," }"," uint64_t num;"," file \u003e\u003e num;"," while (num--) {"," CTransactionRef tx;"," int64_t nTime;"," int64_t nFeeDelta;"," file \u003e\u003e tx;"," file \u003e\u003e nTime;"," file \u003e\u003e nFeeDelta;",""," CAmount amountdelta = nFeeDelta;"," if (amountdelta) {"," pool.PrioritiseTransaction(tx-\u003eGetHash(), amountdelta);"," }"," CValidationState state;"," if (nTime + nExpiryTimeout \u003e nNow) {"," LOCK(cs_main);"," AcceptToMemoryPoolWithTime(chainparams, pool, state, tx, nullptr /* pfMissingInputs */, nTime,"," nullptr /* plTxnReplaced */, false /* bypass_limits */, 0 /* nAbsurdFee */,"," false /* test_accept */);"," if (state.IsValid()) {"," ++count;"," } else {"," // mempool may contain the transaction already, e.g. from"," // wallet(s) having loaded it while we were processing"," // mempool transactions; consider these as valid, instead of"," // failed, but mark them as 'already there'"," if (pool.exists(tx-\u003eGetHash())) {"," ++already_there;"," } else {"," ++failed;"," }"," }"," } else {"," ++expired;"," }"," if (ShutdownRequested())"," return false;"," }"," std::map\u003cuint256, CAmount\u003e mapDeltas;"," file \u003e\u003e mapDeltas;",""," for (const auto\u0026 i : mapDeltas) {"," pool.PrioritiseTransaction(i.first, i.second);"," }"," } catch (const std::exception\u0026 e) {"," LogPrintf(\"Failed to deserialize mempool data on disk: %s. Continuing anyway.\\n\", e.what());"," return false;"," }",""," LogPrintf(\"Imported mempool transactions from disk: %i succeeded, %i failed, %i expired, %i already there\\n\", count, failed, expired, already_there);"," return true;","}","","bool DumpMempool(const CTxMemPool\u0026 pool)","{"," int64_t start = GetTimeMicros();",""," std::map\u003cuint256, CAmount\u003e mapDeltas;"," std::vector\u003cTxMempoolInfo\u003e vinfo;",""," static Mutex dump_mutex;"," LOCK(dump_mutex);",""," {"," LOCK(pool.cs);"," for (const auto \u0026i : pool.mapDeltas) {"," mapDeltas[i.first] = i.second;"," }"," vinfo = pool.infoAll();"," }",""," int64_t mid = GetTimeMicros();",""," try {"," FILE* filestr = fsbridge::fopen(GetDataDir() / \"mempool.dat.new\", \"wb\");"," if (!filestr) {"," return false;"," }",""," CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);",""," uint64_t version = MEMPOOL_DUMP_VERSION;"," file \u003c\u003c version;",""," file \u003c\u003c (uint64_t)vinfo.size();"," for (const auto\u0026 i : vinfo) {"," file \u003c\u003c *(i.tx);"," file \u003c\u003c (int64_t)i.nTime;"," file \u003c\u003c (int64_t)i.nFeeDelta;"," mapDeltas.erase(i.tx-\u003eGetHash());"," }",""," file \u003c\u003c mapDeltas;"," if (!FileCommit(file.Get()))"," throw std::runtime_error(\"FileCommit failed\");"," file.fclose();"," RenameOver(GetDataDir() / \"mempool.dat.new\", GetDataDir() / \"mempool.dat\");"," int64_t last = GetTimeMicros();"," LogPrintf(\"Dumped mempool: %gs to copy, %gs to dump\\n\", (mid-start)*MICRO, (last-mid)*MICRO);"," } catch (const std::exception\u0026 e) {"," LogPrintf(\"Failed to dump mempool: %s. Continuing anyway.\\n\", e.what());"," return false;"," }"," return true;","}","","//! Guess how far we are in the verification process at the given block index","//! require cs_main if pindex has not been validated yet (because nChainTx might be unset)","double GuessVerificationProgress(const ChainTxData\u0026 data, const CBlockIndex *pindex) {"," if (pindex == nullptr)"," return 0.0;",""," int64_t nNow = time(nullptr);",""," double fTxTotal;",""," if (pindex-\u003enChainTx \u003c= data.nTxCount) {"," fTxTotal = data.nTxCount + (nNow - data.nTime) * data.dTxRate;"," } else {"," fTxTotal = pindex-\u003enChainTx + (nNow - pindex-\u003eGetBlockTime()) * data.dTxRate;"," }",""," return pindex-\u003enChainTx / fTxTotal;","}","","class CMainCleanup","{","public:"," CMainCleanup() {}"," ~CMainCleanup() {"," // block headers"," BlockMap::iterator it1 = mapBlockIndex.begin();"," for (; it1 != mapBlockIndex.end(); it1++)"," delete (*it1).second;"," mapBlockIndex.clear();"," }","};","static CMainCleanup instance_of_cmaincleanup;"],"stylingDirectives":[[{"s":0,"e":43,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":54,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":67,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":70,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":23,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":22,"e":23,"c":"pl-pds"}],[],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":26,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":25,"e":26,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":18,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":17,"e":18,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":24,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":23,"e":24,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":23,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":22,"e":23,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":32,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":31,"e":32,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":29,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":28,"e":29,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":31,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":30,"e":31,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":32,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":31,"e":32,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":33,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":32,"e":33,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":24,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":23,"e":24,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":20,"e":21,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":17,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":16,"e":17,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":26,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":25,"e":26,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":24,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":23,"e":24,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":26,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":25,"e":26,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":28,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":27,"e":28,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":16,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":15,"e":16,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":29,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":28,"e":29,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":35,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":34,"e":35,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":19,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":18,"e":19,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":29,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":28,"e":29,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":26,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":25,"e":26,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":28,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":27,"e":28,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":28,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":27,"e":28,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":20,"e":21,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":20,"e":21,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":23,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":22,"e":23,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":17,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":16,"e":17,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":22,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":21,"e":22,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":25,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":24,"e":25,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":20,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":19,"e":20,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":17,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":16,"e":17,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":26,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":25,"e":26,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":20,"e":21,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":30,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":29,"e":30,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":24,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":23,"e":24,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":28,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":27,"e":28,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":32,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":31,"e":32,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":20,"e":21,"c":"pl-pds"}],[],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":17,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":16,"e":17,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":18,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":17,"e":18,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":17,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":16,"e":17,"c":"pl-pds"}],[],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":45,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":44,"e":45,"c":"pl-pds"}],[{"s":1,"e":8,"c":"pl-k"},{"s":9,"e":27,"c":"pl-s"},{"s":9,"e":10,"c":"pl-pds"},{"s":26,"e":27,"c":"pl-pds"}],[],[{"s":1,"e":3,"c":"pl-k"}],[{"s":2,"e":7,"c":"pl-k"}],[{"s":1,"e":6,"c":"pl-k"}],[],[{"s":1,"e":7,"c":"pl-k"},{"s":8,"e":13,"c":"pl-en"},{"s":14,"e":22,"c":"pl-c1"}],[{"s":1,"e":7,"c":"pl-k"},{"s":8,"e":13,"c":"pl-en"},{"s":14,"e":19,"c":"pl-c1"}],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":40,"c":"pl-en"},{"s":43,"e":48,"c":"pl-k"},{"s":66,"e":71,"c":"pl-k"},{"s":89,"e":94,"c":"pl-k"}],[{"s":4,"e":41,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":22,"c":"pl-smi"},{"s":29,"e":39,"c":"pl-smi"},{"s":41,"e":47,"c":"pl-k"},{"s":48,"e":53,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":22,"c":"pl-smi"},{"s":29,"e":39,"c":"pl-smi"},{"s":41,"e":47,"c":"pl-k"},{"s":48,"e":52,"c":"pl-c1"}],[],[{"s":4,"e":46,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":23,"c":"pl-smi"},{"s":30,"e":41,"c":"pl-smi"},{"s":43,"e":49,"c":"pl-k"},{"s":50,"e":55,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":23,"c":"pl-smi"},{"s":30,"e":41,"c":"pl-smi"},{"s":43,"e":49,"c":"pl-k"},{"s":50,"e":54,"c":"pl-c1"}],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":49,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":17,"e":23,"c":"pl-k"},{"s":24,"e":29,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":17,"e":23,"c":"pl-k"},{"s":24,"e":28,"c":"pl-c1"}],[],[{"s":4,"e":24,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":16,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"}],[],[{"s":13,"e":29,"c":"pl-en"},{"s":34,"e":40,"c":"pl-k"}],[],[{"s":8,"e":19,"c":"pl-en"},{"s":24,"e":30,"c":"pl-k"},{"s":44,"e":51,"c":"pl-smi"}],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":74,"c":"pl-c"}],[{"s":0,"e":30,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":62,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":76,"c":"pl-c"}],[{"s":0,"e":31,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[],[],[],[{"s":32,"e":39,"c":"pl-c1"}],[],[],[],[{"s":0,"e":3,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":17,"e":27,"c":"pl-en"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":17,"e":25,"c":"pl-en"},{"s":26,"e":31,"c":"pl-c1"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-smi"},{"s":19,"e":24,"c":"pl-c1"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":15,"c":"pl-smi"},{"s":18,"e":23,"c":"pl-c1"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-smi"},{"s":24,"e":28,"c":"pl-c1"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-smi"},{"s":24,"e":29,"c":"pl-c1"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":24,"c":"pl-smi"}],[{"s":0,"e":6,"c":"pl-c1"},{"s":25,"e":29,"c":"pl-c1"},{"s":32,"e":35,"c":"pl-c1"}],[{"s":0,"e":8,"c":"pl-c1"},{"s":24,"e":25,"c":"pl-c1"}],[{"s":0,"e":7,"c":"pl-c1"}],[],[],[],[],[],[],[],[{"s":11,"e":18,"c":"pl-en"}],[],[{"s":0,"e":58,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":56,"e":58,"c":"pl-c"}],[],[],[{"s":0,"e":17,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":9,"c":"pl-k"}],[],[],[{"s":4,"e":102,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":0,"e":61,"c":"pl-c"}],[{"s":0,"e":7,"c":"pl-c"},{"s":5,"e":7,"c":"pl-c"}],[],[],[],[],[{"s":4,"e":7,"c":"pl-k"},{"s":25,"e":26,"c":"pl-c1"}],[{"s":4,"e":67,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":0,"e":64,"c":"pl-c"}],[{"s":0,"e":66,"c":"pl-c"}],[{"s":0,"e":7,"c":"pl-c"},{"s":5,"e":7,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":25,"c":"pl-smi"},{"s":28,"e":33,"c":"pl-c1"}],[],[{"s":4,"e":37,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"},{"s":35,"e":37,"c":"pl-c"}],[],[],[{"s":4,"e":36,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"},{"s":34,"e":36,"c":"pl-c"}],[{"s":13,"e":16,"c":"pl-k"}],[{"s":2,"e":19,"c":"pl-c"},{"s":2,"e":4,"c":"pl-c"}],[],[{"s":13,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"},{"s":56,"e":61,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":52,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":39,"e":44,"c":"pl-smi"}],[{"s":30,"e":46,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"},{"s":22,"e":30,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"},{"s":24,"e":35,"c":"pl-c1"},{"s":42,"e":48,"c":"pl-c1"},{"s":61,"e":64,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":32,"c":"pl-c1"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":17,"e":24,"c":"pl-c1"}],[],[],[],[],[],[],[{"s":0,"e":35,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":34,"c":"pl-en"},{"s":44,"e":47,"c":"pl-k"},{"s":67,"e":70,"c":"pl-k"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":28,"c":"pl-en"},{"s":38,"e":41,"c":"pl-k"},{"s":61,"e":69,"c":"pl-c1"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-en"},{"s":17,"e":22,"c":"pl-k"},{"s":66,"e":71,"c":"pl-k"},{"s":97,"e":101,"c":"pl-k"},{"s":102,"e":115,"c":"pl-smi"},{"s":117,"e":125,"c":"pl-k"},{"s":126,"e":129,"c":"pl-k"},{"s":137,"e":141,"c":"pl-k"},{"s":157,"e":161,"c":"pl-k"},{"s":258,"e":265,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":13,"e":25,"c":"pl-en"},{"s":26,"e":31,"c":"pl-k"},{"s":50,"e":54,"c":"pl-k"},{"s":55,"e":64,"c":"pl-smi"},{"s":67,"e":72,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":19,"e":31,"c":"pl-en"}],[{"s":0,"e":6,"c":"pl-k"},{"s":19,"e":30,"c":"pl-en"}],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":17,"c":"pl-en"},{"s":18,"e":23,"c":"pl-k"},{"s":42,"e":45,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":66,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":66,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":65,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":65,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":63,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":38,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":12,"e":20,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[],[{"s":4,"e":65,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":58,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":61,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":62,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":67,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":63,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":10,"e":13,"c":"pl-k"},{"s":31,"e":42,"c":"pl-c1"},{"s":45,"e":51,"c":"pl-c1"},{"s":56,"e":57,"c":"pl-c1"}],[],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":55,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":10,"e":17,"c":"pl-c1"}],[{"s":33,"e":44,"c":"pl-c1"},{"s":47,"e":50,"c":"pl-c1"},{"s":54,"e":71,"c":"pl-c1"}],[{"s":31,"e":46,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":20,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":26,"c":"pl-en"},{"s":27,"e":32,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":84,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":25,"c":"pl-smi"}],[{"s":8,"e":93,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":72,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":15,"e":26,"c":"pl-c1"},{"s":29,"e":37,"c":"pl-c1"},{"s":42,"e":55,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[],[],[{"s":4,"e":29,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":23,"c":"pl-en"},{"s":24,"e":29,"c":"pl-k"},{"s":48,"e":53,"c":"pl-k"},{"s":72,"e":75,"c":"pl-k"},{"s":99,"e":103,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":18,"c":"pl-c1"},{"s":24,"e":26,"c":"pl-smi"}],[],[{"s":25,"e":36,"c":"pl-c1"},{"s":39,"e":42,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":18,"e":25,"c":"pl-c1"}],[],[{"s":16,"e":21,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":10,"e":15,"c":"pl-smi"}],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":54,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":33,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":66,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":10,"e":17,"c":"pl-smi"},{"s":25,"e":32,"c":"pl-smi"},{"s":35,"e":36,"c":"pl-c1"}],[],[{"s":14,"e":17,"c":"pl-k"},{"s":19,"e":26,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-c1"}],[{"s":17,"e":22,"c":"pl-smi"},{"s":29,"e":35,"c":"pl-smi"}],[{"s":17,"e":23,"c":"pl-smi"},{"s":30,"e":34,"c":"pl-smi"}],[],[{"s":4,"e":8,"c":"pl-k"}],[{"s":8,"e":68,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":26,"e":37,"c":"pl-smi"},{"s":48,"e":51,"c":"pl-c1"}],[{"s":20,"e":23,"c":"pl-k"}],[{"s":20,"e":26,"c":"pl-c1"},{"s":30,"e":33,"c":"pl-smi"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":19,"c":"pl-c1"},{"s":32,"e":33,"c":"pl-c1"},{"s":50,"e":53,"c":"pl-smi"},{"s":54,"e":58,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"},{"s":35,"e":38,"c":"pl-smi"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":42,"e":49,"c":"pl-smi"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":48,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":47,"e":48,"c":"pl-pds"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-smi"}],[{"s":16,"e":75,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":46,"e":53,"c":"pl-smi"},{"s":56,"e":57,"c":"pl-c1"}],[{"s":14,"e":18,"c":"pl-k"}],[{"s":46,"e":53,"c":"pl-smi"}],[],[],[{"s":19,"e":41,"c":"pl-c1"},{"s":67,"e":72,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-smi"},{"s":34,"e":39,"c":"pl-smi"}],[{"s":16,"e":20,"c":"pl-smi"},{"s":32,"e":38,"c":"pl-smi"}],[{"s":12,"e":74,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":66,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":55,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":59,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":76,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":73,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":69,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":15,"c":"pl-k"},{"s":33,"e":34,"c":"pl-c1"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":22,"c":"pl-k"},{"s":23,"e":26,"c":"pl-k"}],[{"s":16,"e":88,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":35,"e":42,"c":"pl-smi"},{"s":43,"e":44,"c":"pl-c1"}],[{"s":37,"e":45,"c":"pl-c1"}],[],[],[{"s":16,"e":29,"c":"pl-smi"},{"s":37,"e":48,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":32,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-c1"}],[],[],[{"s":0,"e":69,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":15,"c":"pl-k"},{"s":16,"e":19,"c":"pl-k"},{"s":20,"e":39,"c":"pl-en"},{"s":40,"e":45,"c":"pl-k"},{"s":67,"e":72,"c":"pl-k"}],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":28,"c":"pl-en"},{"s":47,"e":53,"c":"pl-c1"},{"s":61,"e":69,"c":"pl-k"},{"s":70,"e":74,"c":"pl-k"}],[{"s":4,"e":7,"c":"pl-k"},{"s":23,"e":29,"c":"pl-c1"},{"s":30,"e":37,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":19,"e":20,"c":"pl-c1"}],[{"s":8,"e":16,"c":"pl-c1"},{"s":33,"e":81,"c":"pl-s"},{"s":33,"e":34,"c":"pl-pds"},{"s":78,"e":80,"c":"pl-cce"},{"s":80,"e":81,"c":"pl-pds"}],[],[],[],[{"s":9,"e":19,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"}],[{"s":19,"e":26,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":37,"c":"pl-en"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":26,"c":"pl-c1"},{"s":29,"e":51,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":27,"c":"pl-c1"},{"s":31,"e":43,"c":"pl-c1"},{"s":49,"e":56,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":30,"c":"pl-c1"},{"s":53,"e":60,"c":"pl-smi"},{"s":63,"e":64,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":77,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":74,"c":"pl-c"}],[{"s":0,"e":77,"c":"pl-c"}],[{"s":0,"e":14,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":72,"c":"pl-c"}],[{"s":0,"e":65,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":77,"c":"pl-c"}],[{"s":0,"e":53,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":33,"c":"pl-en"},{"s":81,"e":85,"c":"pl-k"},{"s":86,"e":99,"c":"pl-smi"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":68,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":48,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":69,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":39,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":29,"e":37,"c":"pl-smi"},{"s":38,"e":41,"c":"pl-smi"},{"s":61,"e":67,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":32,"e":40,"c":"pl-smi"},{"s":41,"e":44,"c":"pl-smi"},{"s":64,"e":68,"c":"pl-c1"}],[{"s":8,"e":63,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":26,"c":"pl-smi"},{"s":37,"e":47,"c":"pl-c1"}],[{"s":13,"e":31,"c":"pl-c1"},{"s":58,"e":65,"c":"pl-c1"},{"s":66,"e":87,"c":"pl-c"},{"s":66,"e":68,"c":"pl-c"},{"s":85,"e":87,"c":"pl-c"}],[{"s":32,"e":39,"c":"pl-c1"},{"s":40,"e":59,"c":"pl-c"},{"s":40,"e":42,"c":"pl-c"},{"s":57,"e":59,"c":"pl-c"},{"s":61,"e":65,"c":"pl-c1"},{"s":66,"e":85,"c":"pl-c"},{"s":66,"e":68,"c":"pl-c"},{"s":83,"e":85,"c":"pl-c"},{"s":87,"e":88,"c":"pl-c1"},{"s":89,"e":105,"c":"pl-c"},{"s":89,"e":91,"c":"pl-c"},{"s":103,"e":105,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":20,"e":35,"c":"pl-c1"}],[{"s":10,"e":14,"c":"pl-k"},{"s":15,"e":17,"c":"pl-k"},{"s":27,"e":33,"c":"pl-c1"},{"s":41,"e":48,"c":"pl-c1"}],[{"s":24,"e":33,"c":"pl-c1"},{"s":41,"e":48,"c":"pl-c1"}],[],[],[],[{"s":19,"e":27,"c":"pl-smi"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":61,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":12,"e":39,"c":"pl-c1"}],[],[{"s":4,"e":59,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":12,"e":26,"c":"pl-c1"},{"s":37,"e":40,"c":"pl-c1"},{"s":46,"e":57,"c":"pl-c1"},{"s":60,"e":63,"c":"pl-c1"},{"s":67,"e":74,"c":"pl-smi"},{"s":77,"e":78,"c":"pl-c1"}],[{"s":4,"e":63,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":20,"c":"pl-c1"},{"s":30,"e":35,"c":"pl-smi"},{"s":36,"e":42,"c":"pl-c1"},{"s":43,"e":56,"c":"pl-s"},{"s":43,"e":44,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"},{"s":86,"e":93,"c":"pl-c1"},{"s":95,"e":100,"c":"pl-smi"},{"s":101,"e":107,"c":"pl-c1"},{"s":108,"e":124,"c":"pl-s"},{"s":108,"e":109,"c":"pl-pds"},{"s":123,"e":124,"c":"pl-pds"},{"s":152,"e":154,"c":"pl-c1"},{"s":157,"e":159,"c":"pl-c1"}],[],[],[{"s":0,"e":80,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":60,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":42,"c":"pl-en"},{"s":43,"e":48,"c":"pl-k"},{"s":92,"e":97,"c":"pl-k"},{"s":121,"e":126,"c":"pl-k"}],[{"s":17,"e":25,"c":"pl-k"},{"s":26,"e":29,"c":"pl-k"},{"s":37,"e":41,"c":"pl-k"}],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":55,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-c1"},{"s":14,"e":16,"c":"pl-smi"}],[],[{"s":4,"e":10,"c":"pl-c1"},{"s":15,"e":25,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":32,"e":35,"c":"pl-smi"}],[{"s":8,"e":13,"c":"pl-k"},{"s":32,"e":42,"c":"pl-c1"},{"s":48,"e":55,"c":"pl-smi"}],[],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":75,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":72,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":17,"e":24,"c":"pl-c1"},{"s":28,"e":34,"c":"pl-k"},{"s":35,"e":40,"c":"pl-c1"}],[],[{"s":8,"e":13,"c":"pl-k"},{"s":45,"e":48,"c":"pl-c1"},{"s":54,"e":61,"c":"pl-smi"},{"s":62,"e":66,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":27,"e":34,"c":"pl-c1"},{"s":45,"e":52,"c":"pl-smi"},{"s":53,"e":57,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":27,"e":31,"c":"pl-smi"},{"s":32,"e":36,"c":"pl-c1"},{"s":46,"e":53,"c":"pl-smi"},{"s":54,"e":55,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":27,"e":31,"c":"pl-smi"},{"s":37,"e":44,"c":"pl-smi"},{"s":45,"e":46,"c":"pl-smi"},{"s":56,"e":59,"c":"pl-smi"}],[{"s":10,"e":14,"c":"pl-k"}],[{"s":12,"e":17,"c":"pl-k"},{"s":50,"e":60,"c":"pl-c1"},{"s":66,"e":73,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":33,"e":40,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":32,"e":35,"c":"pl-smi"},{"s":44,"e":47,"c":"pl-smi"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":22,"c":"pl-c1"},{"s":40,"e":44,"c":"pl-c1"},{"s":68,"e":72,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":95,"c":"pl-c"}],[{"s":0,"e":94,"c":"pl-c"}],[{"s":0,"e":94,"c":"pl-c"}],[{"s":0,"e":95,"c":"pl-c"}],[{"s":0,"e":67,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":36,"c":"pl-en"},{"s":37,"e":42,"c":"pl-k"},{"s":113,"e":118,"c":"pl-k"}],[{"s":30,"e":34,"c":"pl-k"},{"s":53,"e":60,"c":"pl-c1"}],[{"s":30,"e":34,"c":"pl-k"},{"s":50,"e":55,"c":"pl-k"},{"s":119,"e":123,"c":"pl-k"}],[],[{"s":4,"e":9,"c":"pl-k"}],[{"s":4,"e":9,"c":"pl-k"},{"s":28,"e":35,"c":"pl-c1"}],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":8,"c":"pl-c1"},{"s":14,"e":16,"c":"pl-smi"},{"s":19,"e":101,"c":"pl-c"},{"s":19,"e":21,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":27,"e":32,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":22,"e":60,"c":"pl-c"},{"s":22,"e":24,"c":"pl-c"}],[],[{"s":4,"e":68,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":21,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":65,"e":70,"c":"pl-c1"},{"s":88,"e":98,"c":"pl-s"},{"s":88,"e":89,"c":"pl-pds"},{"s":97,"e":98,"c":"pl-pds"}],[],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-smi"},{"s":29,"e":41,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":71,"e":76,"c":"pl-c1"}],[],[{"s":4,"e":54,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":94,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":92,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":26,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":71,"e":76,"c":"pl-c1"},{"s":98,"e":113,"c":"pl-s"},{"s":98,"e":99,"c":"pl-pds"},{"s":112,"e":113,"c":"pl-pds"}],[],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":20,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":21,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":74,"e":79,"c":"pl-c1"},{"s":101,"e":112,"c":"pl-s"},{"s":101,"e":102,"c":"pl-pds"},{"s":111,"e":112,"c":"pl-pds"}],[],[{"s":4,"e":40,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":13,"e":19,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":67,"e":72,"c":"pl-c1"},{"s":92,"e":116,"c":"pl-s"},{"s":92,"e":93,"c":"pl-pds"},{"s":115,"e":116,"c":"pl-pds"}],[],[],[{"s":4,"e":54,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":32,"e":35,"c":"pl-smi"}],[],[{"s":8,"e":13,"c":"pl-k"},{"s":50,"e":63,"c":"pl-c1"},{"s":69,"e":76,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"},{"s":30,"e":35,"c":"pl-c1"},{"s":52,"e":59,"c":"pl-c1"}],[],[{"s":16,"e":70,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":88,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":80,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":80,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":75,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":73,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":71,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":69,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":78,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":28,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":20,"c":"pl-k"},{"s":21,"e":39,"c":"pl-smi"},{"s":42,"e":46,"c":"pl-c1"}],[{"s":16,"e":19,"c":"pl-k"},{"s":21,"e":26,"c":"pl-k"},{"s":58,"e":61,"c":"pl-smi"}],[],[{"s":20,"e":22,"c":"pl-k"},{"s":30,"e":39,"c":"pl-smi"}],[],[{"s":24,"e":42,"c":"pl-smi"},{"s":45,"e":50,"c":"pl-c1"}],[{"s":24,"e":29,"c":"pl-k"}],[],[],[{"s":16,"e":18,"c":"pl-k"},{"s":20,"e":38,"c":"pl-smi"}],[{"s":20,"e":26,"c":"pl-k"},{"s":33,"e":40,"c":"pl-c1"},{"s":85,"e":90,"c":"pl-c1"},{"s":110,"e":132,"c":"pl-s"},{"s":110,"e":111,"c":"pl-pds"},{"s":131,"e":132,"c":"pl-pds"}],[],[],[{"s":29,"e":35,"c":"pl-c1"},{"s":52,"e":59,"c":"pl-c1"}],[],[],[],[],[],[],[{"s":24,"e":28,"c":"pl-smi"}],[],[],[{"s":26,"e":37,"c":"pl-smi"},{"s":48,"e":51,"c":"pl-c1"}],[{"s":13,"e":23,"c":"pl-c1"}],[],[{"s":8,"e":31,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":36,"e":39,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":28,"e":43,"c":"pl-c1"},{"s":49,"e":56,"c":"pl-smi"}],[{"s":33,"e":42,"c":"pl-c1"},{"s":48,"e":55,"c":"pl-smi"}],[],[],[{"s":12,"e":70,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":81,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":22,"e":30,"c":"pl-c1"},{"s":36,"e":43,"c":"pl-smi"}],[{"s":16,"e":69,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":19,"c":"pl-k"},{"s":21,"e":27,"c":"pl-c1"},{"s":34,"e":35,"c":"pl-c1"},{"s":46,"e":50,"c":"pl-smi"},{"s":51,"e":55,"c":"pl-c1"}],[{"s":20,"e":82,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":22,"c":"pl-k"},{"s":35,"e":50,"c":"pl-c1"},{"s":51,"e":60,"c":"pl-c1"}],[{"s":24,"e":30,"c":"pl-k"},{"s":37,"e":44,"c":"pl-c1"},{"s":83,"e":88,"c":"pl-c1"},{"s":108,"e":127,"c":"pl-s"},{"s":108,"e":109,"c":"pl-pds"},{"s":126,"e":127,"c":"pl-pds"}],[],[],[{"s":16,"e":105,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"}],[{"s":39,"e":43,"c":"pl-c1"}],[],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":30,"e":130,"c":"pl-c"},{"s":30,"e":32,"c":"pl-c"}],[],[],[],[{"s":8,"e":42,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":13,"e":25,"c":"pl-c1"}],[],[{"s":8,"e":107,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":13,"e":23,"c":"pl-c1"}],[],[{"s":8,"e":87,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":82,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":24,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":83,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":51,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":31,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":78,"e":83,"c":"pl-c1"},{"s":105,"e":122,"c":"pl-s"},{"s":105,"e":106,"c":"pl-pds"},{"s":121,"e":122,"c":"pl-pds"}],[],[{"s":24,"e":25,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":37,"c":"pl-c1"},{"s":55,"e":69,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":63,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":62,"e":63,"c":"pl-pds"},{"s":78,"e":85,"c":"pl-c1"},{"s":88,"e":96,"c":"pl-c1"},{"s":100,"e":118,"c":"pl-c1"}],[],[],[{"s":8,"e":62,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":28,"c":"pl-smi"},{"s":33,"e":50,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":75,"e":80,"c":"pl-c1"},{"s":102,"e":131,"c":"pl-s"},{"s":102,"e":103,"c":"pl-pds"},{"s":130,"e":131,"c":"pl-pds"}],[],[{"s":8,"e":50,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":15,"e":25,"c":"pl-c1"},{"s":31,"e":47,"c":"pl-smi"},{"s":52,"e":69,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":78,"e":83,"c":"pl-c1"},{"s":105,"e":130,"c":"pl-s"},{"s":105,"e":106,"c":"pl-pds"},{"s":129,"e":130,"c":"pl-pds"}],[],[{"s":8,"e":15,"c":"pl-c1"},{"s":30,"e":53,"c":"pl-c1"}],[],[{"s":8,"e":75,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":13,"e":23,"c":"pl-c1"}],[],[{"s":8,"e":77,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":66,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":28,"c":"pl-smi"},{"s":31,"e":36,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":36,"e":39,"c":"pl-smi"}],[{"s":12,"e":17,"c":"pl-k"},{"s":36,"e":46,"c":"pl-c1"},{"s":52,"e":59,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":21,"e":31,"c":"pl-c1"}],[{"s":16,"e":31,"c":"pl-smi"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-k"}],[],[],[],[{"s":24,"e":29,"c":"pl-smi"},{"s":57,"e":68,"c":"pl-c1"},{"s":71,"e":77,"c":"pl-c1"}],[{"s":30,"e":45,"c":"pl-smi"}],[{"s":8,"e":16,"c":"pl-k"},{"s":17,"e":20,"c":"pl-k"},{"s":35,"e":44,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":75,"e":80,"c":"pl-c1"},{"s":102,"e":128,"c":"pl-s"},{"s":102,"e":103,"c":"pl-pds"},{"s":127,"e":128,"c":"pl-pds"}],[{"s":16,"e":25,"c":"pl-c1"},{"s":26,"e":30,"c":"pl-s"},{"s":26,"e":27,"c":"pl-pds"},{"s":29,"e":30,"c":"pl-pds"}],[],[{"s":40,"e":49,"c":"pl-c1"},{"s":50,"e":55,"c":"pl-smi"},{"s":56,"e":62,"c":"pl-c1"},{"s":63,"e":76,"c":"pl-s"},{"s":63,"e":64,"c":"pl-pds"},{"s":75,"e":76,"c":"pl-pds"},{"s":106,"e":113,"c":"pl-c1"},{"s":115,"e":121,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":49,"e":50,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":108,"e":133,"c":"pl-s"},{"s":108,"e":109,"c":"pl-pds"},{"s":132,"e":133,"c":"pl-pds"},{"s":135,"e":144,"c":"pl-c1"},{"s":145,"e":154,"c":"pl-s"},{"s":145,"e":146,"c":"pl-pds"},{"s":153,"e":154,"c":"pl-pds"}],[],[],[{"s":8,"e":90,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":62,"e":68,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":108,"e":131,"c":"pl-s"},{"s":108,"e":109,"c":"pl-pds"},{"s":130,"e":131,"c":"pl-pds"},{"s":133,"e":142,"c":"pl-c1"},{"s":143,"e":152,"c":"pl-s"},{"s":143,"e":144,"c":"pl-pds"},{"s":151,"e":152,"c":"pl-pds"},{"s":185,"e":191,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":75,"e":80,"c":"pl-c1"}],[{"s":32,"e":51,"c":"pl-s"},{"s":32,"e":33,"c":"pl-pds"},{"s":50,"e":51,"c":"pl-pds"}],[{"s":16,"e":25,"c":"pl-c1"},{"s":26,"e":35,"c":"pl-s"},{"s":26,"e":27,"c":"pl-pds"},{"s":34,"e":35,"c":"pl-pds"}],[],[{"s":8,"e":57,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":14,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-smi"},{"s":39,"e":45,"c":"pl-c1"},{"s":46,"e":67,"c":"pl-s"},{"s":46,"e":47,"c":"pl-pds"},{"s":66,"e":67,"c":"pl-pds"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":36,"e":41,"c":"pl-smi"},{"s":42,"e":48,"c":"pl-c1"},{"s":49,"e":69,"c":"pl-s"},{"s":49,"e":50,"c":"pl-pds"},{"s":68,"e":69,"c":"pl-pds"},{"s":100,"e":104,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":35,"e":40,"c":"pl-smi"},{"s":41,"e":47,"c":"pl-c1"},{"s":48,"e":71,"c":"pl-s"},{"s":48,"e":49,"c":"pl-pds"},{"s":70,"e":71,"c":"pl-pds"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":38,"e":43,"c":"pl-smi"},{"s":44,"e":50,"c":"pl-c1"},{"s":51,"e":73,"c":"pl-s"},{"s":51,"e":52,"c":"pl-pds"},{"s":72,"e":73,"c":"pl-pds"},{"s":106,"e":110,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":43,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":104,"e":128,"c":"pl-s"},{"s":104,"e":105,"c":"pl-pds"},{"s":127,"e":128,"c":"pl-pds"}],[],[],[{"s":8,"e":89,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":67,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":79,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":21,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"}],[],[{"s":12,"e":17,"c":"pl-k"},{"s":54,"e":59,"c":"pl-c1"},{"s":62,"e":69,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":29,"e":34,"c":"pl-c1"}],[],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"},{"s":96,"e":128,"c":"pl-s"},{"s":96,"e":97,"c":"pl-pds"},{"s":127,"e":128,"c":"pl-pds"}],[{"s":33,"e":42,"c":"pl-c1"},{"s":43,"e":81,"c":"pl-s"},{"s":43,"e":44,"c":"pl-pds"},{"s":80,"e":81,"c":"pl-pds"}],[{"s":48,"e":56,"c":"pl-c1"}],[{"s":56,"e":64,"c":"pl-c1"}],[],[],[],[{"s":8,"e":78,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":37,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":35,"e":36,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":34,"e":35,"c":"pl-c1"}],[{"s":8,"e":16,"c":"pl-c1"},{"s":37,"e":38,"c":"pl-c1"}],[],[],[{"s":8,"e":76,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":77,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":38,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":13,"c":"pl-k"},{"s":14,"e":18,"c":"pl-k"},{"s":19,"e":42,"c":"pl-smi"},{"s":58,"e":62,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":35,"c":"pl-smi"}],[],[{"s":21,"e":31,"c":"pl-smi"}],[],[{"s":12,"e":17,"c":"pl-k"},{"s":18,"e":21,"c":"pl-k"},{"s":46,"e":49,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"},{"s":67,"e":77,"c":"pl-c1"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":22,"c":"pl-k"},{"s":23,"e":27,"c":"pl-k"}],[{"s":16,"e":75,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":27,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":74,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":75,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":79,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":78,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":48,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":79,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":76,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":79,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":79,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":59,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":25,"e":35,"c":"pl-smi"},{"s":40,"e":54,"c":"pl-c1"},{"s":62,"e":71,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"}],[],[{"s":20,"e":26,"c":"pl-k"},{"s":33,"e":40,"c":"pl-c1"},{"s":85,"e":90,"c":"pl-c1"},{"s":116,"e":134,"c":"pl-s"},{"s":116,"e":117,"c":"pl-pds"},{"s":133,"e":134,"c":"pl-pds"}],[{"s":28,"e":37,"c":"pl-c1"},{"s":38,"e":98,"c":"pl-s"},{"s":38,"e":39,"c":"pl-pds"},{"s":97,"e":98,"c":"pl-pds"}],[{"s":39,"e":47,"c":"pl-c1"}],[{"s":45,"e":53,"c":"pl-c1"}],[{"s":45,"e":53,"c":"pl-c1"}],[],[],[{"s":16,"e":19,"c":"pl-k"},{"s":21,"e":26,"c":"pl-k"},{"s":45,"e":50,"c":"pl-c1"},{"s":53,"e":56,"c":"pl-smi"}],[],[{"s":40,"e":46,"c":"pl-c1"},{"s":52,"e":59,"c":"pl-smi"},{"s":60,"e":64,"c":"pl-smi"}],[],[],[{"s":41,"e":64,"c":"pl-c1"}],[],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":74,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":20,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":72,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":61,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":19,"c":"pl-k"}],[{"s":25,"e":45,"c":"pl-c1"}],[],[{"s":16,"e":19,"c":"pl-k"}],[{"s":44,"e":58,"c":"pl-c1"}],[{"s":44,"e":53,"c":"pl-c1"}],[],[{"s":14,"e":18,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":81,"e":86,"c":"pl-c1"},{"s":108,"e":141,"c":"pl-s"},{"s":108,"e":109,"c":"pl-pds"},{"s":140,"e":141,"c":"pl-pds"}],[{"s":24,"e":33,"c":"pl-c1"},{"s":34,"e":105,"c":"pl-s"},{"s":34,"e":35,"c":"pl-pds"},{"s":102,"e":104,"c":"pl-cce"},{"s":104,"e":105,"c":"pl-pds"}],[{"s":33,"e":41,"c":"pl-c1"}],[],[],[],[],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":25,"c":"pl-k"},{"s":26,"e":29,"c":"pl-k"},{"s":34,"e":35,"c":"pl-c1"},{"s":44,"e":47,"c":"pl-smi"},{"s":48,"e":52,"c":"pl-c1"}],[],[{"s":16,"e":72,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":77,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":77,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":78,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":41,"e":46,"c":"pl-c1"},{"s":50,"e":53,"c":"pl-smi"},{"s":57,"e":64,"c":"pl-smi"},{"s":65,"e":69,"c":"pl-smi"}],[],[{"s":20,"e":79,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":78,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":48,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":22,"c":"pl-k"},{"s":29,"e":35,"c":"pl-c1"},{"s":39,"e":42,"c":"pl-smi"},{"s":46,"e":53,"c":"pl-smi"},{"s":54,"e":58,"c":"pl-smi"}],[{"s":24,"e":30,"c":"pl-k"},{"s":37,"e":44,"c":"pl-c1"},{"s":89,"e":94,"c":"pl-c1"},{"s":116,"e":146,"c":"pl-s"},{"s":116,"e":117,"c":"pl-pds"},{"s":145,"e":146,"c":"pl-pds"}],[{"s":41,"e":50,"c":"pl-c1"},{"s":51,"e":98,"c":"pl-s"},{"s":51,"e":52,"c":"pl-pds"},{"s":97,"e":98,"c":"pl-pds"}],[{"s":55,"e":63,"c":"pl-c1"}],[],[],[],[],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":50,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"}],[],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":81,"e":86,"c":"pl-c1"},{"s":112,"e":130,"c":"pl-s"},{"s":112,"e":113,"c":"pl-pds"},{"s":129,"e":130,"c":"pl-pds"}],[{"s":33,"e":42,"c":"pl-c1"},{"s":43,"e":110,"c":"pl-s"},{"s":43,"e":44,"c":"pl-pds"},{"s":109,"e":110,"c":"pl-pds"}],[{"s":47,"e":55,"c":"pl-c1"},{"s":59,"e":70,"c":"pl-c1"},{"s":87,"e":98,"c":"pl-c1"}],[],[],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":62,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":51,"e":57,"c":"pl-c1"}],[],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":81,"e":86,"c":"pl-c1"},{"s":112,"e":130,"c":"pl-s"},{"s":112,"e":113,"c":"pl-pds"},{"s":129,"e":130,"c":"pl-pds"}],[{"s":24,"e":33,"c":"pl-c1"},{"s":34,"e":106,"c":"pl-s"},{"s":34,"e":35,"c":"pl-pds"},{"s":105,"e":106,"c":"pl-pds"}],[{"s":35,"e":43,"c":"pl-c1"}],[{"s":30,"e":41,"c":"pl-c1"}],[{"s":30,"e":41,"c":"pl-c1"},{"s":64,"e":70,"c":"pl-c1"}],[],[],[],[{"s":8,"e":17,"c":"pl-k"},{"s":18,"e":26,"c":"pl-k"},{"s":27,"e":30,"c":"pl-k"}],[],[{"s":8,"e":46,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":86,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":35,"e":41,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":24,"c":"pl-c1"},{"s":42,"e":46,"c":"pl-c1"},{"s":67,"e":71,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":85,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":41,"e":95,"c":"pl-c"},{"s":41,"e":43,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":30,"c":"pl-c1"},{"s":36,"e":47,"c":"pl-c1"},{"s":70,"e":74,"c":"pl-c1"},{"s":149,"e":153,"c":"pl-c1"},{"s":155,"e":160,"c":"pl-c1"}],[{"s":17,"e":28,"c":"pl-c1"},{"s":51,"e":55,"c":"pl-c1"},{"s":104,"e":108,"c":"pl-c1"},{"s":110,"e":115,"c":"pl-c1"}],[{"s":16,"e":86,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":22,"e":29,"c":"pl-c1"},{"s":75,"e":80,"c":"pl-c1"}],[{"s":30,"e":43,"c":"pl-c1"},{"s":53,"e":68,"c":"pl-c1"},{"s":78,"e":93,"c":"pl-c1"}],[],[{"s":12,"e":18,"c":"pl-c1"},{"s":19,"e":38,"c":"pl-c1"},{"s":45,"e":54,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":26,"e":59,"c":"pl-c"},{"s":26,"e":28,"c":"pl-c"}],[],[],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":72,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":76,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":42,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":79,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":75,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":75,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":16,"c":"pl-k"},{"s":17,"e":20,"c":"pl-k"},{"s":53,"e":72,"c":"pl-c1"},{"s":75,"e":86,"c":"pl-c1"},{"s":89,"e":92,"c":"pl-c1"},{"s":108,"e":120,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":43,"c":"pl-c1"},{"s":98,"e":102,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":125,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":124,"e":125,"c":"pl-pds"}],[{"s":35,"e":43,"c":"pl-c1"},{"s":47,"e":65,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":45,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-c1"}],[],[],[{"s":8,"e":59,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"}],[],[{"s":12,"e":20,"c":"pl-c1"},{"s":37,"e":107,"c":"pl-s"},{"s":37,"e":38,"c":"pl-pds"},{"s":104,"e":106,"c":"pl-cce"},{"s":106,"e":107,"c":"pl-pds"}],[{"s":24,"e":29,"c":"pl-c1"},{"s":32,"e":39,"c":"pl-c1"},{"s":42,"e":50,"c":"pl-c1"}],[{"s":25,"e":33,"c":"pl-c1"}],[{"s":20,"e":31,"c":"pl-c1"}],[{"s":21,"e":24,"c":"pl-k"},{"s":34,"e":37,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":31,"e":40,"c":"pl-c1"},{"s":45,"e":56,"c":"pl-c1"}],[],[{"s":13,"e":25,"c":"pl-c1"},{"s":42,"e":47,"c":"pl-c1"}],[],[{"s":8,"e":68,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":85,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":93,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":35,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":86,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":38,"e":61,"c":"pl-smi"},{"s":83,"e":108,"c":"pl-c1"},{"s":119,"e":132,"c":"pl-c1"}],[],[{"s":8,"e":38,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":13,"e":25,"c":"pl-c1"}],[],[{"s":8,"e":51,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":28,"c":"pl-c1"},{"s":35,"e":40,"c":"pl-smi"},{"s":41,"e":47,"c":"pl-c1"},{"s":48,"e":61,"c":"pl-s"},{"s":48,"e":49,"c":"pl-pds"},{"s":60,"e":61,"c":"pl-pds"},{"s":91,"e":98,"c":"pl-c1"},{"s":100,"e":105,"c":"pl-smi"},{"s":106,"e":112,"c":"pl-c1"},{"s":113,"e":129,"c":"pl-s"},{"s":113,"e":114,"c":"pl-pds"},{"s":128,"e":129,"c":"pl-pds"},{"s":157,"e":159,"c":"pl-c1"},{"s":162,"e":164,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":22,"e":28,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":81,"e":86,"c":"pl-c1"},{"s":112,"e":126,"c":"pl-s"},{"s":112,"e":113,"c":"pl-pds"},{"s":125,"e":126,"c":"pl-pds"}],[],[],[],[{"s":4,"e":18,"c":"pl-c1"},{"s":21,"e":46,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":80,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":78,"e":80,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":38,"c":"pl-en"},{"s":39,"e":44,"c":"pl-k"},{"s":115,"e":120,"c":"pl-k"}],[{"s":24,"e":28,"c":"pl-k"},{"s":47,"e":54,"c":"pl-c1"}],[{"s":24,"e":28,"c":"pl-k"},{"s":44,"e":49,"c":"pl-k"},{"s":70,"e":74,"c":"pl-k"}],[],[],[{"s":4,"e":8,"c":"pl-k"},{"s":15,"e":39,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":86,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":77,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":81,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":43,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"}],[{"s":23,"e":30,"c":"pl-c1"}],[],[{"s":4,"e":105,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":22,"c":"pl-en"}],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":23,"c":"pl-en"},{"s":67,"e":72,"c":"pl-k"}],[{"s":24,"e":28,"c":"pl-k"}],[{"s":24,"e":28,"c":"pl-k"},{"s":44,"e":49,"c":"pl-k"},{"s":70,"e":74,"c":"pl-k"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":38,"e":44,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":37,"c":"pl-c1"},{"s":85,"e":92,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":100,"c":"pl-c"}],[{"s":0,"e":86,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":19,"c":"pl-en"},{"s":20,"e":25,"c":"pl-k"},{"s":65,"e":70,"c":"pl-k"},{"s":127,"e":132,"c":"pl-k"},{"s":146,"e":151,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":38,"e":41,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":30,"e":36,"c":"pl-c1"}],[],[{"s":6,"e":10,"c":"pl-k"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":29,"c":"pl-c1"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":22,"c":"pl-k"},{"s":23,"e":27,"c":"pl-k"},{"s":40,"e":43,"c":"pl-smi"}],[{"s":16,"e":18,"c":"pl-k"},{"s":24,"e":31,"c":"pl-c1"}],[],[{"s":45,"e":57,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-k"},{"s":27,"e":31,"c":"pl-c1"}],[],[],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":16,"c":"pl-c1"}],[],[],[],[],[],[],[],[{"s":0,"e":78,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":25,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":28,"c":"pl-en"},{"s":29,"e":34,"c":"pl-k"},{"s":68,"e":73,"c":"pl-k"}],[],[{"s":4,"e":34,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":14,"e":21,"c":"pl-smi"},{"s":22,"e":35,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":22,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":61,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":60,"e":61,"c":"pl-pds"}],[],[{"s":4,"e":25,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":25,"e":41,"c":"pl-c1"},{"s":57,"e":67,"c":"pl-c1"}],[],[],[{"s":4,"e":18,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":22,"e":27,"c":"pl-c1"},{"s":36,"e":39,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":53,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":52,"e":53,"c":"pl-pds"}],[{"s":8,"e":12,"c":"pl-smi"},{"s":16,"e":24,"c":"pl-k"},{"s":25,"e":28,"c":"pl-k"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":38,"e":43,"c":"pl-k"},{"s":62,"e":67,"c":"pl-k"}],[],[{"s":10,"e":17,"c":"pl-c1"}],[],[{"s":4,"e":32,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":14,"e":20,"c":"pl-smi"},{"s":21,"e":34,"c":"pl-c1"},{"s":40,"e":44,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":21,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":69,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":68,"e":69,"c":"pl-pds"},{"s":75,"e":83,"c":"pl-c1"}],[],[{"s":4,"e":17,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"}],[],[],[{"s":4,"e":9,"c":"pl-k"},{"s":11,"e":16,"c":"pl-k"},{"s":22,"e":31,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":62,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":61,"e":62,"c":"pl-pds"},{"s":76,"e":80,"c":"pl-c1"},{"s":88,"e":96,"c":"pl-c1"}],[],[],[{"s":4,"e":23,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"},{"s":32,"e":39,"c":"pl-c1"},{"s":49,"e":54,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":70,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":69,"e":70,"c":"pl-pds"},{"s":76,"e":84,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":38,"e":43,"c":"pl-k"},{"s":65,"e":70,"c":"pl-k"}],[],[],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":27,"e":38,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":26,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":21,"c":"pl-c1"},{"s":35,"e":47,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":107,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":106,"e":107,"c":"pl-pds"}],[{"s":24,"e":32,"c":"pl-c1"},{"s":44,"e":55,"c":"pl-c1"},{"s":58,"e":66,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":25,"c":"pl-en"},{"s":38,"e":45,"c":"pl-c1"},{"s":55,"e":60,"c":"pl-k"},{"s":79,"e":84,"c":"pl-k"}],[],[],[{"s":9,"e":13,"c":"pl-smi"},{"s":17,"e":18,"c":"pl-c1"},{"s":20,"e":56,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":14,"e":20,"c":"pl-smi"},{"s":21,"e":34,"c":"pl-c1"},{"s":41,"e":45,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":21,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":54,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":53,"e":54,"c":"pl-pds"},{"s":70,"e":78,"c":"pl-c1"}],[],[],[{"s":4,"e":7,"c":"pl-k"}],[],[{"s":8,"e":16,"c":"pl-k"},{"s":17,"e":20,"c":"pl-k"}],[],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":18,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":81,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":80,"e":81,"c":"pl-pds"},{"s":97,"e":105,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":106,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":105,"e":106,"c":"pl-pds"},{"s":122,"e":130,"c":"pl-c1"}],[],[],[],[{"s":14,"e":20,"c":"pl-c1"},{"s":32,"e":72,"c":"pl-c"},{"s":32,"e":34,"c":"pl-c"}],[{"s":15,"e":19,"c":"pl-c1"},{"s":21,"e":25,"c":"pl-k"},{"s":33,"e":37,"c":"pl-c1"}],[{"s":6,"e":11,"c":"pl-k"},{"s":12,"e":17,"c":"pl-k"},{"s":23,"e":32,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":65,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":64,"e":65,"c":"pl-pds"},{"s":79,"e":83,"c":"pl-c1"},{"s":91,"e":99,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":25,"c":"pl-en"},{"s":38,"e":45,"c":"pl-c1"},{"s":55,"e":60,"c":"pl-k"},{"s":82,"e":87,"c":"pl-k"}],[],[],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":28,"e":39,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":31,"c":"pl-c1"}],[],[],[{"s":8,"e":23,"c":"pl-en"},{"s":24,"e":27,"c":"pl-k"},{"s":37,"e":42,"c":"pl-k"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":45,"e":68,"c":"pl-smi"}],[{"s":4,"e":64,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":20,"e":22,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":16,"c":"pl-c1"}],[],[{"s":23,"e":25,"c":"pl-c1"}],[{"s":4,"e":96,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":96,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":79,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":90,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":15,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":40,"c":"pl-en"},{"s":43,"e":48,"c":"pl-k"}],[],[{"s":4,"e":59,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":30,"e":34,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":30,"e":34,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":18,"c":"pl-smi"},{"s":22,"e":30,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":19,"c":"pl-c1"},{"s":25,"e":32,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":19,"c":"pl-c1"},{"s":23,"e":33,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":19,"c":"pl-c1"},{"s":23,"e":35,"c":"pl-c1"},{"s":41,"e":48,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":66,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":63,"e":65,"c":"pl-cce"},{"s":65,"e":66,"c":"pl-pds"}],[{"s":26,"e":31,"c":"pl-c1"},{"s":32,"e":36,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":16,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":40,"e":47,"c":"pl-c1"},{"s":71,"e":78,"c":"pl-c1"}],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":23,"c":"pl-en"},{"s":24,"e":29,"c":"pl-k"}],[],[{"s":16,"e":34,"c":"pl-c1"}],[{"s":25,"e":30,"c":"pl-smi"},{"s":31,"e":37,"c":"pl-c1"},{"s":38,"e":52,"c":"pl-s"},{"s":38,"e":39,"c":"pl-pds"},{"s":51,"e":52,"c":"pl-pds"},{"s":54,"e":56,"c":"pl-s"},{"s":54,"e":55,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"}],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":24,"e":30,"c":"pl-k"}],[],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":86,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":55,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":16,"e":27,"c":"pl-smi"},{"s":28,"e":31,"c":"pl-s"},{"s":28,"e":29,"c":"pl-pds"},{"s":30,"e":31,"c":"pl-pds"}],[{"s":29,"e":43,"c":"pl-c1"}],[],[{"s":4,"e":22,"c":"pl-c1"},{"s":31,"e":35,"c":"pl-s"},{"s":31,"e":32,"c":"pl-pds"},{"s":34,"e":35,"c":"pl-pds"}],[],[{"s":16,"e":17,"c":"pl-smi"}],[{"s":6,"e":12,"c":"pl-c1"},{"s":16,"e":35,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":38,"c":"pl-en"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":81,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":26,"c":"pl-c1"},{"s":29,"e":51,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"}],[],[{"s":4,"e":87,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":27,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":31,"e":42,"c":"pl-c1"},{"s":45,"e":51,"c":"pl-c1"},{"s":75,"e":82,"c":"pl-smi"},{"s":86,"e":88,"c":"pl-c1"}],[{"s":28,"e":35,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":70,"e":80,"c":"pl-smi"},{"s":85,"e":96,"c":"pl-c1"},{"s":99,"e":102,"c":"pl-c1"},{"s":106,"e":116,"c":"pl-smi"},{"s":120,"e":133,"c":"pl-c1"},{"s":137,"e":148,"c":"pl-c1"},{"s":151,"e":154,"c":"pl-c1"},{"s":160,"e":161,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":35,"c":"pl-c1"}],[],[{"s":34,"e":45,"c":"pl-c1"},{"s":46,"e":104,"c":"pl-s"},{"s":46,"e":47,"c":"pl-pds"},{"s":103,"e":104,"c":"pl-pds"}],[{"s":36,"e":46,"c":"pl-smi"},{"s":48,"e":56,"c":"pl-c1"},{"s":61,"e":72,"c":"pl-c1"},{"s":73,"e":76,"c":"pl-s"},{"s":73,"e":74,"c":"pl-pds"},{"s":75,"e":76,"c":"pl-pds"}],[{"s":12,"e":23,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"}],[],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":171,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":58,"e":60,"c":"pl-cce"},{"s":97,"e":99,"c":"pl-cce"},{"s":127,"e":129,"c":"pl-cce"},{"s":168,"e":170,"c":"pl-cce"},{"s":170,"e":171,"c":"pl-pds"}],[{"s":39,"e":46,"c":"pl-smi"},{"s":68,"e":78,"c":"pl-smi"},{"s":80,"e":88,"c":"pl-c1"}],[{"s":38,"e":45,"c":"pl-smi"},{"s":66,"e":76,"c":"pl-smi"},{"s":78,"e":86,"c":"pl-c1"}],[{"s":12,"e":34,"c":"pl-c1"},{"s":35,"e":39,"c":"pl-c1"}],[],[{"s":8,"e":12,"c":"pl-k"}],[],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":146,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":102,"e":104,"c":"pl-cce"},{"s":143,"e":145,"c":"pl-cce"},{"s":145,"e":146,"c":"pl-pds"}],[{"s":12,"e":42,"c":"pl-c1"},{"s":43,"e":47,"c":"pl-c1"}],[],[],[{"s":4,"e":8,"c":"pl-k"}],[],[{"s":8,"e":30,"c":"pl-c1"},{"s":31,"e":36,"c":"pl-c1"}],[{"s":8,"e":38,"c":"pl-c1"},{"s":39,"e":44,"c":"pl-c1"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":47,"c":"pl-en"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":29,"e":40,"c":"pl-c1"},{"s":43,"e":46,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"}],[],[{"s":8,"e":13,"c":"pl-k"},{"s":35,"e":42,"c":"pl-smi"},{"s":52,"e":59,"c":"pl-smi"}],[{"s":31,"e":36,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":17,"c":"pl-k"}],[{"s":23,"e":28,"c":"pl-smi"}],[],[],[{"s":4,"e":95,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":94,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":39,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":107,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":105,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":92,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":58,"e":65,"c":"pl-smi"},{"s":87,"e":94,"c":"pl-smi"}],[{"s":30,"e":40,"c":"pl-smi"},{"s":50,"e":60,"c":"pl-smi"},{"s":64,"e":77,"c":"pl-c1"},{"s":88,"e":89,"c":"pl-c1"}],[{"s":12,"e":25,"c":"pl-en"}],[],[],[],[],[],[{"s":4,"e":30,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":11,"c":"pl-k"},{"s":12,"e":29,"c":"pl-en"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":41,"e":51,"c":"pl-smi"},{"s":73,"e":83,"c":"pl-smi"}],[],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":74,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":71,"e":73,"c":"pl-cce"},{"s":73,"e":74,"c":"pl-pds"}],[{"s":17,"e":29,"c":"pl-c1"},{"s":32,"e":40,"c":"pl-c1"},{"s":55,"e":62,"c":"pl-smi"}],[{"s":6,"e":9,"c":"pl-c1"},{"s":21,"e":31,"c":"pl-smi"},{"s":32,"e":41,"c":"pl-c1"},{"s":45,"e":48,"c":"pl-c1"},{"s":49,"e":52,"c":"pl-c1"},{"s":55,"e":76,"c":"pl-c1"},{"s":88,"e":100,"c":"pl-c1"}],[{"s":25,"e":36,"c":"pl-c1"},{"s":39,"e":42,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":74,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":71,"e":73,"c":"pl-cce"},{"s":73,"e":74,"c":"pl-pds"}],[{"s":11,"e":23,"c":"pl-c1"},{"s":26,"e":34,"c":"pl-c1"},{"s":40,"e":51,"c":"pl-c1"},{"s":54,"e":60,"c":"pl-c1"},{"s":64,"e":67,"c":"pl-c1"},{"s":73,"e":83,"c":"pl-smi"},{"s":84,"e":93,"c":"pl-c1"},{"s":97,"e":100,"c":"pl-c1"},{"s":101,"e":104,"c":"pl-c1"}],[{"s":6,"e":27,"c":"pl-c1"},{"s":33,"e":45,"c":"pl-c1"}],[{"s":4,"e":30,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":35,"c":"pl-en"},{"s":57,"e":62,"c":"pl-k"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":23,"c":"pl-c1"}],[{"s":16,"e":23,"c":"pl-smi"}],[{"s":24,"e":30,"c":"pl-c1"}],[{"s":27,"e":33,"c":"pl-c1"}],[{"s":32,"e":37,"c":"pl-c1"}],[{"s":8,"e":25,"c":"pl-c1"}],[],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-en"},{"s":17,"e":22,"c":"pl-k"},{"s":83,"e":86,"c":"pl-k"}],[],[{"s":4,"e":24,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":22,"c":"pl-c1"}],[{"s":15,"e":23,"c":"pl-smi"},{"s":24,"e":31,"c":"pl-c1"},{"s":35,"e":38,"c":"pl-smi"},{"s":39,"e":43,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":36,"e":39,"c":"pl-smi"}],[{"s":19,"e":27,"c":"pl-smi"},{"s":28,"e":40,"c":"pl-c1"}],[{"s":12,"e":16,"c":"pl-k"},{"s":35,"e":44,"c":"pl-c1"},{"s":50,"e":57,"c":"pl-smi"},{"s":67,"e":75,"c":"pl-smi"},{"s":76,"e":80,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-c1"}],[],[],[{"s":4,"e":18,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":12,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-en"},{"s":17,"e":22,"c":"pl-k"},{"s":66,"e":69,"c":"pl-k"}],[],[],[{"s":4,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":27,"c":"pl-en"}],[{"s":4,"e":9,"c":"pl-k"},{"s":38,"e":41,"c":"pl-smi"},{"s":47,"e":56,"c":"pl-smi"}],[{"s":4,"e":9,"c":"pl-k"},{"s":44,"e":47,"c":"pl-smi"},{"s":53,"e":66,"c":"pl-smi"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":23,"c":"pl-c1"},{"s":44,"e":56,"c":"pl-smi"},{"s":75,"e":109,"c":"pl-c1"},{"s":131,"e":137,"c":"pl-smi"}],[],[],[{"s":0,"e":3,"c":"pl-k"},{"s":4,"e":18,"c":"pl-en"},{"s":19,"e":24,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":30,"e":46,"c":"pl-c1"},{"s":54,"e":66,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":23,"e":30,"c":"pl-smi"},{"s":33,"e":34,"c":"pl-c1"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"}],[{"s":0,"e":6,"c":"pl-k"},{"s":15,"e":40,"c":"pl-en"}],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":29,"c":"pl-en"}],[{"s":4,"e":69,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":67,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":27,"e":35,"c":"pl-c1"},{"s":36,"e":44,"c":"pl-c1"},{"s":46,"e":53,"c":"pl-c1"},{"s":54,"e":55,"c":"pl-c1"},{"s":57,"e":62,"c":"pl-smi"},{"s":63,"e":69,"c":"pl-c1"},{"s":70,"e":88,"c":"pl-s"},{"s":70,"e":71,"c":"pl-pds"},{"s":87,"e":88,"c":"pl-pds"},{"s":120,"e":121,"c":"pl-c1"},{"s":152,"e":158,"c":"pl-c1"},{"s":160,"e":161,"c":"pl-c1"},{"s":165,"e":167,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":41,"e":52,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":109,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":106,"e":108,"c":"pl-cce"},{"s":108,"e":109,"c":"pl-pds"}],[{"s":20,"e":26,"c":"pl-k"},{"s":39,"e":41,"c":"pl-c1"},{"s":58,"e":59,"c":"pl-c1"},{"s":62,"e":64,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":101,"c":"pl-c"}],[{"s":0,"e":37,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":102,"c":"pl-c"}],[{"s":0,"e":96,"c":"pl-c"}],[{"s":0,"e":32,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":104,"c":"pl-c"}],[{"s":0,"e":98,"c":"pl-c"}],[{"s":0,"e":15,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":103,"c":"pl-c"}],[{"s":0,"e":63,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":71,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-en"},{"s":17,"e":22,"c":"pl-k"},{"s":66,"e":71,"c":"pl-k"},{"s":97,"e":101,"c":"pl-k"},{"s":102,"e":115,"c":"pl-smi"},{"s":117,"e":125,"c":"pl-k"},{"s":126,"e":129,"c":"pl-k"},{"s":137,"e":141,"c":"pl-k"},{"s":157,"e":161,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":22,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":22,"e":29,"c":"pl-c1"},{"s":33,"e":36,"c":"pl-smi"},{"s":37,"e":41,"c":"pl-c1"}],[],[{"s":8,"e":64,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":82,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":48,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":68,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":78,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":82,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":25,"c":"pl-smi"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":73,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":28,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[],[{"s":12,"e":76,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":70,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":25,"c":"pl-c1"},{"s":26,"e":28,"c":"pl-c1"},{"s":31,"e":37,"c":"pl-k"},{"s":47,"e":49,"c":"pl-c1"},{"s":53,"e":56,"c":"pl-c1"},{"s":57,"e":58,"c":"pl-c1"},{"s":60,"e":120,"c":"pl-s"},{"s":60,"e":61,"c":"pl-pds"},{"s":119,"e":120,"c":"pl-pds"}],[{"s":12,"e":19,"c":"pl-c1"},{"s":22,"e":27,"c":"pl-c1"},{"s":54,"e":59,"c":"pl-c1"},{"s":63,"e":65,"c":"pl-c1"},{"s":68,"e":74,"c":"pl-k"},{"s":84,"e":86,"c":"pl-c1"},{"s":88,"e":93,"c":"pl-c1"},{"s":97,"e":111,"c":"pl-c1"},{"s":114,"e":119,"c":"pl-c1"},{"s":123,"e":125,"c":"pl-c1"},{"s":127,"e":132,"c":"pl-c1"},{"s":134,"e":142,"c":"pl-k"},{"s":143,"e":147,"c":"pl-k"},{"s":157,"e":163,"c":"pl-k"},{"s":172,"e":180,"c":"pl-c1"},{"s":196,"e":201,"c":"pl-c1"}],[{"s":12,"e":26,"c":"pl-c1"},{"s":37,"e":117,"c":"pl-c"},{"s":37,"e":39,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":37,"e":45,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":27,"c":"pl-c1"}],[],[],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":25,"c":"pl-k"},{"s":26,"e":29,"c":"pl-k"},{"s":34,"e":35,"c":"pl-c1"},{"s":44,"e":47,"c":"pl-smi"},{"s":48,"e":52,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-k"},{"s":46,"e":49,"c":"pl-smi"},{"s":53,"e":60,"c":"pl-smi"}],[{"s":16,"e":21,"c":"pl-k"},{"s":42,"e":52,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-c1"},{"s":29,"e":36,"c":"pl-c1"}],[],[{"s":16,"e":78,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":78,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":79,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":75,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":65,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[],[{"s":16,"e":35,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":29,"e":34,"c":"pl-smi"},{"s":40,"e":43,"c":"pl-smi"}],[{"s":16,"e":18,"c":"pl-k"}],[{"s":30,"e":39,"c":"pl-c1"},{"s":40,"e":52,"c":"pl-c1"}],[{"s":26,"e":30,"c":"pl-c1"},{"s":41,"e":45,"c":"pl-c1"}],[{"s":18,"e":22,"c":"pl-k"},{"s":23,"e":25,"c":"pl-k"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":20,"e":22,"c":"pl-k"}],[{"s":24,"e":68,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":75,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":71,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":74,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":73,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":69,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":74,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":42,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":37,"e":43,"c":"pl-smi"},{"s":49,"e":52,"c":"pl-smi"}],[],[{"s":24,"e":26,"c":"pl-k"},{"s":28,"e":34,"c":"pl-c1"}],[{"s":28,"e":34,"c":"pl-k"},{"s":41,"e":48,"c":"pl-c1"},{"s":91,"e":96,"c":"pl-c1"},{"s":118,"e":127,"c":"pl-c1"},{"s":128,"e":167,"c":"pl-s"},{"s":128,"e":129,"c":"pl-pds"},{"s":166,"e":167,"c":"pl-pds"},{"s":169,"e":186,"c":"pl-c1"},{"s":193,"e":207,"c":"pl-c1"}],[],[{"s":20,"e":60,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":76,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":71,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":62,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":74,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":78,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":72,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":75,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":36,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":26,"c":"pl-k"},{"s":33,"e":40,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":100,"e":109,"c":"pl-c1"},{"s":110,"e":152,"c":"pl-s"},{"s":110,"e":111,"c":"pl-pds"},{"s":151,"e":152,"c":"pl-pds"},{"s":154,"e":171,"c":"pl-c1"},{"s":178,"e":192,"c":"pl-c1"}],[],[],[],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":76,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":47,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":37,"e":43,"c":"pl-c1"}],[],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":27,"c":"pl-en"},{"s":28,"e":33,"c":"pl-k"},{"s":75,"e":80,"c":"pl-k"},{"s":101,"e":106,"c":"pl-k"}],[],[{"s":4,"e":34,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":14,"e":21,"c":"pl-smi"},{"s":22,"e":34,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":22,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":46,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":45,"e":46,"c":"pl-pds"}],[],[{"s":4,"e":25,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":25,"e":41,"c":"pl-c1"},{"s":61,"e":71,"c":"pl-c1"}],[],[],[{"s":4,"e":22,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":22,"e":27,"c":"pl-c1"},{"s":36,"e":39,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":39,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":38,"e":39,"c":"pl-pds"}],[{"s":8,"e":12,"c":"pl-smi"},{"s":16,"e":24,"c":"pl-k"},{"s":25,"e":28,"c":"pl-k"}],[],[],[{"s":4,"e":33,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":16,"e":22,"c":"pl-smi"}],[],[],[{"s":22,"e":29,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-en"},{"s":45,"e":50,"c":"pl-k"}],[],[{"s":30,"e":40,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":12,"e":18,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":49,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":48,"e":49,"c":"pl-pds"}],[],[],[{"s":4,"e":32,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":14,"e":20,"c":"pl-smi"},{"s":21,"e":33,"c":"pl-c1"},{"s":39,"e":43,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":21,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":46,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":45,"e":46,"c":"pl-pds"}],[],[{"s":4,"e":17,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":29,"e":37,"c":"pl-c1"},{"s":48,"e":105,"c":"pl-c"},{"s":48,"e":50,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"}],[{"s":28,"e":33,"c":"pl-smi"},{"s":35,"e":47,"c":"pl-c1"}],[],[],[],[{"s":4,"e":9,"c":"pl-k"},{"s":11,"e":16,"c":"pl-k"},{"s":22,"e":31,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":56,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"},{"s":70,"e":74,"c":"pl-c1"}],[],[],[{"s":4,"e":22,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":33,"e":40,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":44,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":43,"e":44,"c":"pl-pds"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":27,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":25,"e":27,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"},{"s":53,"e":58,"c":"pl-k"},{"s":86,"e":88,"c":"pl-s"},{"s":86,"e":87,"c":"pl-pds"},{"s":87,"e":88,"c":"pl-pds"},{"s":90,"e":98,"c":"pl-k"},{"s":99,"e":102,"c":"pl-k"},{"s":112,"e":113,"c":"pl-c1"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":24,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":21,"e":23,"c":"pl-cce"},{"s":23,"e":24,"c":"pl-pds"}],[{"s":4,"e":6,"c":"pl-k"},{"s":21,"e":26,"c":"pl-c1"}],[{"s":20,"e":40,"c":"pl-c1"},{"s":54,"e":56,"c":"pl-s"},{"s":54,"e":55,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"}],[{"s":6,"e":10,"c":"pl-k"}],[{"s":20,"e":40,"c":"pl-c1"},{"s":41,"e":42,"c":"pl-c1"},{"s":43,"e":110,"c":"pl-s"},{"s":43,"e":44,"c":"pl-pds"},{"s":109,"e":110,"c":"pl-pds"},{"s":113,"e":115,"c":"pl-s"},{"s":113,"e":114,"c":"pl-pds"},{"s":114,"e":115,"c":"pl-pds"}],[],[{"s":4,"e":17,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":16,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":21,"c":"pl-en"},{"s":47,"e":52,"c":"pl-k"},{"s":78,"e":83,"c":"pl-k"},{"s":111,"e":113,"c":"pl-s"},{"s":111,"e":112,"c":"pl-pds"},{"s":112,"e":113,"c":"pl-pds"},{"s":115,"e":123,"c":"pl-k"},{"s":124,"e":127,"c":"pl-k"},{"s":137,"e":138,"c":"pl-c1"}],[],[{"s":4,"e":13,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":17,"e":22,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":50,"c":"pl-c"}],[{"s":0,"e":39,"c":"pl-c"}],[{"s":0,"e":60,"c":"pl-c"}],[{"s":0,"e":61,"c":"pl-c"}],[{"s":0,"e":39,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-k"},{"s":4,"e":17,"c":"pl-en"},{"s":54,"e":59,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":15,"c":"pl-smi"},{"s":18,"e":22,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":13,"e":21,"c":"pl-c1"},{"s":28,"e":34,"c":"pl-smi"},{"s":37,"e":42,"c":"pl-c1"},{"s":44,"e":77,"c":"pl-c"},{"s":44,"e":46,"c":"pl-c"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":13,"e":20,"c":"pl-smi"},{"s":24,"e":25,"c":"pl-c1"}],[{"s":8,"e":84,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":81,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":94,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":13,"c":"pl-k"},{"s":32,"e":44,"c":"pl-c1"},{"s":55,"e":59,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":23,"e":30,"c":"pl-c1"}],[{"s":17,"e":24,"c":"pl-smi"},{"s":37,"e":44,"c":"pl-smi"}],[{"s":17,"e":26,"c":"pl-smi"},{"s":39,"e":48,"c":"pl-smi"}],[{"s":10,"e":14,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":38,"e":93,"c":"pl-c"},{"s":38,"e":40,"c":"pl-c"}],[],[],[{"s":4,"e":94,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":95,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":95,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":26,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":9,"e":16,"c":"pl-c1"},{"s":22,"e":31,"c":"pl-c1"},{"s":40,"e":46,"c":"pl-smi"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":17,"c":"pl-smi"}],[],[],[{"s":0,"e":91,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":71,"c":"pl-c"},{"s":69,"e":71,"c":"pl-c"}],[{"s":17,"e":45,"c":"pl-en"},{"s":46,"e":51,"c":"pl-k"},{"s":67,"e":72,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":15,"c":"pl-smi"},{"s":18,"e":22,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-c1"},{"s":14,"e":60,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":59,"e":60,"c":"pl-pds"}],[{"s":8,"e":14,"c":"pl-k"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":18,"e":25,"c":"pl-smi"},{"s":26,"e":30,"c":"pl-c1"},{"s":35,"e":36,"c":"pl-c1"},{"s":46,"e":49,"c":"pl-smi"},{"s":50,"e":54,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-c1"},{"s":14,"e":67,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":66,"e":67,"c":"pl-pds"}],[{"s":8,"e":14,"c":"pl-k"}],[],[],[{"s":4,"e":41,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":23,"e":26,"c":"pl-smi"},{"s":27,"e":31,"c":"pl-c1"},{"s":36,"e":37,"c":"pl-c1"},{"s":44,"e":45,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":41,"e":44,"c":"pl-smi"}],[{"s":26,"e":33,"c":"pl-c1"}],[{"s":8,"e":12,"c":"pl-k"},{"s":30,"e":40,"c":"pl-c1"}],[],[{"s":8,"e":89,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":19,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":19,"c":"pl-c1"},{"s":24,"e":25,"c":"pl-c1"},{"s":34,"e":38,"c":"pl-smi"},{"s":39,"e":43,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":24,"c":"pl-smi"},{"s":28,"e":40,"c":"pl-smi"},{"s":41,"e":54,"c":"pl-c1"}],[{"s":26,"e":29,"c":"pl-smi"}],[],[{"s":16,"e":20,"c":"pl-k"},{"s":37,"e":46,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":36,"e":40,"c":"pl-smi"},{"s":52,"e":55,"c":"pl-smi"},{"s":67,"e":74,"c":"pl-smi"},{"s":83,"e":90,"c":"pl-smi"},{"s":114,"e":123,"c":"pl-smi"}],[{"s":20,"e":26,"c":"pl-smi"},{"s":29,"e":34,"c":"pl-c1"},{"s":36,"e":66,"c":"pl-c"},{"s":36,"e":38,"c":"pl-c"}],[],[],[],[],[{"s":8,"e":25,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":16,"e":17,"c":"pl-c1"},{"s":21,"e":37,"c":"pl-c"},{"s":21,"e":23,"c":"pl-c"}],[{"s":40,"e":47,"c":"pl-smi"},{"s":50,"e":51,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":23,"e":31,"c":"pl-smi"},{"s":32,"e":36,"c":"pl-c1"},{"s":45,"e":48,"c":"pl-smi"},{"s":49,"e":53,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-c1"},{"s":22,"e":81,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":80,"e":81,"c":"pl-pds"}],[{"s":16,"e":22,"c":"pl-k"}],[],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":25,"c":"pl-k"},{"s":26,"e":29,"c":"pl-k"},{"s":37,"e":40,"c":"pl-smi"},{"s":41,"e":45,"c":"pl-c1"},{"s":55,"e":56,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-k"},{"s":42,"e":45,"c":"pl-smi"},{"s":49,"e":56,"c":"pl-smi"}],[{"s":16,"e":19,"c":"pl-k"},{"s":26,"e":39,"c":"pl-c1"},{"s":40,"e":49,"c":"pl-c1"},{"s":57,"e":65,"c":"pl-smi"}],[{"s":16,"e":18,"c":"pl-k"},{"s":46,"e":52,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-smi"},{"s":25,"e":31,"c":"pl-smi"}],[],[{"s":12,"e":80,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[],[],[],[{"s":4,"e":47,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":9,"e":21,"c":"pl-c1"},{"s":30,"e":35,"c":"pl-smi"},{"s":37,"e":49,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":17,"c":"pl-smi"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":11,"c":"pl-k"},{"s":12,"e":26,"c":"pl-en"},{"s":27,"e":31,"c":"pl-k"},{"s":32,"e":41,"c":"pl-smi"},{"s":44,"e":49,"c":"pl-c1"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":16,"e":29,"c":"pl-smi"},{"s":77,"e":82,"c":"pl-smi"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":76,"e":85,"c":"pl-smi"}],[],[{"s":4,"e":8,"c":"pl-k"},{"s":18,"e":22,"c":"pl-c1"}],[{"s":14,"e":26,"c":"pl-c1"},{"s":29,"e":34,"c":"pl-c1"},{"s":50,"e":59,"c":"pl-smi"}],[{"s":14,"e":25,"c":"pl-c1"},{"s":28,"e":33,"c":"pl-c1"},{"s":48,"e":57,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":98,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":97,"e":98,"c":"pl-pds"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":23,"c":"pl-en"},{"s":49,"e":52,"c":"pl-k"},{"s":78,"e":86,"c":"pl-k"},{"s":87,"e":90,"c":"pl-k"}],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":33,"c":"pl-en"},{"s":34,"e":39,"c":"pl-k"},{"s":109,"e":114,"c":"pl-k"}],[],[{"s":4,"e":37,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":26,"c":"pl-c1"},{"s":29,"e":35,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":24,"c":"pl-c1"},{"s":40,"e":45,"c":"pl-smi"},{"s":55,"e":71,"c":"pl-c1"},{"s":101,"e":103,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":61,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":60,"e":61,"c":"pl-pds"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":28,"c":"pl-c1"},{"s":54,"e":59,"c":"pl-smi"},{"s":61,"e":73,"c":"pl-c1"},{"s":89,"e":101,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":28,"c":"pl-c1"},{"s":36,"e":63,"c":"pl-s"},{"s":36,"e":37,"c":"pl-pds"},{"s":62,"e":63,"c":"pl-pds"}],[],[{"s":8,"e":41,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":16,"e":24,"c":"pl-smi"},{"s":32,"e":36,"c":"pl-smi"}],[{"s":16,"e":23,"c":"pl-smi"}],[{"s":27,"e":33,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":33,"e":49,"c":"pl-en"},{"s":50,"e":53,"c":"pl-c1"}],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":23,"e":26,"c":"pl-k"}],[{"s":4,"e":22,"c":"pl-c1"},{"s":23,"e":32,"c":"pl-c1"},{"s":33,"e":46,"c":"pl-s"},{"s":33,"e":34,"c":"pl-pds"},{"s":45,"e":46,"c":"pl-pds"}],[{"s":21,"e":27,"c":"pl-c1"}],[],[],[{"s":34,"e":44,"c":"pl-en"}],[],[{"s":0,"e":7,"c":"pl-c1"},{"s":8,"e":27,"c":"pl-en"},{"s":28,"e":33,"c":"pl-k"},{"s":59,"e":64,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":17,"e":18,"c":"pl-c1"},{"s":25,"e":28,"c":"pl-k"}],[{"s":31,"e":47,"c":"pl-c1"},{"s":68,"e":79,"c":"pl-k"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":24,"e":39,"c":"pl-c1"},{"s":48,"e":59,"c":"pl-k"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":94,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":5,"c":"pl-k"},{"s":6,"e":33,"c":"pl-en"},{"s":36,"e":42,"c":"pl-k"},{"s":43,"e":76,"c":"pl-en"}],[],[{"s":0,"e":8,"c":"pl-k"}],[{"s":4,"e":7,"c":"pl-k"}],[],[{"s":0,"e":7,"c":"pl-k"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":40,"c":"pl-en"},{"s":41,"e":44,"c":"pl-k"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":12,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"},{"s":55,"e":60,"c":"pl-k"},{"s":61,"e":69,"c":"pl-k"},{"s":72,"e":78,"c":"pl-k"},{"s":79,"e":80,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":12,"e":19,"c":"pl-en"},{"s":20,"e":25,"c":"pl-k"},{"s":53,"e":58,"c":"pl-k"},{"s":59,"e":67,"c":"pl-k"},{"s":70,"e":76,"c":"pl-k"},{"s":97,"e":104,"c":"pl-c1"},{"s":107,"e":110,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":8,"e":14,"c":"pl-en"},{"s":15,"e":20,"c":"pl-k"},{"s":48,"e":53,"c":"pl-k"},{"s":54,"e":62,"c":"pl-k"},{"s":65,"e":71,"c":"pl-k"},{"s":79,"e":103,"c":"pl-smi"}],[{"s":4,"e":7,"c":"pl-k"},{"s":8,"e":17,"c":"pl-en"},{"s":18,"e":23,"c":"pl-k"},{"s":51,"e":56,"c":"pl-k"},{"s":57,"e":65,"c":"pl-k"},{"s":68,"e":74,"c":"pl-k"},{"s":82,"e":112,"c":"pl-smi"}],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":18,"c":"pl-en"},{"s":19,"e":24,"c":"pl-k"},{"s":46,"e":51,"c":"pl-k"},{"s":79,"e":84,"c":"pl-k"},{"s":85,"e":93,"c":"pl-k"}],[],[{"s":8,"e":14,"c":"pl-k"},{"s":25,"e":33,"c":"pl-smi"}],[{"s":25,"e":33,"c":"pl-smi"},{"s":44,"e":45,"c":"pl-c1"},{"s":50,"e":51,"c":"pl-c1"}],[{"s":17,"e":36,"c":"pl-c1"},{"s":45,"e":50,"c":"pl-smi"},{"s":70,"e":71,"c":"pl-c1"},{"s":76,"e":77,"c":"pl-c1"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"}],[],[{"s":0,"e":79,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":72,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":73,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":50,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":18,"e":30,"c":"pl-smi"},{"s":61,"e":69,"c":"pl-smi"},{"s":73,"e":74,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":15,"c":"pl-k"},{"s":16,"e":19,"c":"pl-k"},{"s":20,"e":39,"c":"pl-en"},{"s":40,"e":45,"c":"pl-k"},{"s":67,"e":72,"c":"pl-k"}],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"}],[],[{"s":4,"e":67,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":40,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":65,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":45,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":24,"e":38,"c":"pl-smi"},{"s":39,"e":45,"c":"pl-c1"},{"s":51,"e":86,"c":"pl-c"},{"s":51,"e":53,"c":"pl-c"}],[{"s":16,"e":26,"c":"pl-smi"},{"s":30,"e":37,"c":"pl-c1"},{"s":41,"e":102,"c":"pl-c"},{"s":41,"e":43,"c":"pl-c"}],[{"s":17,"e":27,"c":"pl-smi"},{"s":47,"e":61,"c":"pl-smi"},{"s":63,"e":107,"c":"pl-c"},{"s":63,"e":65,"c":"pl-c"}],[],[],[],[],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":30,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":38,"e":60,"c":"pl-c1"}],[],[],[],[{"s":4,"e":46,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":23,"c":"pl-smi"},{"s":43,"e":54,"c":"pl-smi"}],[],[],[],[{"s":4,"e":55,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":23,"c":"pl-smi"},{"s":43,"e":54,"c":"pl-smi"}],[],[],[],[{"s":4,"e":103,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-smi"}],[],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":26,"c":"pl-c1"},{"s":35,"e":40,"c":"pl-smi"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":29,"e":30,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":30,"e":31,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":32,"e":33,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":30,"e":31,"c":"pl-c1"}],[],[{"s":0,"e":92,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":77,"c":"pl-c"}],[{"s":0,"e":68,"c":"pl-c"},{"s":66,"e":68,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":30,"c":"pl-en"},{"s":31,"e":36,"c":"pl-k"}],[{"s":41,"e":46,"c":"pl-k"},{"s":74,"e":78,"c":"pl-k"},{"s":79,"e":89,"c":"pl-smi"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":20,"e":30,"c":"pl-smi"},{"s":40,"e":47,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":25,"e":38,"c":"pl-c1"}],[],[{"s":4,"e":67,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":69,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":41,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":19,"c":"pl-c1"},{"s":46,"e":58,"c":"pl-c1"},{"s":63,"e":73,"c":"pl-smi"},{"s":76,"e":86,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":27,"c":"pl-c1"}],[{"s":12,"e":71,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":83,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":24,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":28,"c":"pl-c1"},{"s":36,"e":110,"c":"pl-s"},{"s":36,"e":37,"c":"pl-pds"},{"s":109,"e":110,"c":"pl-pds"}],[],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":52,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":51,"e":52,"c":"pl-pds"},{"s":64,"e":82,"c":"pl-c1"}],[],[],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":36,"e":41,"c":"pl-smi"},{"s":45,"e":52,"c":"pl-c1"},{"s":55,"e":62,"c":"pl-c1"},{"s":75,"e":80,"c":"pl-smi"},{"s":82,"e":94,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":33,"e":45,"c":"pl-c1"}],[],[{"s":4,"e":82,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":36,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":21,"c":"pl-c1"},{"s":39,"e":51,"c":"pl-c1"},{"s":54,"e":70,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":23,"c":"pl-smi"}],[{"s":17,"e":29,"c":"pl-c1"},{"s":38,"e":50,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[],[],[],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":22,"c":"pl-smi"},{"s":25,"e":29,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":25,"e":31,"c":"pl-c1"}],[{"s":8,"e":117,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":114,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":103,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":111,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":53,"e":57,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":32,"e":35,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":26,"c":"pl-smi"},{"s":28,"e":39,"c":"pl-c1"},{"s":48,"e":55,"c":"pl-smi"}],[{"s":34,"e":45,"c":"pl-c1"},{"s":54,"e":61,"c":"pl-smi"}],[{"s":34,"e":44,"c":"pl-smi"}],[{"s":16,"e":107,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":109,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":109,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":110,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":110,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":104,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":85,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":110,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":56,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":29,"c":"pl-smi"},{"s":33,"e":60,"c":"pl-c1"},{"s":120,"e":132,"c":"pl-c1"},{"s":139,"e":141,"c":"pl-c1"},{"s":144,"e":146,"c":"pl-c1"},{"s":149,"e":151,"c":"pl-c1"},{"s":154,"e":155,"c":"pl-c1"},{"s":158,"e":159,"c":"pl-c1"}],[],[],[],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":79,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":76,"e":78,"c":"pl-cce"},{"s":78,"e":79,"c":"pl-pds"}],[],[{"s":4,"e":90,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":49,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":86,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":88,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":37,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":82,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":86,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":65,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":102,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":103,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":102,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":30,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":22,"c":"pl-smi"},{"s":36,"e":43,"c":"pl-smi"},{"s":45,"e":50,"c":"pl-c1"},{"s":62,"e":74,"c":"pl-c1"},{"s":80,"e":88,"c":"pl-c1"},{"s":89,"e":157,"c":"pl-s"},{"s":89,"e":90,"c":"pl-pds"},{"s":156,"e":157,"c":"pl-pds"}],[{"s":36,"e":43,"c":"pl-smi"},{"s":45,"e":50,"c":"pl-c1"},{"s":62,"e":74,"c":"pl-c1"},{"s":80,"e":88,"c":"pl-c1"},{"s":89,"e":157,"c":"pl-s"},{"s":89,"e":90,"c":"pl-pds"},{"s":156,"e":157,"c":"pl-pds"}],[],[{"s":4,"e":110,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":104,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":107,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":128,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":69,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":136,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":14,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":20,"c":"pl-k"},{"s":21,"e":24,"c":"pl-k"},{"s":53,"e":60,"c":"pl-c1"}],[],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":32,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":47,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":38,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":28,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":19,"e":24,"c":"pl-smi"}],[{"s":45,"e":50,"c":"pl-smi"},{"s":52,"e":63,"c":"pl-c1"},{"s":76,"e":88,"c":"pl-c1"},{"s":91,"e":102,"c":"pl-smi"}],[{"s":4,"e":122,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":17,"c":"pl-smi"},{"s":20,"e":33,"c":"pl-smi"},{"s":81,"e":93,"c":"pl-c1"},{"s":111,"e":123,"c":"pl-c1"},{"s":126,"e":135,"c":"pl-smi"}],[],[{"s":4,"e":81,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":35,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":21,"c":"pl-smi"},{"s":33,"e":40,"c":"pl-smi"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-k"},{"s":36,"e":39,"c":"pl-smi"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":23,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"},{"s":39,"e":43,"c":"pl-smi"},{"s":44,"e":48,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":25,"e":33,"c":"pl-c1"},{"s":34,"e":43,"c":"pl-c1"},{"s":48,"e":55,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-k"},{"s":33,"e":40,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":83,"e":131,"c":"pl-s"},{"s":83,"e":84,"c":"pl-pds"},{"s":130,"e":131,"c":"pl-pds"}],[{"s":53,"e":69,"c":"pl-s"},{"s":53,"e":54,"c":"pl-pds"},{"s":68,"e":69,"c":"pl-pds"}],[],[],[],[],[],[{"s":4,"e":103,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":25,"e":26,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-smi"},{"s":52,"e":64,"c":"pl-c1"}],[],[],[],[{"s":4,"e":42,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":25,"e":44,"c":"pl-c1"},{"s":65,"e":77,"c":"pl-c1"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":77,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":74,"e":76,"c":"pl-cce"},{"s":76,"e":77,"c":"pl-pds"}],[],[],[],[{"s":37,"e":44,"c":"pl-c1"},{"s":45,"e":58,"c":"pl-smi"},{"s":104,"e":111,"c":"pl-c1"}],[],[{"s":16,"e":19,"c":"pl-k"}],[{"s":20,"e":21,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":18,"e":19,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":14,"e":21,"c":"pl-smi"},{"s":22,"e":29,"c":"pl-c1"},{"s":36,"e":39,"c":"pl-smi"},{"s":40,"e":44,"c":"pl-c1"},{"s":49,"e":50,"c":"pl-c1"}],[],[{"s":11,"e":18,"c":"pl-c1"},{"s":25,"e":28,"c":"pl-smi"},{"s":29,"e":33,"c":"pl-c1"},{"s":38,"e":129,"c":"pl-c"},{"s":38,"e":40,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":17,"c":"pl-k"},{"s":18,"e":21,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"},{"s":39,"e":42,"c":"pl-smi"},{"s":43,"e":47,"c":"pl-c1"}],[],[{"s":8,"e":13,"c":"pl-k"},{"s":41,"e":44,"c":"pl-smi"}],[],[{"s":22,"e":25,"c":"pl-smi"},{"s":26,"e":30,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":16,"e":26,"c":"pl-c1"}],[],[{"s":28,"e":29,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":41,"c":"pl-c1"},{"s":67,"e":74,"c":"pl-smi"}],[{"s":16,"e":18,"c":"pl-k"},{"s":21,"e":34,"c":"pl-c1"},{"s":41,"e":50,"c":"pl-c1"}],[{"s":20,"e":65,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":76,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":74,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":38,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":26,"e":33,"c":"pl-c1"},{"s":70,"e":75,"c":"pl-c1"}],[{"s":34,"e":47,"c":"pl-c1"},{"s":57,"e":72,"c":"pl-c1"},{"s":82,"e":97,"c":"pl-c1"}],[],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":67,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":66,"e":67,"c":"pl-pds"},{"s":82,"e":89,"c":"pl-c1"},{"s":92,"e":100,"c":"pl-c1"},{"s":104,"e":122,"c":"pl-c1"}],[],[],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":27,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"},{"s":79,"e":127,"c":"pl-s"},{"s":79,"e":80,"c":"pl-pds"},{"s":126,"e":127,"c":"pl-pds"}],[{"s":49,"e":86,"c":"pl-s"},{"s":49,"e":50,"c":"pl-pds"},{"s":85,"e":86,"c":"pl-pds"}],[],[],[{"s":12,"e":52,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":70,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":67,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":24,"e":30,"c":"pl-c1"},{"s":34,"e":37,"c":"pl-smi"},{"s":38,"e":42,"c":"pl-c1"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":23,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"},{"s":38,"e":41,"c":"pl-smi"},{"s":42,"e":46,"c":"pl-c1"}],[{"s":38,"e":48,"c":"pl-c1"},{"s":52,"e":55,"c":"pl-smi"},{"s":59,"e":66,"c":"pl-smi"},{"s":68,"e":75,"c":"pl-smi"}],[],[],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":30,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"},{"s":79,"e":123,"c":"pl-s"},{"s":79,"e":80,"c":"pl-pds"},{"s":122,"e":123,"c":"pl-pds"}],[{"s":49,"e":68,"c":"pl-s"},{"s":49,"e":50,"c":"pl-pds"},{"s":67,"e":68,"c":"pl-pds"}],[],[],[],[{"s":8,"e":60,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":28,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":68,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":23,"e":46,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":69,"e":74,"c":"pl-c1"},{"s":75,"e":108,"c":"pl-s"},{"s":75,"e":76,"c":"pl-pds"},{"s":107,"e":108,"c":"pl-pds"}],[{"s":45,"e":61,"c":"pl-s"},{"s":45,"e":46,"c":"pl-pds"},{"s":60,"e":61,"c":"pl-pds"}],[],[{"s":15,"e":27,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":16,"e":26,"c":"pl-c1"}],[],[],[{"s":12,"e":16,"c":"pl-k"},{"s":17,"e":30,"c":"pl-smi"},{"s":33,"e":43,"c":"pl-smi"},{"s":45,"e":140,"c":"pl-c"},{"s":45,"e":47,"c":"pl-c"},{"s":138,"e":140,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":28,"c":"pl-c1"},{"s":46,"e":59,"c":"pl-smi"},{"s":68,"e":81,"c":"pl-smi"},{"s":83,"e":96,"c":"pl-smi"},{"s":142,"e":149,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":26,"e":35,"c":"pl-c1"}],[{"s":20,"e":85,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":84,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":66,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":73,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":65,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":73,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":26,"e":33,"c":"pl-c1"},{"s":70,"e":75,"c":"pl-c1"}],[{"s":36,"e":49,"c":"pl-c1"},{"s":59,"e":74,"c":"pl-c1"},{"s":84,"e":99,"c":"pl-c1"}],[],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":79,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":78,"e":79,"c":"pl-pds"}],[{"s":23,"e":30,"c":"pl-c1"},{"s":33,"e":41,"c":"pl-c1"},{"s":45,"e":63,"c":"pl-c1"}],[],[{"s":20,"e":23,"c":"pl-c1"}],[],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":16,"e":17,"c":"pl-c1"}],[{"s":22,"e":29,"c":"pl-smi"},{"s":30,"e":39,"c":"pl-c1"},{"s":40,"e":47,"c":"pl-c1"}],[],[{"s":8,"e":19,"c":"pl-c1"},{"s":35,"e":36,"c":"pl-c1"},{"s":61,"e":68,"c":"pl-smi"},{"s":69,"e":73,"c":"pl-c1"},{"s":85,"e":92,"c":"pl-smi"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":116,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":113,"e":115,"c":"pl-cce"},{"s":115,"e":116,"c":"pl-pds"},{"s":119,"e":127,"c":"pl-k"},{"s":134,"e":137,"c":"pl-smi"},{"s":138,"e":142,"c":"pl-c1"},{"s":207,"e":210,"c":"pl-smi"},{"s":211,"e":215,"c":"pl-c1"},{"s":230,"e":231,"c":"pl-c1"},{"s":234,"e":235,"c":"pl-c1"},{"s":275,"e":276,"c":"pl-c1"}],[],[{"s":34,"e":49,"c":"pl-c1"},{"s":58,"e":65,"c":"pl-smi"},{"s":79,"e":91,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":17,"c":"pl-smi"},{"s":18,"e":19,"c":"pl-c1"},{"s":22,"e":33,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"}],[{"s":25,"e":30,"c":"pl-c1"},{"s":31,"e":95,"c":"pl-s"},{"s":31,"e":32,"c":"pl-pds"},{"s":94,"e":95,"c":"pl-pds"}],[{"s":37,"e":40,"c":"pl-smi"},{"s":41,"e":42,"c":"pl-c1"},{"s":45,"e":56,"c":"pl-c1"}],[{"s":47,"e":62,"c":"pl-s"},{"s":47,"e":48,"c":"pl-pds"},{"s":61,"e":62,"c":"pl-pds"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":17,"e":21,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":65,"e":70,"c":"pl-c1"},{"s":71,"e":94,"c":"pl-s"},{"s":71,"e":72,"c":"pl-pds"},{"s":93,"e":94,"c":"pl-pds"},{"s":123,"e":148,"c":"pl-s"},{"s":123,"e":124,"c":"pl-pds"},{"s":147,"e":148,"c":"pl-pds"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":95,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":92,"e":94,"c":"pl-cce"},{"s":94,"e":95,"c":"pl-pds"},{"s":107,"e":108,"c":"pl-c1"},{"s":148,"e":149,"c":"pl-c1"},{"s":152,"e":153,"c":"pl-c1"},{"s":193,"e":194,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":18,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":30,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":17,"e":24,"c":"pl-c1"}],[{"s":16,"e":29,"c":"pl-c1"}],[{"s":27,"e":33,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-c1"},{"s":19,"e":29,"c":"pl-smi"}],[{"s":4,"e":47,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":9,"e":21,"c":"pl-c1"},{"s":30,"e":42,"c":"pl-c1"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":79,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":76,"e":78,"c":"pl-cce"},{"s":78,"e":79,"c":"pl-pds"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":75,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":72,"e":74,"c":"pl-cce"},{"s":74,"e":75,"c":"pl-pds"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":34,"c":"pl-en"}],[{"s":4,"e":9,"c":"pl-k"}],[],[],[{"s":4,"e":7,"c":"pl-k"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":36,"e":54,"c":"pl-c1"}],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":18,"c":"pl-c1"},{"s":32,"e":33,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":18,"c":"pl-c1"},{"s":32,"e":33,"c":"pl-c1"}],[{"s":13,"e":16,"c":"pl-k"}],[{"s":4,"e":8,"c":"pl-k"},{"s":32,"e":37,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"}],[],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":27,"c":"pl-smi"},{"s":30,"e":35,"c":"pl-c1"}],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":25,"c":"pl-smi"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":22,"c":"pl-smi"},{"s":27,"e":43,"c":"pl-smi"},{"s":68,"e":69,"c":"pl-c1"},{"s":75,"e":83,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":37,"e":38,"c":"pl-c1"}],[{"s":16,"e":38,"c":"pl-c1"}],[{"s":14,"e":18,"c":"pl-k"}],[{"s":16,"e":32,"c":"pl-c1"},{"s":62,"e":78,"c":"pl-c1"}],[{"s":16,"e":32,"c":"pl-smi"},{"s":35,"e":40,"c":"pl-c1"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":33,"e":38,"c":"pl-c1"}],[{"s":16,"e":30,"c":"pl-smi"},{"s":33,"e":37,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":21,"e":32,"c":"pl-smi"}],[{"s":32,"e":41,"c":"pl-c1"},{"s":42,"e":60,"c":"pl-s"},{"s":42,"e":43,"c":"pl-pds"},{"s":59,"e":60,"c":"pl-pds"},{"s":62,"e":66,"c":"pl-c1"}],[{"s":20,"e":31,"c":"pl-smi"},{"s":34,"e":38,"c":"pl-c1"}],[],[],[],[{"s":8,"e":15,"c":"pl-c1"},{"s":23,"e":36,"c":"pl-c1"}],[{"s":8,"e":60,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"}],[],[],[{"s":8,"e":15,"c":"pl-c1"},{"s":34,"e":39,"c":"pl-smi"},{"s":40,"e":46,"c":"pl-c1"},{"s":47,"e":60,"c":"pl-s"},{"s":47,"e":48,"c":"pl-pds"},{"s":59,"e":60,"c":"pl-pds"},{"s":90,"e":97,"c":"pl-c1"}],[{"s":8,"e":15,"c":"pl-c1"},{"s":39,"e":57,"c":"pl-c1"}],[{"s":8,"e":15,"c":"pl-c1"},{"s":57,"e":64,"c":"pl-c1"},{"s":99,"e":100,"c":"pl-c1"}],[{"s":8,"e":139,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":24,"c":"pl-smi"},{"s":75,"e":83,"c":"pl-c1"},{"s":85,"e":86,"c":"pl-c1"},{"s":104,"e":106,"c":"pl-c1"},{"s":148,"e":152,"c":"pl-c1"},{"s":155,"e":159,"c":"pl-c1"}],[{"s":8,"e":61,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":27,"c":"pl-smi"}],[{"s":8,"e":134,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":27,"c":"pl-smi"},{"s":87,"e":94,"c":"pl-c1"},{"s":121,"e":128,"c":"pl-c1"}],[{"s":8,"e":105,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":27,"c":"pl-smi"},{"s":87,"e":94,"c":"pl-c1"},{"s":121,"e":128,"c":"pl-c1"}],[{"s":8,"e":68,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":20,"c":"pl-smi"},{"s":59,"e":70,"c":"pl-smi"},{"s":74,"e":88,"c":"pl-smi"},{"s":92,"e":106,"c":"pl-smi"},{"s":110,"e":124,"c":"pl-smi"}],[{"s":8,"e":48,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":24,"c":"pl-smi"},{"s":28,"e":42,"c":"pl-smi"}],[{"s":12,"e":73,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":31,"c":"pl-c1"},{"s":32,"e":44,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":32,"c":"pl-c1"},{"s":40,"e":64,"c":"pl-s"},{"s":40,"e":41,"c":"pl-pds"},{"s":63,"e":64,"c":"pl-pds"},{"s":66,"e":67,"c":"pl-c1"},{"s":68,"e":99,"c":"pl-s"},{"s":68,"e":69,"c":"pl-pds"},{"s":98,"e":99,"c":"pl-pds"}],[],[{"s":12,"e":74,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":26,"c":"pl-c1"}],[{"s":12,"e":96,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[],[{"s":38,"e":41,"c":"pl-k"},{"s":43,"e":48,"c":"pl-k"}],[{"s":23,"e":30,"c":"pl-c1"},{"s":48,"e":52,"c":"pl-c1"}],[{"s":16,"e":19,"c":"pl-k"},{"s":30,"e":33,"c":"pl-k"},{"s":67,"e":72,"c":"pl-c1"},{"s":99,"e":102,"c":"pl-c1"}],[{"s":27,"e":36,"c":"pl-c1"},{"s":37,"e":51,"c":"pl-c1"}],[{"s":37,"e":42,"c":"pl-c1"}],[],[{"s":28,"e":33,"c":"pl-k"}],[{"s":24,"e":31,"c":"pl-c1"},{"s":51,"e":55,"c":"pl-c1"}],[{"s":16,"e":19,"c":"pl-k"},{"s":78,"e":83,"c":"pl-c1"},{"s":112,"e":115,"c":"pl-c1"}],[{"s":28,"e":37,"c":"pl-c1"}],[{"s":39,"e":44,"c":"pl-c1"}],[],[{"s":16,"e":18,"c":"pl-k"},{"s":33,"e":47,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-k"},{"s":27,"e":36,"c":"pl-c1"},{"s":44,"e":85,"c":"pl-s"},{"s":44,"e":45,"c":"pl-pds"},{"s":84,"e":85,"c":"pl-pds"}],[],[],[{"s":12,"e":46,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":30,"c":"pl-smi"}],[{"s":16,"e":33,"c":"pl-c1"}],[],[],[{"s":8,"e":113,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":24,"c":"pl-smi"},{"s":40,"e":52,"c":"pl-c1"},{"s":55,"e":61,"c":"pl-c1"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":74,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":31,"c":"pl-c1"},{"s":32,"e":42,"c":"pl-c1"},{"s":46,"e":48,"c":"pl-c1"},{"s":51,"e":52,"c":"pl-c1"},{"s":55,"e":56,"c":"pl-c1"},{"s":70,"e":82,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":32,"c":"pl-c1"},{"s":40,"e":64,"c":"pl-s"},{"s":40,"e":41,"c":"pl-pds"},{"s":63,"e":64,"c":"pl-pds"},{"s":66,"e":67,"c":"pl-c1"},{"s":68,"e":99,"c":"pl-s"},{"s":68,"e":69,"c":"pl-pds"},{"s":98,"e":99,"c":"pl-pds"}],[],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":32,"c":"pl-c1"},{"s":40,"e":74,"c":"pl-s"},{"s":40,"e":41,"c":"pl-pds"},{"s":73,"e":74,"c":"pl-pds"}],[],[{"s":35,"e":39,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":75,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":22,"c":"pl-c1"},{"s":25,"e":42,"c":"pl-c1"},{"s":51,"e":61,"c":"pl-c1"}],[],[{"s":6,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":24,"c":"pl-c1"},{"s":32,"e":43,"c":"pl-c1"},{"s":44,"e":75,"c":"pl-s"},{"s":44,"e":45,"c":"pl-pds"},{"s":74,"e":75,"c":"pl-pds"},{"s":81,"e":85,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":39,"c":"pl-en"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":38,"e":44,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":13,"c":"pl-c1"},{"s":15,"e":31,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":52,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":49,"e":51,"c":"pl-cce"},{"s":51,"e":52,"c":"pl-pds"},{"s":64,"e":82,"c":"pl-c1"}],[],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":31,"c":"pl-en"}],[],[{"s":4,"e":20,"c":"pl-smi"},{"s":23,"e":27,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":38,"e":44,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":13,"c":"pl-c1"},{"s":15,"e":31,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":52,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":49,"e":51,"c":"pl-cce"},{"s":51,"e":52,"c":"pl-pds"},{"s":64,"e":82,"c":"pl-c1"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-k"},{"s":16,"e":23,"c":"pl-smi"},{"s":26,"e":31,"c":"pl-c1"}],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":16,"c":"pl-smi"}],[{"s":8,"e":19,"c":"pl-c1"}],[{"s":8,"e":15,"c":"pl-smi"},{"s":18,"e":22,"c":"pl-c1"}],[],[],[],[{"s":0,"e":66,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":64,"e":66,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":25,"c":"pl-en"},{"s":44,"e":49,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":13,"e":18,"c":"pl-c1"},{"s":29,"e":33,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":32,"e":33,"c":"pl-pds"}],[],[],[],[{"s":0,"e":79,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":77,"e":79,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":11,"c":"pl-k"},{"s":12,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"},{"s":52,"e":57,"c":"pl-k"}],[{"s":4,"e":21,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":12,"e":34,"c":"pl-c1"},{"s":35,"e":36,"c":"pl-c1"}],[],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":34,"e":46,"c":"pl-c1"}],[{"s":24,"e":34,"c":"pl-c1"}],[],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":52,"c":"pl-c1"}],[],[{"s":8,"e":11,"c":"pl-k"},{"s":24,"e":25,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":23,"e":24,"c":"pl-c1"}],[{"s":40,"e":47,"c":"pl-smi"}],[{"s":43,"e":54,"c":"pl-c1"},{"s":75,"e":87,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":21,"c":"pl-k"},{"s":47,"e":56,"c":"pl-c1"},{"s":57,"e":58,"c":"pl-c1"},{"s":59,"e":113,"c":"pl-s"},{"s":59,"e":60,"c":"pl-pds"},{"s":112,"e":113,"c":"pl-pds"}],[{"s":16,"e":18,"c":"pl-k"}],[{"s":20,"e":29,"c":"pl-c1"}],[{"s":18,"e":22,"c":"pl-k"}],[{"s":20,"e":33,"c":"pl-c1"}],[],[],[],[{"s":8,"e":81,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"},{"s":28,"e":31,"c":"pl-c1"},{"s":45,"e":52,"c":"pl-c1"}],[],[{"s":12,"e":19,"c":"pl-c1"},{"s":39,"e":58,"c":"pl-c1"},{"s":67,"e":72,"c":"pl-smi"},{"s":86,"e":98,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":24,"e":32,"c":"pl-smi"},{"s":82,"e":90,"c":"pl-smi"},{"s":115,"e":116,"c":"pl-c1"}],[],[{"s":29,"e":34,"c":"pl-smi"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":24,"e":25,"c":"pl-c1"}],[{"s":12,"e":25,"c":"pl-c1"},{"s":43,"e":52,"c":"pl-c1"},{"s":53,"e":54,"c":"pl-c1"},{"s":55,"e":102,"c":"pl-s"},{"s":55,"e":56,"c":"pl-pds"},{"s":101,"e":102,"c":"pl-pds"}],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":121,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":120,"e":121,"c":"pl-pds"},{"s":133,"e":148,"c":"pl-c"},{"s":133,"e":135,"c":"pl-c"},{"s":146,"e":148,"c":"pl-c"}],[{"s":17,"e":29,"c":"pl-c1"},{"s":32,"e":40,"c":"pl-c1"},{"s":55,"e":62,"c":"pl-smi"},{"s":75,"e":83,"c":"pl-smi"}],[{"s":6,"e":9,"c":"pl-c1"},{"s":21,"e":31,"c":"pl-smi"},{"s":32,"e":41,"c":"pl-c1"},{"s":45,"e":48,"c":"pl-c1"},{"s":49,"e":52,"c":"pl-c1"},{"s":56,"e":64,"c":"pl-k"},{"s":65,"e":69,"c":"pl-k"},{"s":81,"e":89,"c":"pl-smi"}],[{"s":6,"e":27,"c":"pl-c1"},{"s":39,"e":51,"c":"pl-c1"}],[{"s":6,"e":31,"c":"pl-c1"},{"s":44,"e":50,"c":"pl-c1"},{"s":77,"e":95,"c":"pl-c1"},{"s":101,"e":104,"c":"pl-c1"},{"s":108,"e":109,"c":"pl-c1"},{"s":111,"e":113,"c":"pl-c1"},{"s":128,"e":140,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":25,"e":30,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":33,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":32,"e":33,"c":"pl-pds"},{"s":53,"e":68,"c":"pl-c"},{"s":53,"e":55,"c":"pl-c"},{"s":66,"e":68,"c":"pl-c"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":18,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":15,"e":17,"c":"pl-cce"},{"s":17,"e":18,"c":"pl-pds"}],[],[],[],[{"s":0,"e":29,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":69,"c":"pl-c"}],[{"s":0,"e":77,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":22,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"}],[{"s":0,"e":80,"c":"pl-c"}],[{"s":0,"e":79,"c":"pl-c"}],[{"s":0,"e":17,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-c"},{"s":2,"e":4,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":31,"c":"pl-en"},{"s":57,"e":62,"c":"pl-k"}],[],[{"s":40,"e":43,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"}],[{"s":4,"e":28,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":26,"c":"pl-c1"},{"s":60,"e":72,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":24,"c":"pl-c1"},{"s":32,"e":54,"c":"pl-s"},{"s":32,"e":33,"c":"pl-pds"},{"s":53,"e":54,"c":"pl-pds"}],[{"s":4,"e":53,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[],[{"s":24,"e":28,"c":"pl-smi"},{"s":39,"e":42,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":20,"e":32,"c":"pl-c1"},{"s":52,"e":64,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":27,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":69,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":68,"e":69,"c":"pl-pds"},{"s":85,"e":97,"c":"pl-c1"},{"s":100,"e":108,"c":"pl-c1"}],[{"s":8,"e":12,"c":"pl-k"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"}],[],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":57,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":54,"e":56,"c":"pl-cce"},{"s":56,"e":57,"c":"pl-pds"},{"s":60,"e":73,"c":"pl-c1"}],[{"s":4,"e":51,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":65,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":17,"c":"pl-k"},{"s":29,"e":32,"c":"pl-smi"},{"s":33,"e":39,"c":"pl-c1"},{"s":55,"e":58,"c":"pl-smi"},{"s":59,"e":63,"c":"pl-c1"}],[{"s":28,"e":42,"c":"pl-c1"}],[],[{"s":8,"e":13,"c":"pl-k"},{"s":31,"e":49,"c":"pl-c1"},{"s":86,"e":90,"c":"pl-c1"}],[{"s":12,"e":81,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":16,"c":"pl-k"},{"s":38,"e":46,"c":"pl-smi"},{"s":47,"e":50,"c":"pl-smi"},{"s":70,"e":75,"c":"pl-c1"}],[{"s":20,"e":35,"c":"pl-c1"}],[{"s":28,"e":39,"c":"pl-c1"}],[],[],[],[{"s":12,"e":18,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-smi"}],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":28,"e":33,"c":"pl-smi"}],[{"s":4,"e":61,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":33,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":18,"c":"pl-c1"},{"s":21,"e":38,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":35,"e":36,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":35,"e":36,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":33,"e":34,"c":"pl-c1"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":14,"c":"pl-c1"},{"s":34,"e":35,"c":"pl-c1"}],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":27,"c":"pl-en"}],[{"s":26,"e":33,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-k"}],[],[{"s":4,"e":24,"c":"pl-en"}],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":47,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":75,"c":"pl-c"}],[{"s":0,"e":71,"c":"pl-c"}],[{"s":0,"e":27,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":80,"c":"pl-c"}],[{"s":0,"e":81,"c":"pl-c"}],[{"s":0,"e":76,"c":"pl-c"}],[{"s":0,"e":57,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":81,"c":"pl-c"}],[{"s":0,"e":30,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":5,"c":"pl-k"},{"s":6,"e":18,"c":"pl-en"}],[{"s":0,"e":8,"c":"pl-k"}],[],[],[],[],[{"s":0,"e":7,"c":"pl-k"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":25,"c":"pl-en"},{"s":63,"e":64,"c":"pl-c1"}],[{"s":40,"e":58,"c":"pl-smi"},{"s":59,"e":66,"c":"pl-c1"},{"s":67,"e":76,"c":"pl-c1"},{"s":112,"e":116,"c":"pl-c1"}],[],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":23,"c":"pl-en"},{"s":61,"e":66,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":32,"e":36,"c":"pl-c1"},{"s":39,"e":45,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"}],[{"s":24,"e":28,"c":"pl-c1"},{"s":31,"e":37,"c":"pl-smi"}],[{"s":24,"e":28,"c":"pl-c1"},{"s":31,"e":37,"c":"pl-smi"},{"s":40,"e":49,"c":"pl-c1"}],[{"s":24,"e":36,"c":"pl-c1"}],[],[],[{"s":39,"e":57,"c":"pl-en"}],[{"s":8,"e":72,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":70,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":32,"e":36,"c":"pl-c1"},{"s":39,"e":45,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":31,"e":35,"c":"pl-c1"},{"s":38,"e":51,"c":"pl-smi"},{"s":53,"e":58,"c":"pl-c1"}],[{"s":24,"e":32,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"}],[],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":27,"c":"pl-en"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":32,"e":36,"c":"pl-c1"},{"s":39,"e":45,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":28,"e":32,"c":"pl-c1"},{"s":35,"e":48,"c":"pl-smi"},{"s":50,"e":62,"c":"pl-c1"},{"s":63,"e":72,"c":"pl-c1"}],[],[],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":84,"c":"pl-c"}],[{"s":0,"e":68,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":61,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":28,"c":"pl-en"},{"s":54,"e":59,"c":"pl-k"},{"s":111,"e":116,"c":"pl-k"},{"s":133,"e":138,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-c1"},{"s":22,"e":27,"c":"pl-smi"},{"s":39,"e":42,"c":"pl-c1"}],[{"s":4,"e":28,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-k"}],[{"s":4,"e":6,"c":"pl-k"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":30,"c":"pl-c1"},{"s":66,"e":78,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":28,"c":"pl-c1"},{"s":36,"e":58,"c":"pl-s"},{"s":36,"e":37,"c":"pl-pds"},{"s":57,"e":58,"c":"pl-pds"}],[],[{"s":6,"e":10,"c":"pl-k"}],[],[],[{"s":4,"e":9,"c":"pl-k"}],[{"s":4,"e":53,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":71,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":68,"e":70,"c":"pl-cce"},{"s":70,"e":71,"c":"pl-pds"}],[],[{"s":24,"e":28,"c":"pl-smi"},{"s":39,"e":42,"c":"pl-c1"}],[{"s":8,"e":12,"c":"pl-k"},{"s":18,"e":30,"c":"pl-c1"}],[{"s":8,"e":22,"c":"pl-c1"},{"s":25,"e":37,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"},{"s":22,"e":31,"c":"pl-c1"}],[{"s":16,"e":33,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":57,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":56,"e":57,"c":"pl-pds"},{"s":80,"e":92,"c":"pl-c1"},{"s":95,"e":103,"c":"pl-c1"},{"s":107,"e":125,"c":"pl-c1"}],[],[{"s":17,"e":30,"c":"pl-c1"}],[{"s":8,"e":16,"c":"pl-c1"},{"s":31,"e":81,"c":"pl-s"},{"s":31,"e":32,"c":"pl-pds"},{"s":78,"e":80,"c":"pl-cce"},{"s":80,"e":81,"c":"pl-pds"}],[{"s":8,"e":12,"c":"pl-k"},{"s":28,"e":33,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":69,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":66,"e":68,"c":"pl-cce"},{"s":68,"e":69,"c":"pl-pds"}],[{"s":4,"e":51,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":82,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":79,"e":81,"c":"pl-cce"},{"s":81,"e":82,"c":"pl-pds"}],[{"s":4,"e":57,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":12,"e":26,"c":"pl-c1"},{"s":43,"e":46,"c":"pl-smi"},{"s":59,"e":66,"c":"pl-smi"}],[{"s":19,"e":33,"c":"pl-c1"},{"s":50,"e":53,"c":"pl-smi"}],[{"s":4,"e":42,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":83,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":80,"e":82,"c":"pl-cce"},{"s":82,"e":83,"c":"pl-pds"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":75,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":72,"e":74,"c":"pl-cce"},{"s":74,"e":75,"c":"pl-pds"}],[],[{"s":17,"e":31,"c":"pl-c1"},{"s":43,"e":52,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":67,"c":"pl-c"}],[{"s":0,"e":67,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":13,"e":43,"c":"pl-en"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":33,"e":40,"c":"pl-c1"}],[],[{"s":8,"e":42,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":109,"e":115,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":46,"e":50,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":30,"c":"pl-c1"}],[],[],[],[{"s":8,"e":111,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":111,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":12,"c":"pl-k"},{"s":13,"e":29,"c":"pl-smi"},{"s":32,"e":37,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":38,"e":46,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":31,"e":48,"c":"pl-c1"},{"s":66,"e":73,"c":"pl-smi"},{"s":77,"e":78,"c":"pl-c1"}],[],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":80,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":16,"c":"pl-k"},{"s":17,"e":29,"c":"pl-smi"},{"s":44,"e":51,"c":"pl-smi"}],[{"s":12,"e":16,"c":"pl-k"},{"s":17,"e":29,"c":"pl-smi"},{"s":46,"e":53,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":28,"c":"pl-smi"},{"s":32,"e":44,"c":"pl-smi"}],[{"s":16,"e":81,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":20,"e":32,"c":"pl-smi"},{"s":58,"e":65,"c":"pl-c1"},{"s":80,"e":90,"c":"pl-smi"},{"s":112,"e":122,"c":"pl-smi"}],[],[],[{"s":16,"e":56,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":21,"c":"pl-k"}],[{"s":20,"e":22,"c":"pl-k"},{"s":24,"e":36,"c":"pl-smi"}],[{"s":38,"e":45,"c":"pl-smi"}],[{"s":22,"e":26,"c":"pl-k"},{"s":27,"e":29,"c":"pl-k"},{"s":31,"e":43,"c":"pl-smi"}],[{"s":24,"e":85,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":87,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":24,"e":60,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":42,"e":48,"c":"pl-c1"},{"s":49,"e":63,"c":"pl-c1"},{"s":78,"e":83,"c":"pl-smi"}],[],[{"s":44,"e":49,"c":"pl-c1"}],[{"s":49,"e":54,"c":"pl-smi"}],[],[{"s":40,"e":45,"c":"pl-c1"}],[{"s":16,"e":32,"c":"pl-smi"},{"s":35,"e":39,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-k"}],[],[{"s":37,"e":42,"c":"pl-smi"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-k"}],[{"s":6,"e":11,"c":"pl-k"},{"s":12,"e":16,"c":"pl-c1"}],[],[],[{"s":0,"e":89,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":87,"e":89,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":43,"c":"pl-en"}],[{"s":4,"e":105,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":46,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":93,"e":98,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":41,"e":44,"c":"pl-c1"},{"s":74,"e":84,"c":"pl-c1"},{"s":100,"e":103,"c":"pl-c1"}],[{"s":32,"e":37,"c":"pl-c1"}],[],[{"s":4,"e":108,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":36,"e":41,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":76,"c":"pl-c"}],[{"s":0,"e":85,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":39,"c":"pl-en"},{"s":65,"e":70,"c":"pl-k"},{"s":127,"e":132,"c":"pl-k"},{"s":149,"e":154,"c":"pl-k"},{"s":172,"e":176,"c":"pl-k"},{"s":178,"e":191,"c":"pl-smi"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":46,"e":49,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":44,"e":52,"c":"pl-c1"}],[],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":28,"c":"pl-smi"},{"s":31,"e":36,"c":"pl-c1"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":19,"e":22,"c":"pl-c1"},{"s":36,"e":39,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":26,"c":"pl-c1"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":71,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":33,"c":"pl-c1"},{"s":50,"e":55,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[{"s":8,"e":27,"c":"pl-smi"},{"s":30,"e":34,"c":"pl-c1"}],[],[],[{"s":4,"e":43,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":18,"c":"pl-smi"},{"s":21,"e":25,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":43,"e":50,"c":"pl-smi"},{"s":54,"e":55,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":11,"e":20,"c":"pl-smi"},{"s":51,"e":58,"c":"pl-smi"}],[{"s":8,"e":110,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":38,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"},{"s":28,"e":36,"c":"pl-c1"},{"s":47,"e":49,"c":"pl-c1"},{"s":67,"e":74,"c":"pl-smi"}],[{"s":25,"e":30,"c":"pl-c1"}],[{"s":25,"e":32,"c":"pl-c1"}],[{"s":50,"e":61,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":41,"e":48,"c":"pl-smi"}],[{"s":29,"e":38,"c":"pl-c1"}],[{"s":37,"e":42,"c":"pl-smi"}],[],[],[],[{"s":8,"e":30,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":11,"c":"pl-k"},{"s":42,"e":57,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":27,"c":"pl-c1"},{"s":122,"e":127,"c":"pl-k"}],[{"s":16,"e":18,"c":"pl-k"},{"s":26,"e":35,"c":"pl-c1"}],[{"s":20,"e":59,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":22,"c":"pl-k"},{"s":30,"e":39,"c":"pl-c1"}],[{"s":24,"e":41,"c":"pl-c1"},{"s":59,"e":64,"c":"pl-c1"}],[],[{"s":28,"e":44,"c":"pl-c1"}],[{"s":20,"e":33,"c":"pl-smi"},{"s":36,"e":40,"c":"pl-c1"}],[{"s":20,"e":29,"c":"pl-smi"},{"s":32,"e":37,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-k"}],[{"s":18,"e":22,"c":"pl-k"}],[{"s":20,"e":81,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":85,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":67,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":41,"c":"pl-c1"},{"s":58,"e":63,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-k"},{"s":27,"e":32,"c":"pl-c1"}],[],[{"s":14,"e":18,"c":"pl-k"}],[{"s":16,"e":41,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":45,"e":48,"c":"pl-c1"},{"s":52,"e":62,"c":"pl-smi"},{"s":79,"e":89,"c":"pl-smi"}],[{"s":20,"e":103,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":29,"c":"pl-smi"},{"s":32,"e":37,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-k"}],[],[],[],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":27,"c":"pl-smi"}],[{"s":8,"e":81,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":61,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":29,"c":"pl-c1"},{"s":46,"e":50,"c":"pl-c1"}],[],[{"s":12,"e":17,"c":"pl-c1"},{"s":28,"e":31,"c":"pl-c1"}],[],[{"s":4,"e":52,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":21,"c":"pl-smi"}],[{"s":8,"e":43,"c":"pl-c1"},{"s":61,"e":65,"c":"pl-c1"}],[{"s":4,"e":8,"c":"pl-k"}],[{"s":8,"e":34,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":27,"c":"pl-en"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":16,"c":"pl-smi"},{"s":19,"e":24,"c":"pl-c1"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":30,"c":"pl-smi"},{"s":33,"e":38,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":42,"e":49,"c":"pl-c1"}],[{"s":32,"e":39,"c":"pl-c1"}],[],[{"s":8,"e":12,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":19,"c":"pl-smi"},{"s":22,"e":26,"c":"pl-c1"}],[{"s":12,"e":33,"c":"pl-smi"},{"s":38,"e":54,"c":"pl-c1"},{"s":57,"e":79,"c":"pl-c1"}],[],[],[],[{"s":4,"e":59,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":15,"c":"pl-smi"}],[{"s":20,"e":35,"c":"pl-c1"},{"s":36,"e":57,"c":"pl-smi"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":41,"c":"pl-en"}],[{"s":4,"e":21,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":22,"c":"pl-c1"},{"s":25,"e":41,"c":"pl-c1"},{"s":46,"e":48,"c":"pl-c1"}],[{"s":8,"e":40,"c":"pl-c1"}],[],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":79,"c":"pl-c"}],[{"s":0,"e":64,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":76,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":67,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":35,"c":"pl-en"},{"s":61,"e":66,"c":"pl-k"},{"s":110,"e":115,"c":"pl-k"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":72,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":45,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":21,"c":"pl-c1"}],[],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":113,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":117,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":34,"e":41,"c":"pl-c1"}],[{"s":32,"e":39,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":24,"e":29,"c":"pl-smi"},{"s":30,"e":36,"c":"pl-c1"},{"s":37,"e":52,"c":"pl-s"},{"s":37,"e":38,"c":"pl-pds"},{"s":51,"e":52,"c":"pl-pds"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":46,"c":"pl-c1"}],[],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":70,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":66,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":70,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":67,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":37,"c":"pl-c1"}],[],[],[{"s":12,"e":16,"c":"pl-c1"}],[{"s":48,"e":51,"c":"pl-c1"}],[{"s":12,"e":16,"c":"pl-k"},{"s":36,"e":41,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":89,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":96,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":29,"e":41,"c":"pl-smi"},{"s":52,"e":92,"c":"pl-c"},{"s":52,"e":54,"c":"pl-c"}],[],[{"s":16,"e":18,"c":"pl-k"},{"s":38,"e":45,"c":"pl-c1"}],[{"s":37,"e":54,"c":"pl-c1"}],[],[],[{"s":16,"e":57,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":38,"e":45,"c":"pl-c1"},{"s":75,"e":78,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-k"}],[],[],[{"s":16,"e":20,"c":"pl-k"},{"s":21,"e":34,"c":"pl-smi"},{"s":37,"e":42,"c":"pl-c1"}],[{"s":32,"e":37,"c":"pl-k"}],[{"s":16,"e":18,"c":"pl-k"},{"s":21,"e":42,"c":"pl-c1"},{"s":97,"e":104,"c":"pl-c1"},{"s":126,"e":138,"c":"pl-c1"},{"s":166,"e":179,"c":"pl-smi"}],[{"s":20,"e":26,"c":"pl-k"},{"s":27,"e":32,"c":"pl-c1"}],[{"s":35,"e":39,"c":"pl-c1"}],[],[{"s":16,"e":18,"c":"pl-k"},{"s":20,"e":33,"c":"pl-smi"}],[{"s":20,"e":66,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":37,"e":44,"c":"pl-c1"}],[],[{"s":39,"e":42,"c":"pl-c1"}],[],[{"s":16,"e":19,"c":"pl-k"},{"s":21,"e":26,"c":"pl-k"},{"s":70,"e":88,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-c1"},{"s":33,"e":39,"c":"pl-smi"},{"s":49,"e":55,"c":"pl-smi"}],[{"s":20,"e":34,"c":"pl-c1"},{"s":37,"e":51,"c":"pl-c1"},{"s":58,"e":64,"c":"pl-smi"},{"s":72,"e":78,"c":"pl-smi"},{"s":86,"e":99,"c":"pl-smi"}],[],[{"s":14,"e":19,"c":"pl-k"},{"s":30,"e":33,"c":"pl-c1"},{"s":56,"e":81,"c":"pl-c1"},{"s":92,"e":95,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":35,"e":41,"c":"pl-k"},{"s":42,"e":46,"c":"pl-c1"}],[],[{"s":12,"e":17,"c":"pl-k"},{"s":52,"e":60,"c":"pl-c1"}],[{"s":12,"e":16,"c":"pl-k"},{"s":17,"e":33,"c":"pl-smi"},{"s":36,"e":58,"c":"pl-c1"}],[],[{"s":12,"e":59,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":128,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":57,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":30,"c":"pl-c1"},{"s":33,"e":48,"c":"pl-c1"},{"s":75,"e":91,"c":"pl-smi"}],[],[{"s":16,"e":72,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":28,"e":42,"c":"pl-c1"},{"s":43,"e":59,"c":"pl-smi"}],[],[],[{"s":8,"e":87,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":59,"e":66,"c":"pl-smi"},{"s":85,"e":98,"c":"pl-c1"}],[],[{"s":8,"e":100,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":100,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":98,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":48,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":29,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"}],[{"s":6,"e":11,"c":"pl-k"}],[{"s":4,"e":19,"c":"pl-c1"},{"s":32,"e":44,"c":"pl-c1"}],[],[{"s":4,"e":55,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":48,"e":53,"c":"pl-k"},{"s":97,"e":102,"c":"pl-k"}],[{"s":4,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":32,"e":49,"c":"pl-c1"},{"s":70,"e":79,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":31,"c":"pl-en"},{"s":57,"e":62,"c":"pl-k"}],[],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":30,"c":"pl-smi"},{"s":41,"e":44,"c":"pl-c1"},{"s":48,"e":58,"c":"pl-smi"}],[{"s":12,"e":59,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":23,"c":"pl-c1"},{"s":27,"e":37,"c":"pl-smi"}],[{"s":12,"e":82,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":39,"e":40,"c":"pl-c1"}],[],[{"s":41,"e":44,"c":"pl-c1"},{"s":48,"e":58,"c":"pl-smi"}],[{"s":32,"e":37,"c":"pl-c1"}],[{"s":16,"e":27,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":58,"e":65,"c":"pl-c1"},{"s":68,"e":71,"c":"pl-c1"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":74,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-c1"},{"s":65,"e":82,"c":"pl-c1"}],[{"s":36,"e":42,"c":"pl-c1"}],[{"s":12,"e":37,"c":"pl-c1"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":28,"c":"pl-c1"},{"s":60,"e":65,"c":"pl-k"}],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":18,"c":"pl-en"},{"s":44,"e":49,"c":"pl-k"}],[{"s":4,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":32,"e":45,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":33,"c":"pl-en"},{"s":59,"e":64,"c":"pl-k"}],[],[],[{"s":4,"e":8,"c":"pl-k"},{"s":31,"e":36,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":23,"e":24,"c":"pl-c1"}],[],[{"s":4,"e":65,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":29,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-k"}],[],[{"s":8,"e":80,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":37,"c":"pl-c1"}],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":29,"c":"pl-c1"},{"s":39,"e":44,"c":"pl-k"}],[{"s":30,"e":34,"c":"pl-c1"}],[{"s":48,"e":51,"c":"pl-c1"}],[],[{"s":8,"e":64,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":75,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":12,"c":"pl-k"},{"s":19,"e":32,"c":"pl-c1"}],[{"s":8,"e":65,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":76,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":70,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":69,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":29,"c":"pl-c1"},{"s":46,"e":67,"c":"pl-c"},{"s":46,"e":48,"c":"pl-c"},{"s":65,"e":67,"c":"pl-c"},{"s":87,"e":89,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":24,"c":"pl-k"},{"s":25,"e":30,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-smi"},{"s":50,"e":53,"c":"pl-c1"}],[],[{"s":8,"e":66,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":78,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":79,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":71,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":26,"e":33,"c":"pl-smi"}],[{"s":27,"e":33,"c":"pl-c1"}],[{"s":32,"e":37,"c":"pl-c1"}],[{"s":32,"e":38,"c":"pl-c1"},{"s":57,"e":62,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":30,"e":35,"c":"pl-smi"},{"s":74,"e":81,"c":"pl-smi"}],[{"s":12,"e":99,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":53,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":28,"e":35,"c":"pl-smi"},{"s":55,"e":62,"c":"pl-smi"}],[{"s":31,"e":37,"c":"pl-c1"}],[],[],[{"s":8,"e":103,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":78,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[],[],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":28,"c":"pl-c1"}],[{"s":12,"e":119,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[],[{"s":8,"e":108,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":24,"e":31,"c":"pl-smi"}],[{"s":27,"e":33,"c":"pl-c1"}],[{"s":32,"e":37,"c":"pl-c1"}],[{"s":24,"e":30,"c":"pl-c1"}],[],[{"s":8,"e":87,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":24,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":46,"e":51,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":35,"e":38,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":26,"c":"pl-smi"},{"s":28,"e":35,"c":"pl-c1"},{"s":69,"e":75,"c":"pl-smi"},{"s":77,"e":94,"c":"pl-c1"},{"s":125,"e":135,"c":"pl-c1"},{"s":142,"e":148,"c":"pl-smi"},{"s":158,"e":161,"c":"pl-c1"}],[{"s":40,"e":46,"c":"pl-c1"},{"s":51,"e":57,"c":"pl-smi"}],[],[],[],[],[{"s":8,"e":25,"c":"pl-c1"}],[],[],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":20,"e":34,"c":"pl-c1"},{"s":35,"e":57,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-smi"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":20,"c":"pl-en"},{"s":46,"e":51,"c":"pl-k"}],[{"s":4,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":32,"e":47,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":40,"c":"pl-en"}],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":26,"e":33,"c":"pl-smi"}],[],[{"s":4,"e":74,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":42,"e":47,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":31,"e":34,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":17,"e":23,"c":"pl-smi"},{"s":25,"e":32,"c":"pl-c1"},{"s":42,"e":48,"c":"pl-smi"},{"s":50,"e":61,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-smi"},{"s":24,"e":31,"c":"pl-smi"}],[{"s":31,"e":37,"c":"pl-c1"},{"s":42,"e":48,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":26,"c":"pl-smi"},{"s":28,"e":35,"c":"pl-c1"},{"s":69,"e":75,"c":"pl-smi"},{"s":77,"e":94,"c":"pl-c1"},{"s":124,"e":134,"c":"pl-c1"},{"s":145,"e":148,"c":"pl-c1"},{"s":156,"e":162,"c":"pl-smi"}],[{"s":40,"e":46,"c":"pl-c1"},{"s":51,"e":57,"c":"pl-smi"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":26,"c":"pl-smi"}],[{"s":16,"e":81,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":36,"e":43,"c":"pl-c1"}],[],[{"s":28,"e":33,"c":"pl-c1"},{"s":38,"e":44,"c":"pl-smi"}],[],[],[],[],[{"s":4,"e":57,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-smi"}],[{"s":20,"e":27,"c":"pl-smi"}],[{"s":31,"e":37,"c":"pl-c1"}],[{"s":28,"e":33,"c":"pl-c1"}],[],[{"s":25,"e":30,"c":"pl-smi"}],[],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":27,"c":"pl-en"}],[{"s":4,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":32,"e":54,"c":"pl-c1"}],[],[],[{"s":13,"e":41,"c":"pl-en"},{"s":42,"e":47,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":26,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":25,"e":32,"c":"pl-c1"}],[{"s":42,"e":46,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":28,"e":31,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":19,"e":25,"c":"pl-smi"}],[],[{"s":4,"e":39,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":29,"e":32,"c":"pl-k"},{"s":33,"e":44,"c":"pl-c1"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":29,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":15,"e":26,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"}],[{"s":42,"e":48,"c":"pl-c1"},{"s":49,"e":63,"c":"pl-c1"},{"s":82,"e":87,"c":"pl-smi"}],[{"s":15,"e":25,"c":"pl-smi"},{"s":36,"e":41,"c":"pl-smi"}],[{"s":46,"e":50,"c":"pl-c1"},{"s":57,"e":70,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":32,"e":35,"c":"pl-c1"}],[],[{"s":19,"e":24,"c":"pl-smi"},{"s":37,"e":43,"c":"pl-smi"}],[{"s":19,"e":26,"c":"pl-smi"},{"s":40,"e":45,"c":"pl-smi"},{"s":47,"e":54,"c":"pl-smi"},{"s":57,"e":58,"c":"pl-c1"}],[{"s":19,"e":28,"c":"pl-c1"}],[],[{"s":15,"e":23,"c":"pl-smi"},{"s":38,"e":43,"c":"pl-smi"},{"s":46,"e":54,"c":"pl-c1"},{"s":66,"e":71,"c":"pl-smi"},{"s":73,"e":81,"c":"pl-smi"},{"s":94,"e":99,"c":"pl-smi"},{"s":114,"e":119,"c":"pl-smi"}],[{"s":15,"e":25,"c":"pl-smi"},{"s":40,"e":45,"c":"pl-smi"},{"s":59,"e":64,"c":"pl-smi"},{"s":66,"e":76,"c":"pl-smi"},{"s":79,"e":80,"c":"pl-c1"},{"s":84,"e":97,"c":"pl-c1"}],[{"s":15,"e":28,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":28,"e":35,"c":"pl-c1"},{"s":57,"e":67,"c":"pl-smi"},{"s":81,"e":91,"c":"pl-smi"}],[],[],[{"s":23,"e":29,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":93,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":91,"e":93,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":43,"c":"pl-en"},{"s":44,"e":49,"c":"pl-k"},{"s":89,"e":94,"c":"pl-k"},{"s":113,"e":118,"c":"pl-k"}],[],[{"s":15,"e":18,"c":"pl-smi"},{"s":27,"e":30,"c":"pl-smi"},{"s":31,"e":35,"c":"pl-c1"}],[{"s":15,"e":23,"c":"pl-smi"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":15,"e":20,"c":"pl-smi"},{"s":27,"e":32,"c":"pl-smi"}],[{"s":15,"e":23,"c":"pl-smi"},{"s":30,"e":34,"c":"pl-smi"}],[{"s":15,"e":23,"c":"pl-smi"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":15,"e":22,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-c1"},{"s":36,"e":41,"c":"pl-smi"}],[{"s":19,"e":26,"c":"pl-smi"}],[],[{"s":15,"e":28,"c":"pl-c1"}],[{"s":23,"e":29,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":19,"e":24,"c":"pl-smi"},{"s":28,"e":35,"c":"pl-c1"},{"s":50,"e":55,"c":"pl-smi"},{"s":57,"e":74,"c":"pl-c1"}],[{"s":8,"e":89,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":14,"e":23,"c":"pl-c1"}],[],[{"s":8,"e":94,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":13,"c":"pl-k"},{"s":22,"e":27,"c":"pl-c1"}],[{"s":40,"e":45,"c":"pl-c1"}],[{"s":18,"e":27,"c":"pl-c1"}],[{"s":20,"e":28,"c":"pl-smi"},{"s":40,"e":45,"c":"pl-smi"},{"s":56,"e":61,"c":"pl-smi"},{"s":63,"e":71,"c":"pl-smi"},{"s":74,"e":75,"c":"pl-c1"},{"s":87,"e":90,"c":"pl-smi"}],[],[{"s":16,"e":20,"c":"pl-c1"}],[{"s":24,"e":35,"c":"pl-smi"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":24,"e":27,"c":"pl-c1"},{"s":33,"e":40,"c":"pl-c1"},{"s":69,"e":79,"c":"pl-c1"},{"s":98,"e":101,"c":"pl-c1"}],[{"s":40,"e":46,"c":"pl-c1"}],[],[{"s":154,"e":165,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"},{"s":25,"e":30,"c":"pl-smi"},{"s":40,"e":46,"c":"pl-smi"}],[{"s":79,"e":84,"c":"pl-smi"}],[{"s":22,"e":31,"c":"pl-c1"},{"s":36,"e":42,"c":"pl-smi"}],[{"s":22,"e":27,"c":"pl-smi"}],[{"s":34,"e":39,"c":"pl-c1"}],[],[],[{"s":6,"e":10,"c":"pl-k"}],[{"s":8,"e":10,"c":"pl-k"},{"s":23,"e":28,"c":"pl-smi"},{"s":43,"e":48,"c":"pl-smi"},{"s":50,"e":57,"c":"pl-c1"}],[{"s":30,"e":36,"c":"pl-c1"},{"s":37,"e":51,"c":"pl-c1"},{"s":63,"e":68,"c":"pl-smi"}],[],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":24,"c":"pl-en"},{"s":43,"e":51,"c":"pl-k"},{"s":52,"e":55,"c":"pl-k"},{"s":66,"e":74,"c":"pl-k"},{"s":75,"e":78,"c":"pl-k"},{"s":88,"e":96,"c":"pl-c1"},{"s":104,"e":108,"c":"pl-k"},{"s":109,"e":115,"c":"pl-smi"},{"s":118,"e":123,"c":"pl-c1"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":25,"e":31,"c":"pl-smi"},{"s":38,"e":43,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":23,"e":27,"c":"pl-c1"}],[{"s":23,"e":29,"c":"pl-c1"},{"s":38,"e":39,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":15,"c":"pl-smi"}],[{"s":8,"e":13,"c":"pl-k"},{"s":37,"e":42,"c":"pl-smi"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":31,"e":35,"c":"pl-c1"}],[{"s":31,"e":37,"c":"pl-c1"},{"s":46,"e":47,"c":"pl-c1"}],[],[],[{"s":12,"e":17,"c":"pl-smi"}],[{"s":12,"e":16,"c":"pl-smi"},{"s":41,"e":46,"c":"pl-smi"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":19,"c":"pl-smi"}],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":51,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":48,"e":50,"c":"pl-cce"},{"s":50,"e":51,"c":"pl-pds"},{"s":100,"e":108,"c":"pl-c1"}],[],[{"s":8,"e":22,"c":"pl-c1"},{"s":24,"e":30,"c":"pl-smi"}],[],[],[],[{"s":26,"e":34,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":14,"c":"pl-smi"}],[{"s":30,"e":35,"c":"pl-smi"},{"s":38,"e":46,"c":"pl-c1"},{"s":51,"e":55,"c":"pl-smi"},{"s":90,"e":95,"c":"pl-smi"}],[{"s":4,"e":8,"c":"pl-k"}],[{"s":30,"e":35,"c":"pl-smi"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":15,"c":"pl-smi"}],[{"s":8,"e":12,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":33,"e":45,"c":"pl-c1"},{"s":48,"e":56,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":28,"c":"pl-c1"},{"s":29,"e":53,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":52,"e":53,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-c1"},{"s":57,"e":88,"c":"pl-s"},{"s":57,"e":58,"c":"pl-pds"},{"s":87,"e":88,"c":"pl-pds"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":31,"e":32,"c":"pl-c1"},{"s":36,"e":46,"c":"pl-smi"}],[{"s":12,"e":28,"c":"pl-smi"},{"s":31,"e":35,"c":"pl-c1"}],[],[],[],[{"s":21,"e":27,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":23,"c":"pl-en"},{"s":49,"e":52,"c":"pl-k"},{"s":78,"e":86,"c":"pl-k"},{"s":87,"e":90,"c":"pl-k"}],[],[{"s":8,"e":13,"c":"pl-smi"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":8,"e":12,"c":"pl-smi"},{"s":37,"e":46,"c":"pl-smi"}],[{"s":26,"e":35,"c":"pl-smi"}],[{"s":21,"e":27,"c":"pl-c1"}],[],[{"s":4,"e":8,"c":"pl-k"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":29,"e":40,"c":"pl-c1"},{"s":43,"e":51,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":24,"c":"pl-c1"},{"s":32,"e":56,"c":"pl-s"},{"s":32,"e":33,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"},{"s":58,"e":59,"c":"pl-c1"},{"s":60,"e":91,"c":"pl-s"},{"s":60,"e":61,"c":"pl-pds"},{"s":90,"e":91,"c":"pl-pds"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":27,"e":28,"c":"pl-c1"},{"s":32,"e":42,"c":"pl-smi"}],[{"s":8,"e":24,"c":"pl-smi"},{"s":27,"e":31,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":28,"c":"pl-en"},{"s":29,"e":34,"c":"pl-k"},{"s":81,"e":86,"c":"pl-k"},{"s":123,"e":127,"c":"pl-k"},{"s":128,"e":137,"c":"pl-smi"},{"s":140,"e":144,"c":"pl-c1"}],[],[{"s":4,"e":49,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":17,"c":"pl-smi"},{"s":22,"e":38,"c":"pl-c1"},{"s":45,"e":52,"c":"pl-c1"},{"s":62,"e":67,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":76,"e":81,"c":"pl-c1"},{"s":99,"e":110,"c":"pl-s"},{"s":99,"e":100,"c":"pl-pds"},{"s":109,"e":110,"c":"pl-pds"},{"s":112,"e":134,"c":"pl-s"},{"s":112,"e":113,"c":"pl-pds"},{"s":133,"e":134,"c":"pl-pds"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":15,"c":"pl-en"},{"s":16,"e":21,"c":"pl-k"},{"s":62,"e":67,"c":"pl-k"},{"s":104,"e":108,"c":"pl-k"},{"s":109,"e":118,"c":"pl-smi"},{"s":120,"e":124,"c":"pl-k"},{"s":125,"e":141,"c":"pl-smi"}],[],[{"s":4,"e":56,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":22,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":52,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-c1"},{"s":57,"e":66,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":29,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-smi"}],[{"s":8,"e":12,"c":"pl-k"}],[{"s":34,"e":49,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":32,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"},{"s":96,"e":113,"c":"pl-s"},{"s":96,"e":97,"c":"pl-pds"},{"s":112,"e":113,"c":"pl-pds"},{"s":115,"e":140,"c":"pl-s"},{"s":115,"e":116,"c":"pl-pds"},{"s":139,"e":140,"c":"pl-pds"}],[],[{"s":8,"e":82,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":83,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":39,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"},{"s":96,"e":116,"c":"pl-s"},{"s":96,"e":97,"c":"pl-pds"},{"s":115,"e":116,"c":"pl-pds"},{"s":118,"e":141,"c":"pl-s"},{"s":118,"e":119,"c":"pl-pds"},{"s":140,"e":141,"c":"pl-pds"}],[],[],[{"s":4,"e":72,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":56,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":58,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":18,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":17,"c":"pl-smi"},{"s":18,"e":23,"c":"pl-c1"},{"s":35,"e":38,"c":"pl-smi"},{"s":39,"e":43,"c":"pl-c1"},{"s":93,"e":109,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":65,"e":70,"c":"pl-c1"},{"s":88,"e":104,"c":"pl-s"},{"s":88,"e":89,"c":"pl-pds"},{"s":103,"e":104,"c":"pl-pds"},{"s":106,"e":126,"c":"pl-s"},{"s":106,"e":107,"c":"pl-pds"},{"s":125,"e":126,"c":"pl-pds"}],[],[{"s":4,"e":63,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":17,"c":"pl-smi"},{"s":18,"e":23,"c":"pl-c1"},{"s":36,"e":39,"c":"pl-smi"},{"s":40,"e":41,"c":"pl-c1"},{"s":44,"e":54,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":65,"e":70,"c":"pl-c1"},{"s":88,"e":104,"c":"pl-s"},{"s":88,"e":89,"c":"pl-pds"},{"s":103,"e":104,"c":"pl-pds"},{"s":106,"e":132,"c":"pl-s"},{"s":106,"e":107,"c":"pl-pds"},{"s":131,"e":132,"c":"pl-pds"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":17,"c":"pl-k"},{"s":18,"e":21,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"},{"s":39,"e":42,"c":"pl-smi"},{"s":43,"e":47,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":21,"c":"pl-smi"},{"s":26,"e":36,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":69,"e":74,"c":"pl-c1"},{"s":92,"e":109,"c":"pl-s"},{"s":92,"e":93,"c":"pl-pds"},{"s":108,"e":109,"c":"pl-pds"},{"s":111,"e":135,"c":"pl-s"},{"s":111,"e":112,"c":"pl-pds"},{"s":134,"e":135,"c":"pl-pds"}],[],[{"s":4,"e":25,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-k"},{"s":32,"e":35,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":42,"e":46,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":39,"e":48,"c":"pl-c1"},{"s":52,"e":57,"c":"pl-c1"},{"s":65,"e":78,"c":"pl-c1"},{"s":88,"e":103,"c":"pl-c1"}],[{"s":33,"e":42,"c":"pl-c1"},{"s":43,"e":85,"c":"pl-s"},{"s":43,"e":44,"c":"pl-pds"},{"s":84,"e":85,"c":"pl-pds"},{"s":91,"e":98,"c":"pl-c1"},{"s":101,"e":109,"c":"pl-c1"},{"s":119,"e":134,"c":"pl-c1"}],[],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":27,"e":28,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-k"},{"s":32,"e":35,"c":"pl-smi"}],[],[{"s":19,"e":38,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":65,"e":70,"c":"pl-c1"},{"s":88,"e":104,"c":"pl-s"},{"s":88,"e":89,"c":"pl-pds"},{"s":103,"e":104,"c":"pl-pds"},{"s":106,"e":132,"c":"pl-s"},{"s":106,"e":107,"c":"pl-pds"},{"s":131,"e":132,"c":"pl-pds"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":17,"c":"pl-smi"},{"s":21,"e":37,"c":"pl-smi"}],[{"s":14,"e":22,"c":"pl-smi"},{"s":25,"e":29,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"},{"s":53,"e":58,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":12,"e":28,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":23,"c":"pl-en"},{"s":24,"e":29,"c":"pl-k"},{"s":55,"e":60,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":12,"e":28,"c":"pl-c1"}],[],[],[{"s":0,"e":72,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":41,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":10,"c":"pl-k"},{"s":11,"e":36,"c":"pl-en"},{"s":37,"e":42,"c":"pl-k"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":18,"c":"pl-smi"},{"s":19,"e":24,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":19,"c":"pl-c1"},{"s":24,"e":25,"c":"pl-c1"},{"s":37,"e":40,"c":"pl-smi"},{"s":41,"e":42,"c":"pl-c1"},{"s":45,"e":49,"c":"pl-smi"},{"s":50,"e":54,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":22,"e":25,"c":"pl-smi"},{"s":26,"e":27,"c":"pl-c1"},{"s":30,"e":34,"c":"pl-smi"},{"s":38,"e":50,"c":"pl-smi"},{"s":51,"e":55,"c":"pl-c1"},{"s":61,"e":63,"c":"pl-c1"},{"s":73,"e":76,"c":"pl-smi"},{"s":77,"e":78,"c":"pl-c1"},{"s":81,"e":85,"c":"pl-smi"},{"s":89,"e":101,"c":"pl-smi"},{"s":102,"e":103,"c":"pl-c1"},{"s":127,"e":130,"c":"pl-smi"},{"s":131,"e":132,"c":"pl-c1"},{"s":135,"e":139,"c":"pl-smi"},{"s":143,"e":155,"c":"pl-smi"},{"s":156,"e":157,"c":"pl-c1"},{"s":162,"e":166,"c":"pl-c1"},{"s":176,"e":179,"c":"pl-smi"},{"s":180,"e":181,"c":"pl-c1"},{"s":184,"e":188,"c":"pl-smi"},{"s":192,"e":204,"c":"pl-smi"},{"s":205,"e":206,"c":"pl-c1"},{"s":211,"e":215,"c":"pl-c1"},{"s":225,"e":228,"c":"pl-smi"},{"s":229,"e":230,"c":"pl-c1"},{"s":233,"e":237,"c":"pl-smi"},{"s":241,"e":253,"c":"pl-smi"},{"s":254,"e":255,"c":"pl-c1"},{"s":260,"e":264,"c":"pl-c1"},{"s":274,"e":277,"c":"pl-smi"},{"s":278,"e":279,"c":"pl-c1"},{"s":282,"e":286,"c":"pl-smi"},{"s":290,"e":302,"c":"pl-smi"},{"s":303,"e":304,"c":"pl-c1"},{"s":309,"e":313,"c":"pl-c1"},{"s":323,"e":326,"c":"pl-smi"},{"s":327,"e":328,"c":"pl-c1"},{"s":331,"e":335,"c":"pl-smi"},{"s":339,"e":351,"c":"pl-smi"},{"s":352,"e":353,"c":"pl-c1"},{"s":358,"e":362,"c":"pl-c1"}],[],[],[],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":37,"c":"pl-en"},{"s":53,"e":58,"c":"pl-k"},{"s":84,"e":89,"c":"pl-k"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":20,"e":45,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":16,"c":"pl-k"},{"s":29,"e":37,"c":"pl-k"},{"s":38,"e":42,"c":"pl-k"},{"s":44,"e":49,"c":"pl-c1"},{"s":50,"e":52,"c":"pl-c1"},{"s":54,"e":58,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":22,"e":23,"c":"pl-c1"},{"s":27,"e":43,"c":"pl-c1"},{"s":83,"e":86,"c":"pl-smi"},{"s":87,"e":88,"c":"pl-c1"},{"s":91,"e":101,"c":"pl-c1"}],[{"s":28,"e":30,"c":"pl-smi"},{"s":38,"e":41,"c":"pl-smi"},{"s":42,"e":43,"c":"pl-c1"}],[{"s":11,"e":14,"c":"pl-smi"},{"s":15,"e":16,"c":"pl-c1"},{"s":18,"e":31,"c":"pl-smi"},{"s":32,"e":37,"c":"pl-smi"},{"s":38,"e":44,"c":"pl-c1"},{"s":45,"e":46,"c":"pl-c1"}],[{"s":11,"e":14,"c":"pl-smi"},{"s":15,"e":16,"c":"pl-c1"},{"s":18,"e":31,"c":"pl-smi"},{"s":32,"e":37,"c":"pl-smi"},{"s":38,"e":39,"c":"pl-c1"}],[{"s":14,"e":17,"c":"pl-smi"},{"s":18,"e":19,"c":"pl-c1"},{"s":23,"e":41,"c":"pl-c1"},{"s":42,"e":51,"c":"pl-c1"}],[],[],[],[{"s":12,"e":20,"c":"pl-k"},{"s":21,"e":25,"c":"pl-k"},{"s":27,"e":53,"c":"pl-en"},{"s":69,"e":74,"c":"pl-k"},{"s":100,"e":105,"c":"pl-k"}],[],[{"s":16,"e":24,"c":"pl-k"},{"s":25,"e":29,"c":"pl-k"}],[{"s":4,"e":7,"c":"pl-k"},{"s":20,"e":45,"c":"pl-c1"}],[{"s":16,"e":24,"c":"pl-k"},{"s":25,"e":29,"c":"pl-k"},{"s":31,"e":34,"c":"pl-c1"},{"s":35,"e":37,"c":"pl-c1"},{"s":39,"e":43,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":24,"e":36,"c":"pl-smi"},{"s":67,"e":75,"c":"pl-smi"},{"s":79,"e":80,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":34,"e":56,"c":"pl-c1"},{"s":64,"e":71,"c":"pl-c1"}],[{"s":12,"e":20,"c":"pl-c1"},{"s":23,"e":28,"c":"pl-c1"},{"s":41,"e":46,"c":"pl-c1"},{"s":50,"e":52,"c":"pl-c1"},{"s":54,"e":59,"c":"pl-c1"},{"s":64,"e":68,"c":"pl-c1"},{"s":72,"e":74,"c":"pl-c1"},{"s":76,"e":84,"c":"pl-c1"},{"s":97,"e":102,"c":"pl-c1"}],[],[{"s":16,"e":22,"c":"pl-smi"},{"s":25,"e":26,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":35,"c":"pl-c1"},{"s":36,"e":38,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"},{"s":34,"e":38,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":24,"e":36,"c":"pl-smi"},{"s":37,"e":38,"c":"pl-c1"},{"s":53,"e":58,"c":"pl-c1"},{"s":62,"e":64,"c":"pl-c1"}],[{"s":37,"e":45,"c":"pl-k"},{"s":46,"e":50,"c":"pl-k"},{"s":56,"e":68,"c":"pl-smi"},{"s":69,"e":74,"c":"pl-c1"},{"s":82,"e":94,"c":"pl-smi"},{"s":95,"e":98,"c":"pl-c1"}],[{"s":32,"e":34,"c":"pl-smi"},{"s":42,"e":45,"c":"pl-smi"},{"s":46,"e":47,"c":"pl-c1"}],[{"s":15,"e":19,"c":"pl-smi"},{"s":20,"e":29,"c":"pl-c1"}],[{"s":18,"e":21,"c":"pl-smi"},{"s":22,"e":23,"c":"pl-c1"},{"s":27,"e":45,"c":"pl-c1"},{"s":46,"e":55,"c":"pl-c1"}],[],[],[{"s":4,"e":36,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":50,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":20,"e":37,"c":"pl-en"},{"s":38,"e":43,"c":"pl-k"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":45,"e":59,"c":"pl-smi"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":47,"e":62,"c":"pl-c1"}],[],[{"s":8,"e":13,"c":"pl-k"},{"s":32,"e":38,"c":"pl-smi"}],[{"s":30,"e":46,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":18,"c":"pl-c1"}],[],[],[{"s":0,"e":38,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":75,"c":"pl-c"}],[{"s":0,"e":65,"c":"pl-c"}],[{"s":0,"e":73,"c":"pl-c"}],[{"s":0,"e":73,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":22,"c":"pl-c"}],[{"s":0,"e":73,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":38,"c":"pl-en"},{"s":39,"e":44,"c":"pl-k"},{"s":91,"e":96,"c":"pl-k"},{"s":119,"e":124,"c":"pl-k"},{"s":150,"e":157,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-c1"},{"s":25,"e":32,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-k"},{"s":10,"e":13,"c":"pl-k"},{"s":36,"e":43,"c":"pl-smi"},{"s":46,"e":47,"c":"pl-c1"}],[],[{"s":4,"e":26,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":54,"e":66,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":19,"c":"pl-smi"},{"s":23,"e":42,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":76,"e":81,"c":"pl-c1"},{"s":99,"e":113,"c":"pl-s"},{"s":99,"e":100,"c":"pl-pds"},{"s":112,"e":113,"c":"pl-pds"},{"s":115,"e":140,"c":"pl-s"},{"s":115,"e":116,"c":"pl-pds"},{"s":139,"e":140,"c":"pl-pds"}],[],[{"s":4,"e":32,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":27,"c":"pl-smi"}],[{"s":8,"e":79,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":86,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":25,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":35,"e":52,"c":"pl-c1"},{"s":60,"e":71,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":50,"e":57,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":76,"e":81,"c":"pl-c1"},{"s":82,"e":139,"c":"pl-s"},{"s":82,"e":83,"c":"pl-pds"},{"s":138,"e":139,"c":"pl-pds"},{"s":180,"e":210,"c":"pl-s"},{"s":180,"e":181,"c":"pl-pds"},{"s":209,"e":210,"c":"pl-pds"}],[],[],[{"s":4,"e":35,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":26,"c":"pl-c1"},{"s":44,"e":61,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":76,"e":81,"c":"pl-c1"},{"s":99,"e":113,"c":"pl-s"},{"s":99,"e":100,"c":"pl-pds"},{"s":112,"e":113,"c":"pl-pds"},{"s":115,"e":147,"c":"pl-s"},{"s":115,"e":116,"c":"pl-pds"},{"s":146,"e":147,"c":"pl-pds"}],[],[{"s":4,"e":22,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":26,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":73,"e":78,"c":"pl-c1"},{"s":96,"e":110,"c":"pl-s"},{"s":96,"e":97,"c":"pl-pds"},{"s":109,"e":110,"c":"pl-pds"},{"s":112,"e":151,"c":"pl-s"},{"s":112,"e":113,"c":"pl-pds"},{"s":150,"e":151,"c":"pl-pds"}],[],[{"s":4,"e":92,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":44,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":14,"e":22,"c":"pl-smi"},{"s":25,"e":26,"c":"pl-c1"},{"s":57,"e":68,"c":"pl-smi"}],[{"s":14,"e":22,"c":"pl-smi"},{"s":25,"e":26,"c":"pl-c1"},{"s":57,"e":68,"c":"pl-smi"}],[{"s":14,"e":22,"c":"pl-smi"},{"s":25,"e":26,"c":"pl-c1"},{"s":57,"e":68,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":80,"e":85,"c":"pl-c1"},{"s":104,"e":113,"c":"pl-c1"},{"s":114,"e":135,"c":"pl-s"},{"s":114,"e":115,"c":"pl-pds"},{"s":134,"e":135,"c":"pl-pds"},{"s":143,"e":151,"c":"pl-smi"}],[{"s":33,"e":42,"c":"pl-c1"},{"s":43,"e":75,"c":"pl-s"},{"s":43,"e":44,"c":"pl-pds"},{"s":74,"e":75,"c":"pl-pds"},{"s":83,"e":91,"c":"pl-smi"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":73,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":73,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":22,"c":"pl-c"}],[{"s":0,"e":73,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":32,"c":"pl-en"},{"s":33,"e":38,"c":"pl-k"},{"s":79,"e":84,"c":"pl-k"},{"s":121,"e":126,"c":"pl-k"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":10,"e":13,"c":"pl-k"},{"s":38,"e":45,"c":"pl-c1"},{"s":48,"e":49,"c":"pl-c1"},{"s":64,"e":71,"c":"pl-smi"},{"s":74,"e":75,"c":"pl-c1"}],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":25,"e":26,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":29,"e":36,"c":"pl-c1"}],[],[],[],[{"s":4,"e":11,"c":"pl-c1"}],[{"s":44,"e":61,"c":"pl-c1"}],[{"s":38,"e":50,"c":"pl-c1"}],[],[{"s":4,"e":48,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-k"},{"s":32,"e":35,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":22,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":69,"e":74,"c":"pl-c1"},{"s":92,"e":111,"c":"pl-s"},{"s":92,"e":93,"c":"pl-pds"},{"s":110,"e":111,"c":"pl-pds"},{"s":113,"e":136,"c":"pl-s"},{"s":113,"e":114,"c":"pl-pds"},{"s":135,"e":136,"c":"pl-pds"}],[],[],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":35,"e":46,"c":"pl-smi"}],[],[{"s":25,"e":32,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":21,"c":"pl-smi"},{"s":22,"e":23,"c":"pl-c1"},{"s":26,"e":29,"c":"pl-smi"},{"s":30,"e":31,"c":"pl-c1"},{"s":33,"e":42,"c":"pl-smi"},{"s":43,"e":47,"c":"pl-c1"},{"s":59,"e":63,"c":"pl-c1"}],[{"s":13,"e":23,"c":"pl-c1"},{"s":31,"e":36,"c":"pl-c1"},{"s":47,"e":50,"c":"pl-c1"},{"s":60,"e":63,"c":"pl-smi"},{"s":64,"e":65,"c":"pl-c1"},{"s":68,"e":71,"c":"pl-smi"},{"s":72,"e":73,"c":"pl-c1"},{"s":75,"e":84,"c":"pl-smi"},{"s":85,"e":90,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":69,"e":74,"c":"pl-c1"},{"s":92,"e":107,"c":"pl-s"},{"s":92,"e":93,"c":"pl-pds"},{"s":106,"e":107,"c":"pl-pds"},{"s":109,"e":144,"c":"pl-s"},{"s":109,"e":110,"c":"pl-pds"},{"s":143,"e":144,"c":"pl-pds"}],[],[],[],[{"s":4,"e":42,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":120,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":57,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":127,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":124,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":118,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":131,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":40,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-smi"},{"s":24,"e":29,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":24,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":24,"e":49,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":12,"e":16,"c":"pl-k"},{"s":29,"e":34,"c":"pl-c1"}],[{"s":34,"e":56,"c":"pl-c1"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":28,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":22,"e":25,"c":"pl-smi"},{"s":26,"e":27,"c":"pl-c1"},{"s":30,"e":33,"c":"pl-smi"},{"s":34,"e":35,"c":"pl-c1"},{"s":37,"e":50,"c":"pl-smi"},{"s":51,"e":56,"c":"pl-smi"},{"s":57,"e":61,"c":"pl-c1"},{"s":67,"e":68,"c":"pl-c1"},{"s":78,"e":81,"c":"pl-smi"},{"s":82,"e":83,"c":"pl-c1"},{"s":86,"e":89,"c":"pl-smi"},{"s":90,"e":91,"c":"pl-c1"},{"s":93,"e":106,"c":"pl-smi"},{"s":107,"e":112,"c":"pl-smi"},{"s":113,"e":114,"c":"pl-c1"},{"s":116,"e":120,"c":"pl-c1"},{"s":126,"e":128,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":100,"e":124,"c":"pl-s"},{"s":100,"e":101,"c":"pl-pds"},{"s":123,"e":124,"c":"pl-pds"},{"s":126,"e":135,"c":"pl-c1"},{"s":136,"e":178,"c":"pl-s"},{"s":136,"e":137,"c":"pl-pds"},{"s":177,"e":178,"c":"pl-pds"}],[],[{"s":12,"e":20,"c":"pl-c1"},{"s":23,"e":28,"c":"pl-c1"},{"s":41,"e":46,"c":"pl-c1"},{"s":50,"e":52,"c":"pl-c1"},{"s":54,"e":59,"c":"pl-c1"},{"s":67,"e":70,"c":"pl-smi"},{"s":71,"e":72,"c":"pl-c1"},{"s":75,"e":78,"c":"pl-smi"},{"s":79,"e":80,"c":"pl-c1"},{"s":82,"e":95,"c":"pl-smi"},{"s":96,"e":101,"c":"pl-smi"},{"s":102,"e":103,"c":"pl-c1"},{"s":105,"e":106,"c":"pl-c1"},{"s":109,"e":111,"c":"pl-c1"},{"s":113,"e":121,"c":"pl-c1"},{"s":134,"e":139,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":22,"c":"pl-c1"},{"s":35,"e":40,"c":"pl-c1"},{"s":51,"e":54,"c":"pl-smi"},{"s":55,"e":56,"c":"pl-c1"},{"s":59,"e":63,"c":"pl-smi"},{"s":75,"e":87,"c":"pl-smi"},{"s":88,"e":89,"c":"pl-c1"},{"s":92,"e":94,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":100,"e":126,"c":"pl-s"},{"s":100,"e":101,"c":"pl-pds"},{"s":125,"e":126,"c":"pl-pds"},{"s":128,"e":137,"c":"pl-c1"},{"s":138,"e":179,"c":"pl-s"},{"s":138,"e":139,"c":"pl-pds"},{"s":178,"e":179,"c":"pl-pds"}],[],[{"s":12,"e":24,"c":"pl-smi"},{"s":27,"e":31,"c":"pl-c1"}],[],[],[],[{"s":4,"e":122,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":21,"c":"pl-smi"}],[{"s":6,"e":9,"c":"pl-k"},{"s":11,"e":16,"c":"pl-k"},{"s":17,"e":21,"c":"pl-k"},{"s":34,"e":37,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":20,"e":30,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":77,"e":82,"c":"pl-c1"},{"s":100,"e":120,"c":"pl-s"},{"s":100,"e":101,"c":"pl-pds"},{"s":119,"e":120,"c":"pl-pds"},{"s":122,"e":131,"c":"pl-c1"},{"s":132,"e":168,"c":"pl-s"},{"s":132,"e":133,"c":"pl-pds"},{"s":167,"e":168,"c":"pl-pds"}],[],[],[],[],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":72,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":69,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":67,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":15,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":22,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"},{"s":65,"e":70,"c":"pl-c1"},{"s":88,"e":104,"c":"pl-s"},{"s":88,"e":89,"c":"pl-pds"},{"s":103,"e":104,"c":"pl-pds"},{"s":106,"e":115,"c":"pl-c1"},{"s":116,"e":142,"c":"pl-s"},{"s":116,"e":117,"c":"pl-pds"},{"s":141,"e":142,"c":"pl-pds"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":35,"c":"pl-en"},{"s":36,"e":41,"c":"pl-k"},{"s":88,"e":93,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":26,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":25,"e":32,"c":"pl-c1"}],[{"s":46,"e":50,"c":"pl-c1"}],[{"s":26,"e":33,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":28,"e":40,"c":"pl-c1"},{"s":43,"e":59,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":36,"e":39,"c":"pl-c1"}],[{"s":12,"e":45,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":29,"e":35,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":24,"e":31,"c":"pl-smi"}],[{"s":16,"e":22,"c":"pl-k"},{"s":29,"e":36,"c":"pl-c1"},{"s":78,"e":83,"c":"pl-c1"},{"s":84,"e":116,"c":"pl-s"},{"s":84,"e":85,"c":"pl-pds"},{"s":115,"e":116,"c":"pl-pds"},{"s":133,"e":141,"c":"pl-c1"},{"s":146,"e":147,"c":"pl-c1"},{"s":149,"e":160,"c":"pl-s"},{"s":149,"e":150,"c":"pl-pds"},{"s":159,"e":160,"c":"pl-pds"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":56,"e":68,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":66,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":65,"e":66,"c":"pl-pds"},{"s":83,"e":91,"c":"pl-c1"},{"s":95,"e":113,"c":"pl-c1"}],[],[{"s":8,"e":31,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":34,"e":41,"c":"pl-c1"}],[{"s":46,"e":50,"c":"pl-c1"},{"s":57,"e":70,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":32,"e":35,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":78,"e":83,"c":"pl-c1"},{"s":84,"e":110,"c":"pl-s"},{"s":84,"e":85,"c":"pl-pds"},{"s":109,"e":110,"c":"pl-pds"},{"s":123,"e":124,"c":"pl-c1"},{"s":126,"e":146,"c":"pl-s"},{"s":126,"e":127,"c":"pl-pds"},{"s":145,"e":146,"c":"pl-pds"}],[{"s":27,"e":33,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":24,"e":31,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":78,"e":83,"c":"pl-c1"},{"s":84,"e":108,"c":"pl-s"},{"s":84,"e":85,"c":"pl-pds"},{"s":107,"e":108,"c":"pl-pds"},{"s":137,"e":150,"c":"pl-s"},{"s":137,"e":138,"c":"pl-pds"},{"s":149,"e":150,"c":"pl-pds"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":39,"c":"pl-c1"},{"s":79,"e":94,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":76,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":75,"e":76,"c":"pl-pds"},{"s":93,"e":101,"c":"pl-c1"},{"s":105,"e":123,"c":"pl-c1"}],[],[{"s":8,"e":79,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":0,"e":81,"c":"pl-c"}],[{"s":0,"e":39,"c":"pl-c"}],[{"s":0,"e":10,"c":"pl-c"}],[{"s":0,"e":28,"c":"pl-c"}],[{"s":0,"e":25,"c":"pl-c"}],[{"s":0,"e":23,"c":"pl-c"}],[{"s":0,"e":25,"c":"pl-c"}],[{"s":0,"e":38,"c":"pl-c"}],[{"s":0,"e":15,"c":"pl-c"}],[{"s":0,"e":33,"c":"pl-c"}],[{"s":0,"e":10,"c":"pl-c"}],[{"s":0,"e":77,"c":"pl-c"}],[{"s":0,"e":79,"c":"pl-c"}],[{"s":0,"e":76,"c":"pl-c"}],[{"s":0,"e":10,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":29,"c":"pl-c"}],[{"s":0,"e":11,"c":"pl-c"},{"s":9,"e":11,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"}],[{"s":12,"e":81,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":85,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":81,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":68,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":22,"c":"pl-k"}],[{"s":16,"e":18,"c":"pl-k"},{"s":32,"e":43,"c":"pl-c1"},{"s":54,"e":61,"c":"pl-smi"}],[{"s":20,"e":26,"c":"pl-c1"},{"s":37,"e":44,"c":"pl-smi"}],[],[{"s":20,"e":25,"c":"pl-k"}],[{"s":38,"e":45,"c":"pl-smi"}],[{"s":43,"e":49,"c":"pl-c1"}],[{"s":53,"e":58,"c":"pl-smi"}],[],[{"s":20,"e":26,"c":"pl-k"},{"s":33,"e":40,"c":"pl-c1"},{"s":86,"e":91,"c":"pl-c1"},{"s":92,"e":116,"c":"pl-s"},{"s":92,"e":93,"c":"pl-pds"},{"s":115,"e":116,"c":"pl-pds"},{"s":145,"e":158,"c":"pl-s"},{"s":145,"e":146,"c":"pl-pds"},{"s":157,"e":158,"c":"pl-pds"}],[],[],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":18,"e":25,"c":"pl-c1"}],[{"s":17,"e":32,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"}],[],[],[{"s":4,"e":19,"c":"pl-c1"},{"s":32,"e":44,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":40,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":27,"c":"pl-en"},{"s":28,"e":33,"c":"pl-k"},{"s":95,"e":100,"c":"pl-k"},{"s":128,"e":133,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":25,"e":32,"c":"pl-c1"},{"s":49,"e":56,"c":"pl-c1"}],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"}],[{"s":34,"e":41,"c":"pl-c1"},{"s":43,"e":104,"c":"pl-c"},{"s":43,"e":45,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":19,"e":35,"c":"pl-c1"},{"s":38,"e":55,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"}],[],[{"s":12,"e":14,"c":"pl-k"}],[],[],[],[],[{"s":4,"e":19,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":94,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":92,"e":94,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":19,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"},{"s":56,"e":59,"c":"pl-k"},{"s":69,"e":74,"c":"pl-k"},{"s":102,"e":107,"c":"pl-k"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":32,"e":48,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":22,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":21,"c":"pl-c1"},{"s":43,"e":44,"c":"pl-c1"},{"s":61,"e":73,"c":"pl-c1"},{"s":84,"e":91,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-c1"},{"s":14,"e":39,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":38,"e":39,"c":"pl-pds"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":26,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":15,"e":22,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":59,"e":71,"c":"pl-c1"}],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":45,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":44,"e":45,"c":"pl-pds"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":30,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":94,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":92,"e":94,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":29,"c":"pl-en"},{"s":30,"e":35,"c":"pl-k"},{"s":52,"e":57,"c":"pl-k"},{"s":100,"e":105,"c":"pl-k"},{"s":156,"e":160,"c":"pl-k"},{"s":161,"e":171,"c":"pl-smi"},{"s":173,"e":178,"c":"pl-k"},{"s":197,"e":201,"c":"pl-k"},{"s":203,"e":212,"c":"pl-smi"}],[],[{"s":4,"e":9,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":17,"c":"pl-smi"},{"s":20,"e":29,"c":"pl-smi"},{"s":32,"e":37,"c":"pl-c1"}],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":31,"e":38,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":26,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":56,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-smi"},{"s":32,"e":39,"c":"pl-smi"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":27,"c":"pl-smi"},{"s":39,"e":42,"c":"pl-c1"},{"s":55,"e":65,"c":"pl-smi"},{"s":77,"e":80,"c":"pl-c1"},{"s":84,"e":94,"c":"pl-smi"},{"s":97,"e":101,"c":"pl-c1"}],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":76,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":72,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":79,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":38,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":21,"c":"pl-smi"},{"s":33,"e":40,"c":"pl-smi"},{"s":43,"e":46,"c":"pl-c1"},{"s":55,"e":61,"c":"pl-c1"}],[],[{"s":4,"e":88,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":37,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":77,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":30,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":20,"c":"pl-smi"},{"s":22,"e":28,"c":"pl-k"},{"s":29,"e":33,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":19,"c":"pl-smi"},{"s":24,"e":51,"c":"pl-c"},{"s":24,"e":26,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":23,"c":"pl-smi"},{"s":27,"e":28,"c":"pl-c1"},{"s":30,"e":36,"c":"pl-k"},{"s":37,"e":41,"c":"pl-c1"},{"s":46,"e":101,"c":"pl-c"},{"s":46,"e":48,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":31,"c":"pl-smi"},{"s":33,"e":39,"c":"pl-k"},{"s":40,"e":44,"c":"pl-c1"},{"s":46,"e":79,"c":"pl-c"},{"s":46,"e":48,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":24,"c":"pl-smi"},{"s":26,"e":32,"c":"pl-k"},{"s":33,"e":37,"c":"pl-c1"},{"s":46,"e":73,"c":"pl-c"},{"s":46,"e":48,"c":"pl-c"}],[],[{"s":8,"e":60,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":60,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":62,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":40,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":30,"c":"pl-smi"},{"s":52,"e":58,"c":"pl-k"},{"s":59,"e":63,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":19,"c":"pl-c1"},{"s":46,"e":58,"c":"pl-c1"}],[{"s":9,"e":29,"c":"pl-c1"},{"s":56,"e":68,"c":"pl-c1"},{"s":80,"e":85,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":15,"e":28,"c":"pl-c1"},{"s":35,"e":44,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":27,"c":"pl-c1"},{"s":39,"e":48,"c":"pl-c1"}],[{"s":20,"e":27,"c":"pl-smi"}],[{"s":31,"e":37,"c":"pl-c1"}],[],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":29,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":28,"e":29,"c":"pl-pds"},{"s":41,"e":59,"c":"pl-c1"}],[],[],[{"s":4,"e":88,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":85,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":31,"c":"pl-c1"},{"s":45,"e":48,"c":"pl-c1"},{"s":62,"e":67,"c":"pl-smi"}],[{"s":8,"e":22,"c":"pl-c1"},{"s":25,"e":41,"c":"pl-c1"}],[],[{"s":4,"e":34,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":17,"c":"pl-smi"},{"s":20,"e":29,"c":"pl-smi"},{"s":32,"e":36,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"}],[{"s":31,"e":46,"c":"pl-c1"},{"s":62,"e":69,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":27,"c":"pl-c1"}],[{"s":18,"e":23,"c":"pl-c1"},{"s":24,"e":33,"c":"pl-c1"},{"s":34,"e":90,"c":"pl-s"},{"s":34,"e":35,"c":"pl-pds"},{"s":89,"e":90,"c":"pl-pds"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[{"s":8,"e":33,"c":"pl-c1"},{"s":71,"e":83,"c":"pl-c1"}],[{"s":6,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":24,"c":"pl-c1"},{"s":32,"e":43,"c":"pl-c1"},{"s":44,"e":60,"c":"pl-s"},{"s":44,"e":45,"c":"pl-pds"},{"s":59,"e":60,"c":"pl-pds"},{"s":66,"e":70,"c":"pl-c1"}],[],[],[{"s":4,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":19,"c":"pl-c1"},{"s":32,"e":44,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":20,"c":"pl-en"},{"s":21,"e":26,"c":"pl-k"},{"s":54,"e":59,"c":"pl-k"},{"s":76,"e":81,"c":"pl-k"},{"s":98,"e":102,"c":"pl-k"},{"s":103,"e":119,"c":"pl-smi"},{"s":121,"e":125,"c":"pl-k"},{"s":127,"e":136,"c":"pl-smi"}],[],[{"s":4,"e":21,"c":"pl-c1"}],[],[],[{"s":30,"e":37,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":21,"c":"pl-smi"},{"s":24,"e":33,"c":"pl-smi"},{"s":36,"e":41,"c":"pl-c1"}],[],[],[{"s":8,"e":118,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":96,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-c1"}],[],[{"s":8,"e":73,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":31,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":12,"c":"pl-k"},{"s":19,"e":29,"c":"pl-c1"},{"s":58,"e":70,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":28,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":20,"e":36,"c":"pl-c1"},{"s":39,"e":50,"c":"pl-c1"},{"s":88,"e":104,"c":"pl-smi"},{"s":106,"e":113,"c":"pl-c1"},{"s":115,"e":124,"c":"pl-smi"}],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":26,"c":"pl-c1"},{"s":29,"e":41,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":54,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":53,"e":54,"c":"pl-pds"},{"s":66,"e":84,"c":"pl-c1"}],[],[],[],[{"s":4,"e":19,"c":"pl-c1"}],[],[{"s":28,"e":85,"c":"pl-c"},{"s":28,"e":30,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":47,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":56,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"},{"s":68,"e":86,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":48,"e":53,"c":"pl-k"},{"s":81,"e":86,"c":"pl-k"},{"s":127,"e":131,"c":"pl-k"},{"s":132,"e":141,"c":"pl-smi"},{"s":143,"e":147,"c":"pl-k"},{"s":148,"e":164,"c":"pl-smi"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":41,"e":52,"c":"pl-c1"},{"s":55,"e":58,"c":"pl-c1"}],[{"s":20,"e":27,"c":"pl-smi"},{"s":38,"e":41,"c":"pl-c1"}],[{"s":12,"e":22,"c":"pl-smi"},{"s":29,"e":36,"c":"pl-c1"}],[{"s":16,"e":26,"c":"pl-smi"}],[{"s":15,"e":20,"c":"pl-smi"}],[{"s":15,"e":22,"c":"pl-smi"},{"s":37,"e":44,"c":"pl-smi"},{"s":47,"e":48,"c":"pl-c1"}],[{"s":15,"e":25,"c":"pl-smi"}],[],[{"s":4,"e":53,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":35,"c":"pl-c1"},{"s":75,"e":90,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":68,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":67,"e":68,"c":"pl-pds"},{"s":80,"e":98,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":19,"c":"pl-c1"},{"s":46,"e":58,"c":"pl-c1"},{"s":62,"e":71,"c":"pl-smi"},{"s":73,"e":89,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":52,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":51,"e":52,"c":"pl-pds"},{"s":64,"e":82,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":29,"c":"pl-c1"},{"s":56,"e":68,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":62,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":61,"e":62,"c":"pl-pds"},{"s":74,"e":92,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":42,"c":"pl-c1"},{"s":92,"e":96,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":17,"e":24,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":21,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[],[{"s":0,"e":77,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":75,"e":77,"c":"pl-c"}],[{"s":0,"e":8,"c":"pl-c1"},{"s":9,"e":30,"c":"pl-en"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":12,"c":"pl-c1"},{"s":22,"e":23,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"}],[{"s":23,"e":28,"c":"pl-smi"},{"s":36,"e":45,"c":"pl-smi"}],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":60,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":58,"e":60,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":23,"e":28,"c":"pl-k"},{"s":29,"e":32,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-k"}],[{"s":36,"e":42,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"}],[{"s":20,"e":27,"c":"pl-smi"}],[{"s":20,"e":27,"c":"pl-smi"}],[{"s":20,"e":25,"c":"pl-smi"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":20,"e":28,"c":"pl-smi"},{"s":31,"e":32,"c":"pl-c1"}],[{"s":20,"e":28,"c":"pl-smi"},{"s":31,"e":32,"c":"pl-c1"}],[{"s":31,"e":37,"c":"pl-c1"}],[],[{"s":12,"e":76,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":62,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":60,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":154,"e":165,"c":"pl-c1"},{"s":174,"e":179,"c":"pl-smi"}],[{"s":12,"e":17,"c":"pl-k"},{"s":25,"e":30,"c":"pl-smi"},{"s":40,"e":46,"c":"pl-smi"}],[{"s":82,"e":87,"c":"pl-smi"}],[{"s":22,"e":27,"c":"pl-smi"}],[{"s":16,"e":18,"c":"pl-k"},{"s":25,"e":31,"c":"pl-smi"}],[{"s":38,"e":43,"c":"pl-c1"}],[],[],[],[],[],[{"s":31,"e":38,"c":"pl-c1"}],[{"s":21,"e":27,"c":"pl-c1"}],[],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":22,"c":"pl-en"},{"s":23,"e":28,"c":"pl-k"},{"s":38,"e":41,"c":"pl-k"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":18,"e":21,"c":"pl-k"},{"s":54,"e":59,"c":"pl-c1"},{"s":85,"e":88,"c":"pl-c1"}],[{"s":20,"e":23,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"}],[{"s":8,"e":18,"c":"pl-c1"},{"s":19,"e":31,"c":"pl-c1"},{"s":34,"e":42,"c":"pl-c1"}],[{"s":8,"e":18,"c":"pl-c1"},{"s":19,"e":30,"c":"pl-c1"},{"s":33,"e":41,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":54,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":51,"e":53,"c":"pl-cce"},{"s":53,"e":54,"c":"pl-pds"}],[],[],[],[{"s":0,"e":112,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":110,"e":112,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":34,"c":"pl-en"},{"s":44,"e":47,"c":"pl-k"},{"s":67,"e":70,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-c1"},{"s":11,"e":21,"c":"pl-smi"},{"s":46,"e":47,"c":"pl-c1"}],[],[{"s":4,"e":9,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":27,"c":"pl-c1"},{"s":33,"e":40,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"}],[],[{"s":4,"e":100,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":40,"e":48,"c":"pl-c1"},{"s":50,"e":58,"c":"pl-k"},{"s":81,"e":92,"c":"pl-c1"},{"s":95,"e":98,"c":"pl-c1"},{"s":102,"e":109,"c":"pl-smi"}],[{"s":4,"e":7,"c":"pl-k"},{"s":14,"e":15,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":39,"e":44,"c":"pl-smi"},{"s":48,"e":49,"c":"pl-c1"},{"s":80,"e":91,"c":"pl-smi"}],[{"s":12,"e":20,"c":"pl-k"}],[{"s":8,"e":25,"c":"pl-c1"}],[{"s":24,"e":30,"c":"pl-c1"}],[],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":74,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":71,"e":73,"c":"pl-cce"},{"s":73,"e":74,"c":"pl-pds"}],[],[],[{"s":0,"e":67,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":65,"e":67,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":26,"c":"pl-en"},{"s":27,"e":30,"c":"pl-k"}],[],[],[{"s":4,"e":9,"c":"pl-k"},{"s":38,"e":44,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":46,"c":"pl-c1"}],[],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":52,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":49,"e":51,"c":"pl-cce"},{"s":51,"e":52,"c":"pl-pds"},{"s":64,"e":82,"c":"pl-c1"}],[],[],[],[{"s":0,"e":3,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":122,"c":"pl-c"}],[{"s":0,"e":120,"c":"pl-c"}],[{"s":0,"e":117,"c":"pl-c"}],[{"s":0,"e":67,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":105,"c":"pl-c"}],[{"s":0,"e":100,"c":"pl-c"}],[{"s":0,"e":136,"c":"pl-c"}],[{"s":0,"e":107,"c":"pl-c"}],[{"s":0,"e":120,"c":"pl-c"}],[{"s":0,"e":78,"c":"pl-c"}],[{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":96,"c":"pl-c"}],[{"s":0,"e":3,"c":"pl-c"},{"s":1,"e":3,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":11,"c":"pl-k"},{"s":12,"e":28,"c":"pl-en"},{"s":38,"e":41,"c":"pl-k"},{"s":61,"e":69,"c":"pl-c1"}],[],[{"s":4,"e":9,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":27,"c":"pl-c1"},{"s":33,"e":40,"c":"pl-c1"},{"s":60,"e":61,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":17,"c":"pl-c1"},{"s":20,"e":31,"c":"pl-c1"},{"s":34,"e":37,"c":"pl-c1"},{"s":41,"e":48,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"}],[],[],[{"s":4,"e":12,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":42,"e":53,"c":"pl-c1"},{"s":56,"e":59,"c":"pl-c1"},{"s":63,"e":70,"c":"pl-smi"}],[{"s":4,"e":12,"c":"pl-c1"},{"s":29,"e":50,"c":"pl-c1"}],[{"s":4,"e":78,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":85,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":31,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":12,"c":"pl-c1"}],[{"s":4,"e":12,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":14,"e":15,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":58,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":79,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":51,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":90,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":14,"e":30,"c":"pl-c1"},{"s":33,"e":55,"c":"pl-c1"}],[{"s":12,"e":73,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":38,"e":40,"c":"pl-c1"}],[],[],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":16,"c":"pl-k"},{"s":30,"e":31,"c":"pl-c1"}],[{"s":55,"e":60,"c":"pl-smi"},{"s":90,"e":99,"c":"pl-smi"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":43,"e":48,"c":"pl-smi"},{"s":52,"e":53,"c":"pl-c1"}],[{"s":16,"e":24,"c":"pl-k"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":57,"e":84,"c":"pl-c"},{"s":57,"e":59,"c":"pl-c"}],[{"s":16,"e":21,"c":"pl-k"}],[],[{"s":12,"e":124,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":43,"e":54,"c":"pl-smi"}],[{"s":16,"e":24,"c":"pl-k"}],[],[{"s":12,"e":29,"c":"pl-c1"}],[{"s":12,"e":45,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":28,"e":34,"c":"pl-c1"}],[],[],[],[],[],[{"s":4,"e":12,"c":"pl-c1"},{"s":27,"e":119,"c":"pl-s"},{"s":27,"e":28,"c":"pl-pds"},{"s":116,"e":118,"c":"pl-cce"},{"s":118,"e":119,"c":"pl-pds"}],[{"s":24,"e":28,"c":"pl-c1"},{"s":29,"e":33,"c":"pl-c1"},{"s":49,"e":53,"c":"pl-c1"},{"s":54,"e":58,"c":"pl-c1"}],[{"s":13,"e":20,"c":"pl-c1"},{"s":37,"e":44,"c":"pl-c1"},{"s":60,"e":64,"c":"pl-c1"},{"s":65,"e":69,"c":"pl-c1"}],[],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":19,"e":31,"c":"pl-en"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":22,"c":"pl-c1"},{"s":23,"e":35,"c":"pl-c1"},{"s":39,"e":44,"c":"pl-s"},{"s":39,"e":40,"c":"pl-pds"},{"s":43,"e":44,"c":"pl-pds"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":19,"e":30,"c":"pl-en"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":22,"c":"pl-c1"},{"s":23,"e":35,"c":"pl-c1"},{"s":39,"e":44,"c":"pl-s"},{"s":39,"e":40,"c":"pl-pds"},{"s":43,"e":44,"c":"pl-pds"}],[],[],[{"s":6,"e":19,"c":"pl-en"},{"s":20,"e":25,"c":"pl-k"},{"s":44,"e":48,"c":"pl-k"},{"s":49,"e":58,"c":"pl-smi"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":23,"c":"pl-c1"},{"s":26,"e":30,"c":"pl-c1"},{"s":36,"e":45,"c":"pl-smi"}],[],[],[{"s":0,"e":39,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":37,"e":39,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":13,"e":25,"c":"pl-en"},{"s":26,"e":31,"c":"pl-k"},{"s":50,"e":54,"c":"pl-k"},{"s":55,"e":64,"c":"pl-smi"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":22,"c":"pl-c1"},{"s":25,"e":29,"c":"pl-c1"},{"s":35,"e":44,"c":"pl-smi"}],[],[],[{"s":9,"e":28,"c":"pl-en"},{"s":29,"e":34,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":23,"c":"pl-c1"},{"s":26,"e":34,"c":"pl-c1"}],[],[],[{"s":14,"e":43,"c":"pl-en"},{"s":44,"e":49,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":13,"e":19,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":22,"c":"pl-c1"}],[],[{"s":4,"e":22,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":42,"e":46,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":28,"e":31,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":27,"c":"pl-smi"}],[],[{"s":4,"e":17,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":29,"e":32,"c":"pl-k"},{"s":33,"e":44,"c":"pl-c1"}],[{"s":23,"e":29,"c":"pl-c1"},{"s":30,"e":44,"c":"pl-c1"},{"s":63,"e":68,"c":"pl-smi"}],[{"s":15,"e":25,"c":"pl-smi"},{"s":36,"e":41,"c":"pl-smi"}],[],[{"s":4,"e":10,"c":"pl-k"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":32,"c":"pl-en"},{"s":33,"e":38,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":19,"e":37,"c":"pl-c1"},{"s":57,"e":61,"c":"pl-c1"},{"s":63,"e":68,"c":"pl-k"},{"s":84,"e":108,"c":"pl-c1"},{"s":120,"e":126,"c":"pl-k"},{"s":127,"e":131,"c":"pl-c1"},{"s":133,"e":149,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":27,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":26,"e":29,"c":"pl-k"}],[{"s":20,"e":27,"c":"pl-c1"},{"s":42,"e":46,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":25,"e":30,"c":"pl-k"}],[],[{"s":35,"e":41,"c":"pl-smi"}],[{"s":24,"e":33,"c":"pl-c1"},{"s":34,"e":48,"c":"pl-c1"},{"s":57,"e":64,"c":"pl-smi"}],[],[{"s":4,"e":8,"c":"pl-c1"},{"s":25,"e":30,"c":"pl-c1"},{"s":50,"e":53,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":25,"e":28,"c":"pl-k"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":29,"c":"pl-c1"},{"s":33,"e":39,"c":"pl-k"},{"s":40,"e":45,"c":"pl-c1"}],[{"s":35,"e":41,"c":"pl-smi"}],[{"s":16,"e":26,"c":"pl-smi"},{"s":38,"e":43,"c":"pl-smi"},{"s":54,"e":59,"c":"pl-smi"},{"s":61,"e":71,"c":"pl-smi"},{"s":74,"e":75,"c":"pl-c1"},{"s":79,"e":92,"c":"pl-c1"}],[{"s":16,"e":24,"c":"pl-smi"},{"s":36,"e":41,"c":"pl-smi"},{"s":44,"e":52,"c":"pl-c1"},{"s":61,"e":66,"c":"pl-smi"},{"s":68,"e":76,"c":"pl-smi"},{"s":86,"e":91,"c":"pl-smi"},{"s":103,"e":108,"c":"pl-smi"}],[{"s":8,"e":95,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":51,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":23,"c":"pl-smi"},{"s":26,"e":27,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":24,"e":29,"c":"pl-smi"}],[{"s":16,"e":18,"c":"pl-k"},{"s":28,"e":33,"c":"pl-smi"},{"s":35,"e":52,"c":"pl-c1"}],[{"s":28,"e":36,"c":"pl-smi"},{"s":47,"e":52,"c":"pl-smi"},{"s":54,"e":62,"c":"pl-smi"},{"s":73,"e":76,"c":"pl-smi"}],[{"s":18,"e":22,"c":"pl-k"}],[{"s":28,"e":36,"c":"pl-smi"},{"s":39,"e":40,"c":"pl-c1"}],[{"s":38,"e":44,"c":"pl-c1"},{"s":45,"e":59,"c":"pl-c1"},{"s":68,"e":73,"c":"pl-smi"}],[],[{"s":14,"e":18,"c":"pl-k"}],[{"s":24,"e":32,"c":"pl-smi"},{"s":43,"e":46,"c":"pl-smi"}],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":22,"e":29,"c":"pl-smi"},{"s":62,"e":67,"c":"pl-smi"},{"s":80,"e":85,"c":"pl-smi"},{"s":87,"e":94,"c":"pl-smi"}],[{"s":20,"e":27,"c":"pl-smi"}],[{"s":31,"e":37,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-c1"},{"s":66,"e":83,"c":"pl-c1"},{"s":97,"e":102,"c":"pl-smi"},{"s":106,"e":113,"c":"pl-c1"}],[{"s":36,"e":42,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-smi"},{"s":82,"e":92,"c":"pl-smi"},{"s":114,"e":124,"c":"pl-smi"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"}],[{"s":20,"e":29,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-c1"},{"s":70,"e":77,"c":"pl-c1"},{"s":81,"e":106,"c":"pl-c1"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":11,"c":"pl-k"},{"s":12,"e":28,"c":"pl-en"},{"s":29,"e":34,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":44,"c":"pl-c1"},{"s":57,"e":69,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":27,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":16,"e":33,"c":"pl-c1"}],[{"s":19,"e":25,"c":"pl-c1"},{"s":43,"e":44,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":42,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":39,"e":41,"c":"pl-cce"},{"s":41,"e":42,"c":"pl-pds"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"}],[{"s":20,"e":37,"c":"pl-c1"}],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":46,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":43,"e":45,"c":"pl-cce"},{"s":45,"e":46,"c":"pl-pds"},{"s":89,"e":97,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":38,"e":39,"c":"pl-c1"},{"s":41,"e":45,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":24,"e":41,"c":"pl-c1"}],[{"s":27,"e":36,"c":"pl-c1"}],[{"s":10,"e":14,"c":"pl-k"}],[{"s":12,"e":17,"c":"pl-k"}],[],[],[],[{"s":4,"e":34,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":55,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":52,"e":54,"c":"pl-cce"},{"s":54,"e":55,"c":"pl-pds"}],[{"s":13,"e":16,"c":"pl-k"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":25,"e":30,"c":"pl-k"}],[],[{"s":35,"e":41,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-smi"}],[{"s":28,"e":34,"c":"pl-c1"},{"s":43,"e":48,"c":"pl-smi"}],[],[],[{"s":4,"e":7,"c":"pl-k"},{"s":18,"e":21,"c":"pl-k"},{"s":54,"e":59,"c":"pl-c1"},{"s":85,"e":88,"c":"pl-c1"}],[],[{"s":20,"e":23,"c":"pl-smi"},{"s":29,"e":30,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":35,"c":"pl-c1"},{"s":41,"e":45,"c":"pl-c1"},{"s":74,"e":80,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[],[],[{"s":4,"e":59,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":16,"e":24,"c":"pl-c1"},{"s":25,"e":43,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":42,"e":43,"c":"pl-pds"},{"s":45,"e":56,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":19,"c":"pl-smi"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":81,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":78,"e":80,"c":"pl-cce"},{"s":80,"e":81,"c":"pl-pds"}],[],[{"s":4,"e":51,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":9,"e":20,"c":"pl-smi"},{"s":23,"e":28,"c":"pl-c1"}],[{"s":16,"e":30,"c":"pl-c1"},{"s":31,"e":42,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":7,"e":18,"c":"pl-smi"},{"s":20,"e":28,"c":"pl-smi"},{"s":31,"e":35,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":17,"c":"pl-en"},{"s":18,"e":23,"c":"pl-k"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":23,"e":35,"c":"pl-c1"},{"s":38,"e":44,"c":"pl-c1"},{"s":49,"e":93,"c":"pl-c"},{"s":49,"e":51,"c":"pl-c"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":27,"c":"pl-c1"},{"s":35,"e":46,"c":"pl-c1"},{"s":49,"e":52,"c":"pl-c1"},{"s":56,"e":68,"c":"pl-c1"},{"s":85,"e":97,"c":"pl-c1"},{"s":101,"e":107,"c":"pl-k"},{"s":108,"e":112,"c":"pl-c1"}],[],[{"s":4,"e":40,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":26,"e":42,"c":"pl-c1"},{"s":54,"e":66,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":17,"c":"pl-en"}],[],[{"s":4,"e":22,"c":"pl-en"}],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":83,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":80,"e":82,"c":"pl-cce"},{"s":82,"e":83,"c":"pl-pds"}],[{"s":8,"e":21,"c":"pl-en"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":20,"c":"pl-en"}],[],[{"s":16,"e":28,"c":"pl-c1"},{"s":29,"e":30,"c":"pl-c1"},{"s":31,"e":52,"c":"pl-s"},{"s":31,"e":32,"c":"pl-pds"},{"s":51,"e":52,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-c1"},{"s":58,"e":63,"c":"pl-c1"}],[],[],[{"s":0,"e":21,"c":"pl-en"}],[],[{"s":16,"e":28,"c":"pl-c1"},{"s":29,"e":31,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":30,"e":31,"c":"pl-pds"},{"s":33,"e":36,"c":"pl-c1"},{"s":38,"e":43,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":24,"c":"pl-en"},{"s":25,"e":30,"c":"pl-k"},{"s":81,"e":84,"c":"pl-k"},{"s":98,"e":101,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":27,"c":"pl-c1"},{"s":33,"e":40,"c":"pl-c1"},{"s":46,"e":57,"c":"pl-c1"},{"s":60,"e":63,"c":"pl-c1"},{"s":67,"e":72,"c":"pl-smi"},{"s":76,"e":83,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[],[{"s":4,"e":38,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":23,"e":24,"c":"pl-c1"},{"s":44,"e":55,"c":"pl-c1"},{"s":58,"e":64,"c":"pl-c1"}],[{"s":24,"e":35,"c":"pl-c1"},{"s":38,"e":44,"c":"pl-c1"}],[{"s":18,"e":26,"c":"pl-c1"},{"s":27,"e":28,"c":"pl-c1"},{"s":30,"e":38,"c":"pl-c1"},{"s":39,"e":40,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":54,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":51,"e":53,"c":"pl-cce"},{"s":53,"e":54,"c":"pl-pds"}],[{"s":20,"e":25,"c":"pl-smi"}],[],[{"s":33,"e":40,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":28,"e":29,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":24,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":23,"e":24,"c":"pl-pds"},{"s":27,"e":42,"c":"pl-c"},{"s":27,"e":29,"c":"pl-c"},{"s":40,"e":42,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":20,"e":31,"c":"pl-c1"},{"s":34,"e":37,"c":"pl-c1"},{"s":59,"e":64,"c":"pl-smi"},{"s":83,"e":88,"c":"pl-smi"}],[{"s":8,"e":46,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":14,"e":17,"c":"pl-k"},{"s":35,"e":43,"c":"pl-c1"},{"s":44,"e":45,"c":"pl-c1"},{"s":47,"e":55,"c":"pl-c1"},{"s":56,"e":58,"c":"pl-c1"},{"s":61,"e":64,"c":"pl-k"},{"s":68,"e":74,"c":"pl-k"},{"s":78,"e":89,"c":"pl-c1"},{"s":92,"e":98,"c":"pl-c1"},{"s":111,"e":118,"c":"pl-smi"},{"s":124,"e":130,"c":"pl-k"},{"s":161,"e":162,"c":"pl-c1"},{"s":165,"e":167,"c":"pl-c1"},{"s":170,"e":173,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":40,"e":42,"c":"pl-c1"}],[{"s":12,"e":36,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":33,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":32,"e":33,"c":"pl-pds"},{"s":52,"e":67,"c":"pl-c"},{"s":52,"e":54,"c":"pl-c"},{"s":65,"e":67,"c":"pl-c"}],[{"s":40,"e":42,"c":"pl-c1"}],[],[{"s":20,"e":32,"c":"pl-c1"},{"s":33,"e":34,"c":"pl-c1"},{"s":35,"e":56,"c":"pl-s"},{"s":35,"e":36,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"},{"s":75,"e":80,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-smi"},{"s":33,"e":44,"c":"pl-c1"},{"s":47,"e":53,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"}],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":22,"c":"pl-smi"},{"s":36,"e":43,"c":"pl-smi"}],[{"s":12,"e":63,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":97,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":94,"e":96,"c":"pl-cce"},{"s":96,"e":97,"c":"pl-pds"},{"s":107,"e":114,"c":"pl-smi"}],[{"s":12,"e":17,"c":"pl-k"}],[],[],[{"s":8,"e":40,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":30,"c":"pl-c1"},{"s":58,"e":70,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":82,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":81,"e":82,"c":"pl-pds"},{"s":92,"e":99,"c":"pl-smi"},{"s":109,"e":121,"c":"pl-c1"},{"s":124,"e":132,"c":"pl-c1"}],[{"s":8,"e":47,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":27,"e":28,"c":"pl-c1"},{"s":33,"e":43,"c":"pl-c1"},{"s":70,"e":82,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":72,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":69,"e":71,"c":"pl-cce"},{"s":71,"e":72,"c":"pl-pds"}],[{"s":33,"e":40,"c":"pl-smi"},{"s":50,"e":62,"c":"pl-c1"},{"s":65,"e":73,"c":"pl-c1"},{"s":77,"e":95,"c":"pl-c1"}],[{"s":8,"e":46,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":27,"e":28,"c":"pl-c1"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":25,"e":35,"c":"pl-c1"},{"s":38,"e":44,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":21,"e":37,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-k"},{"s":27,"e":32,"c":"pl-c1"},{"s":33,"e":87,"c":"pl-s"},{"s":33,"e":34,"c":"pl-pds"},{"s":84,"e":86,"c":"pl-cce"},{"s":86,"e":87,"c":"pl-pds"},{"s":97,"e":104,"c":"pl-smi"},{"s":114,"e":126,"c":"pl-c1"},{"s":129,"e":137,"c":"pl-c1"}],[],[],[],[{"s":8,"e":95,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":27,"e":28,"c":"pl-c1"},{"s":39,"e":57,"c":"pl-c1"},{"s":73,"e":91,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":25,"e":37,"c":"pl-c1"},{"s":51,"e":63,"c":"pl-c1"}],[{"s":37,"e":53,"c":"pl-c1"},{"s":56,"e":71,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":103,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":102,"e":103,"c":"pl-pds"},{"s":113,"e":120,"c":"pl-smi"},{"s":130,"e":142,"c":"pl-c1"},{"s":145,"e":153,"c":"pl-c1"}],[],[{"s":12,"e":14,"c":"pl-k"}],[{"s":36,"e":37,"c":"pl-c1"}],[],[{"s":14,"e":18,"c":"pl-k"}],[{"s":43,"e":46,"c":"pl-smi"},{"s":47,"e":51,"c":"pl-c1"}],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":12,"e":29,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":127,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":124,"e":126,"c":"pl-cce"},{"s":126,"e":127,"c":"pl-pds"},{"s":131,"e":142,"c":"pl-c1"},{"s":145,"e":151,"c":"pl-c1"},{"s":171,"e":178,"c":"pl-smi"},{"s":181,"e":182,"c":"pl-c1"}],[],[{"s":4,"e":62,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":24,"e":35,"c":"pl-c1"},{"s":38,"e":44,"c":"pl-c1"},{"s":57,"e":64,"c":"pl-smi"}],[],[{"s":4,"e":45,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":23,"e":24,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":27,"e":38,"c":"pl-c1"},{"s":41,"e":44,"c":"pl-c1"}],[{"s":12,"e":50,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"},{"s":18,"e":21,"c":"pl-k"},{"s":39,"e":47,"c":"pl-c1"},{"s":48,"e":49,"c":"pl-c1"},{"s":51,"e":59,"c":"pl-c1"},{"s":60,"e":62,"c":"pl-c1"},{"s":64,"e":67,"c":"pl-c1"},{"s":71,"e":74,"c":"pl-k"},{"s":78,"e":84,"c":"pl-k"},{"s":88,"e":99,"c":"pl-c1"},{"s":102,"e":108,"c":"pl-c1"},{"s":121,"e":128,"c":"pl-smi"},{"s":134,"e":140,"c":"pl-k"},{"s":155,"e":157,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":44,"e":46,"c":"pl-c1"}],[{"s":16,"e":40,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":25,"c":"pl-c1"},{"s":26,"e":37,"c":"pl-s"},{"s":26,"e":27,"c":"pl-pds"},{"s":36,"e":37,"c":"pl-pds"},{"s":56,"e":71,"c":"pl-c"},{"s":56,"e":58,"c":"pl-c"},{"s":69,"e":71,"c":"pl-c"}],[{"s":44,"e":46,"c":"pl-c1"}],[],[{"s":24,"e":36,"c":"pl-c1"},{"s":37,"e":38,"c":"pl-c1"},{"s":39,"e":60,"c":"pl-s"},{"s":39,"e":40,"c":"pl-pds"},{"s":59,"e":60,"c":"pl-pds"},{"s":79,"e":84,"c":"pl-c1"}],[{"s":23,"e":34,"c":"pl-c1"},{"s":37,"e":41,"c":"pl-c1"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":34,"c":"pl-c1"},{"s":62,"e":74,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":86,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":85,"e":86,"c":"pl-pds"},{"s":96,"e":103,"c":"pl-smi"},{"s":113,"e":125,"c":"pl-c1"},{"s":128,"e":136,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":19,"e":35,"c":"pl-c1"},{"s":38,"e":50,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":92,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":91,"e":92,"c":"pl-pds"},{"s":102,"e":109,"c":"pl-smi"},{"s":119,"e":131,"c":"pl-c1"},{"s":134,"e":142,"c":"pl-c1"},{"s":146,"e":164,"c":"pl-c1"}],[],[],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":25,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":22,"e":24,"c":"pl-cce"},{"s":24,"e":25,"c":"pl-pds"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":86,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":83,"e":85,"c":"pl-cce"},{"s":85,"e":86,"c":"pl-pds"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":102,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"},{"s":100,"e":102,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"},{"s":87,"e":92,"c":"pl-k"}],[],[{"s":4,"e":36,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":26,"c":"pl-c1"},{"s":49,"e":61,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":77,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":76,"e":77,"c":"pl-pds"},{"s":87,"e":94,"c":"pl-smi"},{"s":104,"e":116,"c":"pl-c1"},{"s":119,"e":127,"c":"pl-c1"}],[],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":43,"e":46,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":17,"e":27,"c":"pl-c1"}],[{"s":12,"e":15,"c":"pl-k"},{"s":17,"e":22,"c":"pl-k"},{"s":41,"e":44,"c":"pl-smi"}],[{"s":23,"e":32,"c":"pl-c1"},{"s":38,"e":45,"c":"pl-smi"}],[],[],[{"s":8,"e":67,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":16,"c":"pl-c1"},{"s":38,"e":45,"c":"pl-smi"},{"s":47,"e":51,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":30,"c":"pl-en"},{"s":31,"e":36,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":20,"e":25,"c":"pl-smi"}],[],[{"s":43,"e":56,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":18,"e":23,"c":"pl-c1"},{"s":27,"e":33,"c":"pl-k"},{"s":34,"e":38,"c":"pl-c1"},{"s":40,"e":79,"c":"pl-c"},{"s":40,"e":42,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":18,"e":22,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"},{"s":31,"e":37,"c":"pl-k"},{"s":38,"e":43,"c":"pl-c1"},{"s":44,"e":88,"c":"pl-s"},{"s":44,"e":45,"c":"pl-pds"},{"s":87,"e":88,"c":"pl-pds"}],[],[{"s":16,"e":28,"c":"pl-c1"},{"s":29,"e":30,"c":"pl-c1"},{"s":31,"e":52,"c":"pl-s"},{"s":31,"e":32,"c":"pl-pds"},{"s":51,"e":52,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-c1"},{"s":58,"e":63,"c":"pl-c1"}],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":34,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":31,"e":33,"c":"pl-cce"},{"s":33,"e":34,"c":"pl-pds"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":35,"e":42,"c":"pl-c1"},{"s":45,"e":85,"c":"pl-c"},{"s":45,"e":47,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":45,"e":85,"c":"pl-c"},{"s":45,"e":47,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":36,"e":43,"c":"pl-c1"},{"s":45,"e":100,"c":"pl-c"},{"s":45,"e":47,"c":"pl-c"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":22,"e":27,"c":"pl-c1"},{"s":38,"e":39,"c":"pl-c1"},{"s":45,"e":46,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":80,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":79,"e":80,"c":"pl-pds"}],[],[{"s":40,"e":41,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":19,"e":20,"c":"pl-c1"},{"s":22,"e":28,"c":"pl-c1"},{"s":34,"e":101,"c":"pl-c"},{"s":34,"e":36,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":26,"e":31,"c":"pl-c1"},{"s":42,"e":43,"c":"pl-c1"},{"s":49,"e":50,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":86,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":85,"e":86,"c":"pl-pds"}],[],[{"s":44,"e":45,"c":"pl-c1"}],[{"s":21,"e":39,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":29,"e":36,"c":"pl-c1"}],[],[],[{"s":4,"e":37,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"}],[{"s":8,"e":10,"c":"pl-k"},{"s":23,"e":30,"c":"pl-smi"},{"s":33,"e":34,"c":"pl-c1"},{"s":38,"e":76,"c":"pl-c"},{"s":38,"e":40,"c":"pl-c"}],[],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":34,"c":"pl-c1"},{"s":60,"e":72,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":89,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":88,"e":89,"c":"pl-pds"},{"s":102,"e":109,"c":"pl-smi"},{"s":122,"e":134,"c":"pl-c1"},{"s":137,"e":145,"c":"pl-c1"}],[],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":46,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":43,"e":45,"c":"pl-cce"},{"s":45,"e":46,"c":"pl-pds"},{"s":59,"e":71,"c":"pl-c1"},{"s":74,"e":82,"c":"pl-c1"},{"s":97,"e":104,"c":"pl-smi"}],[{"s":35,"e":50,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":85,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":84,"e":85,"c":"pl-pds"},{"s":98,"e":105,"c":"pl-smi"},{"s":118,"e":130,"c":"pl-c1"},{"s":133,"e":141,"c":"pl-c1"}],[],[{"s":12,"e":115,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":113,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":118,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":99,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[],[{"s":31,"e":36,"c":"pl-smi"}],[],[],[{"s":4,"e":58,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":7,"c":"pl-k"},{"s":47,"e":54,"c":"pl-smi"},{"s":57,"e":58,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":37,"e":38,"c":"pl-c1"},{"s":62,"e":69,"c":"pl-smi"}],[{"s":8,"e":13,"c":"pl-k"},{"s":47,"e":58,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":45,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":42,"e":44,"c":"pl-cce"},{"s":44,"e":45,"c":"pl-pds"},{"s":55,"e":67,"c":"pl-c1"},{"s":70,"e":78,"c":"pl-c1"}],[{"s":20,"e":32,"c":"pl-c1"},{"s":33,"e":34,"c":"pl-c1"},{"s":35,"e":56,"c":"pl-s"},{"s":35,"e":36,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"},{"s":60,"e":63,"c":"pl-k"},{"s":92,"e":97,"c":"pl-c1"},{"s":112,"e":119,"c":"pl-smi"},{"s":138,"e":143,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":54,"e":60,"c":"pl-k"},{"s":61,"e":66,"c":"pl-c1"}],[],[],[{"s":10,"e":22,"c":"pl-c1"},{"s":34,"e":46,"c":"pl-c1"}],[{"s":10,"e":15,"c":"pl-c1"}],[{"s":16,"e":28,"c":"pl-c1"},{"s":29,"e":31,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":30,"e":31,"c":"pl-pds"},{"s":33,"e":36,"c":"pl-c1"},{"s":38,"e":43,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":17,"c":"pl-en"},{"s":18,"e":23,"c":"pl-k"}],[{"s":4,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":32,"e":44,"c":"pl-c1"}],[],[],[{"s":0,"e":44,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":32,"c":"pl-en"}],[],[{"s":4,"e":18,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":20,"e":28,"c":"pl-c1"},{"s":29,"e":34,"c":"pl-c1"},{"s":38,"e":74,"c":"pl-c"},{"s":38,"e":40,"c":"pl-c"}],[],[{"s":4,"e":22,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":18,"c":"pl-smi"},{"s":30,"e":38,"c":"pl-k"},{"s":39,"e":42,"c":"pl-k"},{"s":44,"e":49,"c":"pl-c1"},{"s":51,"e":58,"c":"pl-smi"},{"s":100,"e":105,"c":"pl-c1"},{"s":107,"e":114,"c":"pl-smi"}],[{"s":4,"e":30,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":18,"c":"pl-smi"}],[{"s":4,"e":31,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":16,"c":"pl-smi"},{"s":19,"e":20,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":19,"c":"pl-smi"},{"s":22,"e":23,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":19,"c":"pl-smi"},{"s":22,"e":23,"c":"pl-c1"}],[{"s":4,"e":34,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":14,"c":"pl-smi"},{"s":17,"e":18,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":19,"c":"pl-smi"},{"s":22,"e":23,"c":"pl-c1"}],[{"s":4,"e":9,"c":"pl-c1"},{"s":11,"e":22,"c":"pl-smi"},{"s":25,"e":26,"c":"pl-c1"}],[{"s":4,"e":33,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":23,"e":29,"c":"pl-c1"},{"s":30,"e":35,"c":"pl-c1"}],[{"s":4,"e":21,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":28,"e":33,"c":"pl-c1"},{"s":34,"e":39,"c":"pl-c1"}],[{"s":144,"e":155,"c":"pl-c1"},{"s":156,"e":161,"c":"pl-c1"},{"s":163,"e":168,"c":"pl-smi"}],[{"s":4,"e":9,"c":"pl-k"},{"s":15,"e":20,"c":"pl-smi"},{"s":28,"e":34,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":16,"e":21,"c":"pl-smi"},{"s":23,"e":29,"c":"pl-smi"},{"s":33,"e":38,"c":"pl-c1"}],[{"s":30,"e":35,"c":"pl-c1"},{"s":40,"e":45,"c":"pl-smi"}],[{"s":10,"e":14,"c":"pl-k"}],[{"s":18,"e":23,"c":"pl-smi"}],[],[],[{"s":4,"e":51,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":8,"e":13,"c":"pl-c1"},{"s":15,"e":20,"c":"pl-smi"},{"s":24,"e":29,"c":"pl-c1"},{"s":31,"e":36,"c":"pl-smi"},{"s":38,"e":45,"c":"pl-c1"},{"s":75,"e":80,"c":"pl-c1"},{"s":82,"e":87,"c":"pl-smi"},{"s":89,"e":106,"c":"pl-c1"}],[{"s":32,"e":38,"c":"pl-c1"},{"s":39,"e":44,"c":"pl-c1"},{"s":46,"e":51,"c":"pl-smi"}],[],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"}],[],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":69,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":32,"c":"pl-c1"},{"s":39,"e":45,"c":"pl-smi"},{"s":47,"e":52,"c":"pl-smi"},{"s":61,"e":73,"c":"pl-c1"},{"s":88,"e":94,"c":"pl-smi"},{"s":96,"e":103,"c":"pl-smi"},{"s":137,"e":145,"c":"pl-c1"},{"s":152,"e":158,"c":"pl-smi"}],[{"s":16,"e":30,"c":"pl-c1"},{"s":37,"e":43,"c":"pl-smi"}],[],[],[],[],[{"s":4,"e":49,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":18,"e":19,"c":"pl-c1"}],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":34,"e":40,"c":"pl-c1"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":67,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":82,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":32,"c":"pl-c1"},{"s":51,"e":52,"c":"pl-c1"},{"s":62,"e":74,"c":"pl-c1"},{"s":101,"e":108,"c":"pl-smi"}],[{"s":16,"e":21,"c":"pl-k"}],[],[],[],[],[{"s":22,"e":25,"c":"pl-c1"}],[],[{"s":4,"e":94,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[],[{"s":4,"e":71,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":12,"e":29,"c":"pl-c1"}],[],[{"s":12,"e":16,"c":"pl-c1"}],[{"s":12,"e":140,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":34,"e":37,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":23,"e":30,"c":"pl-c1"},{"s":39,"e":46,"c":"pl-smi"},{"s":58,"e":63,"c":"pl-k"}],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":26,"c":"pl-smi"},{"s":37,"e":44,"c":"pl-smi"}],[{"s":16,"e":76,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":69,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":73,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":71,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":38,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":21,"c":"pl-k"}],[],[],[{"s":12,"e":31,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":30,"c":"pl-c1"},{"s":46,"e":53,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"},{"s":29,"e":93,"c":"pl-s"},{"s":29,"e":30,"c":"pl-pds"},{"s":92,"e":93,"c":"pl-pds"},{"s":100,"e":107,"c":"pl-smi"},{"s":109,"e":127,"c":"pl-c1"}],[],[],[{"s":12,"e":56,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":101,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":104,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":75,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":83,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":52,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":26,"c":"pl-c1"}],[],[{"s":23,"e":28,"c":"pl-smi"}],[],[{"s":8,"e":80,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":37,"c":"pl-c1"}],[],[{"s":8,"e":44,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"}],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":78,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":75,"e":77,"c":"pl-cce"},{"s":77,"e":78,"c":"pl-pds"},{"s":80,"e":98,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[],[],[],[{"s":8,"e":12,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":23,"c":"pl-c1"},{"s":29,"e":36,"c":"pl-c1"}],[{"s":12,"e":80,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":49,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":37,"c":"pl-c1"}],[],[{"s":12,"e":27,"c":"pl-c1"},{"s":35,"e":47,"c":"pl-c1"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"}],[{"s":4,"e":6,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":46,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":6,"c":"pl-k"},{"s":10,"e":21,"c":"pl-c1"},{"s":24,"e":27,"c":"pl-c1"},{"s":33,"e":40,"c":"pl-c1"}],[{"s":8,"e":78,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":74,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":46,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":15,"e":31,"c":"pl-c1"},{"s":34,"e":50,"c":"pl-c1"}],[{"s":12,"e":21,"c":"pl-c1"},{"s":22,"e":78,"c":"pl-s"},{"s":22,"e":23,"c":"pl-pds"},{"s":75,"e":77,"c":"pl-cce"},{"s":77,"e":78,"c":"pl-pds"},{"s":80,"e":98,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":34,"c":"pl-en"}],[{"s":23,"e":24,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-c1"}],[{"s":28,"e":33,"c":"pl-c1"}],[],[],[{"s":0,"e":55,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":52,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":20,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-en"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":17,"c":"pl-en"},{"s":27,"e":34,"c":"pl-c1"}],[{"s":24,"e":31,"c":"pl-c1"}],[{"s":23,"e":30,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-c1"}],[{"s":22,"e":27,"c":"pl-c1"}],[{"s":19,"e":24,"c":"pl-c1"}],[{"s":21,"e":22,"c":"pl-c1"}],[{"s":23,"e":28,"c":"pl-c1"}],[{"s":21,"e":26,"c":"pl-c1"}],[{"s":21,"e":26,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":12,"c":"pl-k"},{"s":17,"e":18,"c":"pl-c1"}],[{"s":24,"e":29,"c":"pl-c1"}],[],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":21,"e":27,"c":"pl-smi"}],[],[{"s":18,"e":23,"c":"pl-c1"}],[{"s":4,"e":15,"c":"pl-smi"},{"s":18,"e":23,"c":"pl-c1"}],[],[{"s":4,"e":22,"c":"pl-en"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":19,"c":"pl-en"},{"s":20,"e":25,"c":"pl-k"}],[],[{"s":4,"e":38,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":8,"c":"pl-k"},{"s":22,"e":30,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":17,"c":"pl-smi"}],[{"s":8,"e":12,"c":"pl-k"},{"s":19,"e":35,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":24,"c":"pl-k"},{"s":25,"e":30,"c":"pl-c1"}],[{"s":35,"e":40,"c":"pl-c1"}],[],[],[{"s":4,"e":6,"c":"pl-k"}],[{"s":8,"e":65,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":65,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":62,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":65,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":22,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":47,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":44,"e":46,"c":"pl-cce"},{"s":46,"e":47,"c":"pl-pds"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":73,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":70,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":34,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":22,"e":27,"c":"pl-c1"},{"s":40,"e":52,"c":"pl-c1"},{"s":55,"e":62,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":19,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"}],[{"s":8,"e":13,"c":"pl-k"},{"s":42,"e":54,"c":"pl-c1"}],[{"s":31,"e":46,"c":"pl-c1"},{"s":54,"e":55,"c":"pl-c1"},{"s":70,"e":77,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":27,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"},{"s":25,"e":67,"c":"pl-s"},{"s":25,"e":26,"c":"pl-pds"},{"s":66,"e":67,"c":"pl-pds"}],[{"s":30,"e":45,"c":"pl-c1"}],[{"s":8,"e":33,"c":"pl-c1"},{"s":71,"e":83,"c":"pl-c1"}],[{"s":6,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"},{"s":21,"e":60,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":59,"e":60,"c":"pl-pds"},{"s":74,"e":78,"c":"pl-c1"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":21,"c":"pl-en"},{"s":22,"e":27,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":13,"e":29,"c":"pl-c1"},{"s":32,"e":48,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":26,"c":"pl-en"},{"s":27,"e":32,"c":"pl-k"}],[],[{"s":4,"e":83,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-k"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":34,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":18,"e":19,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"}],[{"s":8,"e":90,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":22,"e":28,"c":"pl-smi"},{"s":37,"e":38,"c":"pl-c1"},{"s":92,"e":93,"c":"pl-c1"}],[{"s":8,"e":16,"c":"pl-c1"},{"s":34,"e":40,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":23,"e":26,"c":"pl-c1"}],[{"s":12,"e":50,"c":"pl-c1"}],[],[{"s":19,"e":25,"c":"pl-c1"}],[{"s":23,"e":78,"c":"pl-c"},{"s":23,"e":25,"c":"pl-c"}],[{"s":19,"e":27,"c":"pl-c1"},{"s":31,"e":53,"c":"pl-c"},{"s":31,"e":33,"c":"pl-c"}],[{"s":12,"e":20,"c":"pl-k"},{"s":21,"e":24,"c":"pl-k"},{"s":33,"e":34,"c":"pl-c1"}],[{"s":12,"e":15,"c":"pl-k"}],[{"s":16,"e":34,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":24,"c":"pl-k"},{"s":25,"e":29,"c":"pl-k"}],[{"s":23,"e":31,"c":"pl-c1"},{"s":44,"e":56,"c":"pl-c1"},{"s":59,"e":60,"c":"pl-c1"}],[{"s":33,"e":39,"c":"pl-c1"},{"s":42,"e":43,"c":"pl-c1"}],[],[{"s":16,"e":18,"c":"pl-k"},{"s":20,"e":26,"c":"pl-c1"},{"s":44,"e":56,"c":"pl-c1"}],[{"s":20,"e":28,"c":"pl-k"}],[{"s":16,"e":28,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[],[{"s":16,"e":18,"c":"pl-k"},{"s":28,"e":30,"c":"pl-c1"}],[{"s":20,"e":28,"c":"pl-k"}],[{"s":14,"e":19,"c":"pl-k"},{"s":21,"e":26,"c":"pl-k"},{"s":32,"e":41,"c":"pl-c1"}],[{"s":16,"e":62,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":21,"c":"pl-k"}],[],[{"s":12,"e":15,"c":"pl-k"}],[{"s":16,"e":29,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":24,"c":"pl-c1"},{"s":44,"e":50,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"}],[{"s":25,"e":29,"c":"pl-smi"}],[{"s":23,"e":31,"c":"pl-c1"}],[{"s":23,"e":29,"c":"pl-c1"}],[],[],[],[{"s":33,"e":39,"c":"pl-c1"}],[],[{"s":37,"e":44,"c":"pl-c1"}],[],[{"s":20,"e":24,"c":"pl-c1"}],[{"s":20,"e":75,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":22,"c":"pl-k"},{"s":44,"e":56,"c":"pl-c1"},{"s":59,"e":75,"c":"pl-smi"},{"s":80,"e":96,"c":"pl-c1"},{"s":103,"e":116,"c":"pl-smi"}],[{"s":24,"e":32,"c":"pl-c1"},{"s":49,"e":99,"c":"pl-s"},{"s":49,"e":50,"c":"pl-pds"},{"s":96,"e":98,"c":"pl-cce"},{"s":98,"e":99,"c":"pl-pds"},{"s":116,"e":124,"c":"pl-c1"}],[{"s":38,"e":51,"c":"pl-smi"},{"s":52,"e":60,"c":"pl-c1"}],[{"s":24,"e":26,"c":"pl-k"}],[{"s":51,"e":57,"c":"pl-c1"},{"s":58,"e":72,"c":"pl-c1"},{"s":79,"e":92,"c":"pl-smi"}],[{"s":24,"e":32,"c":"pl-k"}],[],[],[{"s":20,"e":64,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":42,"e":58,"c":"pl-c1"}],[{"s":20,"e":22,"c":"pl-k"},{"s":44,"e":51,"c":"pl-smi"},{"s":74,"e":75,"c":"pl-c1"}],[],[{"s":22,"e":24,"c":"pl-k"},{"s":28,"e":44,"c":"pl-c1"},{"s":47,"e":58,"c":"pl-c1"},{"s":87,"e":94,"c":"pl-c1"},{"s":96,"e":100,"c":"pl-c1"},{"s":107,"e":114,"c":"pl-c1"}],[],[],[{"s":22,"e":24,"c":"pl-k"},{"s":32,"e":39,"c":"pl-c1"}],[{"s":26,"e":31,"c":"pl-k"}],[],[{"s":22,"e":26,"c":"pl-k"},{"s":27,"e":29,"c":"pl-k"},{"s":51,"e":63,"c":"pl-c1"},{"s":66,"e":82,"c":"pl-smi"},{"s":94,"e":101,"c":"pl-smi"},{"s":104,"e":108,"c":"pl-c1"},{"s":112,"e":113,"c":"pl-c1"}],[{"s":22,"e":30,"c":"pl-c1"},{"s":47,"e":98,"c":"pl-s"},{"s":47,"e":48,"c":"pl-pds"},{"s":95,"e":97,"c":"pl-cce"},{"s":97,"e":98,"c":"pl-pds"},{"s":105,"e":113,"c":"pl-c1"},{"s":125,"e":132,"c":"pl-smi"}],[],[],[],[{"s":16,"e":82,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":40,"e":52,"c":"pl-c1"},{"s":55,"e":71,"c":"pl-smi"}],[],[{"s":20,"e":22,"c":"pl-k"},{"s":25,"e":42,"c":"pl-c1"}],[{"s":24,"e":29,"c":"pl-k"}],[],[],[],[{"s":16,"e":31,"c":"pl-c1"}],[],[{"s":16,"e":83,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[],[{"s":22,"e":31,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-k"},{"s":30,"e":35,"c":"pl-c1"}],[{"s":41,"e":46,"c":"pl-c1"}],[{"s":26,"e":35,"c":"pl-c1"}],[{"s":155,"e":166,"c":"pl-c1"}],[{"s":20,"e":25,"c":"pl-k"},{"s":33,"e":38,"c":"pl-smi"},{"s":48,"e":54,"c":"pl-smi"}],[{"s":81,"e":86,"c":"pl-smi"}],[],[{"s":24,"e":26,"c":"pl-k"},{"s":28,"e":45,"c":"pl-c1"},{"s":68,"e":74,"c":"pl-smi"},{"s":88,"e":100,"c":"pl-c1"}],[],[{"s":28,"e":36,"c":"pl-c1"},{"s":53,"e":99,"c":"pl-s"},{"s":53,"e":54,"c":"pl-pds"},{"s":96,"e":98,"c":"pl-cce"},{"s":98,"e":99,"c":"pl-pds"},{"s":128,"e":135,"c":"pl-c1"},{"s":138,"e":146,"c":"pl-c1"}],[{"s":41,"e":49,"c":"pl-c1"}],[{"s":28,"e":32,"c":"pl-c1"}],[],[{"s":28,"e":30,"c":"pl-k"},{"s":34,"e":50,"c":"pl-c1"},{"s":53,"e":64,"c":"pl-c1"},{"s":102,"e":109,"c":"pl-c1"},{"s":111,"e":115,"c":"pl-c1"},{"s":122,"e":128,"c":"pl-smi"},{"s":130,"e":137,"c":"pl-c1"}],[],[],[{"s":38,"e":47,"c":"pl-c1"},{"s":65,"e":72,"c":"pl-c1"}],[],[],[{"s":30,"e":35,"c":"pl-smi"}],[{"s":47,"e":52,"c":"pl-c1"}],[{"s":24,"e":39,"c":"pl-c1"}],[],[],[{"s":14,"e":19,"c":"pl-k"},{"s":21,"e":26,"c":"pl-k"},{"s":32,"e":41,"c":"pl-c1"}],[{"s":16,"e":25,"c":"pl-c1"},{"s":26,"e":63,"c":"pl-s"},{"s":26,"e":27,"c":"pl-pds"},{"s":60,"e":62,"c":"pl-cce"},{"s":62,"e":63,"c":"pl-pds"},{"s":77,"e":81,"c":"pl-c1"}],[],[],[{"s":6,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":29,"c":"pl-c1"},{"s":30,"e":46,"c":"pl-s"},{"s":30,"e":31,"c":"pl-pds"},{"s":45,"e":46,"c":"pl-pds"},{"s":52,"e":56,"c":"pl-c1"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":18,"e":19,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":65,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":62,"e":64,"c":"pl-cce"},{"s":64,"e":65,"c":"pl-pds"},{"s":76,"e":89,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":21,"e":22,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":33,"c":"pl-en"},{"s":34,"e":39,"c":"pl-k"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":9,"e":25,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-k"}],[],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":101,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":99,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":22,"c":"pl-c1"},{"s":27,"e":28,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":29,"e":33,"c":"pl-c1"},{"s":39,"e":40,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"}],[],[],[{"s":4,"e":59,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[],[{"s":4,"e":7,"c":"pl-k"},{"s":9,"e":14,"c":"pl-k"},{"s":25,"e":30,"c":"pl-k"}],[{"s":16,"e":22,"c":"pl-c1"},{"s":23,"e":37,"c":"pl-c1"},{"s":44,"e":50,"c":"pl-smi"},{"s":52,"e":57,"c":"pl-smi"},{"s":65,"e":71,"c":"pl-smi"}],[],[],[{"s":4,"e":10,"c":"pl-c1"},{"s":19,"e":23,"c":"pl-c1"},{"s":43,"e":47,"c":"pl-c1"}],[],[{"s":140,"e":151,"c":"pl-c1"},{"s":152,"e":159,"c":"pl-c1"}],[{"s":39,"e":44,"c":"pl-smi"},{"s":46,"e":52,"c":"pl-smi"}],[{"s":17,"e":22,"c":"pl-smi"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":24,"e":29,"c":"pl-smi"},{"s":46,"e":52,"c":"pl-smi"},{"s":55,"e":108,"c":"pl-c"},{"s":55,"e":57,"c":"pl-c"}],[],[{"s":4,"e":68,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":80,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":75,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":20,"e":21,"c":"pl-c1"}],[{"s":4,"e":7,"c":"pl-k"},{"s":18,"e":19,"c":"pl-c1"}],[{"s":38,"e":45,"c":"pl-c1"},{"s":47,"e":93,"c":"pl-c"},{"s":47,"e":49,"c":"pl-c"}],[{"s":38,"e":45,"c":"pl-c1"},{"s":47,"e":112,"c":"pl-c"},{"s":47,"e":49,"c":"pl-c"}],[{"s":45,"e":52,"c":"pl-c1"},{"s":54,"e":102,"c":"pl-c"},{"s":54,"e":56,"c":"pl-c"}],[{"s":43,"e":50,"c":"pl-c1"},{"s":52,"e":153,"c":"pl-c"},{"s":52,"e":54,"c":"pl-c"}],[{"s":51,"e":58,"c":"pl-c1"},{"s":60,"e":169,"c":"pl-c"},{"s":60,"e":62,"c":"pl-c"}],[{"s":44,"e":51,"c":"pl-c1"},{"s":53,"e":155,"c":"pl-c"},{"s":53,"e":55,"c":"pl-c"}],[{"s":46,"e":53,"c":"pl-c1"},{"s":55,"e":159,"c":"pl-c"},{"s":55,"e":57,"c":"pl-c"}],[{"s":4,"e":9,"c":"pl-k"},{"s":21,"e":28,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":34,"e":41,"c":"pl-c1"},{"s":53,"e":60,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":34,"e":41,"c":"pl-c1"},{"s":55,"e":62,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":41,"e":48,"c":"pl-c1"},{"s":60,"e":63,"c":"pl-smi"},{"s":67,"e":68,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":29,"e":36,"c":"pl-c1"},{"s":67,"e":74,"c":"pl-c1"},{"s":87,"e":94,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":29,"e":36,"c":"pl-c1"},{"s":75,"e":82,"c":"pl-c1"},{"s":95,"e":102,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":29,"e":36,"c":"pl-c1"},{"s":68,"e":75,"c":"pl-c1"},{"s":88,"e":95,"c":"pl-smi"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":29,"e":36,"c":"pl-c1"},{"s":70,"e":77,"c":"pl-c1"},{"s":90,"e":97,"c":"pl-smi"}],[],[{"s":8,"e":44,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":29,"e":36,"c":"pl-c1"}],[{"s":12,"e":36,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":27,"e":39,"c":"pl-c1"},{"s":61,"e":77,"c":"pl-smi"},{"s":80,"e":115,"c":"pl-c"},{"s":80,"e":82,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":37,"e":44,"c":"pl-c1"},{"s":49,"e":112,"c":"pl-c"},{"s":49,"e":51,"c":"pl-c"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":38,"c":"pl-c1"},{"s":42,"e":48,"c":"pl-c1"},{"s":57,"e":68,"c":"pl-smi"},{"s":72,"e":73,"c":"pl-c1"},{"s":76,"e":179,"c":"pl-c"},{"s":76,"e":78,"c":"pl-c"}],[{"s":8,"e":107,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":102,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":24,"c":"pl-smi"}],[{"s":12,"e":84,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":29,"e":36,"c":"pl-smi"},{"s":68,"e":71,"c":"pl-smi"},{"s":75,"e":76,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-c1"}],[{"s":10,"e":14,"c":"pl-k"}],[{"s":12,"e":85,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":24,"e":31,"c":"pl-smi"},{"s":51,"e":57,"c":"pl-c1"},{"s":66,"e":69,"c":"pl-smi"},{"s":72,"e":73,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":27,"c":"pl-smi"},{"s":47,"e":53,"c":"pl-c1"},{"s":62,"e":69,"c":"pl-smi"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":25,"e":32,"c":"pl-smi"},{"s":94,"e":97,"c":"pl-smi"},{"s":100,"e":101,"c":"pl-c1"},{"s":105,"e":136,"c":"pl-c"},{"s":105,"e":107,"c":"pl-c"}],[{"s":8,"e":153,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":45,"e":52,"c":"pl-c1"},{"s":65,"e":82,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":51,"e":58,"c":"pl-c1"},{"s":71,"e":88,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":23,"e":30,"c":"pl-smi"},{"s":44,"e":74,"c":"pl-c"},{"s":44,"e":46,"c":"pl-c"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":23,"e":28,"c":"pl-smi"},{"s":32,"e":39,"c":"pl-c1"},{"s":51,"e":61,"c":"pl-smi"},{"s":73,"e":78,"c":"pl-smi"},{"s":80,"e":90,"c":"pl-smi"},{"s":93,"e":185,"c":"pl-c"},{"s":93,"e":95,"c":"pl-c"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":25,"e":26,"c":"pl-c1"},{"s":39,"e":44,"c":"pl-smi"},{"s":57,"e":62,"c":"pl-smi"},{"s":64,"e":71,"c":"pl-smi"},{"s":86,"e":154,"c":"pl-c"},{"s":86,"e":88,"c":"pl-c"}],[{"s":8,"e":14,"c":"pl-c1"},{"s":42,"e":49,"c":"pl-c1"},{"s":52,"e":108,"c":"pl-c"},{"s":52,"e":54,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":28,"c":"pl-smi"},{"s":70,"e":76,"c":"pl-c1"},{"s":104,"e":111,"c":"pl-c1"},{"s":114,"e":162,"c":"pl-c"},{"s":114,"e":116,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":28,"c":"pl-smi"},{"s":71,"e":77,"c":"pl-c1"},{"s":106,"e":113,"c":"pl-c1"},{"s":116,"e":166,"c":"pl-c"},{"s":116,"e":118,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":21,"e":28,"c":"pl-smi"},{"s":73,"e":79,"c":"pl-c1"},{"s":110,"e":117,"c":"pl-c1"},{"s":120,"e":174,"c":"pl-c"},{"s":120,"e":122,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":34,"e":41,"c":"pl-c1"}],[{"s":12,"e":45,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":28,"e":35,"c":"pl-smi"},{"s":60,"e":61,"c":"pl-c1"},{"s":64,"e":132,"c":"pl-c"},{"s":64,"e":66,"c":"pl-c"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":38,"c":"pl-c1"},{"s":57,"e":60,"c":"pl-c1"},{"s":96,"e":103,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":38,"e":45,"c":"pl-c1"}],[{"s":16,"e":78,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":79,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":77,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":53,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":42,"e":49,"c":"pl-c1"},{"s":71,"e":74,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-c1"},{"s":51,"e":56,"c":"pl-c1"}],[],[{"s":16,"e":85,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":93,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":16,"e":82,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[],[{"s":10,"e":14,"c":"pl-k"},{"s":17,"e":153,"c":"pl-c"},{"s":17,"e":19,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":43,"e":48,"c":"pl-c1"},{"s":60,"e":61,"c":"pl-c1"}],[],[{"s":8,"e":60,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":155,"e":166,"c":"pl-c1"},{"s":175,"e":180,"c":"pl-smi"}],[{"s":8,"e":12,"c":"pl-k"},{"s":31,"e":36,"c":"pl-c1"}],[{"s":8,"e":13,"c":"pl-k"},{"s":29,"e":34,"c":"pl-smi"},{"s":52,"e":58,"c":"pl-smi"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":33,"e":38,"c":"pl-smi"},{"s":40,"e":45,"c":"pl-smi"},{"s":57,"e":62,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":30,"e":35,"c":"pl-smi"},{"s":37,"e":43,"c":"pl-smi"}],[{"s":34,"e":38,"c":"pl-c1"}],[{"s":16,"e":21,"c":"pl-k"}],[],[{"s":26,"e":31,"c":"pl-smi"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":38,"e":45,"c":"pl-smi"},{"s":97,"e":104,"c":"pl-c1"},{"s":130,"e":137,"c":"pl-c1"}],[{"s":12,"e":147,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"},{"s":22,"e":29,"c":"pl-smi"},{"s":50,"e":56,"c":"pl-c1"},{"s":76,"e":130,"c":"pl-c"},{"s":76,"e":78,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":34,"e":41,"c":"pl-c1"},{"s":43,"e":49,"c":"pl-c1"},{"s":69,"e":144,"c":"pl-c"},{"s":69,"e":71,"c":"pl-c"}],[{"s":8,"e":10,"c":"pl-k"},{"s":20,"e":25,"c":"pl-smi"},{"s":38,"e":45,"c":"pl-smi"},{"s":97,"e":104,"c":"pl-c1"},{"s":130,"e":137,"c":"pl-c1"}],[{"s":12,"e":143,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":18,"c":"pl-c1"},{"s":19,"e":30,"c":"pl-smi"},{"s":33,"e":56,"c":"pl-c"},{"s":33,"e":35,"c":"pl-c"}],[{"s":12,"e":64,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":79,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":26,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":72,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":74,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":22,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":84,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":77,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":17,"e":42,"c":"pl-c1"},{"s":61,"e":64,"c":"pl-c1"},{"s":95,"e":100,"c":"pl-c1"},{"s":112,"e":113,"c":"pl-c1"}],[{"s":16,"e":18,"c":"pl-k"},{"s":42,"e":49,"c":"pl-c1"}],[{"s":20,"e":26,"c":"pl-c1"}],[],[],[],[{"s":8,"e":100,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":42,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[],[{"s":8,"e":49,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":137,"e":148,"c":"pl-c1"}],[{"s":8,"e":10,"c":"pl-k"},{"s":18,"e":23,"c":"pl-smi"},{"s":33,"e":39,"c":"pl-smi"}],[{"s":12,"e":35,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":27,"e":32,"c":"pl-smi"},{"s":34,"e":40,"c":"pl-smi"}],[],[{"s":12,"e":20,"c":"pl-k"}],[],[{"s":8,"e":31,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":94,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":8,"e":13,"c":"pl-k"}],[{"s":12,"e":78,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":97,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":12,"e":14,"c":"pl-k"},{"s":67,"e":74,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":67,"e":74,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":81,"e":88,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":77,"e":84,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":93,"e":100,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":79,"e":86,"c":"pl-c1"}],[{"s":12,"e":14,"c":"pl-k"},{"s":83,"e":90,"c":"pl-c1"}],[{"s":12,"e":31,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":45,"e":50,"c":"pl-smi"}],[{"s":12,"e":48,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":144,"e":155,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"},{"s":28,"e":33,"c":"pl-smi"},{"s":35,"e":41,"c":"pl-smi"}],[{"s":16,"e":22,"c":"pl-c1"},{"s":32,"e":37,"c":"pl-smi"},{"s":50,"e":56,"c":"pl-smi"},{"s":59,"e":128,"c":"pl-c"},{"s":59,"e":61,"c":"pl-c"}],[{"s":25,"e":30,"c":"pl-smi"}],[],[{"s":12,"e":39,"c":"pl-c"},{"s":12,"e":14,"c":"pl-c"}],[{"s":21,"e":26,"c":"pl-smi"}],[{"s":12,"e":14,"c":"pl-k"},{"s":25,"e":30,"c":"pl-smi"},{"s":43,"e":49,"c":"pl-smi"}],[{"s":16,"e":39,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[{"s":34,"e":39,"c":"pl-smi"},{"s":41,"e":47,"c":"pl-smi"}],[{"s":16,"e":21,"c":"pl-k"}],[{"s":14,"e":18,"c":"pl-k"}],[{"s":16,"e":35,"c":"pl-c"},{"s":16,"e":18,"c":"pl-c"}],[],[],[{"s":16,"e":24,"c":"pl-k"}],[],[],[],[],[{"s":4,"e":55,"c":"pl-c"},{"s":4,"e":6,"c":"pl-c"}],[{"s":4,"e":10,"c":"pl-c1"},{"s":29,"e":33,"c":"pl-c1"}],[],[],[{"s":12,"e":36,"c":"pl-en"},{"s":39,"e":44,"c":"pl-k"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":20,"c":"pl-c1"},{"s":21,"e":88,"c":"pl-s"},{"s":21,"e":22,"c":"pl-pds"},{"s":87,"e":88,"c":"pl-pds"},{"s":133,"e":150,"c":"pl-c1"},{"s":164,"e":181,"c":"pl-c1"}],[],[],[{"s":16,"e":32,"c":"pl-en"},{"s":33,"e":39,"c":"pl-c1"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":27,"e":29,"c":"pl-c1"}],[],[],[{"s":15,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":27,"c":"pl-c1"},{"s":30,"e":41,"c":"pl-c1"},{"s":44,"e":47,"c":"pl-c1"}],[],[],[{"s":10,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":32,"c":"pl-c1"},{"s":35,"e":46,"c":"pl-c1"},{"s":49,"e":52,"c":"pl-c1"}],[],[],[{"s":0,"e":3,"c":"pl-k"},{"s":4,"e":34,"c":"pl-en"},{"s":35,"e":40,"c":"pl-k"}],[],[{"s":4,"e":8,"c":"pl-c1"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":38,"c":"pl-c1"},{"s":41,"e":52,"c":"pl-c1"},{"s":55,"e":58,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":12,"c":"pl-k"},{"s":13,"e":21,"c":"pl-c1"},{"s":45,"e":46,"c":"pl-c1"}],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-en"}],[],[{"s":4,"e":9,"c":"pl-k"},{"s":38,"e":44,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":29,"e":34,"c":"pl-smi"},{"s":35,"e":41,"c":"pl-c1"},{"s":42,"e":58,"c":"pl-s"},{"s":42,"e":43,"c":"pl-pds"},{"s":57,"e":58,"c":"pl-pds"},{"s":86,"e":88,"c":"pl-c1"},{"s":91,"e":93,"c":"pl-c1"}],[{"s":20,"e":35,"c":"pl-c1"},{"s":36,"e":46,"c":"pl-c1"},{"s":51,"e":64,"c":"pl-s"},{"s":51,"e":52,"c":"pl-pds"},{"s":63,"e":64,"c":"pl-pds"},{"s":66,"e":70,"c":"pl-s"},{"s":66,"e":67,"c":"pl-pds"},{"s":69,"e":70,"c":"pl-pds"}],[{"s":14,"e":18,"c":"pl-smi"}],[{"s":4,"e":6,"c":"pl-k"},{"s":13,"e":19,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":79,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":76,"e":78,"c":"pl-cce"},{"s":78,"e":79,"c":"pl-pds"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":20,"e":21,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":22,"e":23,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":21,"e":22,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":28,"e":29,"c":"pl-c1"}],[{"s":4,"e":11,"c":"pl-c1"},{"s":19,"e":26,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"}],[{"s":8,"e":16,"c":"pl-c1"}],[],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[{"s":8,"e":16,"c":"pl-c1"}],[],[{"s":8,"e":13,"c":"pl-k"}],[],[{"s":12,"e":19,"c":"pl-c1"}],[{"s":12,"e":19,"c":"pl-c1"}],[],[],[],[],[],[{"s":12,"e":14,"c":"pl-k"}],[{"s":21,"e":42,"c":"pl-c1"},{"s":47,"e":54,"c":"pl-c1"}],[],[],[{"s":12,"e":14,"c":"pl-k"}],[{"s":16,"e":20,"c":"pl-c1"}],[{"s":16,"e":42,"c":"pl-c1"},{"s":73,"e":80,"c":"pl-c1"},{"s":81,"e":102,"c":"pl-c"},{"s":81,"e":83,"c":"pl-c"},{"s":100,"e":102,"c":"pl-c"}],[{"s":43,"e":50,"c":"pl-c1"},{"s":51,"e":70,"c":"pl-c"},{"s":51,"e":53,"c":"pl-c"},{"s":68,"e":70,"c":"pl-c"},{"s":72,"e":77,"c":"pl-c1"},{"s":78,"e":97,"c":"pl-c"},{"s":78,"e":80,"c":"pl-c"},{"s":95,"e":97,"c":"pl-c"},{"s":99,"e":100,"c":"pl-c1"},{"s":101,"e":117,"c":"pl-c"},{"s":101,"e":103,"c":"pl-c"},{"s":115,"e":117,"c":"pl-c"}],[{"s":43,"e":48,"c":"pl-c1"},{"s":49,"e":66,"c":"pl-c"},{"s":49,"e":51,"c":"pl-c"},{"s":64,"e":66,"c":"pl-c"}],[{"s":16,"e":18,"c":"pl-k"},{"s":26,"e":33,"c":"pl-c1"}],[],[{"s":18,"e":22,"c":"pl-k"}],[{"s":20,"e":77,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":74,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":80,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":63,"c":"pl-c"},{"s":20,"e":22,"c":"pl-c"}],[{"s":20,"e":22,"c":"pl-k"},{"s":29,"e":35,"c":"pl-c1"},{"s":40,"e":47,"c":"pl-c1"}],[],[{"s":22,"e":26,"c":"pl-k"}],[],[],[],[{"s":14,"e":18,"c":"pl-k"}],[],[],[{"s":12,"e":14,"c":"pl-k"},{"s":16,"e":33,"c":"pl-c1"}],[{"s":16,"e":22,"c":"pl-k"},{"s":23,"e":28,"c":"pl-c1"}],[],[],[],[],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-k"}],[{"s":17,"e":38,"c":"pl-c1"},{"s":41,"e":46,"c":"pl-smi"},{"s":50,"e":56,"c":"pl-smi"}],[],[{"s":6,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":24,"e":33,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":88,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":85,"e":87,"c":"pl-cce"},{"s":87,"e":88,"c":"pl-pds"},{"s":92,"e":96,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[],[{"s":4,"e":13,"c":"pl-c1"},{"s":14,"e":112,"c":"pl-s"},{"s":14,"e":15,"c":"pl-pds"},{"s":109,"e":111,"c":"pl-cce"},{"s":111,"e":112,"c":"pl-pds"}],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":4,"c":"pl-k"},{"s":5,"e":16,"c":"pl-en"},{"s":17,"e":22,"c":"pl-k"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":20,"e":33,"c":"pl-c1"}],[],[],[],[],[{"s":4,"e":10,"c":"pl-k"}],[{"s":4,"e":8,"c":"pl-c1"}],[],[],[{"s":8,"e":12,"c":"pl-c1"},{"s":18,"e":20,"c":"pl-smi"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-k"},{"s":34,"e":43,"c":"pl-smi"}],[{"s":24,"e":29,"c":"pl-smi"},{"s":35,"e":41,"c":"pl-smi"}],[],[{"s":21,"e":28,"c":"pl-c1"}],[],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":18,"e":31,"c":"pl-c1"}],[],[{"s":4,"e":7,"c":"pl-k"}],[{"s":24,"e":39,"c":"pl-c1"},{"s":40,"e":50,"c":"pl-c1"},{"s":55,"e":72,"c":"pl-s"},{"s":55,"e":56,"c":"pl-pds"},{"s":71,"e":72,"c":"pl-pds"},{"s":74,"e":78,"c":"pl-s"},{"s":74,"e":75,"c":"pl-pds"},{"s":77,"e":78,"c":"pl-pds"}],[{"s":8,"e":10,"c":"pl-k"}],[{"s":12,"e":18,"c":"pl-k"},{"s":19,"e":24,"c":"pl-c1"}],[],[],[{"s":18,"e":22,"c":"pl-smi"}],[],[{"s":8,"e":16,"c":"pl-c1"}],[],[],[{"s":17,"e":25,"c":"pl-c1"},{"s":32,"e":36,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":19,"e":23,"c":"pl-k"}],[{"s":24,"e":26,"c":"pl-smi"}],[{"s":21,"e":28,"c":"pl-c1"},{"s":31,"e":36,"c":"pl-smi"}],[{"s":21,"e":28,"c":"pl-c1"},{"s":31,"e":40,"c":"pl-smi"}],[{"s":22,"e":27,"c":"pl-c1"},{"s":30,"e":32,"c":"pl-smi"},{"s":34,"e":41,"c":"pl-c1"}],[],[],[],[{"s":8,"e":10,"c":"pl-k"},{"s":13,"e":23,"c":"pl-c1"},{"s":29,"e":32,"c":"pl-c1"}],[{"s":12,"e":17,"c":"pl-k"},{"s":18,"e":36,"c":"pl-smi"},{"s":37,"e":56,"c":"pl-s"},{"s":37,"e":38,"c":"pl-pds"},{"s":55,"e":56,"c":"pl-pds"}],[{"s":13,"e":19,"c":"pl-c1"}],[{"s":8,"e":18,"c":"pl-c1"},{"s":19,"e":29,"c":"pl-c1"},{"s":34,"e":51,"c":"pl-s"},{"s":34,"e":35,"c":"pl-pds"},{"s":50,"e":51,"c":"pl-pds"},{"s":53,"e":63,"c":"pl-c1"},{"s":68,"e":81,"c":"pl-s"},{"s":68,"e":69,"c":"pl-pds"},{"s":80,"e":81,"c":"pl-pds"}],[{"s":8,"e":15,"c":"pl-c1"},{"s":23,"e":36,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":62,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":59,"e":61,"c":"pl-cce"},{"s":61,"e":62,"c":"pl-pds"}],[{"s":6,"e":11,"c":"pl-k"},{"s":13,"e":18,"c":"pl-k"},{"s":24,"e":33,"c":"pl-c1"}],[{"s":8,"e":17,"c":"pl-c1"},{"s":18,"e":68,"c":"pl-s"},{"s":18,"e":19,"c":"pl-pds"},{"s":65,"e":67,"c":"pl-cce"},{"s":67,"e":68,"c":"pl-pds"},{"s":72,"e":76,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":20,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":15,"c":"pl-c1"}],[],[],[{"s":0,"e":77,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":90,"c":"pl-c"},{"s":0,"e":2,"c":"pl-c"}],[{"s":0,"e":6,"c":"pl-k"},{"s":7,"e":32,"c":"pl-en"},{"s":33,"e":38,"c":"pl-k"},{"s":58,"e":63,"c":"pl-k"}],[{"s":4,"e":6,"c":"pl-k"},{"s":18,"e":25,"c":"pl-c1"}],[{"s":8,"e":14,"c":"pl-k"},{"s":15,"e":18,"c":"pl-c1"}],[],[{"s":4,"e":11,"c":"pl-c1"},{"s":19,"e":23,"c":"pl-c1"},{"s":24,"e":31,"c":"pl-c1"}],[],[{"s":4,"e":10,"c":"pl-k"},{"s":11,"e":19,"c":"pl-smi"}],[],[{"s":4,"e":6,"c":"pl-k"},{"s":16,"e":24,"c":"pl-smi"},{"s":33,"e":41,"c":"pl-smi"}],[{"s":8,"e":16,"c":"pl-smi"},{"s":24,"e":32,"c":"pl-smi"},{"s":48,"e":53,"c":"pl-smi"},{"s":62,"e":69,"c":"pl-smi"}],[{"s":6,"e":10,"c":"pl-k"}],[{"s":8,"e":16,"c":"pl-smi"},{"s":27,"e":35,"c":"pl-smi"},{"s":54,"e":66,"c":"pl-c1"},{"s":77,"e":84,"c":"pl-smi"}],[],[],[{"s":4,"e":10,"c":"pl-k"},{"s":19,"e":27,"c":"pl-smi"},{"s":30,"e":38,"c":"pl-smi"}],[],[],[{"s":0,"e":5,"c":"pl-k"},{"s":6,"e":18,"c":"pl-en"}],[],[{"s":0,"e":7,"c":"pl-k"}],[{"s":4,"e":16,"c":"pl-en"}],[{"s":4,"e":17,"c":"pl-en"}],[{"s":8,"e":24,"c":"pl-c"},{"s":8,"e":10,"c":"pl-c"}],[{"s":47,"e":52,"c":"pl-c1"}],[{"s":8,"e":11,"c":"pl-k"},{"s":36,"e":39,"c":"pl-c1"}],[{"s":12,"e":18,"c":"pl-k"},{"s":26,"e":32,"c":"pl-smi"}],[{"s":22,"e":27,"c":"pl-c1"}],[],[],[{"s":0,"e":6,"c":"pl-k"}]],"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/bitcoin/bitcoin/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"validation.cpp","displayUrl":"https://github.com/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp?raw=true","headerInfo":{"blobSize":"216 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":null,"isGitLfs":false,"onBranch":false,"shortPath":"d39b786","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fbitcoin%2Fbitcoin%2Fblob%2F332c6134bb15384e5b91c631e821fe52a591d3bc%2Fsrc%2Fvalidation.cpp","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"4763","truncatedSloc":"4197"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"C++","languageID":43,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/bitcoin/bitcoin/blob/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/bitcoin/bitcoin/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/bitcoin/bitcoin/raw/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp","renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":true,"not_analyzed":false,"symbols":[{"name":"FindFilesToPruneManual","kind":"function","ident_start":5280,"ident_end":5302,"extent_start":5268,"extent_end":5359,"fully_qualified_name":"FindFilesToPruneManual","ident_utf16":{"start":{"line_number":174,"utf16_col":12},"end":{"line_number":174,"utf16_col":34}},"extent_utf16":{"start":{"line_number":174,"utf16_col":0},"end":{"line_number":174,"utf16_col":91}}},{"name":"FindFilesToPrune","kind":"function","ident_start":5372,"ident_end":5388,"extent_start":5360,"extent_end":5449,"fully_qualified_name":"FindFilesToPrune","ident_utf16":{"start":{"line_number":175,"utf16_col":12},"end":{"line_number":175,"utf16_col":28}},"extent_utf16":{"start":{"line_number":175,"utf16_col":0},"end":{"line_number":175,"utf16_col":89}}},{"name":"CheckInputs","kind":"function","ident_start":5455,"ident_end":5466,"extent_start":5450,"extent_end":5717,"fully_qualified_name":"CheckInputs","ident_utf16":{"start":{"line_number":176,"utf16_col":5},"end":{"line_number":176,"utf16_col":16}},"extent_utf16":{"start":{"line_number":176,"utf16_col":0},"end":{"line_number":176,"utf16_col":267}}},{"name":"BlockFileSeq","kind":"function","ident_start":5812,"ident_end":5824,"extent_start":5793,"extent_end":5827,"fully_qualified_name":"BlockFileSeq","ident_utf16":{"start":{"line_number":178,"utf16_col":19},"end":{"line_number":178,"utf16_col":31}},"extent_utf16":{"start":{"line_number":178,"utf16_col":0},"end":{"line_number":178,"utf16_col":34}}},{"name":"UndoFileSeq","kind":"function","ident_start":5847,"ident_end":5858,"extent_start":5828,"extent_end":5861,"fully_qualified_name":"UndoFileSeq","ident_utf16":{"start":{"line_number":179,"utf16_col":19},"end":{"line_number":179,"utf16_col":30}},"extent_utf16":{"start":{"line_number":179,"utf16_col":0},"end":{"line_number":179,"utf16_col":33}}},{"name":"CheckFinalTx","kind":"function","ident_start":5868,"ident_end":5880,"extent_start":5863,"extent_end":7394,"fully_qualified_name":"CheckFinalTx","ident_utf16":{"start":{"line_number":181,"utf16_col":5},"end":{"line_number":181,"utf16_col":17}},"extent_utf16":{"start":{"line_number":181,"utf16_col":0},"end":{"line_number":211,"utf16_col":1}}},{"name":"TestLockPointValidity","kind":"function","ident_start":7401,"ident_end":7422,"extent_start":7396,"extent_end":7999,"fully_qualified_name":"TestLockPointValidity","ident_utf16":{"start":{"line_number":213,"utf16_col":5},"end":{"line_number":213,"utf16_col":26}},"extent_utf16":{"start":{"line_number":213,"utf16_col":0},"end":{"line_number":229,"utf16_col":1}}},{"name":"CheckSequenceLocks","kind":"function","ident_start":8006,"ident_end":8024,"extent_start":8001,"extent_end":11269,"fully_qualified_name":"CheckSequenceLocks","ident_utf16":{"start":{"line_number":231,"utf16_col":5},"end":{"line_number":231,"utf16_col":23}},"extent_utf16":{"start":{"line_number":231,"utf16_col":0},"end":{"line_number":301,"utf16_col":1}}},{"name":"GetBlockScriptFlags","kind":"function","ident_start":11361,"ident_end":11380,"extent_start":11341,"extent_end":11446,"fully_qualified_name":"GetBlockScriptFlags","ident_utf16":{"start":{"line_number":304,"utf16_col":20},"end":{"line_number":304,"utf16_col":39}},"extent_utf16":{"start":{"line_number":304,"utf16_col":0},"end":{"line_number":304,"utf16_col":105}}},{"name":"LimitMempoolSize","kind":"function","ident_start":11460,"ident_end":11476,"extent_start":11448,"extent_end":11892,"fully_qualified_name":"LimitMempoolSize","ident_utf16":{"start":{"line_number":306,"utf16_col":12},"end":{"line_number":306,"utf16_col":28}},"extent_utf16":{"start":{"line_number":306,"utf16_col":0},"end":{"line_number":316,"utf16_col":1}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":11934,"ident_end":11958,"extent_start":11934,"extent_end":12294,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":318,"utf16_col":40},"end":{"line_number":318,"utf16_col":64}},"extent_utf16":{"start":{"line_number":318,"utf16_col":40},"end":{"line_number":328,"utf16_col":1}}},{"name":"UpdateMempoolForReorg","kind":"function","ident_start":12915,"ident_end":12936,"extent_start":12903,"extent_end":13003,"fully_qualified_name":"UpdateMempoolForReorg","ident_utf16":{"start":{"line_number":343,"utf16_col":12},"end":{"line_number":343,"utf16_col":33}},"extent_utf16":{"start":{"line_number":343,"utf16_col":0},"end":{"line_number":343,"utf16_col":100}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":13004,"ident_end":13028,"extent_start":13004,"extent_end":15210,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":343,"utf16_col":101},"end":{"line_number":343,"utf16_col":125}},"extent_utf16":{"start":{"line_number":343,"utf16_col":101},"end":{"line_number":380,"utf16_col":1}}},{"name":"CheckInputsFromMempoolAndCache","kind":"function","ident_start":15366,"ident_end":15396,"extent_start":15354,"extent_end":15591,"fully_qualified_name":"CheckInputsFromMempoolAndCache","ident_utf16":{"start":{"line_number":384,"utf16_col":12},"end":{"line_number":384,"utf16_col":42}},"extent_utf16":{"start":{"line_number":384,"utf16_col":0},"end":{"line_number":385,"utf16_col":92}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":15592,"ident_end":15616,"extent_start":15592,"extent_end":16920,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":385,"utf16_col":93},"end":{"line_number":385,"utf16_col":117}},"extent_utf16":{"start":{"line_number":385,"utf16_col":93},"end":{"line_number":416,"utf16_col":1}}},{"name":"AcceptToMemoryPoolWorker","kind":"function","ident_start":17392,"ident_end":17416,"extent_start":17380,"extent_end":17774,"fully_qualified_name":"AcceptToMemoryPoolWorker","ident_utf16":{"start":{"line_number":425,"utf16_col":12},"end":{"line_number":425,"utf16_col":36}},"extent_utf16":{"start":{"line_number":425,"utf16_col":0},"end":{"line_number":427,"utf16_col":136}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":17775,"ident_end":17799,"extent_start":17775,"extent_end":39194,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":427,"utf16_col":137},"end":{"line_number":427,"utf16_col":161}},"extent_utf16":{"start":{"line_number":427,"utf16_col":137},"end":{"line_number":823,"utf16_col":1}}},{"name":"AcceptToMemoryPoolWithTime","kind":"function","ident_start":39289,"ident_end":39315,"extent_start":39277,"extent_end":39617,"fully_qualified_name":"AcceptToMemoryPoolWithTime","ident_utf16":{"start":{"line_number":826,"utf16_col":12},"end":{"line_number":826,"utf16_col":38}},"extent_utf16":{"start":{"line_number":826,"utf16_col":0},"end":{"line_number":828,"utf16_col":87}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":39618,"ident_end":39642,"extent_start":39618,"extent_end":40534,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":828,"utf16_col":88},"end":{"line_number":828,"utf16_col":112}},"extent_utf16":{"start":{"line_number":828,"utf16_col":88},"end":{"line_number":845,"utf16_col":1}}},{"name":"AcceptToMemoryPool","kind":"function","ident_start":40541,"ident_end":40559,"extent_start":40536,"extent_end":41011,"fully_qualified_name":"AcceptToMemoryPool","ident_utf16":{"start":{"line_number":847,"utf16_col":5},"end":{"line_number":847,"utf16_col":23}},"extent_utf16":{"start":{"line_number":847,"utf16_col":0},"end":{"line_number":853,"utf16_col":1}}},{"name":"GetTransaction","kind":"function","ident_start":41214,"ident_end":41228,"extent_start":41209,"extent_end":42037,"fully_qualified_name":"GetTransaction","ident_utf16":{"start":{"line_number":859,"utf16_col":5},"end":{"line_number":859,"utf16_col":19}},"extent_utf16":{"start":{"line_number":859,"utf16_col":0},"end":{"line_number":887,"utf16_col":1}}},{"name":"WriteBlockToDisk","kind":"function","ident_start":42168,"ident_end":42184,"extent_start":42156,"extent_end":42838,"fully_qualified_name":"WriteBlockToDisk","ident_utf16":{"start":{"line_number":899,"utf16_col":12},"end":{"line_number":899,"utf16_col":28}},"extent_utf16":{"start":{"line_number":899,"utf16_col":0},"end":{"line_number":918,"utf16_col":1}}},{"name":"ReadBlockFromDisk","kind":"function","ident_start":42845,"ident_end":42862,"extent_start":42840,"extent_end":43600,"fully_qualified_name":"ReadBlockFromDisk","ident_utf16":{"start":{"line_number":920,"utf16_col":5},"end":{"line_number":920,"utf16_col":22}},"extent_utf16":{"start":{"line_number":920,"utf16_col":0},"end":{"line_number":942,"utf16_col":1}}},{"name":"ReadBlockFromDisk","kind":"function","ident_start":43607,"ident_end":43624,"extent_start":43602,"extent_end":44148,"fully_qualified_name":"ReadBlockFromDisk","ident_utf16":{"start":{"line_number":944,"utf16_col":5},"end":{"line_number":944,"utf16_col":22}},"extent_utf16":{"start":{"line_number":944,"utf16_col":0},"end":{"line_number":958,"utf16_col":1}}},{"name":"ReadRawBlockFromDisk","kind":"function","ident_start":44155,"ident_end":44175,"extent_start":44150,"extent_end":45602,"fully_qualified_name":"ReadRawBlockFromDisk","ident_utf16":{"start":{"line_number":960,"utf16_col":5},"end":{"line_number":960,"utf16_col":25}},"extent_utf16":{"start":{"line_number":960,"utf16_col":0},"end":{"line_number":993,"utf16_col":1}}},{"name":"ReadRawBlockFromDisk","kind":"function","ident_start":45609,"ident_end":45629,"extent_start":45604,"extent_end":45917,"fully_qualified_name":"ReadRawBlockFromDisk","ident_utf16":{"start":{"line_number":995,"utf16_col":5},"end":{"line_number":995,"utf16_col":25}},"extent_utf16":{"start":{"line_number":995,"utf16_col":0},"end":{"line_number":1004,"utf16_col":1}}},{"name":"GetBlockSubsidy","kind":"function","ident_start":45927,"ident_end":45942,"extent_start":45919,"extent_end":46358,"fully_qualified_name":"GetBlockSubsidy","ident_utf16":{"start":{"line_number":1006,"utf16_col":8},"end":{"line_number":1006,"utf16_col":23}},"extent_utf16":{"start":{"line_number":1006,"utf16_col":0},"end":{"line_number":1017,"utf16_col":1}}},{"name":"IsInitialBlockDownload","kind":"method","ident_start":46665,"ident_end":46687,"extent_start":46647,"extent_end":47373,"fully_qualified_name":"CChainState::IsInitialBlockDownload","ident_utf16":{"start":{"line_number":1024,"utf16_col":18},"end":{"line_number":1024,"utf16_col":40}},"extent_utf16":{"start":{"line_number":1024,"utf16_col":0},"end":{"line_number":1044,"utf16_col":1}}},{"name":"AlertNotify","kind":"function","ident_start":47468,"ident_end":47479,"extent_start":47456,"extent_end":48134,"fully_qualified_name":"AlertNotify","ident_utf16":{"start":{"line_number":1048,"utf16_col":12},"end":{"line_number":1048,"utf16_col":23}},"extent_utf16":{"start":{"line_number":1048,"utf16_col":0},"end":{"line_number":1064,"utf16_col":1}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":48177,"ident_end":48201,"extent_start":48177,"extent_end":50031,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":1066,"utf16_col":41},"end":{"line_number":1066,"utf16_col":65}},"extent_utf16":{"start":{"line_number":1066,"utf16_col":41},"end":{"line_number":1105,"utf16_col":1}}},{"name":"CheckForkWarningConditionsOnNewFork","kind":"function","ident_start":50045,"ident_end":50080,"extent_start":50033,"extent_end":50111,"fully_qualified_name":"CheckForkWarningConditionsOnNewFork","ident_utf16":{"start":{"line_number":1107,"utf16_col":12},"end":{"line_number":1107,"utf16_col":47}},"extent_utf16":{"start":{"line_number":1107,"utf16_col":0},"end":{"line_number":1107,"utf16_col":78}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":50112,"ident_end":50136,"extent_start":50112,"extent_end":51582,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":1107,"utf16_col":79},"end":{"line_number":1107,"utf16_col":103}},"extent_utf16":{"start":{"line_number":1107,"utf16_col":79},"end":{"line_number":1138,"utf16_col":1}}},{"name":"InvalidChainFound","kind":"function","ident_start":51596,"ident_end":51613,"extent_start":51584,"extent_end":51637,"fully_qualified_name":"InvalidChainFound","ident_utf16":{"start":{"line_number":1140,"utf16_col":12},"end":{"line_number":1140,"utf16_col":29}},"extent_utf16":{"start":{"line_number":1140,"utf16_col":0},"end":{"line_number":1140,"utf16_col":53}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":51638,"ident_end":51662,"extent_start":51638,"extent_end":52398,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":1140,"utf16_col":54},"end":{"line_number":1140,"utf16_col":78}},"extent_utf16":{"start":{"line_number":1140,"utf16_col":54},"end":{"line_number":1154,"utf16_col":1}}},{"name":"InvalidBlockFound","kind":"method","ident_start":52418,"ident_end":52435,"extent_start":52400,"extent_end":52780,"fully_qualified_name":"CChainState::InvalidBlockFound","ident_utf16":{"start":{"line_number":1156,"utf16_col":18},"end":{"line_number":1156,"utf16_col":35}},"extent_utf16":{"start":{"line_number":1156,"utf16_col":0},"end":{"line_number":1164,"utf16_col":1}}},{"name":"UpdateCoins","kind":"function","ident_start":52787,"ident_end":52798,"extent_start":52782,"extent_end":53254,"fully_qualified_name":"UpdateCoins","ident_utf16":{"start":{"line_number":1166,"utf16_col":5},"end":{"line_number":1166,"utf16_col":16}},"extent_utf16":{"start":{"line_number":1166,"utf16_col":0},"end":{"line_number":1179,"utf16_col":1}}},{"name":"UpdateCoins","kind":"function","ident_start":53261,"ident_end":53272,"extent_start":53256,"extent_end":53404,"fully_qualified_name":"UpdateCoins","ident_utf16":{"start":{"line_number":1181,"utf16_col":5},"end":{"line_number":1181,"utf16_col":16}},"extent_utf16":{"start":{"line_number":1181,"utf16_col":0},"end":{"line_number":1185,"utf16_col":1}}},{"name":"GetSpendHeight","kind":"function","ident_start":53743,"ident_end":53757,"extent_start":53739,"extent_end":53918,"fully_qualified_name":"GetSpendHeight","ident_utf16":{"start":{"line_number":1193,"utf16_col":4},"end":{"line_number":1193,"utf16_col":18}},"extent_utf16":{"start":{"line_number":1193,"utf16_col":0},"end":{"line_number":1198,"utf16_col":1}}},{"name":"scriptExecutionCacheNonce","kind":"function","ident_start":54015,"ident_end":54040,"extent_start":54000,"extent_end":54056,"fully_qualified_name":"scriptExecutionCacheNonce","ident_utf16":{"start":{"line_number":1202,"utf16_col":15},"end":{"line_number":1202,"utf16_col":40}},"extent_utf16":{"start":{"line_number":1202,"utf16_col":0},"end":{"line_number":1202,"utf16_col":56}}},{"name":"InitScriptExecutionCache","kind":"function","ident_start":54063,"ident_end":54087,"extent_start":54058,"extent_end":54656,"fully_qualified_name":"InitScriptExecutionCache","ident_utf16":{"start":{"line_number":1204,"utf16_col":5},"end":{"line_number":1204,"utf16_col":29}},"extent_utf16":{"start":{"line_number":1204,"utf16_col":0},"end":{"line_number":1211,"utf16_col":1}}},{"name":"CheckInputs","kind":"function","ident_start":55516,"ident_end":55527,"extent_start":55511,"extent_end":55767,"fully_qualified_name":"CheckInputs","ident_utf16":{"start":{"line_number":1230,"utf16_col":5},"end":{"line_number":1230,"utf16_col":16}},"extent_utf16":{"start":{"line_number":1230,"utf16_col":0},"end":{"line_number":1230,"utf16_col":256}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":55768,"ident_end":55792,"extent_start":55768,"extent_end":60720,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":1230,"utf16_col":257},"end":{"line_number":1230,"utf16_col":281}},"extent_utf16":{"start":{"line_number":1230,"utf16_col":257},"end":{"line_number":1315,"utf16_col":1}}},{"name":"UndoWriteToDisk","kind":"function","ident_start":60734,"ident_end":60749,"extent_start":60722,"extent_end":61612,"fully_qualified_name":"UndoWriteToDisk","ident_utf16":{"start":{"line_number":1317,"utf16_col":12},"end":{"line_number":1317,"utf16_col":27}},"extent_utf16":{"start":{"line_number":1317,"utf16_col":0},"end":{"line_number":1342,"utf16_col":1}}},{"name":"UndoReadFromDisk","kind":"function","ident_start":61619,"ident_end":61635,"extent_start":61614,"extent_end":62563,"fully_qualified_name":"UndoReadFromDisk","ident_utf16":{"start":{"line_number":1344,"utf16_col":5},"end":{"line_number":1344,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1344,"utf16_col":0},"end":{"line_number":1373,"utf16_col":1}}},{"name":"AbortNode","kind":"function","ident_start":62605,"ident_end":62614,"extent_start":62593,"extent_end":63155,"fully_qualified_name":"AbortNode","ident_utf16":{"start":{"line_number":1376,"utf16_col":12},"end":{"line_number":1376,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1376,"utf16_col":0},"end":{"line_number":1387,"utf16_col":1}}},{"name":"AbortNode","kind":"function","ident_start":63169,"ident_end":63178,"extent_start":63157,"extent_end":63384,"fully_qualified_name":"AbortNode","ident_utf16":{"start":{"line_number":1389,"utf16_col":12},"end":{"line_number":1389,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1389,"utf16_col":0},"end":{"line_number":1393,"utf16_col":1}}},{"name":"ApplyTxInUndo","kind":"function","ident_start":63652,"ident_end":63665,"extent_start":63648,"extent_end":64863,"fully_qualified_name":"ApplyTxInUndo","ident_utf16":{"start":{"line_number":1402,"utf16_col":4},"end":{"line_number":1402,"utf16_col":17}},"extent_utf16":{"start":{"line_number":1402,"utf16_col":0},"end":{"line_number":1427,"utf16_col":1}}},{"name":"DisconnectBlock","kind":"method","ident_start":65059,"ident_end":65074,"extent_start":65029,"extent_end":67263,"fully_qualified_name":"CChainState::DisconnectBlock","ident_utf16":{"start":{"line_number":1431,"utf16_col":30},"end":{"line_number":1431,"utf16_col":45}},"extent_utf16":{"start":{"line_number":1431,"utf16_col":0},"end":{"line_number":1486,"utf16_col":1}}},{"name":"FlushBlockFile","kind":"function","ident_start":67277,"ident_end":67291,"extent_start":67265,"extent_end":67794,"fully_qualified_name":"FlushBlockFile","ident_utf16":{"start":{"line_number":1488,"utf16_col":12},"end":{"line_number":1488,"utf16_col":26}},"extent_utf16":{"start":{"line_number":1488,"utf16_col":0},"end":{"line_number":1501,"utf16_col":1}}},{"name":"FindUndoPos","kind":"function","ident_start":67808,"ident_end":67819,"extent_start":67796,"extent_end":67897,"fully_qualified_name":"FindUndoPos","ident_utf16":{"start":{"line_number":1503,"utf16_col":12},"end":{"line_number":1503,"utf16_col":23}},"extent_utf16":{"start":{"line_number":1503,"utf16_col":0},"end":{"line_number":1503,"utf16_col":101}}},{"name":"WriteUndoDataForBlock","kind":"function","ident_start":67911,"ident_end":67932,"extent_start":67899,"extent_end":68683,"fully_qualified_name":"WriteUndoDataForBlock","ident_utf16":{"start":{"line_number":1505,"utf16_col":12},"end":{"line_number":1505,"utf16_col":33}},"extent_utf16":{"start":{"line_number":1505,"utf16_col":0},"end":{"line_number":1522,"utf16_col":1}}},{"name":"ThreadScriptCheck","kind":"function","ident_start":68747,"ident_end":68764,"extent_start":68742,"extent_end":68877,"fully_qualified_name":"ThreadScriptCheck","ident_utf16":{"start":{"line_number":1526,"utf16_col":5},"end":{"line_number":1526,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1526,"utf16_col":0},"end":{"line_number":1529,"utf16_col":1}}},{"name":"ComputeBlockVersion","kind":"function","ident_start":68943,"ident_end":68962,"extent_start":68935,"extent_end":69516,"fully_qualified_name":"ComputeBlockVersion","ident_utf16":{"start":{"line_number":1533,"utf16_col":8},"end":{"line_number":1533,"utf16_col":27}},"extent_utf16":{"start":{"line_number":1533,"utf16_col":0},"end":{"line_number":1546,"utf16_col":1}}},{"name":"WarningBitsConditionChecker","kind":"class","ident_start":69627,"ident_end":69654,"extent_start":69621,"extent_end":70551,"fully_qualified_name":"WarningBitsConditionChecker","ident_utf16":{"start":{"line_number":1551,"utf16_col":6},"end":{"line_number":1551,"utf16_col":33}},"extent_utf16":{"start":{"line_number":1551,"utf16_col":0},"end":{"line_number":1570,"utf16_col":1}}},{"name":"WarningBitsConditionChecker","kind":"function","ident_start":69744,"ident_end":69771,"extent_start":69735,"extent_end":69798,"fully_qualified_name":"WarningBitsConditionChecker::WarningBitsConditionChecker","ident_utf16":{"start":{"line_number":1557,"utf16_col":13},"end":{"line_number":1557,"utf16_col":40}},"extent_utf16":{"start":{"line_number":1557,"utf16_col":4},"end":{"line_number":1557,"utf16_col":67}}},{"name":"BeginTime","kind":"function","ident_start":69812,"ident_end":69821,"extent_start":69804,"extent_end":69883,"fully_qualified_name":"WarningBitsConditionChecker::BeginTime","ident_utf16":{"start":{"line_number":1559,"utf16_col":12},"end":{"line_number":1559,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1559,"utf16_col":4},"end":{"line_number":1559,"utf16_col":83}}},{"name":"EndTime","kind":"function","ident_start":69896,"ident_end":69903,"extent_start":69888,"extent_end":69999,"fully_qualified_name":"WarningBitsConditionChecker::EndTime","ident_utf16":{"start":{"line_number":1560,"utf16_col":12},"end":{"line_number":1560,"utf16_col":19}},"extent_utf16":{"start":{"line_number":1560,"utf16_col":4},"end":{"line_number":1560,"utf16_col":115}}},{"name":"Period","kind":"function","ident_start":70008,"ident_end":70014,"extent_start":70004,"extent_end":70106,"fully_qualified_name":"WarningBitsConditionChecker::Period","ident_utf16":{"start":{"line_number":1561,"utf16_col":8},"end":{"line_number":1561,"utf16_col":14}},"extent_utf16":{"start":{"line_number":1561,"utf16_col":4},"end":{"line_number":1561,"utf16_col":106}}},{"name":"Threshold","kind":"function","ident_start":70115,"ident_end":70124,"extent_start":70111,"extent_end":70222,"fully_qualified_name":"WarningBitsConditionChecker::Threshold","ident_utf16":{"start":{"line_number":1562,"utf16_col":8},"end":{"line_number":1562,"utf16_col":17}},"extent_utf16":{"start":{"line_number":1562,"utf16_col":4},"end":{"line_number":1562,"utf16_col":115}}},{"name":"Condition","kind":"function","ident_start":70233,"ident_end":70242,"extent_start":70228,"extent_end":70549,"fully_qualified_name":"WarningBitsConditionChecker::Condition","ident_utf16":{"start":{"line_number":1564,"utf16_col":9},"end":{"line_number":1564,"utf16_col":18}},"extent_utf16":{"start":{"line_number":1564,"utf16_col":4},"end":{"line_number":1569,"utf16_col":5}}},{"name":"IsScriptWitnessEnabled","kind":"function","ident_start":70932,"ident_end":70954,"extent_start":70920,"extent_end":71067,"fully_qualified_name":"IsScriptWitnessEnabled","ident_utf16":{"start":{"line_number":1578,"utf16_col":12},"end":{"line_number":1578,"utf16_col":34}},"extent_utf16":{"start":{"line_number":1578,"utf16_col":0},"end":{"line_number":1581,"utf16_col":1}}},{"name":"GetBlockScriptFlags","kind":"function","ident_start":71089,"ident_end":71108,"extent_start":71069,"extent_end":71177,"fully_qualified_name":"GetBlockScriptFlags","ident_utf16":{"start":{"line_number":1583,"utf16_col":20},"end":{"line_number":1583,"utf16_col":39}},"extent_utf16":{"start":{"line_number":1583,"utf16_col":0},"end":{"line_number":1583,"utf16_col":108}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":71178,"ident_end":71202,"extent_start":71178,"extent_end":72913,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":1583,"utf16_col":109},"end":{"line_number":1583,"utf16_col":133}},"extent_utf16":{"start":{"line_number":1583,"utf16_col":109},"end":{"line_number":1626,"utf16_col":1}}},{"name":"ConnectBlock","kind":"method","ident_start":73433,"ident_end":73445,"extent_start":73415,"extent_end":91859,"fully_qualified_name":"CChainState::ConnectBlock","ident_utf16":{"start":{"line_number":1642,"utf16_col":18},"end":{"line_number":1642,"utf16_col":30}},"extent_utf16":{"start":{"line_number":1642,"utf16_col":0},"end":{"line_number":1943,"utf16_col":1}}},{"name":"FlushStateToDisk","kind":"method","ident_start":91879,"ident_end":91895,"extent_start":91861,"extent_end":97786,"fully_qualified_name":"CChainState::FlushStateToDisk","ident_utf16":{"start":{"line_number":1945,"utf16_col":18},"end":{"line_number":1945,"utf16_col":34}},"extent_utf16":{"start":{"line_number":1945,"utf16_col":0},"end":{"line_number":2054,"utf16_col":1}}},{"name":"ForceFlushStateToDisk","kind":"method","ident_start":97806,"ident_end":97827,"extent_start":97788,"extent_end":98086,"fully_qualified_name":"CChainState::ForceFlushStateToDisk","ident_utf16":{"start":{"line_number":2056,"utf16_col":18},"end":{"line_number":2056,"utf16_col":39}},"extent_utf16":{"start":{"line_number":2056,"utf16_col":0},"end":{"line_number":2062,"utf16_col":1}}},{"name":"PruneAndFlush","kind":"method","ident_start":98106,"ident_end":98119,"extent_start":98088,"extent_end":98406,"fully_qualified_name":"CChainState::PruneAndFlush","ident_utf16":{"start":{"line_number":2064,"utf16_col":18},"end":{"line_number":2064,"utf16_col":31}},"extent_utf16":{"start":{"line_number":2064,"utf16_col":0},"end":{"line_number":2072,"utf16_col":1}}},{"name":"DoWarning","kind":"function","ident_start":98420,"ident_end":98429,"extent_start":98408,"extent_end":98612,"fully_qualified_name":"DoWarning","ident_utf16":{"start":{"line_number":2074,"utf16_col":12},"end":{"line_number":2074,"utf16_col":21}},"extent_utf16":{"start":{"line_number":2074,"utf16_col":0},"end":{"line_number":2082,"utf16_col":1}}},{"name":"AppendWarning","kind":"function","ident_start":98693,"ident_end":98706,"extent_start":98681,"extent_end":98805,"fully_qualified_name":"AppendWarning","ident_utf16":{"start":{"line_number":2085,"utf16_col":12},"end":{"line_number":2085,"utf16_col":25}},"extent_utf16":{"start":{"line_number":2085,"utf16_col":0},"end":{"line_number":2089,"utf16_col":1}}},{"name":"UpdateTip","kind":"function","ident_start":98899,"ident_end":98908,"extent_start":98887,"extent_end":101258,"fully_qualified_name":"UpdateTip","ident_utf16":{"start":{"line_number":2092,"utf16_col":12},"end":{"line_number":2092,"utf16_col":21}},"extent_utf16":{"start":{"line_number":2092,"utf16_col":0},"end":{"line_number":2139,"utf16_col":1}}},{"name":"DisconnectTip","kind":"method","ident_start":101746,"ident_end":101759,"extent_start":101728,"extent_end":103778,"fully_qualified_name":"CChainState::DisconnectTip","ident_utf16":{"start":{"line_number":2151,"utf16_col":18},"end":{"line_number":2151,"utf16_col":31}},"extent_utf16":{"start":{"line_number":2151,"utf16_col":0},"end":{"line_number":2195,"utf16_col":1}}},{"name":"PerBlockConnectTrace","kind":"class","ident_start":103968,"ident_end":103988,"extent_start":103961,"extent_end":104230,"fully_qualified_name":"PerBlockConnectTrace","ident_utf16":{"start":{"line_number":2203,"utf16_col":7},"end":{"line_number":2203,"utf16_col":27}},"extent_utf16":{"start":{"line_number":2203,"utf16_col":0},"end":{"line_number":2208,"utf16_col":1}}},{"name":"PerBlockConnectTrace","kind":"function","ident_start":104137,"ident_end":104157,"extent_start":104137,"extent_end":104228,"fully_qualified_name":"PerBlockConnectTrace::PerBlockConnectTrace","ident_utf16":{"start":{"line_number":2207,"utf16_col":4},"end":{"line_number":2207,"utf16_col":24}},"extent_utf16":{"start":{"line_number":2207,"utf16_col":4},"end":{"line_number":2207,"utf16_col":95}}},{"name":"ConnectTrace","kind":"class","ident_start":104969,"ident_end":104981,"extent_start":104963,"extent_end":106636,"fully_qualified_name":"ConnectTrace","ident_utf16":{"start":{"line_number":2225,"utf16_col":6},"end":{"line_number":2225,"utf16_col":18}},"extent_utf16":{"start":{"line_number":2225,"utf16_col":0},"end":{"line_number":2263,"utf16_col":1}}},{"name":"ConnectTrace","kind":"function","ident_start":105157,"ident_end":105169,"extent_start":105148,"extent_end":105396,"fully_qualified_name":"ConnectTrace::ConnectTrace","ident_utf16":{"start":{"line_number":2232,"utf16_col":13},"end":{"line_number":2232,"utf16_col":25}},"extent_utf16":{"start":{"line_number":2232,"utf16_col":4},"end":{"line_number":2234,"utf16_col":5}}},{"name":"BlockConnected","kind":"function","ident_start":105407,"ident_end":105421,"extent_start":105402,"extent_end":105731,"fully_qualified_name":"ConnectTrace::BlockConnected","ident_utf16":{"start":{"line_number":2236,"utf16_col":9},"end":{"line_number":2236,"utf16_col":23}},"extent_utf16":{"start":{"line_number":2236,"utf16_col":4},"end":{"line_number":2243,"utf16_col":5}}},{"name":"NotifyEntryRemoved","kind":"function","ident_start":106352,"ident_end":106370,"extent_start":106347,"extent_end":106634,"fully_qualified_name":"ConnectTrace::NotifyEntryRemoved","ident_utf16":{"start":{"line_number":2257,"utf16_col":9},"end":{"line_number":2257,"utf16_col":27}},"extent_utf16":{"start":{"line_number":2257,"utf16_col":4},"end":{"line_number":2262,"utf16_col":5}}},{"name":"ConnectTip","kind":"method","ident_start":106884,"ident_end":106894,"extent_start":106866,"extent_end":110126,"fully_qualified_name":"CChainState::ConnectTip","ident_utf16":{"start":{"line_number":2271,"utf16_col":18},"end":{"line_number":2271,"utf16_col":28}},"extent_utf16":{"start":{"line_number":2271,"utf16_col":0},"end":{"line_number":2324,"utf16_col":1}}},{"name":"PruneBlockIndexCandidates","kind":"method","ident_start":113091,"ident_end":113116,"extent_start":113073,"extent_end":113693,"fully_qualified_name":"CChainState::PruneBlockIndexCandidates","ident_utf16":{"start":{"line_number":2385,"utf16_col":18},"end":{"line_number":2385,"utf16_col":43}},"extent_utf16":{"start":{"line_number":2385,"utf16_col":0},"end":{"line_number":2394,"utf16_col":1}}},{"name":"ActivateBestChainStep","kind":"method","ident_start":113884,"ident_end":113905,"extent_start":113866,"extent_end":117611,"fully_qualified_name":"CChainState::ActivateBestChainStep","ident_utf16":{"start":{"line_number":2400,"utf16_col":18},"end":{"line_number":2400,"utf16_col":39}},"extent_utf16":{"start":{"line_number":2400,"utf16_col":0},"end":{"line_number":2481,"utf16_col":1}}},{"name":"LOCKS_EXCLUDED","kind":"function","ident_start":117643,"ident_end":117657,"extent_start":117643,"extent_end":118276,"fully_qualified_name":"LOCKS_EXCLUDED","ident_utf16":{"start":{"line_number":2483,"utf16_col":30},"end":{"line_number":2483,"utf16_col":44}},"extent_utf16":{"start":{"line_number":2483,"utf16_col":30},"end":{"line_number":2502,"utf16_col":1}}},{"name":"LOCKS_EXCLUDED","kind":"function","ident_start":118322,"ident_end":118336,"extent_start":118322,"extent_end":118484,"fully_qualified_name":"LOCKS_EXCLUDED","ident_utf16":{"start":{"line_number":2504,"utf16_col":44},"end":{"line_number":2504,"utf16_col":58}},"extent_utf16":{"start":{"line_number":2504,"utf16_col":44},"end":{"line_number":2510,"utf16_col":1}}},{"name":"ActivateBestChain","kind":"method","ident_start":118963,"ident_end":118980,"extent_start":118945,"extent_end":123829,"fully_qualified_name":"CChainState::ActivateBestChain","ident_utf16":{"start":{"line_number":2521,"utf16_col":18},"end":{"line_number":2521,"utf16_col":35}},"extent_utf16":{"start":{"line_number":2521,"utf16_col":0},"end":{"line_number":2617,"utf16_col":1}}},{"name":"ActivateBestChain","kind":"function","ident_start":123836,"ident_end":123853,"extent_start":123831,"extent_end":124043,"fully_qualified_name":"ActivateBestChain","ident_utf16":{"start":{"line_number":2619,"utf16_col":5},"end":{"line_number":2619,"utf16_col":22}},"extent_utf16":{"start":{"line_number":2619,"utf16_col":0},"end":{"line_number":2621,"utf16_col":1}}},{"name":"PreciousBlock","kind":"method","ident_start":124063,"ident_end":124076,"extent_start":124045,"extent_end":125258,"fully_qualified_name":"CChainState::PreciousBlock","ident_utf16":{"start":{"line_number":2623,"utf16_col":18},"end":{"line_number":2623,"utf16_col":31}},"extent_utf16":{"start":{"line_number":2623,"utf16_col":0},"end":{"line_number":2650,"utf16_col":1}}},{"name":"PreciousBlock","kind":"function","ident_start":125264,"ident_end":125277,"extent_start":125259,"extent_end":125425,"fully_qualified_name":"PreciousBlock","ident_utf16":{"start":{"line_number":2651,"utf16_col":5},"end":{"line_number":2651,"utf16_col":18}},"extent_utf16":{"start":{"line_number":2651,"utf16_col":0},"end":{"line_number":2653,"utf16_col":1}}},{"name":"InvalidateBlock","kind":"method","ident_start":125445,"ident_end":125460,"extent_start":125427,"extent_end":129444,"fully_qualified_name":"CChainState::InvalidateBlock","ident_utf16":{"start":{"line_number":2655,"utf16_col":18},"end":{"line_number":2655,"utf16_col":33}},"extent_utf16":{"start":{"line_number":2655,"utf16_col":0},"end":{"line_number":2738,"utf16_col":1}}},{"name":"InvalidateBlock","kind":"function","ident_start":129451,"ident_end":129466,"extent_start":129446,"extent_end":129626,"fully_qualified_name":"InvalidateBlock","ident_utf16":{"start":{"line_number":2740,"utf16_col":5},"end":{"line_number":2740,"utf16_col":20}},"extent_utf16":{"start":{"line_number":2740,"utf16_col":0},"end":{"line_number":2742,"utf16_col":1}}},{"name":"ResetBlockFailureFlags","kind":"method","ident_start":129646,"ident_end":129668,"extent_start":129628,"extent_end":130956,"fully_qualified_name":"CChainState::ResetBlockFailureFlags","ident_utf16":{"start":{"line_number":2744,"utf16_col":18},"end":{"line_number":2744,"utf16_col":40}},"extent_utf16":{"start":{"line_number":2744,"utf16_col":0},"end":{"line_number":2776,"utf16_col":1}}},{"name":"ResetBlockFailureFlags","kind":"function","ident_start":130963,"ident_end":130985,"extent_start":130958,"extent_end":131074,"fully_qualified_name":"ResetBlockFailureFlags","ident_utf16":{"start":{"line_number":2778,"utf16_col":5},"end":{"line_number":2778,"utf16_col":27}},"extent_utf16":{"start":{"line_number":2778,"utf16_col":0},"end":{"line_number":2780,"utf16_col":1}}},{"name":"ReceivedBlockTransactions","kind":"method","ident_start":132657,"ident_end":132682,"extent_start":132639,"extent_end":134725,"fully_qualified_name":"CChainState::ReceivedBlockTransactions","ident_utf16":{"start":{"line_number":2819,"utf16_col":18},"end":{"line_number":2819,"utf16_col":43}},"extent_utf16":{"start":{"line_number":2819,"utf16_col":0},"end":{"line_number":2863,"utf16_col":1}}},{"name":"FindBlockPos","kind":"function","ident_start":134739,"ident_end":134751,"extent_start":134727,"extent_end":136299,"fully_qualified_name":"FindBlockPos","ident_utf16":{"start":{"line_number":2865,"utf16_col":12},"end":{"line_number":2865,"utf16_col":24}},"extent_utf16":{"start":{"line_number":2865,"utf16_col":0},"end":{"line_number":2912,"utf16_col":1}}},{"name":"FindUndoPos","kind":"function","ident_start":136313,"ident_end":136324,"extent_start":136301,"extent_end":136959,"fully_qualified_name":"FindUndoPos","ident_utf16":{"start":{"line_number":2914,"utf16_col":12},"end":{"line_number":2914,"utf16_col":23}},"extent_utf16":{"start":{"line_number":2914,"utf16_col":0},"end":{"line_number":2934,"utf16_col":1}}},{"name":"CheckBlockHeader","kind":"function","ident_start":136973,"ident_end":136989,"extent_start":136961,"extent_end":137402,"fully_qualified_name":"CheckBlockHeader","ident_utf16":{"start":{"line_number":2936,"utf16_col":12},"end":{"line_number":2936,"utf16_col":28}},"extent_utf16":{"start":{"line_number":2936,"utf16_col":0},"end":{"line_number":2943,"utf16_col":1}}},{"name":"CheckBlock","kind":"function","ident_start":137409,"ident_end":137419,"extent_start":137404,"extent_end":140571,"fully_qualified_name":"CheckBlock","ident_utf16":{"start":{"line_number":2945,"utf16_col":5},"end":{"line_number":2945,"utf16_col":15}},"extent_utf16":{"start":{"line_number":2945,"utf16_col":0},"end":{"line_number":3006,"utf16_col":1}}},{"name":"IsWitnessEnabled","kind":"function","ident_start":140578,"ident_end":140594,"extent_start":140573,"extent_end":140806,"fully_qualified_name":"IsWitnessEnabled","ident_utf16":{"start":{"line_number":3008,"utf16_col":5},"end":{"line_number":3008,"utf16_col":21}},"extent_utf16":{"start":{"line_number":3008,"utf16_col":0},"end":{"line_number":3012,"utf16_col":1}}},{"name":"IsNullDummyEnabled","kind":"function","ident_start":140813,"ident_end":140831,"extent_start":140808,"extent_end":141043,"fully_qualified_name":"IsNullDummyEnabled","ident_utf16":{"start":{"line_number":3014,"utf16_col":5},"end":{"line_number":3014,"utf16_col":23}},"extent_utf16":{"start":{"line_number":3014,"utf16_col":0},"end":{"line_number":3018,"utf16_col":1}}},{"name":"GetWitnessCommitmentIndex","kind":"function","ident_start":141171,"ident_end":141196,"extent_start":141160,"extent_end":141789,"fully_qualified_name":"GetWitnessCommitmentIndex","ident_utf16":{"start":{"line_number":3022,"utf16_col":11},"end":{"line_number":3022,"utf16_col":36}},"extent_utf16":{"start":{"line_number":3022,"utf16_col":0},"end":{"line_number":3033,"utf16_col":1}}},{"name":"UpdateUncommittedBlockStructures","kind":"function","ident_start":141796,"ident_end":141828,"extent_start":141791,"extent_end":142352,"fully_qualified_name":"UpdateUncommittedBlockStructures","ident_utf16":{"start":{"line_number":3035,"utf16_col":5},"end":{"line_number":3035,"utf16_col":37}},"extent_utf16":{"start":{"line_number":3035,"utf16_col":0},"end":{"line_number":3045,"utf16_col":1}}},{"name":"GenerateCoinbaseCommitment","kind":"function","ident_start":142381,"ident_end":142407,"extent_start":142354,"extent_end":143708,"fully_qualified_name":"GenerateCoinbaseCommitment","ident_utf16":{"start":{"line_number":3047,"utf16_col":27},"end":{"line_number":3047,"utf16_col":53}},"extent_utf16":{"start":{"line_number":3047,"utf16_col":0},"end":{"line_number":3074,"utf16_col":1}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":143828,"ident_end":143852,"extent_start":143828,"extent_end":144189,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":3077,"utf16_col":67},"end":{"line_number":3077,"utf16_col":91}},"extent_utf16":{"start":{"line_number":3077,"utf16_col":67},"end":{"line_number":3090,"utf16_col":1}}},{"name":"ContextualCheckBlockHeader","kind":"function","ident_start":144712,"ident_end":144738,"extent_start":144700,"extent_end":144872,"fully_qualified_name":"ContextualCheckBlockHeader","ident_utf16":{"start":{"line_number":3101,"utf16_col":12},"end":{"line_number":3101,"utf16_col":38}},"extent_utf16":{"start":{"line_number":3101,"utf16_col":0},"end":{"line_number":3101,"utf16_col":172}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":144873,"ident_end":144897,"extent_start":144873,"extent_end":147051,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":3101,"utf16_col":173},"end":{"line_number":3101,"utf16_col":197}},"extent_utf16":{"start":{"line_number":3101,"utf16_col":173},"end":{"line_number":3138,"utf16_col":1}}},{"name":"ContextualCheckBlock","kind":"function","ident_start":147393,"ident_end":147413,"extent_start":147381,"extent_end":152144,"fully_qualified_name":"ContextualCheckBlock","ident_utf16":{"start":{"line_number":3146,"utf16_col":12},"end":{"line_number":3146,"utf16_col":32}},"extent_utf16":{"start":{"line_number":3146,"utf16_col":0},"end":{"line_number":3226,"utf16_col":1}}},{"name":"AcceptBlockHeader","kind":"method","ident_start":152164,"ident_end":152181,"extent_start":152146,"extent_end":156082,"fully_qualified_name":"CChainState::AcceptBlockHeader","ident_utf16":{"start":{"line_number":3228,"utf16_col":18},"end":{"line_number":3228,"utf16_col":35}},"extent_utf16":{"start":{"line_number":3228,"utf16_col":0},"end":{"line_number":3307,"utf16_col":1}}},{"name":"ProcessNewBlockHeaders","kind":"function","ident_start":156130,"ident_end":156152,"extent_start":156125,"extent_end":156893,"fully_qualified_name":"ProcessNewBlockHeaders","ident_utf16":{"start":{"line_number":3310,"utf16_col":5},"end":{"line_number":3310,"utf16_col":27}},"extent_utf16":{"start":{"line_number":3310,"utf16_col":0},"end":{"line_number":3328,"utf16_col":1}}},{"name":"SaveBlockToDisk","kind":"function","ident_start":157009,"ident_end":157024,"extent_start":156990,"extent_end":157674,"fully_qualified_name":"SaveBlockToDisk","ident_utf16":{"start":{"line_number":3331,"utf16_col":19},"end":{"line_number":3331,"utf16_col":34}},"extent_utf16":{"start":{"line_number":3331,"utf16_col":0},"end":{"line_number":3347,"utf16_col":1}}},{"name":"AcceptBlock","kind":"method","ident_start":157789,"ident_end":157800,"extent_start":157771,"extent_end":161596,"fully_qualified_name":"CChainState::AcceptBlock","ident_utf16":{"start":{"line_number":3350,"utf16_col":18},"end":{"line_number":3350,"utf16_col":29}},"extent_utf16":{"start":{"line_number":3350,"utf16_col":0},"end":{"line_number":3428,"utf16_col":1}}},{"name":"ProcessNewBlock","kind":"function","ident_start":161603,"ident_end":161618,"extent_start":161598,"extent_end":162990,"fully_qualified_name":"ProcessNewBlock","ident_utf16":{"start":{"line_number":3430,"utf16_col":5},"end":{"line_number":3430,"utf16_col":20}},"extent_utf16":{"start":{"line_number":3430,"utf16_col":0},"end":{"line_number":3463,"utf16_col":1}}},{"name":"TestBlockValidity","kind":"function","ident_start":162997,"ident_end":163014,"extent_start":162992,"extent_end":164298,"fully_qualified_name":"TestBlockValidity","ident_utf16":{"start":{"line_number":3465,"utf16_col":5},"end":{"line_number":3465,"utf16_col":22}},"extent_utf16":{"start":{"line_number":3465,"utf16_col":0},"end":{"line_number":3488,"utf16_col":1}}},{"name":"CalculateCurrentUsage","kind":"function","ident_start":164418,"ident_end":164439,"extent_start":164409,"extent_end":164627,"fully_qualified_name":"CalculateCurrentUsage","ident_utf16":{"start":{"line_number":3495,"utf16_col":9},"end":{"line_number":3495,"utf16_col":30}},"extent_utf16":{"start":{"line_number":3495,"utf16_col":0},"end":{"line_number":3504,"utf16_col":1}}},{"name":"PruneOneBlockFile","kind":"function","ident_start":164695,"ident_end":164712,"extent_start":164690,"extent_end":166004,"fully_qualified_name":"PruneOneBlockFile","ident_utf16":{"start":{"line_number":3507,"utf16_col":5},"end":{"line_number":3507,"utf16_col":22}},"extent_utf16":{"start":{"line_number":3507,"utf16_col":0},"end":{"line_number":3538,"utf16_col":1}}},{"name":"UnlinkPrunedFiles","kind":"function","ident_start":166012,"ident_end":166029,"extent_start":166007,"extent_end":166381,"fully_qualified_name":"UnlinkPrunedFiles","ident_utf16":{"start":{"line_number":3541,"utf16_col":5},"end":{"line_number":3541,"utf16_col":22}},"extent_utf16":{"start":{"line_number":3541,"utf16_col":0},"end":{"line_number":3549,"utf16_col":1}}},{"name":"FindFilesToPruneManual","kind":"function","ident_start":166508,"ident_end":166530,"extent_start":166496,"extent_end":167413,"fully_qualified_name":"FindFilesToPruneManual","ident_utf16":{"start":{"line_number":3552,"utf16_col":12},"end":{"line_number":3552,"utf16_col":34}},"extent_utf16":{"start":{"line_number":3552,"utf16_col":0},"end":{"line_number":3571,"utf16_col":1}}},{"name":"PruneBlockFilesManual","kind":"function","ident_start":167488,"ident_end":167509,"extent_start":167483,"extent_end":167836,"fully_qualified_name":"PruneBlockFilesManual","ident_utf16":{"start":{"line_number":3574,"utf16_col":5},"end":{"line_number":3574,"utf16_col":26}},"extent_utf16":{"start":{"line_number":3574,"utf16_col":0},"end":{"line_number":3582,"utf16_col":1}}},{"name":"FindFilesToPrune","kind":"function","ident_start":169043,"ident_end":169059,"extent_start":169031,"extent_end":171436,"fully_qualified_name":"FindFilesToPrune","ident_utf16":{"start":{"line_number":3599,"utf16_col":12},"end":{"line_number":3599,"utf16_col":28}},"extent_utf16":{"start":{"line_number":3599,"utf16_col":0},"end":{"line_number":3653,"utf16_col":1}}},{"name":"BlockFileSeq","kind":"function","ident_start":171457,"ident_end":171469,"extent_start":171438,"extent_end":171544,"fully_qualified_name":"BlockFileSeq","ident_utf16":{"start":{"line_number":3655,"utf16_col":19},"end":{"line_number":3655,"utf16_col":31}},"extent_utf16":{"start":{"line_number":3655,"utf16_col":0},"end":{"line_number":3658,"utf16_col":1}}},{"name":"UndoFileSeq","kind":"function","ident_start":171565,"ident_end":171576,"extent_start":171546,"extent_end":171650,"fully_qualified_name":"UndoFileSeq","ident_utf16":{"start":{"line_number":3660,"utf16_col":19},"end":{"line_number":3660,"utf16_col":30}},"extent_utf16":{"start":{"line_number":3660,"utf16_col":0},"end":{"line_number":3663,"utf16_col":1}}},{"name":"GetBlockPosFilename","kind":"function","ident_start":171932,"ident_end":171951,"extent_start":171923,"extent_end":172020,"fully_qualified_name":"GetBlockPosFilename","ident_utf16":{"start":{"line_number":3674,"utf16_col":9},"end":{"line_number":3674,"utf16_col":28}},"extent_utf16":{"start":{"line_number":3674,"utf16_col":0},"end":{"line_number":3677,"utf16_col":1}}},{"name":"LoadBlockIndex","kind":"method","ident_start":172533,"ident_end":172547,"extent_start":172515,"extent_end":175024,"fully_qualified_name":"CChainState::LoadBlockIndex","ident_utf16":{"start":{"line_number":3699,"utf16_col":18},"end":{"line_number":3699,"utf16_col":32}},"extent_utf16":{"start":{"line_number":3699,"utf16_col":0},"end":{"line_number":3748,"utf16_col":1}}},{"name":"LoadBlockIndexDB","kind":"function","ident_start":175038,"ident_end":175054,"extent_start":175026,"extent_end":175087,"fully_qualified_name":"LoadBlockIndexDB","ident_utf16":{"start":{"line_number":3750,"utf16_col":12},"end":{"line_number":3750,"utf16_col":28}},"extent_utf16":{"start":{"line_number":3750,"utf16_col":0},"end":{"line_number":3750,"utf16_col":61}}},{"name":"EXCLUSIVE_LOCKS_REQUIRED","kind":"function","ident_start":175088,"ident_end":175112,"extent_start":175088,"extent_end":176954,"fully_qualified_name":"EXCLUSIVE_LOCKS_REQUIRED","ident_utf16":{"start":{"line_number":3750,"utf16_col":62},"end":{"line_number":3750,"utf16_col":86}},"extent_utf16":{"start":{"line_number":3750,"utf16_col":62},"end":{"line_number":3801,"utf16_col":1}}},{"name":"LoadChainTip","kind":"function","ident_start":176961,"ident_end":176973,"extent_start":176956,"extent_end":177837,"fully_qualified_name":"LoadChainTip","ident_utf16":{"start":{"line_number":3803,"utf16_col":5},"end":{"line_number":3803,"utf16_col":17}},"extent_utf16":{"start":{"line_number":3803,"utf16_col":0},"end":{"line_number":3824,"utf16_col":1}}},{"name":"CVerifyDB","kind":"method","ident_start":177850,"ident_end":177859,"extent_start":177839,"extent_end":177931,"fully_qualified_name":"CVerifyDB::CVerifyDB","ident_utf16":{"start":{"line_number":3826,"utf16_col":11},"end":{"line_number":3826,"utf16_col":20}},"extent_utf16":{"start":{"line_number":3826,"utf16_col":0},"end":{"line_number":3829,"utf16_col":1}}},{"name":"VerifyDB","kind":"method","ident_start":178024,"ident_end":178032,"extent_start":178008,"extent_end":183396,"fully_qualified_name":"CVerifyDB::VerifyDB","ident_utf16":{"start":{"line_number":3836,"utf16_col":16},"end":{"line_number":3836,"utf16_col":24}},"extent_utf16":{"start":{"line_number":3836,"utf16_col":0},"end":{"line_number":3934,"utf16_col":1}}},{"name":"RollforwardBlock","kind":"method","ident_start":183519,"ident_end":183535,"extent_start":183501,"extent_end":184229,"fully_qualified_name":"CChainState::RollforwardBlock","ident_utf16":{"start":{"line_number":3937,"utf16_col":18},"end":{"line_number":3937,"utf16_col":34}},"extent_utf16":{"start":{"line_number":3937,"utf16_col":0},"end":{"line_number":3955,"utf16_col":1}}},{"name":"ReplayBlocks","kind":"method","ident_start":184249,"ident_end":184261,"extent_start":184231,"extent_end":187605,"fully_qualified_name":"CChainState::ReplayBlocks","ident_utf16":{"start":{"line_number":3957,"utf16_col":18},"end":{"line_number":3957,"utf16_col":30}},"extent_utf16":{"start":{"line_number":3957,"utf16_col":0},"end":{"line_number":4021,"utf16_col":1}}},{"name":"ReplayBlocks","kind":"function","ident_start":187612,"ident_end":187624,"extent_start":187607,"extent_end":187734,"fully_qualified_name":"ReplayBlocks","ident_utf16":{"start":{"line_number":4023,"utf16_col":5},"end":{"line_number":4023,"utf16_col":17}},"extent_utf16":{"start":{"line_number":4023,"utf16_col":0},"end":{"line_number":4025,"utf16_col":1}}},{"name":"EraseBlockData","kind":"method","ident_start":187799,"ident_end":187813,"extent_start":187781,"extent_end":189124,"fully_qualified_name":"CChainState::EraseBlockData","ident_utf16":{"start":{"line_number":4028,"utf16_col":18},"end":{"line_number":4028,"utf16_col":32}},"extent_utf16":{"start":{"line_number":4028,"utf16_col":0},"end":{"line_number":4061,"utf16_col":1}}},{"name":"RewindBlockIndex","kind":"method","ident_start":189144,"ident_end":189160,"extent_start":189126,"extent_end":193073,"fully_qualified_name":"CChainState::RewindBlockIndex","ident_utf16":{"start":{"line_number":4063,"utf16_col":18},"end":{"line_number":4063,"utf16_col":34}},"extent_utf16":{"start":{"line_number":4063,"utf16_col":0},"end":{"line_number":4154,"utf16_col":1}}},{"name":"RewindBlockIndex","kind":"function","ident_start":193080,"ident_end":193096,"extent_start":193075,"extent_end":193772,"fully_qualified_name":"RewindBlockIndex","ident_utf16":{"start":{"line_number":4156,"utf16_col":5},"end":{"line_number":4156,"utf16_col":21}},"extent_utf16":{"start":{"line_number":4156,"utf16_col":0},"end":{"line_number":4174,"utf16_col":1}}},{"name":"UnloadBlockIndex","kind":"method","ident_start":193792,"ident_end":193808,"extent_start":193774,"extent_end":193906,"fully_qualified_name":"CChainState::UnloadBlockIndex","ident_utf16":{"start":{"line_number":4176,"utf16_col":18},"end":{"line_number":4176,"utf16_col":34}},"extent_utf16":{"start":{"line_number":4176,"utf16_col":0},"end":{"line_number":4180,"utf16_col":1}}},{"name":"UnloadBlockIndex","kind":"function","ident_start":194043,"ident_end":194059,"extent_start":194038,"extent_end":194670,"fully_qualified_name":"UnloadBlockIndex","ident_utf16":{"start":{"line_number":4185,"utf16_col":5},"end":{"line_number":4185,"utf16_col":21}},"extent_utf16":{"start":{"line_number":4185,"utf16_col":0},"end":{"line_number":4209,"utf16_col":1}}},{"name":"LoadBlockIndex","kind":"function","ident_start":194677,"ident_end":194691,"extent_start":194672,"extent_end":195333,"fully_qualified_name":"LoadBlockIndex","ident_utf16":{"start":{"line_number":4211,"utf16_col":5},"end":{"line_number":4211,"utf16_col":19}},"extent_utf16":{"start":{"line_number":4211,"utf16_col":0},"end":{"line_number":4231,"utf16_col":1}}},{"name":"LoadGenesisBlock","kind":"method","ident_start":195353,"ident_end":195369,"extent_start":195335,"extent_end":196323,"fully_qualified_name":"CChainState::LoadGenesisBlock","ident_utf16":{"start":{"line_number":4233,"utf16_col":18},"end":{"line_number":4233,"utf16_col":34}},"extent_utf16":{"start":{"line_number":4233,"utf16_col":0},"end":{"line_number":4256,"utf16_col":1}}},{"name":"LoadGenesisBlock","kind":"function","ident_start":196330,"ident_end":196346,"extent_start":196325,"extent_end":196446,"fully_qualified_name":"LoadGenesisBlock","ident_utf16":{"start":{"line_number":4258,"utf16_col":5},"end":{"line_number":4258,"utf16_col":21}},"extent_utf16":{"start":{"line_number":4258,"utf16_col":0},"end":{"line_number":4261,"utf16_col":1}}},{"name":"LoadExternalBlockFile","kind":"function","ident_start":196453,"ident_end":196474,"extent_start":196448,"extent_end":202447,"fully_qualified_name":"LoadExternalBlockFile","ident_utf16":{"start":{"line_number":4263,"utf16_col":5},"end":{"line_number":4263,"utf16_col":26}},"extent_utf16":{"start":{"line_number":4263,"utf16_col":0},"end":{"line_number":4383,"utf16_col":1}}},{"name":"CheckBlockIndex","kind":"method","ident_start":202467,"ident_end":202482,"extent_start":202449,"extent_end":214927,"fully_qualified_name":"CChainState::CheckBlockIndex","ident_utf16":{"start":{"line_number":4385,"utf16_col":18},"end":{"line_number":4385,"utf16_col":33}},"extent_utf16":{"start":{"line_number":4385,"utf16_col":0},"end":{"line_number":4567,"utf16_col":1}}},{"name":"ToString","kind":"method","ident_start":214957,"ident_end":214965,"extent_start":214929,"extent_end":215172,"fully_qualified_name":"CBlockFileInfo::ToString","ident_utf16":{"start":{"line_number":4569,"utf16_col":28},"end":{"line_number":4569,"utf16_col":36}},"extent_utf16":{"start":{"line_number":4569,"utf16_col":0},"end":{"line_number":4572,"utf16_col":1}}},{"name":"VersionBitsTipState","kind":"function","ident_start":215300,"ident_end":215319,"extent_start":215285,"extent_end":215488,"fully_qualified_name":"VersionBitsTipState","ident_utf16":{"start":{"line_number":4581,"utf16_col":15},"end":{"line_number":4581,"utf16_col":34}},"extent_utf16":{"start":{"line_number":4581,"utf16_col":0},"end":{"line_number":4585,"utf16_col":1}}},{"name":"VersionBitsTipStatistics","kind":"function","ident_start":215500,"ident_end":215524,"extent_start":215490,"extent_end":215680,"fully_qualified_name":"VersionBitsTipStatistics","ident_utf16":{"start":{"line_number":4587,"utf16_col":10},"end":{"line_number":4587,"utf16_col":34}},"extent_utf16":{"start":{"line_number":4587,"utf16_col":0},"end":{"line_number":4591,"utf16_col":1}}},{"name":"VersionBitsTipStateSinceHeight","kind":"function","ident_start":215686,"ident_end":215716,"extent_start":215682,"extent_end":215896,"fully_qualified_name":"VersionBitsTipStateSinceHeight","ident_utf16":{"start":{"line_number":4593,"utf16_col":4},"end":{"line_number":4593,"utf16_col":34}},"extent_utf16":{"start":{"line_number":4593,"utf16_col":0},"end":{"line_number":4597,"utf16_col":1}}},{"name":"LoadMempool","kind":"function","ident_start":215952,"ident_end":215963,"extent_start":215947,"extent_end":218741,"fully_qualified_name":"LoadMempool","ident_utf16":{"start":{"line_number":4601,"utf16_col":5},"end":{"line_number":4601,"utf16_col":16}},"extent_utf16":{"start":{"line_number":4601,"utf16_col":0},"end":{"line_number":4676,"utf16_col":1}}},{"name":"DumpMempool","kind":"function","ident_start":218748,"ident_end":218759,"extent_start":218743,"extent_end":220231,"fully_qualified_name":"DumpMempool","ident_utf16":{"start":{"line_number":4678,"utf16_col":5},"end":{"line_number":4678,"utf16_col":16}},"extent_utf16":{"start":{"line_number":4678,"utf16_col":0},"end":{"line_number":4729,"utf16_col":1}}},{"name":"GuessVerificationProgress","kind":"function","ident_start":220409,"ident_end":220434,"extent_start":220402,"extent_end":220857,"fully_qualified_name":"GuessVerificationProgress","ident_utf16":{"start":{"line_number":4733,"utf16_col":7},"end":{"line_number":4733,"utf16_col":32}},"extent_utf16":{"start":{"line_number":4733,"utf16_col":0},"end":{"line_number":4748,"utf16_col":1}}},{"name":"CMainCleanup","kind":"class","ident_start":220865,"ident_end":220877,"extent_start":220859,"extent_end":221135,"fully_qualified_name":"CMainCleanup","ident_utf16":{"start":{"line_number":4750,"utf16_col":6},"end":{"line_number":4750,"utf16_col":18}},"extent_utf16":{"start":{"line_number":4750,"utf16_col":0},"end":{"line_number":4761,"utf16_col":1}}},{"name":"CMainCleanup","kind":"function","ident_start":220892,"ident_end":220904,"extent_start":220892,"extent_end":220909,"fully_qualified_name":"CMainCleanup::CMainCleanup","ident_utf16":{"start":{"line_number":4753,"utf16_col":4},"end":{"line_number":4753,"utf16_col":16}},"extent_utf16":{"start":{"line_number":4753,"utf16_col":4},"end":{"line_number":4753,"utf16_col":21}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"csrf_tokens":{"/bitcoin/bitcoin/branches":{"post":"f7P_0jwKFbB_jRb72O0TMxV92BfrHcBmUGazFU_Gotyv0Bol-xj4xj0SHhFTnTmHKN0t3NqN6jgA7iByZrNd8g"},"/repos/preferences":{"post":"b2Y1cCkoivQYY0g34HlA2LtOSDLi4vgOJlKiIZLqLzoRIlY-DVrxn_4oq6iWb-r726KTqofTDC6anqllNDK7zA"}}},"title":"bitcoin/src/validation.cpp at 332c6134bb15384e5b91c631e821fe52a591d3bc · bitcoin/bitcoin","appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-1583894afd38.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-67668e8c2caa.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"overview_shared_code_dropdown_button":false,"react_blob_overlay":false,"copilot_conversational_ux_embedding_update":false,"copilot_smell_icebreaker_ux":true,"copilot_workspace":false,"accessible_code_button":true}}}</script> <div data-target="react-app.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.hOfjFo{padding:0;}/*!sc*/ .oDGAe{max-width:100%;margin-left:auto;margin-right:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}/*!sc*/ .kowOcT{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:100%;}/*!sc*/ .gISSDQ{width:100%;}/*!sc*/ @media screen and (min-width:544px){.gISSDQ{width:100%;}}/*!sc*/ @media screen and (min-width:768px){.gISSDQ{width:auto;}}/*!sc*/ .fLEPlD{display:none;-webkit-order:1;-ms-flex-order:1;order:1;width:100%;margin-left:0;margin-right:0;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-bottom:0;min-width:0;}/*!sc*/ @media screen and (min-width:544px){.fLEPlD{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}/*!sc*/ @media screen and (min-width:768px){.fLEPlD{width:auto;margin-top:0 !important;margin-bottom:0 !important;position:-webkit-sticky;position:sticky;top:0px;max-height:100vh !important;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-right:0;height:100vh;}}/*!sc*/ @media print,screen and (max-width:1011px) and (min-width:768px){.fLEPlD{display:none;}}/*!sc*/ .hPvFuC{margin-left:0;margin-right:0;display:none;margin-top:0;}/*!sc*/ @media screen and (min-width:768px){.hPvFuC{margin-left:0 !important;margin-right:0 !important;}}/*!sc*/ .fFSoPl{--pane-min-width:256px;--pane-max-width-diff:511px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));width:100%;padding:0;}/*!sc*/ @media screen and (min-width:544px){}/*!sc*/ @media screen and (min-width:768px){.fFSoPl{width:clamp(var(--pane-min-width),var(--pane-width),var(--pane-max-width));overflow:auto;}}/*!sc*/ @media screen and (min-width:1280px){.fFSoPl{--pane-max-width-diff:959px;}}/*!sc*/ .bTBnTW{height:100%;position:relative;display:none;margin-left:0;}/*!sc*/ .bHLmSv{position:absolute;inset:0 -2px;cursor:col-resize;background-color:transparent;-webkit-transition-delay:0.1s;transition-delay:0.1s;}/*!sc*/ .bHLmSv:hover{background-color:var(--bgColor-neutral-muted,var(--color-neutral-muted,rgba(175,184,193,0.2)));}/*!sc*/ .iKqMNA{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-order:2;-ms-flex-order:2;order:2;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;min-width:1px;margin-right:auto;}/*!sc*/ @media print{.iKqMNA{display:-webkit-box !important;display:-webkit-flex !important;display:-ms-flexbox !important;display:flex !important;}}/*!sc*/ .FxAyp{width:100%;max-width:100%;margin-left:auto;margin-right:auto;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0;}/*!sc*/ .leYMvG{margin-left:auto;margin-right:auto;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-bottom:40px;max-width:100%;margin-top:0;}/*!sc*/ .KMPzq{display:inherit;}/*!sc*/ .hfKjHv{width:100%;}/*!sc*/ .gZWyZE{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;}/*!sc*/ .dwYKDk{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;gap:8px;}/*!sc*/ .ibcGmb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;min-width:0;}/*!sc*/ .hKaEJF{display:block;margin-right:8px;}/*!sc*/ @media screen and (min-width:1360px){.hKaEJF{display:block;}}/*!sc*/ .XosP{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:14px;}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .hzSPyu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;pointer-events:none;}/*!sc*/ .bZBlpz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}/*!sc*/ .lhTYNA{margin-right:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dbrgmi{font-size:14px;min-width:0;max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .dHJiml{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;padding-right:8px;min-width:0;}/*!sc*/ .cEytCf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;font-size:16px;min-width:0;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .fzFXnm{max-width:100%;}/*!sc*/ .iMnkmv{max-width:100%;list-style:none;display:inline-block;}/*!sc*/ .ghzDag{display:inline-block;max-width:100%;}/*!sc*/ .kHuKdh{font-weight:600;}/*!sc*/ .kgiVEz{font-weight:400;}/*!sc*/ .jGhzSQ{font-weight:600;display:inline-block;max-width:100%;font-size:16px;}/*!sc*/ .faNtbn{min-height:32px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;}/*!sc*/ .fmQaBv{margin-left:4px;margin-right:4px;}/*!sc*/ .dJxjrT{margin-left:16px;margin-right:16px;}/*!sc*/ .eFxKDQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}/*!sc*/ .dzCJzi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:273px;padding:8px;}/*!sc*/ @media screen and (min-width:544px){.dzCJzi{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .ldRxiI{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}/*!sc*/ .fVkfyA{width:100%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;min-width:0;margin-right:0;}/*!sc*/ .gNAmSV{height:40px;padding-left:4px;padding-bottom:16px;}/*!sc*/ .jNEwzY{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .bsDwxw{font-size:12px;-webkit-flex:auto;-ms-flex:auto;flex:auto;padding-right:16px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));min-width:0;}/*!sc*/ .jdLMhu{top:0px;z-index:4;background:var(--bgColor-default,var(--color-canvas-default));position:-webkit-sticky;position:sticky;}/*!sc*/ .tOISc{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;position:absolute;}/*!sc*/ .hqwSEx{display:none;min-width:0;padding-top:8px;padding-bottom:8px;}/*!sc*/ .bDVoEr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;overflow:hidden;margin-left:8px;margin-right:8px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:100%;}/*!sc*/ .kYLlPM{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .gYjEmn{margin-left:4px;margin-right:8px;}/*!sc*/ .kGqOLL{text-overflow:ellipsis;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ .fHind{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;font-size:14px;min-width:0;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .dnZoUW{font-weight:600;display:inline-block;max-width:100%;font-size:14px;}/*!sc*/ .kTvpNk{padding-left:8px;padding-top:8px;padding-bottom:8px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));border:1px solid var(--borderColor-default,var(--color-border-default));border-radius:6px 6px 0px 0px;}/*!sc*/ .iNMjfP{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:0;}/*!sc*/ .fefCSX{display:block;position:relative;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-top:-1px;margin-bottom:-1px;--separator-color:transparent;}/*!sc*/ .fefCSX:not(:last-child){margin-right:1px;}/*!sc*/ .fefCSX:not(:last-child):after{background-color:var(--separator-color);content:"";position:absolute;right:-2px;top:8px;bottom:8px;width:1px;}/*!sc*/ .fefCSX:focus-within:has(:focus-visible){--separator-color:transparent;}/*!sc*/ .fefCSX:first-child{margin-left:-1px;}/*!sc*/ .fefCSX:last-child{margin-right:-1px;}/*!sc*/ .idgUkN{display:block;position:relative;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-top:-1px;margin-bottom:-1px;--separator-color:var(--borderColor-default,var(--color-border-default,#d0d7de));}/*!sc*/ .idgUkN:not(:last-child){margin-right:1px;}/*!sc*/ .idgUkN:not(:last-child):after{background-color:var(--separator-color);content:"";position:absolute;right:-2px;top:8px;bottom:8px;width:1px;}/*!sc*/ .idgUkN:focus-within:has(:focus-visible){--separator-color:transparent;}/*!sc*/ .idgUkN:first-child{margin-left:-1px;}/*!sc*/ .idgUkN:last-child{margin-right:-1px;}/*!sc*/ .kcLCKF{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;margin-right:8px;}/*!sc*/ .kVWtTz{gap:8px;}/*!sc*/ .hGyMdv{border:1px solid;border-top:none;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:0px 0px 6px 6px;min-width:273px;}/*!sc*/ .dceWRL{background-color:var(--bgColor-default,var(--color-canvas-default));border:0px;border-width:0;border-radius:0px 0px 6px 6px;padding:0;min-width:0;margin-top:46px;}/*!sc*/ .dGXHv{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;padding-top:8px;padding-bottom:8px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-width:0;position:relative;}/*!sc*/ .bpDFns{position:relative;}/*!sc*/ .iJOeCH{-webkit-flex:1;-ms-flex:1;flex:1;position:relative;min-width:0;}/*!sc*/ .jewUnv{tab-size:8;isolation:isolate;position:relative;overflow:auto;max-width:unset;}/*!sc*/ .cJGaMs{margin:1px 8px;position:absolute;z-index:1;}/*!sc*/ .iGLarr{position:absolute;}/*!sc*/ .gkZUDI{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ .cCoXib{position:fixed;top:0;right:0;height:100%;width:15px;-webkit-transition:-webkit-transform 0.3s;-webkit-transition:transform 0.3s;transition:transform 0.3s;z-index:1;}/*!sc*/ .cCoXib:hover{-webkit-transform:scaleX(1.5);-ms-transform:scaleX(1.5);transform:scaleX(1.5);}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"hOfjFo,oDGAe,kowOcT,gISSDQ,fLEPlD,hPvFuC,fFSoPl,bTBnTW,bHLmSv,iKqMNA,FxAyp,leYMvG,KMPzq,hfKjHv,gZWyZE,dwYKDk,ibcGmb,hKaEJF,XosP,gUkoLg,hzSPyu,bZBlpz,lhTYNA,dbrgmi,dHJiml,cEytCf,fzFXnm,iMnkmv,ghzDag,kHuKdh,kgiVEz,jGhzSQ,faNtbn,fmQaBv,dJxjrT,eFxKDQ,dzCJzi,ldRxiI,fVkfyA,gNAmSV,jNEwzY,bsDwxw,jdLMhu,tOISc,hqwSEx,bDVoEr,kYLlPM,gYjEmn,kGqOLL,fHind,dnZoUW,kTvpNk,iNMjfP,fefCSX,idgUkN,kcLCKF,kVWtTz,hGyMdv,dceWRL,dGXHv,bpDFns,iJOeCH,jewUnv,cJGaMs,iGLarr,gkZUDI,cCoXib,"}/*!sc*/ .eMMFM{min-width:0;}/*!sc*/ .eMMFM:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}/*!sc*/ .eMMFM:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}/*!sc*/ .eMMFM:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}/*!sc*/ .eMMFM:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}/*!sc*/ .eMMFM:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}/*!sc*/ .eMMFM:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}/*!sc*/ .eMMFM:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}/*!sc*/ .HlHVj{padding-left:4px;padding-right:4px;font-weight:400;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:16px;}/*!sc*/ .HlHVj:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}/*!sc*/ .HlHVj:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}/*!sc*/ .HlHVj:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}/*!sc*/ .HlHVj:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}/*!sc*/ .HlHVj:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}/*!sc*/ .HlHVj:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}/*!sc*/ .HlHVj:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}/*!sc*/ .lauzFl{padding-left:4px;padding-right:4px;font-weight:400;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:14px;}/*!sc*/ .lauzFl:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}/*!sc*/ .lauzFl:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}/*!sc*/ .lauzFl:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}/*!sc*/ .lauzFl:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}/*!sc*/ .lauzFl:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}/*!sc*/ .lauzFl:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}/*!sc*/ .lauzFl:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}/*!sc*/ data-styled.g3[id="Text__StyledText-sc-17v1xeu-0"]{content:"eMMFM,HlHVj,lauzFl,"}/*!sc*/ .gwqFqs{font-size:14px;line-height:20px;color:var(--fgColor-default,var(--color-fg-default,#1F2328));vertical-align:middle;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));border:1px solid var(--control-borderColor-rest,var(--borderColor-default,var(--color-border-default,#d0d7de)));border-radius:6px;outline:none;box-shadow:var(--shadow-inset,var(--color-primer-shadow-inset,inset 0 1px 0 rgba(208,215,222,0.2)));display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;min-height:32px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .gwqFqs input,.gwqFqs textarea{cursor:text;}/*!sc*/ .gwqFqs select{cursor:pointer;}/*!sc*/ .gwqFqs input::-webkit-input-placeholder,.gwqFqs textarea::-webkit-input-placeholder,.gwqFqs select::-webkit-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs input::-moz-placeholder,.gwqFqs textarea::-moz-placeholder,.gwqFqs select::-moz-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs input:-ms-input-placeholder,.gwqFqs textarea:-ms-input-placeholder,.gwqFqs select:-ms-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs input::placeholder,.gwqFqs textarea::placeholder,.gwqFqs select::placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs:focus-within{border-color:var(--fgColor-accent,var(--color-accent-fg,#0969da));outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .gwqFqs > textarea{padding:12px;}/*!sc*/ @media (min-width:768px){.gwqFqs{font-size:14px;}}/*!sc*/ data-styled.g9[id="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0"]{content:"gwqFqs,"}/*!sc*/ .decvaq{background-repeat:no-repeat;background-position:right 8px center;padding-left:12px;padding-right:12px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .decvaq > :not(:last-child){margin-right:8px;}/*!sc*/ .decvaq .TextInput-icon,.decvaq .TextInput-action{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}/*!sc*/ .decvaq > input,.decvaq > select{padding-left:0;padding-right:0;}/*!sc*/ data-styled.g10[id="TextInputWrapper-sc-1mqhpbi-1"]{content:"decvaq,"}/*!sc*/ .kBQCgV{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .kBQCgV:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .kBQCgV:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .kBQCgV:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .kBQCgV[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .kBQCgV[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .kBQCgV:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .kBQCgV:active{-webkit-transition:none;transition:none;}/*!sc*/ .kBQCgV[data-inactive]{cursor:auto;}/*!sc*/ .kBQCgV:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .kBQCgV:disabled [data-component=ButtonCounter],.kBQCgV:disabled [data-component="leadingVisual"],.kBQCgV:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.kBQCgV:focus{outline:solid 1px transparent;}}/*!sc*/ .kBQCgV [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .kBQCgV[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .kBQCgV[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .kBQCgV[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .kBQCgV[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .kBQCgV[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .kBQCgV[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .kBQCgV[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .kBQCgV[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .kBQCgV[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .kBQCgV[data-block="block"]{width:100%;}/*!sc*/ .kBQCgV[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .kBQCgV[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .kBQCgV[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .kBQCgV[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .kBQCgV[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .kBQCgV[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .kBQCgV[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .kBQCgV[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .kBQCgV[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .kBQCgV [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .kBQCgV [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .kBQCgV [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .kBQCgV [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .kBQCgV [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .kBQCgV [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .kBQCgV [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .kBQCgV [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .kBQCgV:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .kBQCgV:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .kBQCgV[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .kBQCgV[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .kBQCgV[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .kBQCgV:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .kBQCgV:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .kBQCgV:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .kBQCgV[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));padding-left:8px;padding-right:8px;display:none;}/*!sc*/ @media screen and (max-width:768px){.kBQCgV[data-size="medium"]{display:block;}}/*!sc*/ .dPmZyJ{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .dPmZyJ:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .dPmZyJ:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .dPmZyJ:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .dPmZyJ[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .dPmZyJ[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .dPmZyJ:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .dPmZyJ:active{-webkit-transition:none;transition:none;}/*!sc*/ .dPmZyJ[data-inactive]{cursor:auto;}/*!sc*/ .dPmZyJ:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .dPmZyJ:disabled [data-component=ButtonCounter],.dPmZyJ:disabled [data-component="leadingVisual"],.dPmZyJ:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.dPmZyJ:focus{outline:solid 1px transparent;}}/*!sc*/ .dPmZyJ [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .dPmZyJ[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .dPmZyJ[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .dPmZyJ[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .dPmZyJ[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .dPmZyJ[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .dPmZyJ[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .dPmZyJ[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .dPmZyJ[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .dPmZyJ[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .dPmZyJ[data-block="block"]{width:100%;}/*!sc*/ .dPmZyJ[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .dPmZyJ[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .dPmZyJ[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .dPmZyJ[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .dPmZyJ[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .dPmZyJ [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .dPmZyJ [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .dPmZyJ [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .dPmZyJ [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dPmZyJ [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .dPmZyJ:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .dPmZyJ:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .dPmZyJ[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .dPmZyJ[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .dPmZyJ:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .dPmZyJ:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .dPmZyJ:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .iQGjqs{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .iQGjqs:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .iQGjqs:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .iQGjqs:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .iQGjqs[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .iQGjqs[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .iQGjqs:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .iQGjqs:active{-webkit-transition:none;transition:none;}/*!sc*/ .iQGjqs[data-inactive]{cursor:auto;}/*!sc*/ .iQGjqs:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .iQGjqs:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.iQGjqs:focus{outline:solid 1px transparent;}}/*!sc*/ .iQGjqs [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .iQGjqs[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .iQGjqs[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .iQGjqs[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .iQGjqs[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .iQGjqs[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .iQGjqs[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .iQGjqs[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .iQGjqs[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .iQGjqs[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .iQGjqs[data-block="block"]{width:100%;}/*!sc*/ .iQGjqs[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .iQGjqs[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .iQGjqs[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .iQGjqs[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .iQGjqs[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .iQGjqs[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .iQGjqs[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .iQGjqs[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .iQGjqs[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .iQGjqs [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .iQGjqs [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .iQGjqs [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .iQGjqs [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .iQGjqs [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .iQGjqs [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .iQGjqs [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .iQGjqs [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .iQGjqs:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .iQGjqs:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .iQGjqs[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .iQGjqs [data-component="leadingVisual"],.iQGjqs [data-component="trailingVisual"],.iQGjqs [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .iQGjqs[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .iQGjqs[data-size="medium"]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ .iQGjqs[data-size="medium"] svg{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .iQGjqs[data-size="medium"] > span{width:inherit;}/*!sc*/ .iLfocZ{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .iLfocZ:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .iLfocZ:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .iLfocZ:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .iLfocZ[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .iLfocZ[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .iLfocZ:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .iLfocZ:active{-webkit-transition:none;transition:none;}/*!sc*/ .iLfocZ[data-inactive]{cursor:auto;}/*!sc*/ .iLfocZ:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .iLfocZ:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.iLfocZ:focus{outline:solid 1px transparent;}}/*!sc*/ .iLfocZ [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .iLfocZ[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .iLfocZ[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .iLfocZ[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .iLfocZ[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .iLfocZ[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .iLfocZ[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .iLfocZ[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .iLfocZ[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .iLfocZ[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .iLfocZ[data-block="block"]{width:100%;}/*!sc*/ .iLfocZ[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .iLfocZ[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .iLfocZ[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .iLfocZ[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .iLfocZ[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .iLfocZ[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .iLfocZ[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .iLfocZ[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .iLfocZ[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .iLfocZ [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .iLfocZ [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .iLfocZ [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .iLfocZ [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .iLfocZ [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .iLfocZ [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .iLfocZ [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .iLfocZ [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .iLfocZ:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .iLfocZ:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .iLfocZ[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .iLfocZ [data-component="leadingVisual"],.iLfocZ [data-component="trailingVisual"],.iLfocZ [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .iLfocZ[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .iLfocZ[data-size="medium"][data-no-visuals]{border-top-left-radius:0;border-bottom-left-radius:0;display:none;}/*!sc*/ .JVsBq{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .JVsBq:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .JVsBq:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .JVsBq:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .JVsBq[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .JVsBq[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .JVsBq:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .JVsBq:active{-webkit-transition:none;transition:none;}/*!sc*/ .JVsBq[data-inactive]{cursor:auto;}/*!sc*/ .JVsBq:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .JVsBq:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.JVsBq:focus{outline:solid 1px transparent;}}/*!sc*/ .JVsBq [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .JVsBq[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .JVsBq[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .JVsBq[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .JVsBq[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .JVsBq[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .JVsBq[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .JVsBq[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .JVsBq[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .JVsBq[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .JVsBq[data-block="block"]{width:100%;}/*!sc*/ .JVsBq[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .JVsBq[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .JVsBq[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .JVsBq[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .JVsBq[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .JVsBq[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .JVsBq[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .JVsBq[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .JVsBq[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .JVsBq [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .JVsBq [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .JVsBq [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .JVsBq [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .JVsBq [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .JVsBq [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .JVsBq [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .JVsBq [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .JVsBq:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .JVsBq:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .JVsBq[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .JVsBq [data-component="leadingVisual"],.JVsBq [data-component="trailingVisual"],.JVsBq [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .JVsBq[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .JVsBq[data-size="medium"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .fwExmK{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .fwExmK:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .fwExmK:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .fwExmK:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .fwExmK[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .fwExmK[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .fwExmK:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .fwExmK:active{-webkit-transition:none;transition:none;}/*!sc*/ .fwExmK[data-inactive]{cursor:auto;}/*!sc*/ .fwExmK:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .fwExmK:disabled [data-component=ButtonCounter],.fwExmK:disabled [data-component="leadingVisual"],.fwExmK:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.fwExmK:focus{outline:solid 1px transparent;}}/*!sc*/ .fwExmK [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .fwExmK[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .fwExmK[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;color:var(--fgColor-default,var(--color-fg-default,#1F2328));margin-left:8px;}/*!sc*/ .fwExmK[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .fwExmK[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .fwExmK[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .fwExmK[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .fwExmK[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .fwExmK[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .fwExmK[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .fwExmK[data-block="block"]{width:100%;}/*!sc*/ .fwExmK[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .fwExmK[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .fwExmK[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .fwExmK[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .fwExmK[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .fwExmK[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .fwExmK[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .fwExmK[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .fwExmK[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .fwExmK [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .fwExmK [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .fwExmK [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .fwExmK [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .fwExmK [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .fwExmK [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .fwExmK [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .fwExmK [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .fwExmK:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .fwExmK:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .fwExmK[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .fwExmK[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .fwExmK[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .fwExmK:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .fwExmK:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .fwExmK:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .ifVXZX{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));padding-left:8px;padding-right:8px;}/*!sc*/ .ifVXZX:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .ifVXZX:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .ifVXZX:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .ifVXZX[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .ifVXZX[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .ifVXZX:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .ifVXZX:active{-webkit-transition:none;transition:none;}/*!sc*/ .ifVXZX[data-inactive]{cursor:auto;}/*!sc*/ .ifVXZX:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .ifVXZX:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.ifVXZX:focus{outline:solid 1px transparent;}}/*!sc*/ .ifVXZX [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .ifVXZX[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .ifVXZX[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .ifVXZX[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .ifVXZX[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .ifVXZX[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .ifVXZX[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .ifVXZX[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .ifVXZX[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .ifVXZX[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .ifVXZX[data-block="block"]{width:100%;}/*!sc*/ .ifVXZX[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .ifVXZX[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .ifVXZX[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .ifVXZX[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .ifVXZX[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .ifVXZX[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .ifVXZX[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .ifVXZX[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .ifVXZX[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .ifVXZX [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .ifVXZX [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .ifVXZX [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .ifVXZX [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .ifVXZX [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .ifVXZX [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .ifVXZX [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ifVXZX [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .ifVXZX:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .ifVXZX:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .ifVXZX[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .ifVXZX [data-component="leadingVisual"],.ifVXZX [data-component="trailingVisual"],.ifVXZX [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .ifVXZX[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ifVXZX linkButtonSx:hover:not([disabled]){-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .ifVXZX linkButtonSx:focus:not([disabled]){-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .ifVXZX linkButtonSx:active:not([disabled]){-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .gGdPyq{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .gGdPyq:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gGdPyq:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .gGdPyq:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gGdPyq[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .gGdPyq[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .gGdPyq:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .gGdPyq:active{-webkit-transition:none;transition:none;}/*!sc*/ .gGdPyq[data-inactive]{cursor:auto;}/*!sc*/ .gGdPyq:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .gGdPyq:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.gGdPyq:focus{outline:solid 1px transparent;}}/*!sc*/ .gGdPyq [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .gGdPyq[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .gGdPyq[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .gGdPyq[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .gGdPyq[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .gGdPyq[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .gGdPyq[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .gGdPyq[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .gGdPyq[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gGdPyq[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .gGdPyq[data-block="block"]{width:100%;}/*!sc*/ .gGdPyq[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .gGdPyq[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .gGdPyq[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .gGdPyq[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .gGdPyq[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .gGdPyq [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .gGdPyq [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .gGdPyq [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .gGdPyq [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .gGdPyq [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .gGdPyq [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gGdPyq [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gGdPyq [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .gGdPyq:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .gGdPyq:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .gGdPyq[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .gGdPyq [data-component="leadingVisual"],.gGdPyq [data-component="trailingVisual"],.gGdPyq [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gGdPyq[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dOuZvu{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .dOuZvu:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .dOuZvu:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .dOuZvu:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .dOuZvu[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .dOuZvu[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .dOuZvu:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .dOuZvu:active{-webkit-transition:none;transition:none;}/*!sc*/ .dOuZvu[data-inactive]{cursor:auto;}/*!sc*/ .dOuZvu:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .dOuZvu:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.dOuZvu:focus{outline:solid 1px transparent;}}/*!sc*/ .dOuZvu [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .dOuZvu[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .dOuZvu[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .dOuZvu[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .dOuZvu[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .dOuZvu[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .dOuZvu[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .dOuZvu[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .dOuZvu[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .dOuZvu[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .dOuZvu[data-block="block"]{width:100%;}/*!sc*/ .dOuZvu[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .dOuZvu[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .dOuZvu[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .dOuZvu[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .dOuZvu[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .dOuZvu[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .dOuZvu[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .dOuZvu[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .dOuZvu[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .dOuZvu [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .dOuZvu [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .dOuZvu [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .dOuZvu [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .dOuZvu [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .dOuZvu [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .dOuZvu [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dOuZvu [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .dOuZvu:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .dOuZvu:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .dOuZvu[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .dOuZvu [data-component="leadingVisual"],.dOuZvu [data-component="trailingVisual"],.dOuZvu [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dOuZvu[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dOuZvu[data-size="small"][data-no-visuals]{border-top-left-radius:0;border-bottom-left-radius:0;}/*!sc*/ .iZkvjn{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .iZkvjn:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .iZkvjn:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .iZkvjn:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .iZkvjn[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .iZkvjn[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .iZkvjn:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .iZkvjn:active{-webkit-transition:none;transition:none;}/*!sc*/ .iZkvjn[data-inactive]{cursor:auto;}/*!sc*/ .iZkvjn:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .iZkvjn:disabled [data-component=ButtonCounter],.iZkvjn:disabled [data-component="leadingVisual"],.iZkvjn:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.iZkvjn:focus{outline:solid 1px transparent;}}/*!sc*/ .iZkvjn [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .iZkvjn[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .iZkvjn[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .iZkvjn[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .iZkvjn[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .iZkvjn[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .iZkvjn[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .iZkvjn[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .iZkvjn[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .iZkvjn[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .iZkvjn[data-block="block"]{width:100%;}/*!sc*/ .iZkvjn[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .iZkvjn[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .iZkvjn[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .iZkvjn[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .iZkvjn[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .iZkvjn[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .iZkvjn[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .iZkvjn[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .iZkvjn[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .iZkvjn [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .iZkvjn [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .iZkvjn [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .iZkvjn [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .iZkvjn [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .iZkvjn [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .iZkvjn [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .iZkvjn [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .iZkvjn:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .iZkvjn:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .iZkvjn[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .iZkvjn[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .iZkvjn[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .iZkvjn:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .iZkvjn:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .iZkvjn:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .iZkvjn[data-size="small"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));position:relative;}/*!sc*/ .ggSvLP{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .ggSvLP:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .ggSvLP:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .ggSvLP:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .ggSvLP[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .ggSvLP[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .ggSvLP:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .ggSvLP:active{-webkit-transition:none;transition:none;}/*!sc*/ .ggSvLP[data-inactive]{cursor:auto;}/*!sc*/ .ggSvLP:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .ggSvLP:disabled [data-component=ButtonCounter],.ggSvLP:disabled [data-component="leadingVisual"],.ggSvLP:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.ggSvLP:focus{outline:solid 1px transparent;}}/*!sc*/ .ggSvLP [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .ggSvLP[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .ggSvLP[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .ggSvLP[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .ggSvLP[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .ggSvLP[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .ggSvLP[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .ggSvLP[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .ggSvLP[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .ggSvLP[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .ggSvLP[data-block="block"]{width:100%;}/*!sc*/ .ggSvLP[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .ggSvLP[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .ggSvLP[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .ggSvLP[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .ggSvLP[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .ggSvLP[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .ggSvLP[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .ggSvLP[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .ggSvLP[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .ggSvLP [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .ggSvLP [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .ggSvLP [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .ggSvLP [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .ggSvLP [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .ggSvLP [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .ggSvLP [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ggSvLP [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .ggSvLP:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .ggSvLP:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .ggSvLP[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .ggSvLP[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .ggSvLP[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .ggSvLP:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .ggSvLP:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .ggSvLP:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .ggSvLP[data-size="small"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ data-styled.g11[id="types__StyledButton-sc-ws60qy-0"]{content:"kBQCgV,dPmZyJ,iQGjqs,iLfocZ,JVsBq,fwExmK,ifVXZX,gGdPyq,dOuZvu,iZkvjn,ggSvLP,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g14[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .kbCLEG{border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;width:100%;}/*!sc*/ .kbCLEG:focus{outline:0;}/*!sc*/ data-styled.g15[id="UnstyledTextInput-sc-14ypya-0"]{content:"kbCLEG,"}/*!sc*/ .eAtkQz{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:125px;max-width:100%;}/*!sc*/ data-styled.g17[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"eAtkQz,"}/*!sc*/ body[data-page-layout-dragging="true"]{cursor:col-resize;}/*!sc*/ body[data-page-layout-dragging="true"] *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}/*!sc*/ data-styled.g99[id="sc-global-gbKrvU1"]{content:"sc-global-gbKrvU1,"}/*!sc*/ .lirRhW{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;isolation:isolate;}/*!sc*/ .lirRhW.lirRhW > *:not([data-loading-wrapper]){margin-inline-end:-1px;position:relative;border-radius:0;}/*!sc*/ .lirRhW.lirRhW > *:not([data-loading-wrapper]):first-child{border-top-left-radius:6px;border-bottom-left-radius:6px;}/*!sc*/ .lirRhW.lirRhW > *:not([data-loading-wrapper]):last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;}/*!sc*/ .lirRhW.lirRhW > *:not([data-loading-wrapper]):focus,.lirRhW.lirRhW > *:not([data-loading-wrapper]):active,.lirRhW.lirRhW > *:not([data-loading-wrapper]):hover{z-index:1;}/*!sc*/ .lirRhW [data-loading-wrapper]:first-child button,.lirRhW [data-loading-wrapper]:first-child a{border-top-left-radius:6px;border-bottom-left-radius:6px;}/*!sc*/ .lirRhW [data-loading-wrapper]:last-child button,.lirRhW [data-loading-wrapper]:last-child a{border-top-right-radius:6px;border-bottom-right-radius:6px;}/*!sc*/ .lirRhW [data-loading-wrapper] > *{margin-inline-end:-1px;position:relative;border-radius:0;}/*!sc*/ .lirRhW [data-loading-wrapper] > *:focus,.lirRhW [data-loading-wrapper] > *:active,.lirRhW [data-loading-wrapper] > *:hover{z-index:1;}/*!sc*/ data-styled.g104[id="ButtonGroup__StyledButtonGroup-sc-1gxhls1-0"]{content:"lirRhW,"}/*!sc*/ .dbGjOi{--segmented-control-button-inner-padding:12px;--segmented-control-button-bg-inset:4px;--segmented-control-outer-radius:6px;background-color:transparent;border-color:transparent;border-radius:var(--segmented-control-outer-radius);border-width:0;color:currentColor;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:600;padding:0;height:100%;width:100%;}/*!sc*/ .dbGjOi:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .dbGjOi:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .dbGjOi:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .dbGjOi .segmentedControl-content{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--controlKnob-bgColor-rest,var(--color-segmented-control-button-bg,#ffffff));border-color:var(--controlKnob-borderColor-rest,var(--color-segmented-control-button-hover-active-selected-border,#8c959f));border-style:solid;border-width:1px;border-radius:var(--segmented-control-outer-radius);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:var(--segmented-control-button-inner-padding);padding-right:var(--segmented-control-button-inner-padding);}/*!sc*/ .dbGjOi svg{fill:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dbGjOi:focus:focus-visible:not(:last-child):after{width:0;}/*!sc*/ .dbGjOi .segmentedControl-text:after{content:"Code";display:block;font-weight:600;height:0;overflow:hidden;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;visibility:hidden;}/*!sc*/ @media (pointer:coarse){.dbGjOi:before{content:"";position:absolute;left:0;right:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%;min-height:44px;}}/*!sc*/ .bHmvop{--segmented-control-button-inner-padding:12px;--segmented-control-button-bg-inset:4px;--segmented-control-outer-radius:6px;background-color:transparent;border-color:transparent;border-radius:var(--segmented-control-outer-radius);border-width:0;color:currentColor;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:400;padding:var(--segmented-control-button-bg-inset);height:100%;width:100%;}/*!sc*/ .bHmvop:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .bHmvop:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .bHmvop:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .bHmvop .segmentedControl-content{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:transparent;border-color:transparent;border-style:solid;border-width:1px;border-radius:calc(var(--segmented-control-outer-radius) - var(--segmented-control-button-bg-inset) / 2);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:calc(var(--segmented-control-button-inner-padding) - var(--segmented-control-button-bg-inset));padding-right:calc(var(--segmented-control-button-inner-padding) - var(--segmented-control-button-bg-inset));}/*!sc*/ .bHmvop svg{fill:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .bHmvop:hover .segmentedControl-content{background-color:var(--controlTrack-bgColor-hover,var(--color-segmented-control-button-hover-bg,rgba(175,184,193,0.2)));}/*!sc*/ .bHmvop:active .segmentedControl-content{background-color:var(--controlTrack-bgColor-active,var(--color-segmented-control-button-hover-active-bg,rgba(175,184,193,0.4)));}/*!sc*/ .bHmvop:focus:focus-visible:not(:last-child):after{width:0;}/*!sc*/ .bHmvop .segmentedControl-text:after{content:"Blame";display:block;font-weight:600;height:0;overflow:hidden;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;visibility:hidden;}/*!sc*/ @media (pointer:coarse){.bHmvop:before{content:"";position:absolute;left:0;right:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%;min-height:44px;}}/*!sc*/ data-styled.g106[id="SegmentedControlButton__SegmentedControlButtonStyled-sc-8lkgxl-0"]{content:"dbGjOi,bHmvop,"}/*!sc*/ .lawgDG{background-color:var(--controlTrack-bgColor-rest,var(--color-segmented-control-bg,#eaeef2));border-radius:6px;border:1px solid;border-color:var(--controlTrack-borderColor-rest,transparent);display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;font-size:14px;height:28px;margin:0;padding:0;}/*!sc*/ data-styled.g108[id="SegmentedControl__SegmentedControlList-sc-1rzig82-0"]{content:"lawgDG,"}/*!sc*/ </style><meta data-hydrostats="publish"/> <!-- --> <!-- --> <button hidden="" data-testid="header-permalink-button" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button><div><div style="--sticky-pane-height:100vh" class="Box-sc-g0xbh4-0 hOfjFo"><div class="Box-sc-g0xbh4-0 oDGAe"><div class="Box-sc-g0xbh4-0 kowOcT"><div tabindex="0" class="Box-sc-g0xbh4-0 gISSDQ"><div class="Box-sc-g0xbh4-0 fLEPlD"><div class="Box-sc-g0xbh4-0 hPvFuC"></div><div style="--pane-width:320px" class="Box-sc-g0xbh4-0 fFSoPl"></div><div class="Box-sc-g0xbh4-0 bTBnTW"><div role="slider" aria-label="Draggable pane splitter" aria-valuemin="0" aria-valuemax="0" aria-valuenow="0" aria-valuetext="Pane width 0 pixels" tabindex="0" class="Box-sc-g0xbh4-0 bHLmSv"></div></div></div></div><div class="Box-sc-g0xbh4-0 iKqMNA"><div class="Box-sc-g0xbh4-0"></div><div class="Box-sc-g0xbh4-0 FxAyp"><div data-selector="repos-split-pane-content" tabindex="0" class="Box-sc-g0xbh4-0 leYMvG"><div class="Box-sc-g0xbh4-0 KMPzq"><div class="Box-sc-g0xbh4-0 hfKjHv container"><div class="px-3 pt-3 pb-0" id="StickyHeader"><div class="Box-sc-g0xbh4-0 gZWyZE"><div class="Box-sc-g0xbh4-0 dwYKDk"><div class="Box-sc-g0xbh4-0 ibcGmb react-code-view-header-wrap--narrow"><div class="Box-sc-g0xbh4-0 hKaEJF"><h2 class="Box-sc-g0xbh4-0 XosP prc-Heading-Heading-6CmGO"><button style="--button-color:fg.muted" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="types__StyledButton-sc-ws60qy-0 kBQCgV" data-loading="false" data-size="medium" aria-describedby=":Rld9lab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text">Files</span></span></button><span role="tooltip" aria-label="Expand file tree" id="expand-button-file-tree-button" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-se"><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="types__StyledButton-sc-ws60qy-0 dPmZyJ position-relative ExpandFileTreeButton-module__expandButton--gL4is ExpandFileTreeButton-module__filesButtonBreakpoint--WfX9t fgColor-muted prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":R35d9lab:-loading-announcement" aria-labelledby="expand-button-file-tree-button"><svg aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button></span><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="332c613 branch" data-testid="anchor-button" class="types__StyledButton-sc-ws60qy-0 iQGjqs ref-selector-class" data-loading="false" data-size="medium" aria-describedby="branch-picker-repos-header-ref-selector-wide-loading-announcement" id="branch-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 dbrgmi ref-selector-button-text-container"><span class="Text__StyledText-sc-17v1xeu-0 eMMFM"> <!-- -->332c613</span></div></div></span><span data-component="trailingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 dHJiml react-code-view-header-mb--narrow"><div class="Box-sc-g0xbh4-0 cEytCf"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Box-sc-g0xbh4-0 fzFXnm"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Box-sc-g0xbh4-0 iMnkmv"><li class="Box-sc-g0xbh4-0 ghzDag"><a class="Box-sc-g0xbh4-0 kHuKdh prc-Link-Link-85e08" sx="[object Object]" data-testid="breadcrumbs-repo-link" href="/bitcoin/bitcoin/tree/332c6134bb15384e5b91c631e821fe52a591d3bc">bitcoin</a></li><li class="Box-sc-g0xbh4-0 ghzDag"><span class="Text__StyledText-sc-17v1xeu-0 HlHVj" aria-hidden="true">/</span><a class="Box-sc-g0xbh4-0 kgiVEz prc-Link-Link-85e08" sx="[object Object]" href="/bitcoin/bitcoin/tree/332c6134bb15384e5b91c631e821fe52a591d3bc/src">src</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Box-sc-g0xbh4-0 ghzDag"><span class="Text__StyledText-sc-17v1xeu-0 HlHVj" aria-hidden="true">/</span><h1 class="Box-sc-g0xbh4-0 jGhzSQ prc-Heading-Heading-6CmGO" tabindex="-1" id="file-name-id">validation.cpp</h1></div><div aria-describedby=":R1td9lab:"><button data-component="IconButton" type="button" aria-label="Copy path" tabindex="0" class="types__StyledButton-sc-ws60qy-0 dPmZyJ prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" aria-describedby=":R7td9lab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button></div></div></div></div><div class="react-code-view-header-element--wide"><div class="Box-sc-g0xbh4-0 faNtbn"><div class="d-flex gap-2"> <div><div class="Box-sc-g0xbh4-0 fmQaBv"><span class="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0 TextInputWrapper-sc-1mqhpbi-1 gwqFqs decvaq TextInput-wrapper" aria-busy="false"><span class="TextInput-icon" id=":R5j6d9lab:" aria-hidden="true"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellcheck="false" placeholder="Go to file" aria-describedby=":R5j6d9lab: :R5j6d9labH1:" data-component="input" class="UnstyledTextInput-sc-14ypya-0 kbCLEG" value=""/><span class="TextInput-icon" id=":R5j6d9labH1:" aria-hidden="true"></span></span></div><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button></div><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button><button type="button" class="types__StyledButton-sc-ws60qy-0 iLfocZ" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":R2l6d9lab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text">Blame</span></span></button><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button data-component="IconButton" type="button" aria-label="More file actions" title="More file actions" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="types__StyledButton-sc-ws60qy-0 JVsBq js-blob-dropdown-click prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":R156d9lab:-loading-announcement" id=":R156d9lab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button> </div></div></div><div class="react-code-view-header-element--narrow"><div class="Box-sc-g0xbh4-0 faNtbn"><div class="d-flex gap-2"> <button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button><button type="button" class="types__StyledButton-sc-ws60qy-0 iLfocZ" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":R2l7d9lab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text">Blame</span></span></button><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button data-component="IconButton" type="button" aria-label="More file actions" title="More file actions" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="types__StyledButton-sc-ws60qy-0 JVsBq js-blob-dropdown-click prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":R157d9lab:-loading-announcement" id=":R157d9lab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button> </div></div></div></div></div></div></div></div><div class="Box-sc-g0xbh4-0 dJxjrT react-code-view-bottom-padding"> <div class="Box-sc-g0xbh4-0 eFxKDQ"></div> <!-- --> <!-- --> </div><div class="Box-sc-g0xbh4-0 dJxjrT"> <!-- --> <!-- --> <button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button><div class="d-flex flex-column border rounded-2 mb-3 pl-1"><div class="Box-sc-g0xbh4-0 dzCJzi"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">History</h2><a href="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" class="types__StyledButton-sc-ws60qy-0 dPmZyJ d-none d-lg-flex LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" aria-describedby=":R5dlal9lab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><span role="tooltip" aria-label="History" id="history-icon-button-tooltip" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><a href="/bitcoin/bitcoin/commits/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" class="types__StyledButton-sc-ws60qy-0 dPmZyJ LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" aria-describedby=":Rpdlal9lab:-loading-announcement history-icon-button-tooltip"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a></span></div></div></div></div></div><div class="Box-sc-g0xbh4-0 ldRxiI"><div class="Box-sc-g0xbh4-0 fVkfyA container"><div class="Box-sc-g0xbh4-0 gNAmSV react-code-size-details-banner"><div class="Box-sc-g0xbh4-0 jNEwzY react-code-size-details-banner"><div class="Box-sc-g0xbh4-0 bsDwxw text-mono"><div title="216 KB" data-testid="blob-size" class="Truncate__StyledTruncate-sc-23o1d2-0 eAtkQz"><span>4763 lines (4197 loc) · 216 KB</span></div></div></div></div><div class="Box-sc-g0xbh4-0 jdLMhu react-blob-view-header-sticky" id="repos-sticky-header"><div class="Box-sc-g0xbh4-0 tOISc"><div class="react-blob-sticky-header"><div class="Box-sc-g0xbh4-0 hqwSEx"><div class="Box-sc-g0xbh4-0 bDVoEr"><div class="Box-sc-g0xbh4-0 kYLlPM"><div class="Box-sc-g0xbh4-0 gYjEmn"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="332c613 branch" data-testid="anchor-button" class="types__StyledButton-sc-ws60qy-0 iQGjqs ref-selector-class" data-loading="false" data-size="medium" aria-describedby="branch-picker-repos-header-ref-selector-loading-announcement" id="branch-picker-repos-header-ref-selector"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 dbrgmi ref-selector-button-text-container"><span class="Text__StyledText-sc-17v1xeu-0 eMMFM"> <!-- -->332c613</span></div></div></span><span data-component="trailingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 kGqOLL"><div class="Box-sc-g0xbh4-0 fHind"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Box-sc-g0xbh4-0 fzFXnm"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Box-sc-g0xbh4-0 iMnkmv"><li class="Box-sc-g0xbh4-0 ghzDag"><a class="Box-sc-g0xbh4-0 kHuKdh prc-Link-Link-85e08" sx="[object Object]" data-testid="breadcrumbs-repo-link" href="/bitcoin/bitcoin/tree/332c6134bb15384e5b91c631e821fe52a591d3bc">bitcoin</a></li><li class="Box-sc-g0xbh4-0 ghzDag"><span class="Text__StyledText-sc-17v1xeu-0 lauzFl" aria-hidden="true">/</span><a class="Box-sc-g0xbh4-0 kgiVEz prc-Link-Link-85e08" sx="[object Object]" href="/bitcoin/bitcoin/tree/332c6134bb15384e5b91c631e821fe52a591d3bc/src">src</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Box-sc-g0xbh4-0 ghzDag"><span class="Text__StyledText-sc-17v1xeu-0 lauzFl" aria-hidden="true">/</span><h1 class="Box-sc-g0xbh4-0 dnZoUW prc-Heading-Heading-6CmGO" tabindex="-1" id="sticky-file-name-id">validation.cpp</h1></div></div></div></div><button style="--button-color:fg.default" type="button" class="types__StyledButton-sc-ws60qy-0 fwExmK" data-loading="false" data-size="small" aria-describedby=":Riptal9lab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text">Top</span></span></button></div></div></div><div class="Box-sc-g0xbh4-0 kTvpNk"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">File metadata and controls</h2><div class="Box-sc-g0xbh4-0 iNMjfP"><ul aria-label="File view" class="SegmentedControl__SegmentedControlList-sc-1rzig82-0 lawgDG"><li class="Box-sc-g0xbh4-0 fefCSX"><button aria-current="true" type="button" class="SegmentedControlButton__SegmentedControlButtonStyled-sc-8lkgxl-0 dbGjOi"><span class="segmentedControl-content"><div class="Box-sc-g0xbh4-0 segmentedControl-text">Code</div></span></button></li><li class="Box-sc-g0xbh4-0 idgUkN"><button aria-current="false" type="button" class="SegmentedControlButton__SegmentedControlButtonStyled-sc-8lkgxl-0 bHmvop"><span class="segmentedControl-content"><div class="Box-sc-g0xbh4-0 segmentedControl-text">Blame</div></span></button></li></ul><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><div class="Box-sc-g0xbh4-0 jNEwzY react-code-size-details-in-header"><div class="Box-sc-g0xbh4-0 bsDwxw text-mono"><div title="216 KB" data-testid="blob-size" class="Truncate__StyledTruncate-sc-23o1d2-0 eAtkQz"><span>4763 lines (4197 loc) · 216 KB</span></div></div></div></div><div class="Box-sc-g0xbh4-0 kcLCKF"><div class="Box-sc-g0xbh4-0 kVWtTz react-blob-header-edit-and-raw-actions"><div class="ButtonGroup__StyledButtonGroup-sc-1gxhls1-0 lirRhW"><a href="https://github.com/bitcoin/bitcoin/raw/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp" data-testid="raw-button" class="types__StyledButton-sc-ws60qy-0 ifVXZX" data-loading="false" data-no-visuals="true" data-size="small" aria-describedby=":R5csptal9lab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text">Raw</span></span></a><button data-component="IconButton" type="button" aria-label="Copy raw content" data-testid="copy-raw-button" class="types__StyledButton-sc-ws60qy-0 gGdPyq prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" aria-describedby=":Rpcsptal9lab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span role="tooltip" aria-label="Download raw file" id=":Rdcsptal9lab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><button data-component="IconButton" type="button" aria-label="Download raw content" data-testid="download-raw-button" class="types__StyledButton-sc-ws60qy-0 dOuZvu prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" aria-describedby=":Rtcsptal9lab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button></span></div><button hidden="" data-testid="raw-button-shortcut" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden="" data-testid="copy-raw-button-shortcut" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden="" data-testid="download-raw-button-shortcut" data-hotkey-scope="read-only-cursor-text-area"></button></div><span role="tooltip" aria-label="Open symbols panel" id=":R5sptal9lab:" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-nw"><button data-component="IconButton" type="button" aria-label="Symbols" aria-pressed="false" aria-expanded="false" aria-controls="symbols-pane" data-testid="symbols-button" class="types__StyledButton-sc-ws60qy-0 iZkvjn prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" aria-describedby="symbols-button-loading-announcement" id="symbols-button"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-square" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></button></span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" aria-label="Edit and raw actions" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="types__StyledButton-sc-ws60qy-0 ggSvLP js-blob-dropdown-click prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="small" aria-describedby=":Rnsptal9lab:-loading-announcement" id=":Rnsptal9lab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div></div></div></div><div></div></div><div class="Box-sc-g0xbh4-0 hGyMdv"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="Box-sc-g0xbh4-0 dceWRL"><div class="Box-sc-g0xbh4-0 dGXHv"><div id="highlighted-line-menu-positioner" class="position-relative"><div id="copilot-button-positioner" class="Box-sc-g0xbh4-0 bpDFns"><div class="Box-sc-g0xbh4-0 iJOeCH"><div class="Box-sc-g0xbh4-0 jewUnv react-code-file-contents" role="presentation" aria-hidden="true" data-tab-size="8" data-paste-markdown-skip="true" data-hpc="true"><div class="react-line-numbers" style="pointer-events:auto"><div data-line-number="1" class="react-line-number react-code-text" style="padding-right:16px">1</div><div data-line-number="2" class="react-line-number react-code-text" style="padding-right:16px">2</div><div data-line-number="3" class="react-line-number react-code-text" style="padding-right:16px">3</div><div data-line-number="4" class="react-line-number react-code-text" style="padding-right:16px">4</div><div data-line-number="5" class="react-line-number react-code-text" style="padding-right:16px">5</div><div data-line-number="6" class="react-line-number react-code-text" style="padding-right:16px">6</div><div data-line-number="7" class="react-line-number react-code-text" style="padding-right:16px">7</div><div data-line-number="8" class="react-line-number react-code-text" style="padding-right:16px">8</div><div data-line-number="9" class="react-line-number react-code-text" style="padding-right:16px">9</div><div data-line-number="10" class="react-line-number react-code-text" style="padding-right:16px">10</div><div data-line-number="11" class="react-line-number react-code-text" style="padding-right:16px">11</div><div data-line-number="12" class="react-line-number react-code-text" style="padding-right:16px">12</div><div data-line-number="13" class="react-line-number react-code-text" style="padding-right:16px">13</div><div data-line-number="14" class="react-line-number react-code-text" style="padding-right:16px">14</div><div data-line-number="15" class="react-line-number react-code-text" style="padding-right:16px">15</div><div data-line-number="16" class="react-line-number react-code-text" style="padding-right:16px">16</div><div data-line-number="17" class="react-line-number react-code-text" style="padding-right:16px">17</div><div data-line-number="18" class="react-line-number react-code-text" style="padding-right:16px">18</div><div data-line-number="19" class="react-line-number react-code-text" style="padding-right:16px">19</div><div data-line-number="20" class="react-line-number react-code-text" style="padding-right:16px">20</div><div data-line-number="21" class="react-line-number react-code-text" style="padding-right:16px">21</div><div data-line-number="22" class="react-line-number react-code-text" style="padding-right:16px">22</div><div data-line-number="23" class="react-line-number react-code-text" style="padding-right:16px">23</div><div data-line-number="24" class="react-line-number react-code-text" style="padding-right:16px">24</div><div data-line-number="25" class="react-line-number react-code-text" style="padding-right:16px">25</div><div data-line-number="26" class="react-line-number react-code-text" style="padding-right:16px">26</div><div data-line-number="27" class="react-line-number react-code-text" style="padding-right:16px">27</div><div data-line-number="28" class="react-line-number react-code-text" style="padding-right:16px">28</div><div data-line-number="29" class="react-line-number react-code-text" style="padding-right:16px">29</div><div data-line-number="30" class="react-line-number react-code-text" style="padding-right:16px">30</div><div data-line-number="31" class="react-line-number react-code-text" style="padding-right:16px">31</div><div data-line-number="32" class="react-line-number react-code-text" style="padding-right:16px">32</div><div data-line-number="33" class="react-line-number react-code-text" style="padding-right:16px">33</div><div data-line-number="34" class="react-line-number react-code-text" style="padding-right:16px">34</div><div data-line-number="35" class="react-line-number react-code-text" style="padding-right:16px">35</div><div data-line-number="36" class="react-line-number react-code-text" style="padding-right:16px">36</div><div data-line-number="37" class="react-line-number react-code-text" style="padding-right:16px">37</div><div data-line-number="38" class="react-line-number react-code-text" style="padding-right:16px">38</div><div data-line-number="39" class="react-line-number react-code-text" style="padding-right:16px">39</div><div data-line-number="40" class="react-line-number react-code-text" style="padding-right:16px">40</div><div data-line-number="41" class="react-line-number react-code-text" style="padding-right:16px">41</div><div data-line-number="42" class="react-line-number react-code-text" style="padding-right:16px">42</div><div data-line-number="43" class="react-line-number react-code-text" style="padding-right:16px">43</div><div data-line-number="44" class="react-line-number react-code-text" style="padding-right:16px">44</div><div data-line-number="45" class="react-line-number react-code-text" style="padding-right:16px">45</div><div data-line-number="46" class="react-line-number react-code-text" style="padding-right:16px">46</div><div data-line-number="47" class="react-line-number react-code-text" style="padding-right:16px">47</div><div data-line-number="48" class="react-line-number react-code-text" style="padding-right:16px">48</div><div data-line-number="49" class="react-line-number react-code-text" style="padding-right:16px">49</div><div data-line-number="50" class="react-line-number react-code-text" style="padding-right:16px">50</div><div data-line-number="51" class="react-line-number react-code-text" style="padding-right:16px">51</div><div data-line-number="52" class="react-line-number react-code-text" style="padding-right:16px">52</div><div data-line-number="53" class="react-line-number react-code-text" style="padding-right:16px">53</div><div data-line-number="54" class="react-line-number react-code-text" style="padding-right:16px">54</div><div data-line-number="55" class="react-line-number react-code-text" style="padding-right:16px">55</div><div data-line-number="56" class="react-line-number react-code-text" style="padding-right:16px">56</div><div data-line-number="57" class="react-line-number react-code-text" style="padding-right:16px">57</div><div data-line-number="58" class="react-line-number react-code-text" style="padding-right:16px">58</div><div data-line-number="59" class="react-line-number react-code-text" style="padding-right:16px">59</div><div data-line-number="60" class="react-line-number react-code-text" style="padding-right:16px">60</div><div data-line-number="61" class="react-line-number react-code-text" style="padding-right:16px">61</div><div data-line-number="62" class="react-line-number react-code-text" style="padding-right:16px">62</div><div data-line-number="63" class="react-line-number react-code-text" style="padding-right:16px">63</div><div data-line-number="64" class="react-line-number react-code-text" style="padding-right:16px">64</div><div data-line-number="65" class="react-line-number react-code-text" style="padding-right:16px">65</div><div data-line-number="66" class="react-line-number react-code-text" style="padding-right:16px">66</div><div data-line-number="67" class="react-line-number react-code-text" style="padding-right:16px">67</div><div data-line-number="68" class="react-line-number react-code-text" style="padding-right:16px">68</div><div data-line-number="69" class="react-line-number react-code-text" style="padding-right:16px">69</div><div data-line-number="70" class="react-line-number react-code-text" style="padding-right:16px">70</div><div data-line-number="71" class="react-line-number react-code-text" style="padding-right:16px">71</div><div data-line-number="72" class="react-line-number react-code-text" style="padding-right:16px">72</div><div data-line-number="73" class="react-line-number react-code-text" style="padding-right:16px">73</div><div data-line-number="74" class="react-line-number react-code-text" style="padding-right:16px">74</div><div data-line-number="75" class="react-line-number react-code-text" style="padding-right:16px">75</div><div data-line-number="76" class="react-line-number react-code-text" style="padding-right:16px">76</div><div data-line-number="77" class="react-line-number react-code-text" style="padding-right:16px">77</div><div data-line-number="78" class="react-line-number react-code-text" style="padding-right:16px">78</div><div data-line-number="79" class="react-line-number react-code-text" style="padding-right:16px">79</div><div data-line-number="80" class="react-line-number react-code-text" style="padding-right:16px">80</div><div data-line-number="81" class="react-line-number react-code-text" style="padding-right:16px">81</div><div data-line-number="82" class="react-line-number react-code-text" style="padding-right:16px">82</div><div data-line-number="83" class="react-line-number react-code-text" style="padding-right:16px">83</div><div data-line-number="84" class="react-line-number react-code-text" style="padding-right:16px">84</div><div data-line-number="85" class="react-line-number react-code-text" style="padding-right:16px">85</div><div data-line-number="86" class="react-line-number react-code-text" style="padding-right:16px">86</div><div data-line-number="87" class="react-line-number react-code-text" style="padding-right:16px">87</div><div data-line-number="88" class="react-line-number react-code-text" style="padding-right:16px">88</div><div data-line-number="89" class="react-line-number react-code-text" style="padding-right:16px">89</div><div data-line-number="90" class="react-line-number react-code-text" style="padding-right:16px">90</div><div data-line-number="91" class="react-line-number react-code-text" style="padding-right:16px">91</div><div data-line-number="92" class="react-line-number react-code-text" style="padding-right:16px">92</div><div data-line-number="93" class="react-line-number react-code-text" style="padding-right:16px">93</div><div data-line-number="94" class="react-line-number react-code-text" style="padding-right:16px">94</div><div data-line-number="95" class="react-line-number react-code-text" style="padding-right:16px">95</div><div data-line-number="96" class="react-line-number react-code-text" style="padding-right:16px">96</div><div data-line-number="97" class="react-line-number react-code-text" style="padding-right:16px">97</div><div data-line-number="98" class="react-line-number react-code-text" style="padding-right:16px">98</div><div data-line-number="99" class="react-line-number react-code-text" style="padding-right:16px">99</div><div data-line-number="100" class="react-line-number react-code-text" style="padding-right:16px">100</div><div data-line-number="101" class="react-line-number react-code-text" style="padding-right:16px">101</div><div data-line-number="102" class="react-line-number react-code-text" style="padding-right:16px">102</div><div data-line-number="103" class="react-line-number react-code-text" style="padding-right:16px">103</div><div data-line-number="104" class="react-line-number react-code-text" style="padding-right:16px">104</div><div data-line-number="105" class="react-line-number react-code-text" style="padding-right:16px">105</div><div data-line-number="106" class="react-line-number react-code-text" style="padding-right:16px">106</div><div data-line-number="107" class="react-line-number react-code-text" style="padding-right:16px">107</div><div data-line-number="108" class="react-line-number react-code-text" style="padding-right:16px">108</div><div data-line-number="109" class="react-line-number react-code-text" style="padding-right:16px">109</div><div data-line-number="110" class="react-line-number react-code-text" style="padding-right:16px">110</div><div data-line-number="111" class="react-line-number react-code-text" style="padding-right:16px">111</div><div data-line-number="112" class="react-line-number react-code-text" style="padding-right:16px">112</div><div data-line-number="113" class="react-line-number react-code-text" style="padding-right:16px">113</div><div data-line-number="114" class="react-line-number react-code-text" style="padding-right:16px">114</div><div data-line-number="115" class="react-line-number react-code-text" style="padding-right:16px">115</div><div data-line-number="116" class="react-line-number react-code-text" style="padding-right:16px">116</div><div data-line-number="117" class="react-line-number react-code-text" style="padding-right:16px">117</div><div data-line-number="118" class="react-line-number react-code-text" style="padding-right:16px">118</div><div data-line-number="119" class="react-line-number react-code-text" style="padding-right:16px">119</div><div data-line-number="120" class="react-line-number react-code-text" style="padding-right:16px">120</div><div data-line-number="121" class="react-line-number react-code-text" style="padding-right:16px">121</div><div data-line-number="122" class="react-line-number react-code-text" style="padding-right:16px">122</div><div data-line-number="123" class="react-line-number react-code-text" style="padding-right:16px">123</div><div data-line-number="124" class="react-line-number react-code-text" style="padding-right:16px">124</div><div data-line-number="125" class="react-line-number react-code-text" style="padding-right:16px">125</div><div data-line-number="126" class="react-line-number react-code-text" style="padding-right:16px">126</div><div data-line-number="127" class="react-line-number react-code-text" style="padding-right:16px">127</div><div data-line-number="128" class="react-line-number react-code-text" style="padding-right:16px">128</div><div data-line-number="129" class="react-line-number react-code-text" style="padding-right:16px">129</div><div data-line-number="130" class="react-line-number react-code-text" style="padding-right:16px">130</div><div data-line-number="131" class="react-line-number react-code-text" style="padding-right:16px">131</div><div data-line-number="132" class="react-line-number react-code-text" style="padding-right:16px">132</div><div data-line-number="133" class="react-line-number react-code-text" style="padding-right:16px">133</div><div data-line-number="134" class="react-line-number react-code-text" style="padding-right:16px">134</div><div data-line-number="135" class="react-line-number react-code-text" style="padding-right:16px">135</div><div data-line-number="136" class="react-line-number react-code-text" style="padding-right:16px">136</div><div data-line-number="137" class="react-line-number react-code-text" style="padding-right:16px">137</div><div data-line-number="138" class="react-line-number react-code-text" style="padding-right:16px">138</div><div data-line-number="139" class="react-line-number react-code-text" style="padding-right:16px">139</div><div data-line-number="140" class="react-line-number react-code-text" style="padding-right:16px">140</div><div data-line-number="141" class="react-line-number react-code-text" style="padding-right:16px">141</div><div data-line-number="142" class="react-line-number react-code-text" style="padding-right:16px">142</div><div data-line-number="143" class="react-line-number react-code-text" style="padding-right:16px">143</div><div data-line-number="144" class="react-line-number react-code-text" style="padding-right:16px">144</div><div data-line-number="145" class="react-line-number react-code-text" style="padding-right:16px">145</div><div data-line-number="146" class="react-line-number react-code-text" style="padding-right:16px">146</div><div data-line-number="147" class="react-line-number react-code-text" style="padding-right:16px">147</div><div data-line-number="148" class="react-line-number react-code-text" style="padding-right:16px">148</div><div data-line-number="149" class="react-line-number react-code-text" style="padding-right:16px">149</div><div data-line-number="150" class="react-line-number react-code-text" style="padding-right:16px">150</div><div data-line-number="151" class="react-line-number react-code-text" style="padding-right:16px">151</div><div data-line-number="152" class="react-line-number react-code-text" style="padding-right:16px">152</div><div data-line-number="153" class="react-line-number react-code-text" style="padding-right:16px">153</div><div data-line-number="154" class="react-line-number react-code-text" style="padding-right:16px">154</div><div data-line-number="155" class="react-line-number react-code-text" style="padding-right:16px">155</div><div data-line-number="156" class="react-line-number react-code-text" style="padding-right:16px">156</div><div data-line-number="157" class="react-line-number react-code-text" style="padding-right:16px">157</div><div data-line-number="158" class="react-line-number react-code-text" style="padding-right:16px">158</div><div data-line-number="159" class="react-line-number react-code-text" style="padding-right:16px">159</div><div data-line-number="160" class="react-line-number react-code-text" style="padding-right:16px">160</div><div data-line-number="161" class="react-line-number react-code-text" style="padding-right:16px">161</div><div data-line-number="162" class="react-line-number react-code-text" style="padding-right:16px">162</div><div data-line-number="163" class="react-line-number react-code-text" style="padding-right:16px">163</div><div data-line-number="164" class="react-line-number react-code-text" style="padding-right:16px">164</div><div data-line-number="165" class="react-line-number react-code-text" style="padding-right:16px">165</div><div data-line-number="166" class="react-line-number react-code-text" style="padding-right:16px">166</div><div data-line-number="167" class="react-line-number react-code-text" style="padding-right:16px">167</div><div data-line-number="168" class="react-line-number react-code-text" style="padding-right:16px">168</div><div data-line-number="169" class="react-line-number react-code-text" style="padding-right:16px">169</div><div data-line-number="170" class="react-line-number react-code-text" style="padding-right:16px">170</div><div data-line-number="171" class="react-line-number react-code-text" style="padding-right:16px">171</div><div data-line-number="172" class="react-line-number react-code-text" style="padding-right:16px">172</div><div data-line-number="173" class="react-line-number react-code-text" style="padding-right:16px">173</div><div data-line-number="174" class="react-line-number react-code-text" style="padding-right:16px">174</div><div data-line-number="175" class="react-line-number react-code-text" style="padding-right:16px">175</div><div data-line-number="176" class="react-line-number react-code-text" style="padding-right:16px">176</div><div data-line-number="177" class="react-line-number react-code-text" style="padding-right:16px">177</div><div data-line-number="178" class="react-line-number react-code-text" style="padding-right:16px">178</div><div data-line-number="179" class="react-line-number react-code-text" style="padding-right:16px">179</div><div data-line-number="180" class="react-line-number react-code-text" style="padding-right:16px">180</div><div data-line-number="181" class="react-line-number react-code-text" style="padding-right:16px">181</div><div data-line-number="182" class="react-line-number react-code-text" style="padding-right:16px">182<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="183" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">183</div><div data-line-number="184" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">184</div><div data-line-number="185" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">185</div><div data-line-number="186" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">186</div><div data-line-number="187" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">187</div><div data-line-number="188" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">188</div><div data-line-number="189" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">189</div><div data-line-number="190" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">190</div><div data-line-number="191" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">191</div><div data-line-number="192" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">192</div><div data-line-number="193" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">193</div><div data-line-number="194" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">194</div><div data-line-number="195" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">195</div><div data-line-number="196" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">196</div><div data-line-number="197" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">197</div><div data-line-number="198" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">198</div><div data-line-number="199" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">199</div><div data-line-number="200" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">200</div><div data-line-number="201" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">201</div><div data-line-number="202" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">202</div><div data-line-number="203" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">203</div><div data-line-number="204" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">204</div><div data-line-number="205" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">205</div><div data-line-number="206" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">206</div><div data-line-number="207" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">207</div><div data-line-number="208" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">208</div><div data-line-number="209" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">209</div><div data-line-number="210" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">210</div><div data-line-number="211" class="child-of-line-181 react-line-number react-code-text" style="padding-right:16px">211</div><div data-line-number="212" class="react-line-number react-code-text" style="padding-right:16px">212</div><div data-line-number="213" class="react-line-number react-code-text" style="padding-right:16px">213</div><div data-line-number="214" class="react-line-number react-code-text" style="padding-right:16px">214<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="215" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">215</div><div data-line-number="216" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">216</div><div data-line-number="217" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">217</div><div data-line-number="218" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">218</div><div data-line-number="219" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">219</div><div data-line-number="220" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">220</div><div data-line-number="221" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">221</div><div data-line-number="222" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">222</div><div data-line-number="223" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">223</div><div data-line-number="224" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">224</div><div data-line-number="225" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">225</div><div data-line-number="226" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">226</div><div data-line-number="227" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">227</div><div data-line-number="228" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">228</div><div data-line-number="229" class="child-of-line-213 react-line-number react-code-text" style="padding-right:16px">229</div><div data-line-number="230" class="react-line-number react-code-text" style="padding-right:16px">230</div><div data-line-number="231" class="react-line-number react-code-text" style="padding-right:16px">231</div><div data-line-number="232" class="react-line-number react-code-text" style="padding-right:16px">232<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="233" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">233</div><div data-line-number="234" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">234</div><div data-line-number="235" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">235</div><div data-line-number="236" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">236</div><div data-line-number="237" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">237</div><div data-line-number="238" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">238</div><div data-line-number="239" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">239</div><div data-line-number="240" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">240</div><div data-line-number="241" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">241</div><div data-line-number="242" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">242</div><div data-line-number="243" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">243</div><div data-line-number="244" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">244</div><div data-line-number="245" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">245</div><div data-line-number="246" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">246</div><div data-line-number="247" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">247</div><div data-line-number="248" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">248</div><div data-line-number="249" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">249</div><div data-line-number="250" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">250</div><div data-line-number="251" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">251</div><div data-line-number="252" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">252</div><div data-line-number="253" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">253</div><div data-line-number="254" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">254</div><div data-line-number="255" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">255</div><div data-line-number="256" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">256</div><div data-line-number="257" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">257</div><div data-line-number="258" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">258</div><div data-line-number="259" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">259</div><div data-line-number="260" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">260</div><div data-line-number="261" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">261</div><div data-line-number="262" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">262</div><div data-line-number="263" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">263</div><div data-line-number="264" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">264</div><div data-line-number="265" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">265</div><div data-line-number="266" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">266</div><div data-line-number="267" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">267</div><div data-line-number="268" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">268</div><div data-line-number="269" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">269</div><div data-line-number="270" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">270</div><div data-line-number="271" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">271</div><div data-line-number="272" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">272</div><div data-line-number="273" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">273</div><div data-line-number="274" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">274</div><div data-line-number="275" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">275</div><div data-line-number="276" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">276</div><div data-line-number="277" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">277</div><div data-line-number="278" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">278</div><div data-line-number="279" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">279</div><div data-line-number="280" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">280</div><div data-line-number="281" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">281</div><div data-line-number="282" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">282</div><div data-line-number="283" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">283</div><div data-line-number="284" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">284</div><div data-line-number="285" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">285</div><div data-line-number="286" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">286</div><div data-line-number="287" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">287</div><div data-line-number="288" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">288</div><div data-line-number="289" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">289</div><div data-line-number="290" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">290</div><div data-line-number="291" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">291</div><div data-line-number="292" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">292</div><div data-line-number="293" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">293</div><div data-line-number="294" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">294</div><div data-line-number="295" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">295</div><div data-line-number="296" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">296</div><div data-line-number="297" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">297</div><div data-line-number="298" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">298</div><div data-line-number="299" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">299</div><div data-line-number="300" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">300</div><div data-line-number="301" class="child-of-line-231 react-line-number react-code-text" style="padding-right:16px">301</div><div data-line-number="302" class="react-line-number react-code-text" style="padding-right:16px">302</div><div data-line-number="303" class="react-line-number react-code-text" style="padding-right:16px">303</div><div data-line-number="304" class="react-line-number react-code-text" style="padding-right:16px">304</div><div data-line-number="305" class="react-line-number react-code-text" style="padding-right:16px">305</div><div data-line-number="306" class="react-line-number react-code-text" style="padding-right:16px">306</div><div data-line-number="307" class="react-line-number react-code-text" style="padding-right:16px">307<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="308" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">308</div><div data-line-number="309" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">309</div><div data-line-number="310" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">310</div><div data-line-number="311" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">311</div><div data-line-number="312" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">312</div><div data-line-number="313" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">313</div><div data-line-number="314" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">314</div><div data-line-number="315" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">315</div><div data-line-number="316" class="child-of-line-306 react-line-number react-code-text" style="padding-right:16px">316</div><div data-line-number="317" class="react-line-number react-code-text" style="padding-right:16px">317</div><div data-line-number="318" class="react-line-number react-code-text" style="padding-right:16px">318</div><div data-line-number="319" class="react-line-number react-code-text" style="padding-right:16px">319<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="320" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">320</div><div data-line-number="321" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">321</div><div data-line-number="322" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">322</div><div data-line-number="323" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">323</div><div data-line-number="324" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">324</div><div data-line-number="325" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">325</div><div data-line-number="326" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">326</div><div data-line-number="327" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">327</div><div data-line-number="328" class="child-of-line-318 react-line-number react-code-text" style="padding-right:16px">328</div><div data-line-number="329" class="react-line-number react-code-text" style="padding-right:16px">329</div><div data-line-number="330" class="react-line-number react-code-text" style="padding-right:16px">330</div><div data-line-number="331" class="react-line-number react-code-text" style="padding-right:16px">331</div><div data-line-number="332" class="react-line-number react-code-text" style="padding-right:16px">332</div><div data-line-number="333" class="react-line-number react-code-text" style="padding-right:16px">333</div><div data-line-number="334" class="react-line-number react-code-text" style="padding-right:16px">334</div><div data-line-number="335" class="react-line-number react-code-text" style="padding-right:16px">335</div><div data-line-number="336" class="react-line-number react-code-text" style="padding-right:16px">336</div><div data-line-number="337" class="react-line-number react-code-text" style="padding-right:16px">337</div><div data-line-number="338" class="react-line-number react-code-text" style="padding-right:16px">338</div><div data-line-number="339" class="react-line-number react-code-text" style="padding-right:16px">339</div><div data-line-number="340" class="react-line-number react-code-text" style="padding-right:16px">340</div><div data-line-number="341" class="react-line-number react-code-text" style="padding-right:16px">341</div><div data-line-number="342" class="react-line-number react-code-text" style="padding-right:16px">342</div><div data-line-number="343" class="react-line-number react-code-text" style="padding-right:16px">343</div><div data-line-number="344" class="react-line-number react-code-text" style="padding-right:16px">344<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="345" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">345</div><div data-line-number="346" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">346</div><div data-line-number="347" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">347</div><div data-line-number="348" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">348</div><div data-line-number="349" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">349</div><div data-line-number="350" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">350</div><div data-line-number="351" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">351</div><div data-line-number="352" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">352</div><div data-line-number="353" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">353</div><div data-line-number="354" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">354</div><div data-line-number="355" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">355</div><div data-line-number="356" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">356</div><div data-line-number="357" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">357</div><div data-line-number="358" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">358</div><div data-line-number="359" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">359</div><div data-line-number="360" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">360</div><div data-line-number="361" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">361</div><div data-line-number="362" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">362</div><div data-line-number="363" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">363</div><div data-line-number="364" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">364</div><div data-line-number="365" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">365</div><div data-line-number="366" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">366</div><div data-line-number="367" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">367</div><div data-line-number="368" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">368</div><div data-line-number="369" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">369</div><div data-line-number="370" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">370</div><div data-line-number="371" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">371</div><div data-line-number="372" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">372</div><div data-line-number="373" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">373</div><div data-line-number="374" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">374</div><div data-line-number="375" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">375</div><div data-line-number="376" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">376</div><div data-line-number="377" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">377</div><div data-line-number="378" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">378</div><div data-line-number="379" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">379</div><div data-line-number="380" class="child-of-line-343 react-line-number react-code-text" style="padding-right:16px">380</div><div data-line-number="381" class="react-line-number react-code-text" style="padding-right:16px">381</div><div data-line-number="382" class="react-line-number react-code-text" style="padding-right:16px">382</div><div data-line-number="383" class="react-line-number react-code-text" style="padding-right:16px">383</div><div data-line-number="384" class="react-line-number react-code-text" style="padding-right:16px">384</div><div data-line-number="385" class="react-line-number react-code-text" style="padding-right:16px">385</div><div data-line-number="386" class="react-line-number react-code-text" style="padding-right:16px">386<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="387" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">387</div><div data-line-number="388" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">388</div><div data-line-number="389" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">389</div><div data-line-number="390" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">390</div><div data-line-number="391" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">391</div><div data-line-number="392" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">392</div><div data-line-number="393" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">393</div><div data-line-number="394" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">394</div><div data-line-number="395" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">395</div><div data-line-number="396" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">396</div><div data-line-number="397" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">397</div><div data-line-number="398" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">398</div><div data-line-number="399" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">399</div><div data-line-number="400" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">400</div><div data-line-number="401" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">401</div><div data-line-number="402" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">402</div><div data-line-number="403" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">403</div><div data-line-number="404" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">404</div><div data-line-number="405" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">405</div><div data-line-number="406" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">406</div><div data-line-number="407" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">407</div><div data-line-number="408" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">408</div><div data-line-number="409" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">409</div><div data-line-number="410" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">410</div><div data-line-number="411" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">411</div><div data-line-number="412" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">412</div><div data-line-number="413" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">413</div><div data-line-number="414" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">414</div><div data-line-number="415" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">415</div><div data-line-number="416" class="child-of-line-385 react-line-number react-code-text" style="padding-right:16px">416</div><div data-line-number="417" class="react-line-number react-code-text" style="padding-right:16px">417</div><div data-line-number="418" class="react-line-number react-code-text" style="padding-right:16px">418</div><div data-line-number="419" class="react-line-number react-code-text" style="padding-right:16px">419</div><div data-line-number="420" class="react-line-number react-code-text" style="padding-right:16px">420</div><div data-line-number="421" class="react-line-number react-code-text" style="padding-right:16px">421</div><div data-line-number="422" class="react-line-number react-code-text" style="padding-right:16px">422</div><div data-line-number="423" class="react-line-number react-code-text" style="padding-right:16px">423</div><div data-line-number="424" class="react-line-number react-code-text" style="padding-right:16px">424</div><div data-line-number="425" class="react-line-number react-code-text" style="padding-right:16px">425</div><div data-line-number="426" class="react-line-number react-code-text" style="padding-right:16px">426</div><div data-line-number="427" class="react-line-number react-code-text" style="padding-right:16px">427</div><div data-line-number="428" class="react-line-number react-code-text" style="padding-right:16px">428<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="429" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">429</div><div data-line-number="430" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">430</div><div data-line-number="431" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">431</div><div data-line-number="432" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">432</div><div data-line-number="433" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">433</div><div data-line-number="434" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">434</div><div data-line-number="435" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">435</div><div data-line-number="436" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">436</div><div data-line-number="437" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">437</div><div data-line-number="438" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">438</div><div data-line-number="439" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">439</div><div data-line-number="440" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">440</div><div data-line-number="441" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">441</div><div data-line-number="442" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">442</div><div data-line-number="443" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">443</div><div data-line-number="444" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">444</div><div data-line-number="445" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">445</div><div data-line-number="446" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">446</div><div data-line-number="447" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">447</div><div data-line-number="448" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">448</div><div data-line-number="449" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">449</div><div data-line-number="450" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">450</div><div data-line-number="451" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">451</div><div data-line-number="452" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">452</div><div data-line-number="453" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">453</div><div data-line-number="454" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">454</div><div data-line-number="455" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">455</div><div data-line-number="456" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">456</div><div data-line-number="457" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">457</div><div data-line-number="458" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">458</div><div data-line-number="459" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">459</div><div data-line-number="460" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">460</div><div data-line-number="461" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">461</div><div data-line-number="462" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">462</div><div data-line-number="463" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">463</div><div data-line-number="464" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">464</div><div data-line-number="465" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">465</div><div data-line-number="466" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">466</div><div data-line-number="467" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">467</div><div data-line-number="468" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">468</div><div data-line-number="469" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">469</div><div data-line-number="470" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">470</div><div data-line-number="471" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">471</div><div data-line-number="472" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">472</div><div data-line-number="473" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">473</div><div data-line-number="474" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">474</div><div data-line-number="475" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">475</div><div data-line-number="476" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">476</div><div data-line-number="477" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">477</div><div data-line-number="478" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">478</div><div data-line-number="479" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">479</div><div data-line-number="480" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">480</div><div data-line-number="481" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">481</div><div data-line-number="482" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">482</div><div data-line-number="483" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">483</div><div data-line-number="484" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">484</div><div data-line-number="485" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">485</div><div data-line-number="486" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">486</div><div data-line-number="487" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">487</div><div data-line-number="488" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">488</div><div data-line-number="489" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">489</div><div data-line-number="490" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">490</div><div data-line-number="491" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">491</div><div data-line-number="492" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">492</div><div data-line-number="493" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">493</div><div data-line-number="494" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">494</div><div data-line-number="495" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">495</div><div data-line-number="496" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">496</div><div data-line-number="497" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">497</div><div data-line-number="498" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">498</div><div data-line-number="499" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">499</div><div data-line-number="500" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">500</div><div data-line-number="501" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">501</div><div data-line-number="502" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">502</div><div data-line-number="503" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">503</div><div data-line-number="504" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">504</div><div data-line-number="505" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">505</div><div data-line-number="506" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">506</div><div data-line-number="507" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">507</div><div data-line-number="508" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">508</div><div data-line-number="509" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">509</div><div data-line-number="510" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">510</div><div data-line-number="511" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">511</div><div data-line-number="512" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">512</div><div data-line-number="513" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">513</div><div data-line-number="514" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">514</div><div data-line-number="515" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">515</div><div data-line-number="516" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">516</div><div data-line-number="517" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">517</div><div data-line-number="518" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">518</div><div data-line-number="519" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">519</div><div data-line-number="520" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">520</div><div data-line-number="521" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">521</div><div data-line-number="522" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">522</div><div data-line-number="523" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">523</div><div data-line-number="524" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">524</div><div data-line-number="525" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">525</div><div data-line-number="526" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">526</div><div data-line-number="527" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">527</div><div data-line-number="528" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">528</div><div data-line-number="529" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">529</div><div data-line-number="530" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">530</div><div data-line-number="531" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">531</div><div data-line-number="532" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">532</div><div data-line-number="533" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">533</div><div data-line-number="534" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">534</div><div data-line-number="535" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">535</div><div data-line-number="536" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">536</div><div data-line-number="537" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">537</div><div data-line-number="538" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">538</div><div data-line-number="539" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">539</div><div data-line-number="540" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">540</div><div data-line-number="541" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">541</div><div data-line-number="542" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">542</div><div data-line-number="543" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">543</div><div data-line-number="544" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">544</div><div data-line-number="545" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">545</div><div data-line-number="546" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">546</div><div data-line-number="547" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">547</div><div data-line-number="548" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">548</div><div data-line-number="549" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">549</div><div data-line-number="550" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">550</div><div data-line-number="551" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">551</div><div data-line-number="552" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">552</div><div data-line-number="553" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">553</div><div data-line-number="554" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">554</div><div data-line-number="555" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">555</div><div data-line-number="556" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">556</div><div data-line-number="557" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">557</div><div data-line-number="558" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">558</div><div data-line-number="559" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">559</div><div data-line-number="560" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">560</div><div data-line-number="561" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">561</div><div data-line-number="562" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">562</div><div data-line-number="563" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">563</div><div data-line-number="564" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">564</div><div data-line-number="565" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">565</div><div data-line-number="566" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">566</div><div data-line-number="567" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">567</div><div data-line-number="568" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">568</div><div data-line-number="569" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">569</div><div data-line-number="570" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">570</div><div data-line-number="571" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">571</div><div data-line-number="572" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">572</div><div data-line-number="573" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">573</div><div data-line-number="574" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">574</div><div data-line-number="575" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">575</div><div data-line-number="576" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">576</div><div data-line-number="577" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">577</div><div data-line-number="578" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">578</div><div data-line-number="579" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">579</div><div data-line-number="580" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">580</div><div data-line-number="581" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">581</div><div data-line-number="582" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">582</div><div data-line-number="583" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">583</div><div data-line-number="584" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">584</div><div data-line-number="585" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">585</div><div data-line-number="586" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">586</div><div data-line-number="587" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">587</div><div data-line-number="588" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">588</div><div data-line-number="589" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">589</div><div data-line-number="590" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">590</div><div data-line-number="591" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">591</div><div data-line-number="592" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">592</div><div data-line-number="593" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">593</div><div data-line-number="594" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">594</div><div data-line-number="595" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">595</div><div data-line-number="596" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">596</div><div data-line-number="597" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">597</div><div data-line-number="598" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">598</div><div data-line-number="599" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">599</div><div data-line-number="600" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">600</div><div data-line-number="601" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">601</div><div data-line-number="602" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">602</div><div data-line-number="603" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">603</div><div data-line-number="604" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">604</div><div data-line-number="605" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">605</div><div data-line-number="606" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">606</div><div data-line-number="607" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">607</div><div data-line-number="608" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">608</div><div data-line-number="609" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">609</div><div data-line-number="610" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">610</div><div data-line-number="611" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">611</div><div data-line-number="612" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">612</div><div data-line-number="613" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">613</div><div data-line-number="614" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">614</div><div data-line-number="615" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">615</div><div data-line-number="616" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">616</div><div data-line-number="617" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">617</div><div data-line-number="618" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">618</div><div data-line-number="619" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">619</div><div data-line-number="620" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">620</div><div data-line-number="621" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">621</div><div data-line-number="622" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">622</div><div data-line-number="623" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">623</div><div data-line-number="624" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">624</div><div data-line-number="625" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">625</div><div data-line-number="626" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">626</div><div data-line-number="627" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">627</div><div data-line-number="628" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">628</div><div data-line-number="629" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">629</div><div data-line-number="630" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">630</div><div data-line-number="631" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">631</div><div data-line-number="632" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">632</div><div data-line-number="633" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">633</div><div data-line-number="634" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">634</div><div data-line-number="635" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">635</div><div data-line-number="636" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">636</div><div data-line-number="637" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">637</div><div data-line-number="638" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">638</div><div data-line-number="639" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">639</div><div data-line-number="640" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">640</div><div data-line-number="641" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">641</div><div data-line-number="642" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">642</div><div data-line-number="643" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">643</div><div data-line-number="644" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">644</div><div data-line-number="645" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">645</div><div data-line-number="646" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">646</div><div data-line-number="647" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">647</div><div data-line-number="648" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">648</div><div data-line-number="649" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">649</div><div data-line-number="650" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">650</div><div data-line-number="651" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">651</div><div data-line-number="652" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">652</div><div data-line-number="653" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">653</div><div data-line-number="654" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">654</div><div data-line-number="655" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">655</div><div data-line-number="656" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">656</div><div data-line-number="657" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">657</div><div data-line-number="658" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">658</div><div data-line-number="659" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">659</div><div data-line-number="660" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">660</div><div data-line-number="661" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">661</div><div data-line-number="662" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">662</div><div data-line-number="663" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">663</div><div data-line-number="664" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">664</div><div data-line-number="665" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">665</div><div data-line-number="666" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">666</div><div data-line-number="667" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">667</div><div data-line-number="668" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">668</div><div data-line-number="669" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">669</div><div data-line-number="670" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">670</div><div data-line-number="671" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">671</div><div data-line-number="672" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">672</div><div data-line-number="673" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">673</div><div data-line-number="674" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">674</div><div data-line-number="675" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">675</div><div data-line-number="676" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">676</div><div data-line-number="677" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">677</div><div data-line-number="678" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">678</div><div data-line-number="679" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">679</div><div data-line-number="680" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">680</div><div data-line-number="681" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">681</div><div data-line-number="682" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">682</div><div data-line-number="683" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">683</div><div data-line-number="684" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">684</div><div data-line-number="685" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">685</div><div data-line-number="686" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">686</div><div data-line-number="687" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">687</div><div data-line-number="688" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">688</div><div data-line-number="689" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">689</div><div data-line-number="690" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">690</div><div data-line-number="691" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">691</div><div data-line-number="692" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">692</div><div data-line-number="693" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">693</div><div data-line-number="694" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">694</div><div data-line-number="695" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">695</div><div data-line-number="696" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">696</div><div data-line-number="697" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">697</div><div data-line-number="698" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">698</div><div data-line-number="699" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">699</div><div data-line-number="700" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">700</div><div data-line-number="701" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">701</div><div data-line-number="702" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">702</div><div data-line-number="703" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">703</div><div data-line-number="704" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">704</div><div data-line-number="705" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">705</div><div data-line-number="706" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">706</div><div data-line-number="707" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">707</div><div data-line-number="708" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">708</div><div data-line-number="709" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">709</div><div data-line-number="710" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">710</div><div data-line-number="711" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">711</div><div data-line-number="712" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">712</div><div data-line-number="713" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">713</div><div data-line-number="714" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">714</div><div data-line-number="715" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">715</div><div data-line-number="716" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">716</div><div data-line-number="717" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">717</div><div data-line-number="718" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">718</div><div data-line-number="719" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">719</div><div data-line-number="720" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">720</div><div data-line-number="721" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">721</div><div data-line-number="722" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">722</div><div data-line-number="723" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">723</div><div data-line-number="724" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">724</div><div data-line-number="725" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">725</div><div data-line-number="726" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">726</div><div data-line-number="727" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">727</div><div data-line-number="728" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">728</div><div data-line-number="729" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">729</div><div data-line-number="730" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">730</div><div data-line-number="731" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">731</div><div data-line-number="732" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">732</div><div data-line-number="733" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">733</div><div data-line-number="734" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">734</div><div data-line-number="735" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">735</div><div data-line-number="736" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">736</div><div data-line-number="737" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">737</div><div data-line-number="738" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">738</div><div data-line-number="739" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">739</div><div data-line-number="740" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">740</div><div data-line-number="741" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">741</div><div data-line-number="742" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">742</div><div data-line-number="743" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">743</div><div data-line-number="744" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">744</div><div data-line-number="745" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">745</div><div data-line-number="746" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">746</div><div data-line-number="747" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">747</div><div data-line-number="748" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">748</div><div data-line-number="749" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">749</div><div data-line-number="750" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">750</div><div data-line-number="751" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">751</div><div data-line-number="752" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">752</div><div data-line-number="753" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">753</div><div data-line-number="754" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">754</div><div data-line-number="755" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">755</div><div data-line-number="756" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">756</div><div data-line-number="757" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">757</div><div data-line-number="758" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">758</div><div data-line-number="759" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">759</div><div data-line-number="760" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">760</div><div data-line-number="761" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">761</div><div data-line-number="762" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">762</div><div data-line-number="763" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">763</div><div data-line-number="764" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">764</div><div data-line-number="765" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">765</div><div data-line-number="766" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">766</div><div data-line-number="767" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">767</div><div data-line-number="768" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">768</div><div data-line-number="769" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">769</div><div data-line-number="770" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">770</div><div data-line-number="771" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">771</div><div data-line-number="772" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">772</div><div data-line-number="773" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">773</div><div data-line-number="774" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">774</div><div data-line-number="775" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">775</div><div data-line-number="776" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">776</div><div data-line-number="777" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">777</div><div data-line-number="778" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">778</div><div data-line-number="779" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">779</div><div data-line-number="780" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">780</div><div data-line-number="781" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">781</div><div data-line-number="782" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">782</div><div data-line-number="783" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">783</div><div data-line-number="784" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">784</div><div data-line-number="785" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">785</div><div data-line-number="786" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">786</div><div data-line-number="787" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">787</div><div data-line-number="788" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">788</div><div data-line-number="789" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">789</div><div data-line-number="790" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">790</div><div data-line-number="791" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">791</div><div data-line-number="792" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">792</div><div data-line-number="793" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">793</div><div data-line-number="794" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">794</div><div data-line-number="795" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">795</div><div data-line-number="796" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">796</div><div data-line-number="797" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">797</div><div data-line-number="798" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">798</div><div data-line-number="799" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">799</div><div data-line-number="800" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">800</div><div data-line-number="801" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">801</div><div data-line-number="802" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">802</div><div data-line-number="803" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">803</div><div data-line-number="804" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">804</div><div data-line-number="805" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">805</div><div data-line-number="806" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">806</div><div data-line-number="807" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">807</div><div data-line-number="808" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">808</div><div data-line-number="809" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">809</div><div data-line-number="810" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">810</div><div data-line-number="811" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">811</div><div data-line-number="812" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">812</div><div data-line-number="813" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">813</div><div data-line-number="814" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">814</div><div data-line-number="815" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">815</div><div data-line-number="816" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">816</div><div data-line-number="817" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">817</div><div data-line-number="818" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">818</div><div data-line-number="819" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">819</div><div data-line-number="820" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">820</div><div data-line-number="821" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">821</div><div data-line-number="822" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">822</div><div data-line-number="823" class="child-of-line-427 react-line-number react-code-text" style="padding-right:16px">823</div><div data-line-number="824" class="react-line-number react-code-text" style="padding-right:16px">824</div><div data-line-number="825" class="react-line-number react-code-text" style="padding-right:16px">825</div><div data-line-number="826" class="react-line-number react-code-text" style="padding-right:16px">826</div><div data-line-number="827" class="react-line-number react-code-text" style="padding-right:16px">827</div><div data-line-number="828" class="react-line-number react-code-text" style="padding-right:16px">828</div><div data-line-number="829" class="react-line-number react-code-text" style="padding-right:16px">829<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="830" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">830</div><div data-line-number="831" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">831</div><div data-line-number="832" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">832</div><div data-line-number="833" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">833</div><div data-line-number="834" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">834</div><div data-line-number="835" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">835</div><div data-line-number="836" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">836</div><div data-line-number="837" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">837</div><div data-line-number="838" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">838</div><div data-line-number="839" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">839</div><div data-line-number="840" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">840</div><div data-line-number="841" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">841</div><div data-line-number="842" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">842</div><div data-line-number="843" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">843</div><div data-line-number="844" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">844</div><div data-line-number="845" class="child-of-line-828 react-line-number react-code-text" style="padding-right:16px">845</div><div data-line-number="846" class="react-line-number react-code-text" style="padding-right:16px">846</div><div data-line-number="847" class="react-line-number react-code-text" style="padding-right:16px">847</div><div data-line-number="848" class="react-line-number react-code-text" style="padding-right:16px">848<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="849" class="child-of-line-847 react-line-number react-code-text" style="padding-right:16px">849</div><div data-line-number="850" class="child-of-line-847 react-line-number react-code-text" style="padding-right:16px">850</div><div data-line-number="851" class="child-of-line-847 react-line-number react-code-text" style="padding-right:16px">851</div><div data-line-number="852" class="child-of-line-847 react-line-number react-code-text" style="padding-right:16px">852</div><div data-line-number="853" class="child-of-line-847 react-line-number react-code-text" style="padding-right:16px">853</div><div data-line-number="854" class="react-line-number react-code-text" style="padding-right:16px">854</div><div data-line-number="855" class="react-line-number react-code-text" style="padding-right:16px">855</div><div data-line-number="856" class="react-line-number react-code-text" style="padding-right:16px">856</div><div data-line-number="857" class="react-line-number react-code-text" style="padding-right:16px">857</div><div data-line-number="858" class="react-line-number react-code-text" style="padding-right:16px">858</div><div data-line-number="859" class="react-line-number react-code-text" style="padding-right:16px">859</div><div data-line-number="860" class="react-line-number react-code-text" style="padding-right:16px">860<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="861" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">861</div><div data-line-number="862" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">862</div><div data-line-number="863" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">863</div><div data-line-number="864" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">864</div><div data-line-number="865" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">865</div><div data-line-number="866" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">866</div><div data-line-number="867" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">867</div><div data-line-number="868" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">868</div><div data-line-number="869" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">869</div><div data-line-number="870" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">870</div><div data-line-number="871" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">871</div><div data-line-number="872" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">872</div><div data-line-number="873" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">873</div><div data-line-number="874" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">874</div><div data-line-number="875" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">875</div><div data-line-number="876" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">876</div><div data-line-number="877" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">877</div><div data-line-number="878" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">878</div><div data-line-number="879" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">879</div><div data-line-number="880" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">880</div><div data-line-number="881" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">881</div><div data-line-number="882" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">882</div><div data-line-number="883" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">883</div><div data-line-number="884" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">884</div><div data-line-number="885" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">885</div><div data-line-number="886" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">886</div><div data-line-number="887" class="child-of-line-859 react-line-number react-code-text" style="padding-right:16px">887</div><div data-line-number="888" class="react-line-number react-code-text" style="padding-right:16px">888</div><div data-line-number="889" class="react-line-number react-code-text" style="padding-right:16px">889</div><div data-line-number="890" class="react-line-number react-code-text" style="padding-right:16px">890</div><div data-line-number="891" class="react-line-number react-code-text" style="padding-right:16px">891</div><div data-line-number="892" class="react-line-number react-code-text" style="padding-right:16px">892</div><div data-line-number="893" class="react-line-number react-code-text" style="padding-right:16px">893</div><div data-line-number="894" class="react-line-number react-code-text" style="padding-right:16px">894</div><div data-line-number="895" class="react-line-number react-code-text" style="padding-right:16px">895</div><div data-line-number="896" class="react-line-number react-code-text" style="padding-right:16px">896</div><div data-line-number="897" class="react-line-number react-code-text" style="padding-right:16px">897</div><div data-line-number="898" class="react-line-number react-code-text" style="padding-right:16px">898</div><div data-line-number="899" class="react-line-number react-code-text" style="padding-right:16px">899</div><div data-line-number="900" class="react-line-number react-code-text" style="padding-right:16px">900<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="901" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">901</div><div data-line-number="902" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">902</div><div data-line-number="903" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">903</div><div data-line-number="904" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">904</div><div data-line-number="905" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">905</div><div data-line-number="906" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">906</div><div data-line-number="907" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">907</div><div data-line-number="908" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">908</div><div data-line-number="909" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">909</div><div data-line-number="910" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">910</div><div data-line-number="911" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">911</div><div data-line-number="912" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">912</div><div data-line-number="913" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">913</div><div data-line-number="914" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">914</div><div data-line-number="915" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">915</div><div data-line-number="916" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">916</div><div data-line-number="917" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">917</div><div data-line-number="918" class="child-of-line-899 react-line-number react-code-text" style="padding-right:16px">918</div><div data-line-number="919" class="react-line-number react-code-text" style="padding-right:16px">919</div><div data-line-number="920" class="react-line-number react-code-text" style="padding-right:16px">920</div><div data-line-number="921" class="react-line-number react-code-text" style="padding-right:16px">921<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="922" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">922</div><div data-line-number="923" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">923</div><div data-line-number="924" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">924</div><div data-line-number="925" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">925</div><div data-line-number="926" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">926</div><div data-line-number="927" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">927</div><div data-line-number="928" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">928</div><div data-line-number="929" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">929</div><div data-line-number="930" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">930</div><div data-line-number="931" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">931</div><div data-line-number="932" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">932</div><div data-line-number="933" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">933</div><div data-line-number="934" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">934</div><div data-line-number="935" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">935</div><div data-line-number="936" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">936</div><div data-line-number="937" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">937</div><div data-line-number="938" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">938</div><div data-line-number="939" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">939</div><div data-line-number="940" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">940</div><div data-line-number="941" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">941</div><div data-line-number="942" class="child-of-line-920 react-line-number react-code-text" style="padding-right:16px">942</div><div data-line-number="943" class="react-line-number react-code-text" style="padding-right:16px">943</div><div data-line-number="944" class="react-line-number react-code-text" style="padding-right:16px">944</div><div data-line-number="945" class="react-line-number react-code-text" style="padding-right:16px">945<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="946" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">946</div><div data-line-number="947" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">947</div><div data-line-number="948" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">948</div><div data-line-number="949" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">949</div><div data-line-number="950" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">950</div><div data-line-number="951" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">951</div><div data-line-number="952" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">952</div><div data-line-number="953" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">953</div><div data-line-number="954" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">954</div><div data-line-number="955" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">955</div><div data-line-number="956" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">956</div><div data-line-number="957" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">957</div><div data-line-number="958" class="child-of-line-944 react-line-number react-code-text" style="padding-right:16px">958</div><div data-line-number="959" class="react-line-number react-code-text" style="padding-right:16px">959</div><div data-line-number="960" class="react-line-number react-code-text" style="padding-right:16px">960</div><div data-line-number="961" class="react-line-number react-code-text" style="padding-right:16px">961<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="962" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">962</div><div data-line-number="963" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">963</div><div data-line-number="964" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">964</div><div data-line-number="965" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">965</div><div data-line-number="966" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">966</div><div data-line-number="967" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">967</div><div data-line-number="968" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">968</div><div data-line-number="969" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">969</div><div data-line-number="970" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">970</div><div data-line-number="971" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">971</div><div data-line-number="972" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">972</div><div data-line-number="973" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">973</div><div data-line-number="974" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">974</div><div data-line-number="975" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">975</div><div data-line-number="976" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">976</div><div data-line-number="977" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">977</div><div data-line-number="978" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">978</div><div data-line-number="979" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">979</div><div data-line-number="980" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">980</div><div data-line-number="981" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">981</div><div data-line-number="982" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">982</div><div data-line-number="983" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">983</div><div data-line-number="984" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">984</div><div data-line-number="985" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">985</div><div data-line-number="986" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">986</div><div data-line-number="987" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">987</div><div data-line-number="988" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">988</div><div data-line-number="989" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">989</div><div data-line-number="990" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">990</div><div data-line-number="991" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">991</div><div data-line-number="992" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">992</div><div data-line-number="993" class="child-of-line-960 react-line-number react-code-text" style="padding-right:16px">993</div><div data-line-number="994" class="react-line-number react-code-text" style="padding-right:16px">994</div><div data-line-number="995" class="react-line-number react-code-text" style="padding-right:16px">995</div><div data-line-number="996" class="react-line-number react-code-text" style="padding-right:16px">996<span class="Box-sc-g0xbh4-0 cJGaMs"><div aria-label="Collapse code section" role="button" class="Box-sc-g0xbh4-0 iGLarr"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></div></span></div><div data-line-number="997" class="child-of-line-995 react-line-number react-code-text" style="padding-right:16px">997</div><div data-line-number="998" class="child-of-line-995 react-line-number react-code-text" style="padding-right:16px">998</div><div data-line-number="999" class="child-of-line-995 react-line-number react-code-text" style="padding-right:16px">999</div><div data-line-number="1000" class="child-of-line-995 react-line-number react-code-text" style="padding-right:16px">1000</div></div><div class="react-code-lines"><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC1" class="react-file-line html-div" data-testid="code-cell" data-line-number="1" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> Copyright (c) 2009-2010 Satoshi Nakamoto</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC2" class="react-file-line html-div" data-testid="code-cell" data-line-number="2" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> Copyright (c) 2009-2018 The Bitcoin Core developers</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC3" class="react-file-line html-div" data-testid="code-cell" data-line-number="3" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> Distributed under the MIT software license, see the accompanying</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC4" class="react-file-line html-div" data-testid="code-cell" data-line-number="4" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> file COPYING or http://www.opensource.org/licenses/mit-license.php.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC5" class="react-file-line html-div" data-testid="code-cell" data-line-number="5" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC6" class="react-file-line html-div" data-testid="code-cell" data-line-number="6" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>validation.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC7" class="react-file-line html-div" data-testid="code-cell" data-line-number="7" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC8" class="react-file-line html-div" data-testid="code-cell" data-line-number="8" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>arith_uint256.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC9" class="react-file-line html-div" data-testid="code-cell" data-line-number="9" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>chain.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC10" class="react-file-line html-div" data-testid="code-cell" data-line-number="10" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>chainparams.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC11" class="react-file-line html-div" data-testid="code-cell" data-line-number="11" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>checkqueue.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC12" class="react-file-line html-div" data-testid="code-cell" data-line-number="12" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>consensus/consensus.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC13" class="react-file-line html-div" data-testid="code-cell" data-line-number="13" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>consensus/merkle.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC14" class="react-file-line html-div" data-testid="code-cell" data-line-number="14" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>consensus/tx_check.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC15" class="react-file-line html-div" data-testid="code-cell" data-line-number="15" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>consensus/tx_verify.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC16" class="react-file-line html-div" data-testid="code-cell" data-line-number="16" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>consensus/validation.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC17" class="react-file-line html-div" data-testid="code-cell" data-line-number="17" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>cuckoocache.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC18" class="react-file-line html-div" data-testid="code-cell" data-line-number="18" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>flatfile.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC19" class="react-file-line html-div" data-testid="code-cell" data-line-number="19" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>hash.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC20" class="react-file-line html-div" data-testid="code-cell" data-line-number="20" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>index/txindex.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC21" class="react-file-line html-div" data-testid="code-cell" data-line-number="21" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>policy/fees.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC22" class="react-file-line html-div" data-testid="code-cell" data-line-number="22" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>policy/policy.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC23" class="react-file-line html-div" data-testid="code-cell" data-line-number="23" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>policy/settings.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC24" class="react-file-line html-div" data-testid="code-cell" data-line-number="24" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>pow.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC25" class="react-file-line html-div" data-testid="code-cell" data-line-number="25" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>primitives/block.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC26" class="react-file-line html-div" data-testid="code-cell" data-line-number="26" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>primitives/transaction.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC27" class="react-file-line html-div" data-testid="code-cell" data-line-number="27" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>random.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC28" class="react-file-line html-div" data-testid="code-cell" data-line-number="28" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>reverse_iterator.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC29" class="react-file-line html-div" data-testid="code-cell" data-line-number="29" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>script/script.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC30" class="react-file-line html-div" data-testid="code-cell" data-line-number="30" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>script/sigcache.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC31" class="react-file-line html-div" data-testid="code-cell" data-line-number="31" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>script/standard.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC32" class="react-file-line html-div" data-testid="code-cell" data-line-number="32" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>shutdown.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC33" class="react-file-line html-div" data-testid="code-cell" data-line-number="33" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>timedata.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC34" class="react-file-line html-div" data-testid="code-cell" data-line-number="34" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>tinyformat.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC35" class="react-file-line html-div" data-testid="code-cell" data-line-number="35" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>txdb.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC36" class="react-file-line html-div" data-testid="code-cell" data-line-number="36" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>txmempool.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC37" class="react-file-line html-div" data-testid="code-cell" data-line-number="37" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>ui_interface.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC38" class="react-file-line html-div" data-testid="code-cell" data-line-number="38" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>uint256.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC39" class="react-file-line html-div" data-testid="code-cell" data-line-number="39" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>undo.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC40" class="react-file-line html-div" data-testid="code-cell" data-line-number="40" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>util/moneystr.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC41" class="react-file-line html-div" data-testid="code-cell" data-line-number="41" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>util/rbf.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC42" class="react-file-line html-div" data-testid="code-cell" data-line-number="42" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>util/strencodings.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC43" class="react-file-line html-div" data-testid="code-cell" data-line-number="43" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>util/system.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC44" class="react-file-line html-div" data-testid="code-cell" data-line-number="44" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>util/validation.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC45" class="react-file-line html-div" data-testid="code-cell" data-line-number="45" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>validationinterface.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC46" class="react-file-line html-div" data-testid="code-cell" data-line-number="46" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>warnings.h<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC47" class="react-file-line html-div" data-testid="code-cell" data-line-number="47" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC48" class="react-file-line html-div" data-testid="code-cell" data-line-number="48" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>future<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC49" class="react-file-line html-div" data-testid="code-cell" data-line-number="49" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>sstream<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC50" class="react-file-line html-div" data-testid="code-cell" data-line-number="50" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>string<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC51" class="react-file-line html-div" data-testid="code-cell" data-line-number="51" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC52" class="react-file-line html-div" data-testid="code-cell" data-line-number="52" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>boost/algorithm/string/replace.hpp<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC53" class="react-file-line html-div" data-testid="code-cell" data-line-number="53" style="position:relative">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>boost/thread.hpp<span class="pl-pds">&gt;</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC54" class="react-file-line html-div" data-testid="code-cell" data-line-number="54" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC55" class="react-file-line html-div" data-testid="code-cell" data-line-number="55" style="position:relative">#<span class="pl-k">if</span> defined(NDEBUG)</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC56" class="react-file-line html-div" data-testid="code-cell" data-line-number="56" style="position:relative"># <span class="pl-k">error</span> &quot;Bitcoin cannot be compiled without assertions.&quot;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC57" class="react-file-line html-div" data-testid="code-cell" data-line-number="57" style="position:relative">#<span class="pl-k">endif</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC58" class="react-file-line html-div" data-testid="code-cell" data-line-number="58" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC59" class="react-file-line html-div" data-testid="code-cell" data-line-number="59" style="position:relative">#<span class="pl-k">define</span> <span class="pl-en">MICRO</span> <span class="pl-c1">0.000001</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC60" class="react-file-line html-div" data-testid="code-cell" data-line-number="60" style="position:relative">#<span class="pl-k">define</span> <span class="pl-en">MILLI</span> <span class="pl-c1">0.001</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC61" class="react-file-line html-div" data-testid="code-cell" data-line-number="61" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC62" class="react-file-line html-div" data-testid="code-cell" data-line-number="62" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">CBlockIndexWorkComparator::operator</span>()(<span class="pl-k">const</span> CBlockIndex *pa, <span class="pl-k">const</span> CBlockIndex *pb) <span class="pl-k">const</span> {</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC63" class="react-file-line html-div" data-testid="code-cell" data-line-number="63" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> First sort by most total work, ...</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC64" class="react-file-line html-div" data-testid="code-cell" data-line-number="64" style="position:relative"> <span class="pl-k">if</span> (pa-&gt;<span class="pl-smi">nChainWork</span> &gt; pb-&gt;<span class="pl-smi">nChainWork</span>) <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC65" class="react-file-line html-div" data-testid="code-cell" data-line-number="65" style="position:relative"> <span class="pl-k">if</span> (pa-&gt;<span class="pl-smi">nChainWork</span> &lt; pb-&gt;<span class="pl-smi">nChainWork</span>) <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC66" class="react-file-line html-div" data-testid="code-cell" data-line-number="66" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC67" class="react-file-line html-div" data-testid="code-cell" data-line-number="67" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> ... then by earliest time received, ...</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC68" class="react-file-line html-div" data-testid="code-cell" data-line-number="68" style="position:relative"> <span class="pl-k">if</span> (pa-&gt;<span class="pl-smi">nSequenceId</span> &lt; pb-&gt;<span class="pl-smi">nSequenceId</span>) <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC69" class="react-file-line html-div" data-testid="code-cell" data-line-number="69" style="position:relative"> <span class="pl-k">if</span> (pa-&gt;<span class="pl-smi">nSequenceId</span> &gt; pb-&gt;<span class="pl-smi">nSequenceId</span>) <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC70" class="react-file-line html-div" data-testid="code-cell" data-line-number="70" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC71" class="react-file-line html-div" data-testid="code-cell" data-line-number="71" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Use pointer address as tie breaker (should only happen with blocks</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC72" class="react-file-line html-div" data-testid="code-cell" data-line-number="72" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> loaded from disk, as those all have id 0).</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC73" class="react-file-line html-div" data-testid="code-cell" data-line-number="73" style="position:relative"> <span class="pl-k">if</span> (pa &lt; pb) <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC74" class="react-file-line html-div" data-testid="code-cell" data-line-number="74" style="position:relative"> <span class="pl-k">if</span> (pa &gt; pb) <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC75" class="react-file-line html-div" data-testid="code-cell" data-line-number="75" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC76" class="react-file-line html-div" data-testid="code-cell" data-line-number="76" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Identical blocks.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC77" class="react-file-line html-div" data-testid="code-cell" data-line-number="77" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC78" class="react-file-line html-div" data-testid="code-cell" data-line-number="78" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC79" class="react-file-line html-div" data-testid="code-cell" data-line-number="79" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC80" class="react-file-line html-div" data-testid="code-cell" data-line-number="80" style="position:relative"><span class="pl-k">static</span> CChainState g_chainstate;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC81" class="react-file-line html-div" data-testid="code-cell" data-line-number="81" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC82" class="react-file-line html-div" data-testid="code-cell" data-line-number="82" style="position:relative">CChainState&amp; <span class="pl-en">ChainstateActive</span>() { <span class="pl-k">return</span> g_chainstate; }</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC83" class="react-file-line html-div" data-testid="code-cell" data-line-number="83" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC84" class="react-file-line html-div" data-testid="code-cell" data-line-number="84" style="position:relative">CChain&amp; <span class="pl-en">ChainActive</span>() { <span class="pl-k">return</span> g_chainstate.<span class="pl-smi">m_chain</span>; }</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC85" class="react-file-line html-div" data-testid="code-cell" data-line-number="85" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC86" class="react-file-line html-div" data-testid="code-cell" data-line-number="86" style="position:relative"><span class="pl-c"><span class="pl-c">/*</span>*</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC87" class="react-file-line html-div" data-testid="code-cell" data-line-number="87" style="position:relative"><span class="pl-c"> * Mutex to guard access to validation specific variables, such as reading</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC88" class="react-file-line html-div" data-testid="code-cell" data-line-number="88" style="position:relative"><span class="pl-c"> * or changing the chainstate.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC89" class="react-file-line html-div" data-testid="code-cell" data-line-number="89" style="position:relative"><span class="pl-c"> *</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC90" class="react-file-line html-div" data-testid="code-cell" data-line-number="90" style="position:relative"><span class="pl-c"> * This may also need to be locked when updating the transaction pool, e.g. on</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC91" class="react-file-line html-div" data-testid="code-cell" data-line-number="91" style="position:relative"><span class="pl-c"> * AcceptToMemoryPool. See CTxMemPool::cs comment for details.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC92" class="react-file-line html-div" data-testid="code-cell" data-line-number="92" style="position:relative"><span class="pl-c"> *</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC93" class="react-file-line html-div" data-testid="code-cell" data-line-number="93" style="position:relative"><span class="pl-c"> * The transaction pool has a separate lock to allow reading from it and the</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC94" class="react-file-line html-div" data-testid="code-cell" data-line-number="94" style="position:relative"><span class="pl-c"> * chainstate at the same time.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC95" class="react-file-line html-div" data-testid="code-cell" data-line-number="95" style="position:relative"><span class="pl-c"> <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC96" class="react-file-line html-div" data-testid="code-cell" data-line-number="96" style="position:relative">RecursiveMutex cs_main;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC97" class="react-file-line html-div" data-testid="code-cell" data-line-number="97" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC98" class="react-file-line html-div" data-testid="code-cell" data-line-number="98" style="position:relative">BlockMap&amp; mapBlockIndex = ::ChainstateActive().mapBlockIndex;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC99" class="react-file-line html-div" data-testid="code-cell" data-line-number="99" style="position:relative">CBlockIndex *pindexBestHeader = <span class="pl-c1">nullptr</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC100" class="react-file-line html-div" data-testid="code-cell" data-line-number="100" style="position:relative">Mutex g_best_block_mutex;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC101" class="react-file-line html-div" data-testid="code-cell" data-line-number="101" style="position:relative">std::condition_variable g_best_block_cv;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC102" class="react-file-line html-div" data-testid="code-cell" data-line-number="102" style="position:relative">uint256 g_best_block;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC103" class="react-file-line html-div" data-testid="code-cell" data-line-number="103" style="position:relative"><span class="pl-k">int</span> nScriptCheckThreads = <span class="pl-c1">0</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC104" class="react-file-line html-div" data-testid="code-cell" data-line-number="104" style="position:relative">std::atomic_bool <span class="pl-en">fImporting</span>(<span class="pl-c1">false</span>);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC105" class="react-file-line html-div" data-testid="code-cell" data-line-number="105" style="position:relative">std::atomic_bool <span class="pl-en">fReindex</span>(<span class="pl-c1">false</span>);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC106" class="react-file-line html-div" data-testid="code-cell" data-line-number="106" style="position:relative"><span class="pl-k">bool</span> <span class="pl-smi">fHavePruned</span> = <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC107" class="react-file-line html-div" data-testid="code-cell" data-line-number="107" style="position:relative"><span class="pl-k">bool</span> <span class="pl-smi">fPruneMode</span> = <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC108" class="react-file-line html-div" data-testid="code-cell" data-line-number="108" style="position:relative"><span class="pl-k">bool</span> <span class="pl-smi">fRequireStandard</span> = <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC109" class="react-file-line html-div" data-testid="code-cell" data-line-number="109" style="position:relative"><span class="pl-k">bool</span> <span class="pl-smi">fCheckBlockIndex</span> = <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC110" class="react-file-line html-div" data-testid="code-cell" data-line-number="110" style="position:relative"><span class="pl-k">bool</span> <span class="pl-smi">fCheckpointsEnabled</span> = DEFAULT_CHECKPOINTS_ENABLED;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC111" class="react-file-line html-div" data-testid="code-cell" data-line-number="111" style="position:relative"><span class="pl-c1">size_t</span> nCoinCacheUsage = <span class="pl-c1">5000</span> * <span class="pl-c1">300</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC112" class="react-file-line html-div" data-testid="code-cell" data-line-number="112" style="position:relative"><span class="pl-c1">uint64_t</span> nPruneTarget = <span class="pl-c1">0</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC113" class="react-file-line html-div" data-testid="code-cell" data-line-number="113" style="position:relative"><span class="pl-c1">int64_t</span> nMaxTipAge = DEFAULT_MAX_TIP_AGE;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC114" class="react-file-line html-div" data-testid="code-cell" data-line-number="114" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC115" class="react-file-line html-div" data-testid="code-cell" data-line-number="115" style="position:relative">uint256 hashAssumeValid;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC116" class="react-file-line html-div" data-testid="code-cell" data-line-number="116" style="position:relative">arith_uint256 nMinimumChainWork;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC117" class="react-file-line html-div" data-testid="code-cell" data-line-number="117" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC118" class="react-file-line html-div" data-testid="code-cell" data-line-number="118" style="position:relative">CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC119" class="react-file-line html-div" data-testid="code-cell" data-line-number="119" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC120" class="react-file-line html-div" data-testid="code-cell" data-line-number="120" style="position:relative">CBlockPolicyEstimator feeEstimator;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC121" class="react-file-line html-div" data-testid="code-cell" data-line-number="121" style="position:relative">CTxMemPool <span class="pl-en">mempool</span>(&amp;feeEstimator);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC122" class="react-file-line html-div" data-testid="code-cell" data-line-number="122" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC123" class="react-file-line html-div" data-testid="code-cell" data-line-number="123" style="position:relative"><span class="pl-c"><span class="pl-c">/*</span>* Constant stuff for coinbase transactions we create: <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC124" class="react-file-line html-div" data-testid="code-cell" data-line-number="124" style="position:relative">CScript COINBASE_FLAGS;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC125" class="react-file-line html-div" data-testid="code-cell" data-line-number="125" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC126" class="react-file-line html-div" data-testid="code-cell" data-line-number="126" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> Internal stuff</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC127" class="react-file-line html-div" data-testid="code-cell" data-line-number="127" style="position:relative"><span class="pl-k">namespace</span> {</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC128" class="react-file-line html-div" data-testid="code-cell" data-line-number="128" style="position:relative"> CBlockIndex *&amp;pindexBestInvalid = ::ChainstateActive().pindexBestInvalid;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC129" class="react-file-line html-div" data-testid="code-cell" data-line-number="129" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC130" class="react-file-line html-div" data-testid="code-cell" data-line-number="130" style="position:relative"> <span class="pl-c"><span class="pl-c">/*</span>* All pairs A-&gt;B, where A (or one of its ancestors) misses transactions, but B has transactions.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC131" class="react-file-line html-div" data-testid="code-cell" data-line-number="131" style="position:relative"><span class="pl-c"> * Pruned nodes may have entries where B is missing data.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC132" class="react-file-line html-div" data-testid="code-cell" data-line-number="132" style="position:relative"><span class="pl-c"> <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC133" class="react-file-line html-div" data-testid="code-cell" data-line-number="133" style="position:relative"> std::multimap&lt;CBlockIndex*, CBlockIndex*&gt;&amp; mapBlocksUnlinked = ::ChainstateActive().mapBlocksUnlinked;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC134" class="react-file-line html-div" data-testid="code-cell" data-line-number="134" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC135" class="react-file-line html-div" data-testid="code-cell" data-line-number="135" style="position:relative"> CCriticalSection cs_LastBlockFile;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC136" class="react-file-line html-div" data-testid="code-cell" data-line-number="136" style="position:relative"> std::vector&lt;CBlockFileInfo&gt; vinfoBlockFile;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC137" class="react-file-line html-div" data-testid="code-cell" data-line-number="137" style="position:relative"> <span class="pl-k">int</span> nLastBlockFile = <span class="pl-c1">0</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC138" class="react-file-line html-div" data-testid="code-cell" data-line-number="138" style="position:relative"> <span class="pl-c"><span class="pl-c">/*</span>* Global flag to indicate we should check to see if there are</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC139" class="react-file-line html-div" data-testid="code-cell" data-line-number="139" style="position:relative"><span class="pl-c"> * block/undo files that should be deleted. Set on startup</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC140" class="react-file-line html-div" data-testid="code-cell" data-line-number="140" style="position:relative"><span class="pl-c"> * or if we allocate more file space when we&#039;re in prune mode</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC141" class="react-file-line html-div" data-testid="code-cell" data-line-number="141" style="position:relative"><span class="pl-c"> <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC142" class="react-file-line html-div" data-testid="code-cell" data-line-number="142" style="position:relative"> <span class="pl-k">bool</span> <span class="pl-smi">fCheckForPruning</span> = <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC143" class="react-file-line html-div" data-testid="code-cell" data-line-number="143" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC144" class="react-file-line html-div" data-testid="code-cell" data-line-number="144" style="position:relative"> <span class="pl-c"><span class="pl-c">/*</span>* Dirty block index entries. <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC145" class="react-file-line html-div" data-testid="code-cell" data-line-number="145" style="position:relative"> std::set&lt;CBlockIndex*&gt; setDirtyBlockIndex;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC146" class="react-file-line html-div" data-testid="code-cell" data-line-number="146" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC147" class="react-file-line html-div" data-testid="code-cell" data-line-number="147" style="position:relative"> <span class="pl-c"><span class="pl-c">/*</span>* Dirty block file entries. <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC148" class="react-file-line html-div" data-testid="code-cell" data-line-number="148" style="position:relative"> std::set&lt;<span class="pl-k">int</span>&gt; setDirtyFileInfo;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC149" class="react-file-line html-div" data-testid="code-cell" data-line-number="149" style="position:relative">} <span class="pl-c"><span class="pl-c">//</span> anon namespace</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC150" class="react-file-line html-div" data-testid="code-cell" data-line-number="150" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC151" class="react-file-line html-div" data-testid="code-cell" data-line-number="151" style="position:relative">CBlockIndex* <span class="pl-en">FindForkInGlobalIndex</span>(<span class="pl-k">const</span> CChain&amp; chain, <span class="pl-k">const</span> CBlockLocator&amp; locator)</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC152" class="react-file-line html-div" data-testid="code-cell" data-line-number="152" style="position:relative">{</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC153" class="react-file-line html-div" data-testid="code-cell" data-line-number="153" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC154" class="react-file-line html-div" data-testid="code-cell" data-line-number="154" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC155" class="react-file-line html-div" data-testid="code-cell" data-line-number="155" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Find the latest block common to locator and chain - we expect that</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC156" class="react-file-line html-div" data-testid="code-cell" data-line-number="156" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> locator.vHave is sorted descending by height.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC157" class="react-file-line html-div" data-testid="code-cell" data-line-number="157" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> uint256&amp; hash : locator.<span class="pl-smi">vHave</span>) {</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC158" class="react-file-line html-div" data-testid="code-cell" data-line-number="158" style="position:relative"> CBlockIndex* pindex = <span class="pl-c1">LookupBlockIndex</span>(hash);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC159" class="react-file-line html-div" data-testid="code-cell" data-line-number="159" style="position:relative"> <span class="pl-k">if</span> (pindex) {</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC160" class="react-file-line html-div" data-testid="code-cell" data-line-number="160" style="position:relative"> <span class="pl-k">if</span> (chain.<span class="pl-c1">Contains</span>(pindex))</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC161" class="react-file-line html-div" data-testid="code-cell" data-line-number="161" style="position:relative"> <span class="pl-k">return</span> pindex;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC162" class="react-file-line html-div" data-testid="code-cell" data-line-number="162" style="position:relative"> <span class="pl-k">if</span> (pindex-&gt;<span class="pl-c1">GetAncestor</span>(chain.<span class="pl-c1">Height</span>()) == chain.<span class="pl-c1">Tip</span>()) {</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC163" class="react-file-line html-div" data-testid="code-cell" data-line-number="163" style="position:relative"> <span class="pl-k">return</span> chain.<span class="pl-c1">Tip</span>();</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC164" class="react-file-line html-div" data-testid="code-cell" data-line-number="164" style="position:relative"> }</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC165" class="react-file-line html-div" data-testid="code-cell" data-line-number="165" style="position:relative"> }</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC166" class="react-file-line html-div" data-testid="code-cell" data-line-number="166" style="position:relative"> }</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC167" class="react-file-line html-div" data-testid="code-cell" data-line-number="167" style="position:relative"> <span class="pl-k">return</span> chain.<span class="pl-c1">Genesis</span>();</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC168" class="react-file-line html-div" data-testid="code-cell" data-line-number="168" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC169" class="react-file-line html-div" data-testid="code-cell" data-line-number="169" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC170" class="react-file-line html-div" data-testid="code-cell" data-line-number="170" style="position:relative">std::unique_ptr&lt;CCoinsViewDB&gt; pcoinsdbview;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC171" class="react-file-line html-div" data-testid="code-cell" data-line-number="171" style="position:relative">std::unique_ptr&lt;CCoinsViewCache&gt; pcoinsTip;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC172" class="react-file-line html-div" data-testid="code-cell" data-line-number="172" style="position:relative">std::unique_ptr&lt;CBlockTreeDB&gt; pblocktree;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC173" class="react-file-line html-div" data-testid="code-cell" data-line-number="173" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC174" class="react-file-line html-div" data-testid="code-cell" data-line-number="174" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> See definition for documentation</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC175" class="react-file-line html-div" data-testid="code-cell" data-line-number="175" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">void</span> <span class="pl-en">FindFilesToPruneManual</span>(std::set&lt;<span class="pl-k">int</span>&gt;&amp; setFilesToPrune, <span class="pl-k">int</span> nManualPruneHeight);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC176" class="react-file-line html-div" data-testid="code-cell" data-line-number="176" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">void</span> <span class="pl-en">FindFilesToPrune</span>(std::set&lt;<span class="pl-k">int</span>&gt;&amp; setFilesToPrune, <span class="pl-c1">uint64_t</span> nPruneAfterHeight);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC177" class="react-file-line html-div" data-testid="code-cell" data-line-number="177" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">CheckInputs</span>(<span class="pl-k">const</span> CTransaction&amp; tx, CValidationState &amp;state, <span class="pl-k">const</span> CCoinsViewCache &amp;inputs, <span class="pl-k">bool</span> <span class="pl-smi">fScriptChecks</span>, <span class="pl-k">unsigned</span> <span class="pl-k">int</span> flags, <span class="pl-k">bool</span> cacheSigStore, <span class="pl-k">bool</span> cacheFullScriptStore, PrecomputedTransactionData&amp; txdata, std::vector&lt;CScriptCheck&gt; *pvChecks = <span class="pl-c1">nullptr</span>);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC178" class="react-file-line html-div" data-testid="code-cell" data-line-number="178" style="position:relative"><span class="pl-k">static</span> FILE* <span class="pl-en">OpenUndoFile</span>(<span class="pl-k">const</span> FlatFilePos &amp;pos, <span class="pl-k">bool</span> <span class="pl-smi">fReadOnly</span> = <span class="pl-c1">false</span>);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC179" class="react-file-line html-div" data-testid="code-cell" data-line-number="179" style="position:relative"><span class="pl-k">static</span> FlatFileSeq <span class="pl-en">BlockFileSeq</span>();</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC180" class="react-file-line html-div" data-testid="code-cell" data-line-number="180" style="position:relative"><span class="pl-k">static</span> FlatFileSeq <span class="pl-en">UndoFileSeq</span>();</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC181" class="react-file-line html-div" data-testid="code-cell" data-line-number="181" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC182" class="react-file-line html-div" data-testid="code-cell" data-line-number="182" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">CheckFinalTx</span>(<span class="pl-k">const</span> CTransaction &amp;tx, <span class="pl-k">int</span> flags)</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC183" class="react-file-line html-div" data-testid="code-cell" data-line-number="183" style="position:relative">{</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC184" class="react-file-line html-div" data-testid="code-cell" data-line-number="184" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC185" class="react-file-line html-div" data-testid="code-cell" data-line-number="185" style="position:relative"> </div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC186" class="react-file-line html-div" data-testid="code-cell" data-line-number="186" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> By convention a negative value for flags indicates that the</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC187" class="react-file-line html-div" data-testid="code-cell" data-line-number="187" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> current network-enforced consensus rules should be used. In</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC188" class="react-file-line html-div" data-testid="code-cell" data-line-number="188" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> a future soft-fork scenario that would mean checking which</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC189" class="react-file-line html-div" data-testid="code-cell" data-line-number="189" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> rules would be enforced for the next block and setting the</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC190" class="react-file-line html-div" data-testid="code-cell" data-line-number="190" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> appropriate flags. At the present time no soft-forks are</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC191" class="react-file-line html-div" data-testid="code-cell" data-line-number="191" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> scheduled, so no flags are set.</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC192" class="react-file-line html-div" data-testid="code-cell" data-line-number="192" style="position:relative"> flags = <span class="pl-c1">std::max</span>(flags, <span class="pl-c1">0</span>);</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC193" class="react-file-line html-div" data-testid="code-cell" data-line-number="193" style="position:relative"> </div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC194" class="react-file-line html-div" data-testid="code-cell" data-line-number="194" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> CheckFinalTx() uses ::ChainActive().Height()+1 to evaluate</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC195" class="react-file-line html-div" data-testid="code-cell" data-line-number="195" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> nLockTime because when IsFinalTx() is called within</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC196" class="react-file-line html-div" data-testid="code-cell" data-line-number="196" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> CBlock::AcceptBlock(), the height of the block *being*</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC197" class="react-file-line html-div" data-testid="code-cell" data-line-number="197" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> evaluated is what is used. Thus if we want to know if a</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC198" class="react-file-line html-div" data-testid="code-cell" data-line-number="198" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> transaction can be part of the *next* block, we need to call</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC199" class="react-file-line html-div" data-testid="code-cell" data-line-number="199" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> IsFinalTx() with one more than ::ChainActive().Height().</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC200" class="react-file-line html-div" data-testid="code-cell" data-line-number="200" style="position:relative"> <span class="pl-k">const</span> <span class="pl-k">int</span> nBlockHeight = ::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Height</span>() + <span class="pl-c1">1</span>;</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC201" class="react-file-line html-div" data-testid="code-cell" data-line-number="201" style="position:relative"> </div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC202" class="react-file-line html-div" data-testid="code-cell" data-line-number="202" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> BIP113 requires that time-locked transactions have nLockTime set to</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC203" class="react-file-line html-div" data-testid="code-cell" data-line-number="203" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> less than the median time of the previous block they&#039;re contained in.</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC204" class="react-file-line html-div" data-testid="code-cell" data-line-number="204" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> When the next block is created its previous block will be the current</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC205" class="react-file-line html-div" data-testid="code-cell" data-line-number="205" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> chain tip, so we use that to calculate the median time passed to</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC206" class="react-file-line html-div" data-testid="code-cell" data-line-number="206" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> IsFinalTx() if LOCKTIME_MEDIAN_TIME_PAST is set.</span></div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC207" class="react-file-line html-div" data-testid="code-cell" data-line-number="207" style="position:relative"> <span class="pl-k">const</span> <span class="pl-c1">int64_t</span> nBlockTime = (flags &amp; LOCKTIME_MEDIAN_TIME_PAST)</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC208" class="react-file-line html-div" data-testid="code-cell" data-line-number="208" style="position:relative"> ? ::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Tip</span>()-&gt;<span class="pl-c1">GetMedianTimePast</span>()</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC209" class="react-file-line html-div" data-testid="code-cell" data-line-number="209" style="position:relative"> : <span class="pl-c1">GetAdjustedTime</span>();</div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC210" class="react-file-line html-div" data-testid="code-cell" data-line-number="210" style="position:relative"> </div></div></div><div class="child-of-line-181 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC211" class="react-file-line html-div" data-testid="code-cell" data-line-number="211" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">IsFinalTx</span>(tx, nBlockHeight, nBlockTime);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC212" class="react-file-line html-div" data-testid="code-cell" data-line-number="212" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC213" class="react-file-line html-div" data-testid="code-cell" data-line-number="213" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC214" class="react-file-line html-div" data-testid="code-cell" data-line-number="214" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">TestLockPointValidity</span>(<span class="pl-k">const</span> LockPoints* lp)</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC215" class="react-file-line html-div" data-testid="code-cell" data-line-number="215" style="position:relative">{</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC216" class="react-file-line html-div" data-testid="code-cell" data-line-number="216" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC217" class="react-file-line html-div" data-testid="code-cell" data-line-number="217" style="position:relative"> <span class="pl-c1">assert</span>(lp);</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC218" class="react-file-line html-div" data-testid="code-cell" data-line-number="218" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> If there are relative lock times then the maxInputBlock will be set</span></div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC219" class="react-file-line html-div" data-testid="code-cell" data-line-number="219" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> If there are no relative lock times, the LockPoints don&#039;t depend on the chain</span></div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC220" class="react-file-line html-div" data-testid="code-cell" data-line-number="220" style="position:relative"> <span class="pl-k">if</span> (lp-&gt;<span class="pl-smi">maxInputBlock</span>) {</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC221" class="react-file-line html-div" data-testid="code-cell" data-line-number="221" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check whether ::ChainActive() is an extension of the block at which the LockPoints</span></div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC222" class="react-file-line html-div" data-testid="code-cell" data-line-number="222" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> calculation was valid. If not LockPoints are no longer valid</span></div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC223" class="react-file-line html-div" data-testid="code-cell" data-line-number="223" style="position:relative"> <span class="pl-k">if</span> (!::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Contains</span>(lp-&gt;<span class="pl-smi">maxInputBlock</span>)) {</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC224" class="react-file-line html-div" data-testid="code-cell" data-line-number="224" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC225" class="react-file-line html-div" data-testid="code-cell" data-line-number="225" style="position:relative"> }</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC226" class="react-file-line html-div" data-testid="code-cell" data-line-number="226" style="position:relative"> }</div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC227" class="react-file-line html-div" data-testid="code-cell" data-line-number="227" style="position:relative"> </div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC228" class="react-file-line html-div" data-testid="code-cell" data-line-number="228" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> LockPoints still valid</span></div></div></div><div class="child-of-line-213 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC229" class="react-file-line html-div" data-testid="code-cell" data-line-number="229" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC230" class="react-file-line html-div" data-testid="code-cell" data-line-number="230" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC231" class="react-file-line html-div" data-testid="code-cell" data-line-number="231" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC232" class="react-file-line html-div" data-testid="code-cell" data-line-number="232" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">CheckSequenceLocks</span>(<span class="pl-k">const</span> CTxMemPool&amp; pool, <span class="pl-k">const</span> CTransaction&amp; tx, <span class="pl-k">int</span> flags, LockPoints* lp, <span class="pl-k">bool</span> useExistingLockPoints)</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC233" class="react-file-line html-div" data-testid="code-cell" data-line-number="233" style="position:relative">{</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC234" class="react-file-line html-div" data-testid="code-cell" data-line-number="234" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC235" class="react-file-line html-div" data-testid="code-cell" data-line-number="235" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(pool.<span class="pl-smi">cs</span>);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC236" class="react-file-line html-div" data-testid="code-cell" data-line-number="236" style="position:relative"> </div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC237" class="react-file-line html-div" data-testid="code-cell" data-line-number="237" style="position:relative"> CBlockIndex* tip = ::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Tip</span>();</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC238" class="react-file-line html-div" data-testid="code-cell" data-line-number="238" style="position:relative"> <span class="pl-c1">assert</span>(tip != <span class="pl-c1">nullptr</span>);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC239" class="react-file-line html-div" data-testid="code-cell" data-line-number="239" style="position:relative"> </div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC240" class="react-file-line html-div" data-testid="code-cell" data-line-number="240" style="position:relative"> CBlockIndex <span class="pl-c1">index</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC241" class="react-file-line html-div" data-testid="code-cell" data-line-number="241" style="position:relative"> <span class="pl-c1">index</span>.<span class="pl-smi">pprev</span> = tip;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC242" class="react-file-line html-div" data-testid="code-cell" data-line-number="242" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> CheckSequenceLocks() uses ::ChainActive().Height()+1 to evaluate</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC243" class="react-file-line html-div" data-testid="code-cell" data-line-number="243" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> height based locks because when SequenceLocks() is called within</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC244" class="react-file-line html-div" data-testid="code-cell" data-line-number="244" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> ConnectBlock(), the height of the block *being*</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC245" class="react-file-line html-div" data-testid="code-cell" data-line-number="245" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> evaluated is what is used.</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC246" class="react-file-line html-div" data-testid="code-cell" data-line-number="246" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Thus if we want to know if a transaction can be part of the</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC247" class="react-file-line html-div" data-testid="code-cell" data-line-number="247" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> *next* block, we need to use one more than ::ChainActive().Height()</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC248" class="react-file-line html-div" data-testid="code-cell" data-line-number="248" style="position:relative"> <span class="pl-c1">index</span>.<span class="pl-smi">nHeight</span> = tip-&gt;<span class="pl-smi">nHeight</span> + <span class="pl-c1">1</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC249" class="react-file-line html-div" data-testid="code-cell" data-line-number="249" style="position:relative"> </div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC250" class="react-file-line html-div" data-testid="code-cell" data-line-number="250" style="position:relative"> std::pair&lt;<span class="pl-k">int</span>, <span class="pl-c1">int64_t</span>&gt; lockPair;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC251" class="react-file-line html-div" data-testid="code-cell" data-line-number="251" style="position:relative"> <span class="pl-k">if</span> (useExistingLockPoints) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC252" class="react-file-line html-div" data-testid="code-cell" data-line-number="252" style="position:relative"> <span class="pl-c1">assert</span>(lp);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC253" class="react-file-line html-div" data-testid="code-cell" data-line-number="253" style="position:relative"> lockPair.<span class="pl-smi">first</span> = lp-&gt;<span class="pl-smi">height</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC254" class="react-file-line html-div" data-testid="code-cell" data-line-number="254" style="position:relative"> lockPair.<span class="pl-smi">second</span> = lp-&gt;<span class="pl-smi">time</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC255" class="react-file-line html-div" data-testid="code-cell" data-line-number="255" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC256" class="react-file-line html-div" data-testid="code-cell" data-line-number="256" style="position:relative"> <span class="pl-k">else</span> {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC257" class="react-file-line html-div" data-testid="code-cell" data-line-number="257" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> pcoinsTip contains the UTXO set for ::ChainActive().Tip()</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC258" class="react-file-line html-div" data-testid="code-cell" data-line-number="258" style="position:relative"> CCoinsViewMemPool <span class="pl-smi">viewMemPool</span>(pcoinsTip.<span class="pl-c1">get</span>(), pool);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC259" class="react-file-line html-div" data-testid="code-cell" data-line-number="259" style="position:relative"> std::vector&lt;<span class="pl-k">int</span>&gt; prevheights;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC260" class="react-file-line html-div" data-testid="code-cell" data-line-number="260" style="position:relative"> prevheights.<span class="pl-c1">resize</span>(tx.<span class="pl-smi">vin</span>.<span class="pl-c1">size</span>());</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC261" class="react-file-line html-div" data-testid="code-cell" data-line-number="261" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-c1">size_t</span> txinIndex = <span class="pl-c1">0</span>; txinIndex &lt; tx.<span class="pl-smi">vin</span>.<span class="pl-c1">size</span>(); txinIndex++) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC262" class="react-file-line html-div" data-testid="code-cell" data-line-number="262" style="position:relative"> <span class="pl-k">const</span> CTxIn&amp; txin = tx.<span class="pl-smi">vin</span>[txinIndex];</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC263" class="react-file-line html-div" data-testid="code-cell" data-line-number="263" style="position:relative"> Coin coin;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC264" class="react-file-line html-div" data-testid="code-cell" data-line-number="264" style="position:relative"> <span class="pl-k">if</span> (!viewMemPool.<span class="pl-c1">GetCoin</span>(txin.<span class="pl-smi">prevout</span>, coin)) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC265" class="react-file-line html-div" data-testid="code-cell" data-line-number="265" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: Missing input<span class="pl-pds">&quot;</span></span>, __func__);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC266" class="react-file-line html-div" data-testid="code-cell" data-line-number="266" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC267" class="react-file-line html-div" data-testid="code-cell" data-line-number="267" style="position:relative"> <span class="pl-k">if</span> (coin.<span class="pl-smi">nHeight</span> == MEMPOOL_HEIGHT) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC268" class="react-file-line html-div" data-testid="code-cell" data-line-number="268" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Assume all mempool transaction confirm in the next block</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC269" class="react-file-line html-div" data-testid="code-cell" data-line-number="269" style="position:relative"> prevheights[txinIndex] = tip-&gt;<span class="pl-smi">nHeight</span> + <span class="pl-c1">1</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC270" class="react-file-line html-div" data-testid="code-cell" data-line-number="270" style="position:relative"> } <span class="pl-k">else</span> {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC271" class="react-file-line html-div" data-testid="code-cell" data-line-number="271" style="position:relative"> prevheights[txinIndex] = coin.<span class="pl-smi">nHeight</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC272" class="react-file-line html-div" data-testid="code-cell" data-line-number="272" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC273" class="react-file-line html-div" data-testid="code-cell" data-line-number="273" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC274" class="react-file-line html-div" data-testid="code-cell" data-line-number="274" style="position:relative"> lockPair = <span class="pl-c1">CalculateSequenceLocks</span>(tx, flags, &amp;prevheights, <span class="pl-c1">index</span>);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC275" class="react-file-line html-div" data-testid="code-cell" data-line-number="275" style="position:relative"> <span class="pl-k">if</span> (lp) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC276" class="react-file-line html-div" data-testid="code-cell" data-line-number="276" style="position:relative"> lp-&gt;<span class="pl-smi">height</span> = lockPair.<span class="pl-smi">first</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC277" class="react-file-line html-div" data-testid="code-cell" data-line-number="277" style="position:relative"> lp-&gt;<span class="pl-smi">time</span> = lockPair.<span class="pl-smi">second</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC278" class="react-file-line html-div" data-testid="code-cell" data-line-number="278" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Also store the hash of the block with the highest height of</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC279" class="react-file-line html-div" data-testid="code-cell" data-line-number="279" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> all the blocks which have sequence locked prevouts.</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC280" class="react-file-line html-div" data-testid="code-cell" data-line-number="280" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> This hash needs to still be on the chain</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC281" class="react-file-line html-div" data-testid="code-cell" data-line-number="281" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> for these LockPoint calculations to be valid</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC282" class="react-file-line html-div" data-testid="code-cell" data-line-number="282" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Note: It is impossible to correctly calculate a maxInputBlock</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC283" class="react-file-line html-div" data-testid="code-cell" data-line-number="283" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> if any of the sequence locked inputs depend on unconfirmed txs,</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC284" class="react-file-line html-div" data-testid="code-cell" data-line-number="284" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> except in the special case where the relative lock time/height</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC285" class="react-file-line html-div" data-testid="code-cell" data-line-number="285" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> is 0, which is equivalent to no sequence lock. Since we assume</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC286" class="react-file-line html-div" data-testid="code-cell" data-line-number="286" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> input height of tip+1 for mempool txs and test the resulting</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC287" class="react-file-line html-div" data-testid="code-cell" data-line-number="287" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> lockPair from CalculateSequenceLocks against tip+1. We know</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC288" class="react-file-line html-div" data-testid="code-cell" data-line-number="288" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> EvaluateSequenceLocks will fail if there was a non-zero sequence</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC289" class="react-file-line html-div" data-testid="code-cell" data-line-number="289" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> lock on a mempool input, so we can use the return value of</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC290" class="react-file-line html-div" data-testid="code-cell" data-line-number="290" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> CheckSequenceLocks to indicate the LockPoints validity</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC291" class="react-file-line html-div" data-testid="code-cell" data-line-number="291" style="position:relative"> <span class="pl-k">int</span> maxInputHeight = <span class="pl-c1">0</span>;</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC292" class="react-file-line html-div" data-testid="code-cell" data-line-number="292" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> <span class="pl-k">int</span> height : prevheights) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC293" class="react-file-line html-div" data-testid="code-cell" data-line-number="293" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Can ignore mempool inputs since we&#039;ll fail if they had non-zero locks</span></div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC294" class="react-file-line html-div" data-testid="code-cell" data-line-number="294" style="position:relative"> <span class="pl-k">if</span> (height != tip-&gt;<span class="pl-smi">nHeight</span>+<span class="pl-c1">1</span>) {</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC295" class="react-file-line html-div" data-testid="code-cell" data-line-number="295" style="position:relative"> maxInputHeight = <span class="pl-c1">std::max</span>(maxInputHeight, height);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC296" class="react-file-line html-div" data-testid="code-cell" data-line-number="296" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC297" class="react-file-line html-div" data-testid="code-cell" data-line-number="297" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC298" class="react-file-line html-div" data-testid="code-cell" data-line-number="298" style="position:relative"> lp-&gt;<span class="pl-smi">maxInputBlock</span> = tip-&gt;<span class="pl-c1">GetAncestor</span>(maxInputHeight);</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC299" class="react-file-line html-div" data-testid="code-cell" data-line-number="299" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC300" class="react-file-line html-div" data-testid="code-cell" data-line-number="300" style="position:relative"> }</div></div></div><div class="child-of-line-231 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC301" class="react-file-line html-div" data-testid="code-cell" data-line-number="301" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">EvaluateSequenceLocks</span>(<span class="pl-c1">index</span>, lockPair);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC302" class="react-file-line html-div" data-testid="code-cell" data-line-number="302" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC303" class="react-file-line html-div" data-testid="code-cell" data-line-number="303" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC304" class="react-file-line html-div" data-testid="code-cell" data-line-number="304" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> Returns the script flags which should be checked for a given block</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC305" class="react-file-line html-div" data-testid="code-cell" data-line-number="305" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> <span class="pl-en">GetBlockScriptFlags</span>(<span class="pl-k">const</span> CBlockIndex* pindex, <span class="pl-k">const</span> Consensus::Params&amp; chainparams);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC306" class="react-file-line html-div" data-testid="code-cell" data-line-number="306" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC307" class="react-file-line html-div" data-testid="code-cell" data-line-number="307" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">void</span> <span class="pl-en">LimitMempoolSize</span>(CTxMemPool&amp; pool, <span class="pl-c1">size_t</span> limit, <span class="pl-k">unsigned</span> <span class="pl-k">long</span> age) {</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC308" class="react-file-line html-div" data-testid="code-cell" data-line-number="308" style="position:relative"> <span class="pl-k">int</span> expired = pool.<span class="pl-c1">Expire</span>(<span class="pl-c1">GetTime</span>() - age);</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC309" class="react-file-line html-div" data-testid="code-cell" data-line-number="309" style="position:relative"> <span class="pl-k">if</span> (expired != <span class="pl-c1">0</span>) {</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC310" class="react-file-line html-div" data-testid="code-cell" data-line-number="310" style="position:relative"> <span class="pl-c1">LogPrint</span>(BCLog::MEMPOOL, <span class="pl-s"><span class="pl-pds">&quot;</span>Expired %i transactions from the memory pool<span class="pl-cce">\n</span><span class="pl-pds">&quot;</span></span>, expired);</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC311" class="react-file-line html-div" data-testid="code-cell" data-line-number="311" style="position:relative"> }</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC312" class="react-file-line html-div" data-testid="code-cell" data-line-number="312" style="position:relative"> </div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC313" class="react-file-line html-div" data-testid="code-cell" data-line-number="313" style="position:relative"> std::vector&lt;COutPoint&gt; vNoSpendsRemaining;</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC314" class="react-file-line html-div" data-testid="code-cell" data-line-number="314" style="position:relative"> pool.<span class="pl-c1">TrimToSize</span>(limit, &amp;vNoSpendsRemaining);</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC315" class="react-file-line html-div" data-testid="code-cell" data-line-number="315" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> COutPoint&amp; removed : vNoSpendsRemaining)</div></div></div><div class="child-of-line-306 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC316" class="react-file-line html-div" data-testid="code-cell" data-line-number="316" style="position:relative"> pcoinsTip-&gt;<span class="pl-c1">Uncache</span>(removed);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC317" class="react-file-line html-div" data-testid="code-cell" data-line-number="317" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC318" class="react-file-line html-div" data-testid="code-cell" data-line-number="318" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC319" class="react-file-line html-div" data-testid="code-cell" data-line-number="319" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">bool</span> <span class="pl-en">IsCurrentForFeeEstimation</span>() EXCLUSIVE_LOCKS_REQUIRED(cs_main)</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC320" class="react-file-line html-div" data-testid="code-cell" data-line-number="320" style="position:relative">{</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC321" class="react-file-line html-div" data-testid="code-cell" data-line-number="321" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC322" class="react-file-line html-div" data-testid="code-cell" data-line-number="322" style="position:relative"> <span class="pl-k">if</span> (::<span class="pl-c1">ChainstateActive</span>().<span class="pl-c1">IsInitialBlockDownload</span>())</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC323" class="react-file-line html-div" data-testid="code-cell" data-line-number="323" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC324" class="react-file-line html-div" data-testid="code-cell" data-line-number="324" style="position:relative"> <span class="pl-k">if</span> (::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Tip</span>()-&gt;<span class="pl-c1">GetBlockTime</span>() &lt; (<span class="pl-c1">GetTime</span>() - MAX_FEE_ESTIMATION_TIP_AGE))</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC325" class="react-file-line html-div" data-testid="code-cell" data-line-number="325" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC326" class="react-file-line html-div" data-testid="code-cell" data-line-number="326" style="position:relative"> <span class="pl-k">if</span> (::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Height</span>() &lt; pindexBestHeader-&gt;<span class="pl-smi">nHeight</span> - <span class="pl-c1">1</span>)</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC327" class="react-file-line html-div" data-testid="code-cell" data-line-number="327" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-318 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC328" class="react-file-line html-div" data-testid="code-cell" data-line-number="328" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC329" class="react-file-line html-div" data-testid="code-cell" data-line-number="329" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC330" class="react-file-line html-div" data-testid="code-cell" data-line-number="330" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC331" class="react-file-line html-div" data-testid="code-cell" data-line-number="331" style="position:relative"><span class="pl-c"><span class="pl-c">/*</span> Make mempool consistent after a reorg, by re-adding or recursively erasing</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC332" class="react-file-line html-div" data-testid="code-cell" data-line-number="332" style="position:relative"><span class="pl-c"> * disconnected block transactions from the mempool, and also removing any</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC333" class="react-file-line html-div" data-testid="code-cell" data-line-number="333" style="position:relative"><span class="pl-c"> * other transactions from the mempool that are no longer valid given the new</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC334" class="react-file-line html-div" data-testid="code-cell" data-line-number="334" style="position:relative"><span class="pl-c"> * tip/height.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC335" class="react-file-line html-div" data-testid="code-cell" data-line-number="335" style="position:relative"><span class="pl-c"> *</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC336" class="react-file-line html-div" data-testid="code-cell" data-line-number="336" style="position:relative"><span class="pl-c"> * Note: we assume that disconnectpool only contains transactions that are NOT</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC337" class="react-file-line html-div" data-testid="code-cell" data-line-number="337" style="position:relative"><span class="pl-c"> * confirmed in the current chain nor already in the mempool (otherwise,</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC338" class="react-file-line html-div" data-testid="code-cell" data-line-number="338" style="position:relative"><span class="pl-c"> * in-mempool descendants of such transactions would be removed).</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC339" class="react-file-line html-div" data-testid="code-cell" data-line-number="339" style="position:relative"><span class="pl-c"> *</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC340" class="react-file-line html-div" data-testid="code-cell" data-line-number="340" style="position:relative"><span class="pl-c"> * Passing fAddToMempool=false will skip trying to add the transactions back,</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC341" class="react-file-line html-div" data-testid="code-cell" data-line-number="341" style="position:relative"><span class="pl-c"> * and instead just erase from the mempool as needed.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC342" class="react-file-line html-div" data-testid="code-cell" data-line-number="342" style="position:relative"><span class="pl-c"> <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC343" class="react-file-line html-div" data-testid="code-cell" data-line-number="343" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC344" class="react-file-line html-div" data-testid="code-cell" data-line-number="344" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">void</span> <span class="pl-en">UpdateMempoolForReorg</span>(DisconnectedBlockTransactions &amp;disconnectpool, <span class="pl-k">bool</span> <span class="pl-smi">fAddToMempool</span>) EXCLUSIVE_LOCKS_REQUIRED(cs_main)</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC345" class="react-file-line html-div" data-testid="code-cell" data-line-number="345" style="position:relative">{</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC346" class="react-file-line html-div" data-testid="code-cell" data-line-number="346" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC347" class="react-file-line html-div" data-testid="code-cell" data-line-number="347" style="position:relative"> std::vector&lt;uint256&gt; vHashUpdate;</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC348" class="react-file-line html-div" data-testid="code-cell" data-line-number="348" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> disconnectpool&#039;s insertion_order index sorts the entries from</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC349" class="react-file-line html-div" data-testid="code-cell" data-line-number="349" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> oldest to newest, but the oldest entry will be the last tx from the</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC350" class="react-file-line html-div" data-testid="code-cell" data-line-number="350" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> latest mined block that was disconnected.</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC351" class="react-file-line html-div" data-testid="code-cell" data-line-number="351" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Iterate disconnectpool in reverse, so that we add transactions</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC352" class="react-file-line html-div" data-testid="code-cell" data-line-number="352" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> back to the mempool starting with the earliest transaction that had</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC353" class="react-file-line html-div" data-testid="code-cell" data-line-number="353" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> been previously seen in a block.</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC354" class="react-file-line html-div" data-testid="code-cell" data-line-number="354" style="position:relative"> <span class="pl-k">auto</span> it = disconnectpool.<span class="pl-smi">queuedTx</span>.<span class="pl-smi">get</span>&lt;insertion_order&gt;().<span class="pl-c1">rbegin</span>();</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC355" class="react-file-line html-div" data-testid="code-cell" data-line-number="355" style="position:relative"> <span class="pl-k">while</span> (it != disconnectpool.<span class="pl-smi">queuedTx</span>.<span class="pl-smi">get</span>&lt;insertion_order&gt;().<span class="pl-c1">rend</span>()) {</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC356" class="react-file-line html-div" data-testid="code-cell" data-line-number="356" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> ignore validation errors in resurrected transactions</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC357" class="react-file-line html-div" data-testid="code-cell" data-line-number="357" style="position:relative"> CValidationState stateDummy;</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC358" class="react-file-line html-div" data-testid="code-cell" data-line-number="358" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-smi">fAddToMempool</span> || (*it)-&gt;<span class="pl-c1">IsCoinBase</span>() ||</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC359" class="react-file-line html-div" data-testid="code-cell" data-line-number="359" style="position:relative"> !<span class="pl-c1">AcceptToMemoryPool</span>(mempool, stateDummy, *it, <span class="pl-c1">nullptr</span> <span class="pl-c"><span class="pl-c">/*</span> pfMissingInputs <span class="pl-c">*/</span></span>,</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC360" class="react-file-line html-div" data-testid="code-cell" data-line-number="360" style="position:relative"> <span class="pl-c1">nullptr</span> <span class="pl-c"><span class="pl-c">/*</span> plTxnReplaced <span class="pl-c">*/</span></span>, <span class="pl-c1">true</span> <span class="pl-c"><span class="pl-c">/*</span> bypass_limits <span class="pl-c">*/</span></span>, <span class="pl-c1">0</span> <span class="pl-c"><span class="pl-c">/*</span> nAbsurdFee <span class="pl-c">*/</span></span>)) {</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC361" class="react-file-line html-div" data-testid="code-cell" data-line-number="361" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> If the transaction doesn&#039;t make it in to the mempool, remove any</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC362" class="react-file-line html-div" data-testid="code-cell" data-line-number="362" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> transactions that depend on it (which would now be orphans).</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC363" class="react-file-line html-div" data-testid="code-cell" data-line-number="363" style="position:relative"> mempool.<span class="pl-c1">removeRecursive</span>(**it, MemPoolRemovalReason::REORG);</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC364" class="react-file-line html-div" data-testid="code-cell" data-line-number="364" style="position:relative"> } <span class="pl-k">else</span> <span class="pl-k">if</span> (mempool.<span class="pl-c1">exists</span>((*it)-&gt;<span class="pl-c1">GetHash</span>())) {</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC365" class="react-file-line html-div" data-testid="code-cell" data-line-number="365" style="position:relative"> vHashUpdate.<span class="pl-c1">push_back</span>((*it)-&gt;<span class="pl-c1">GetHash</span>());</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC366" class="react-file-line html-div" data-testid="code-cell" data-line-number="366" style="position:relative"> }</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC367" class="react-file-line html-div" data-testid="code-cell" data-line-number="367" style="position:relative"> ++it;</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC368" class="react-file-line html-div" data-testid="code-cell" data-line-number="368" style="position:relative"> }</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC369" class="react-file-line html-div" data-testid="code-cell" data-line-number="369" style="position:relative"> disconnectpool.<span class="pl-smi">queuedTx</span>.<span class="pl-c1">clear</span>();</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC370" class="react-file-line html-div" data-testid="code-cell" data-line-number="370" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> AcceptToMemoryPool/addUnchecked all assume that new mempool entries have</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC371" class="react-file-line html-div" data-testid="code-cell" data-line-number="371" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> no in-mempool children, which is generally not true when adding</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC372" class="react-file-line html-div" data-testid="code-cell" data-line-number="372" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> previously-confirmed transactions back to the mempool.</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC373" class="react-file-line html-div" data-testid="code-cell" data-line-number="373" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> UpdateTransactionsFromBlock finds descendants of any transactions in</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC374" class="react-file-line html-div" data-testid="code-cell" data-line-number="374" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> the disconnectpool that were added back and cleans up the mempool state.</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC375" class="react-file-line html-div" data-testid="code-cell" data-line-number="375" style="position:relative"> mempool.<span class="pl-c1">UpdateTransactionsFromBlock</span>(vHashUpdate);</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC376" class="react-file-line html-div" data-testid="code-cell" data-line-number="376" style="position:relative"> </div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC377" class="react-file-line html-div" data-testid="code-cell" data-line-number="377" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> We also need to remove any now-immature transactions</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC378" class="react-file-line html-div" data-testid="code-cell" data-line-number="378" style="position:relative"> mempool.<span class="pl-c1">removeForReorg</span>(pcoinsTip.<span class="pl-c1">get</span>(), ::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Tip</span>()-&gt;<span class="pl-smi">nHeight</span> + <span class="pl-c1">1</span>, STANDARD_LOCKTIME_VERIFY_FLAGS);</div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC379" class="react-file-line html-div" data-testid="code-cell" data-line-number="379" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Re-limit mempool size, in case we added any transactions</span></div></div></div><div class="child-of-line-343 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC380" class="react-file-line html-div" data-testid="code-cell" data-line-number="380" style="position:relative"> <span class="pl-c1">LimitMempoolSize</span>(mempool, <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-maxmempool<span class="pl-pds">&quot;</span></span>, DEFAULT_MAX_MEMPOOL_SIZE) * <span class="pl-c1">1000000</span>, <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-mempoolexpiry<span class="pl-pds">&quot;</span></span>, DEFAULT_MEMPOOL_EXPIRY) * <span class="pl-c1">60</span> * <span class="pl-c1">60</span>);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC381" class="react-file-line html-div" data-testid="code-cell" data-line-number="381" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC382" class="react-file-line html-div" data-testid="code-cell" data-line-number="382" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC383" class="react-file-line html-div" data-testid="code-cell" data-line-number="383" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> Used to avoid mempool polluting consensus critical paths if CCoinsViewMempool</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC384" class="react-file-line html-div" data-testid="code-cell" data-line-number="384" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> were somehow broken and returning the wrong scriptPubKeys</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC385" class="react-file-line html-div" data-testid="code-cell" data-line-number="385" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">bool</span> <span class="pl-en">CheckInputsFromMempoolAndCache</span>(<span class="pl-k">const</span> CTransaction&amp; tx, CValidationState&amp; state, <span class="pl-k">const</span> CCoinsViewCache&amp; view, <span class="pl-k">const</span> CTxMemPool&amp; pool,</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC386" class="react-file-line html-div" data-testid="code-cell" data-line-number="386" style="position:relative"> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> flags, <span class="pl-k">bool</span> cacheSigStore, PrecomputedTransactionData&amp; txdata) EXCLUSIVE_LOCKS_REQUIRED(cs_main) {</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC387" class="react-file-line html-div" data-testid="code-cell" data-line-number="387" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC388" class="react-file-line html-div" data-testid="code-cell" data-line-number="388" style="position:relative"> </div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC389" class="react-file-line html-div" data-testid="code-cell" data-line-number="389" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> pool.cs should be locked already, but go ahead and re-take the lock here</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC390" class="react-file-line html-div" data-testid="code-cell" data-line-number="390" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> to enforce that mempool doesn&#039;t change between when we check the view</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC391" class="react-file-line html-div" data-testid="code-cell" data-line-number="391" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> and when we actually call through to CheckInputs</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC392" class="react-file-line html-div" data-testid="code-cell" data-line-number="392" style="position:relative"> <span class="pl-c1">LOCK</span>(pool.<span class="pl-smi">cs</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC393" class="react-file-line html-div" data-testid="code-cell" data-line-number="393" style="position:relative"> </div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC394" class="react-file-line html-div" data-testid="code-cell" data-line-number="394" style="position:relative"> <span class="pl-c1">assert</span>(!tx.<span class="pl-c1">IsCoinBase</span>());</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC395" class="react-file-line html-div" data-testid="code-cell" data-line-number="395" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> CTxIn&amp; txin : tx.<span class="pl-smi">vin</span>) {</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC396" class="react-file-line html-div" data-testid="code-cell" data-line-number="396" style="position:relative"> <span class="pl-k">const</span> Coin&amp; coin = view.<span class="pl-c1">AccessCoin</span>(txin.<span class="pl-smi">prevout</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC397" class="react-file-line html-div" data-testid="code-cell" data-line-number="397" style="position:relative"> </div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC398" class="react-file-line html-div" data-testid="code-cell" data-line-number="398" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> At this point we haven&#039;t actually checked if the coins are all</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC399" class="react-file-line html-div" data-testid="code-cell" data-line-number="399" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> available (or shouldn&#039;t assume we have, since CheckInputs does).</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC400" class="react-file-line html-div" data-testid="code-cell" data-line-number="400" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> So we just return failure if the inputs are not available here,</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC401" class="react-file-line html-div" data-testid="code-cell" data-line-number="401" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> and then only have to check equivalence for available inputs.</span></div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC402" class="react-file-line html-div" data-testid="code-cell" data-line-number="402" style="position:relative"> <span class="pl-k">if</span> (coin.<span class="pl-c1">IsSpent</span>()) <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC403" class="react-file-line html-div" data-testid="code-cell" data-line-number="403" style="position:relative"> </div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC404" class="react-file-line html-div" data-testid="code-cell" data-line-number="404" style="position:relative"> <span class="pl-k">const</span> CTransactionRef&amp; txFrom = pool.<span class="pl-c1">get</span>(txin.<span class="pl-smi">prevout</span>.<span class="pl-smi">hash</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC405" class="react-file-line html-div" data-testid="code-cell" data-line-number="405" style="position:relative"> <span class="pl-k">if</span> (txFrom) {</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC406" class="react-file-line html-div" data-testid="code-cell" data-line-number="406" style="position:relative"> <span class="pl-c1">assert</span>(txFrom-&gt;<span class="pl-c1">GetHash</span>() == txin.<span class="pl-smi">prevout</span>.<span class="pl-smi">hash</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC407" class="react-file-line html-div" data-testid="code-cell" data-line-number="407" style="position:relative"> <span class="pl-c1">assert</span>(txFrom-&gt;<span class="pl-smi">vout</span>.<span class="pl-c1">size</span>() &gt; txin.<span class="pl-smi">prevout</span>.<span class="pl-smi">n</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC408" class="react-file-line html-div" data-testid="code-cell" data-line-number="408" style="position:relative"> <span class="pl-c1">assert</span>(txFrom-&gt;<span class="pl-smi">vout</span>[txin.<span class="pl-smi">prevout</span>.<span class="pl-smi">n</span>] == coin.<span class="pl-smi">out</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC409" class="react-file-line html-div" data-testid="code-cell" data-line-number="409" style="position:relative"> } <span class="pl-k">else</span> {</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC410" class="react-file-line html-div" data-testid="code-cell" data-line-number="410" style="position:relative"> <span class="pl-k">const</span> Coin&amp; coinFromDisk = pcoinsTip-&gt;<span class="pl-c1">AccessCoin</span>(txin.<span class="pl-smi">prevout</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC411" class="react-file-line html-div" data-testid="code-cell" data-line-number="411" style="position:relative"> <span class="pl-c1">assert</span>(!coinFromDisk.<span class="pl-c1">IsSpent</span>());</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC412" class="react-file-line html-div" data-testid="code-cell" data-line-number="412" style="position:relative"> <span class="pl-c1">assert</span>(coinFromDisk.<span class="pl-smi">out</span> == coin.<span class="pl-smi">out</span>);</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC413" class="react-file-line html-div" data-testid="code-cell" data-line-number="413" style="position:relative"> }</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC414" class="react-file-line html-div" data-testid="code-cell" data-line-number="414" style="position:relative"> }</div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC415" class="react-file-line html-div" data-testid="code-cell" data-line-number="415" style="position:relative"> </div></div></div><div class="child-of-line-385 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC416" class="react-file-line html-div" data-testid="code-cell" data-line-number="416" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">CheckInputs</span>(tx, state, view, <span class="pl-c1">true</span>, flags, cacheSigStore, <span class="pl-c1">true</span>, txdata);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC417" class="react-file-line html-div" data-testid="code-cell" data-line-number="417" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC418" class="react-file-line html-div" data-testid="code-cell" data-line-number="418" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC419" class="react-file-line html-div" data-testid="code-cell" data-line-number="419" style="position:relative"><span class="pl-c"><span class="pl-c">/*</span>*</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC420" class="react-file-line html-div" data-testid="code-cell" data-line-number="420" style="position:relative"><span class="pl-c"> * @param[out] coins_to_uncache Return any outpoints which were not previously present in the</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC421" class="react-file-line html-div" data-testid="code-cell" data-line-number="421" style="position:relative"><span class="pl-c"> * coins cache, but were added as a result of validating the tx</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC422" class="react-file-line html-div" data-testid="code-cell" data-line-number="422" style="position:relative"><span class="pl-c"> * for mempool acceptance. This allows the caller to optionally</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC423" class="react-file-line html-div" data-testid="code-cell" data-line-number="423" style="position:relative"><span class="pl-c"> * remove the cache additions if the associated transaction ends</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC424" class="react-file-line html-div" data-testid="code-cell" data-line-number="424" style="position:relative"><span class="pl-c"> * up being rejected by the mempool.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC425" class="react-file-line html-div" data-testid="code-cell" data-line-number="425" style="position:relative"><span class="pl-c"> <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC426" class="react-file-line html-div" data-testid="code-cell" data-line-number="426" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">bool</span> <span class="pl-en">AcceptToMemoryPoolWorker</span>(<span class="pl-k">const</span> CChainParams&amp; chainparams, CTxMemPool&amp; pool, CValidationState&amp; state, <span class="pl-k">const</span> CTransactionRef&amp; ptx,</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC427" class="react-file-line html-div" data-testid="code-cell" data-line-number="427" style="position:relative"> <span class="pl-k">bool</span>* pfMissingInputs, <span class="pl-c1">int64_t</span> nAcceptTime, std::list&lt;CTransactionRef&gt;* plTxnReplaced,</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC428" class="react-file-line html-div" data-testid="code-cell" data-line-number="428" style="position:relative"> <span class="pl-k">bool</span> bypass_limits, <span class="pl-k">const</span> CAmount&amp; nAbsurdFee, std::vector&lt;COutPoint&gt;&amp; coins_to_uncache, <span class="pl-k">bool</span> test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC429" class="react-file-line html-div" data-testid="code-cell" data-line-number="429" style="position:relative">{</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC430" class="react-file-line html-div" data-testid="code-cell" data-line-number="430" style="position:relative"> <span class="pl-k">const</span> CTransaction&amp; tx = *ptx;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC431" class="react-file-line html-div" data-testid="code-cell" data-line-number="431" style="position:relative"> <span class="pl-k">const</span> uint256 hash = tx.<span class="pl-c1">GetHash</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC432" class="react-file-line html-div" data-testid="code-cell" data-line-number="432" style="position:relative"> <span class="pl-c1">AssertLockHeld</span>(cs_main);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC433" class="react-file-line html-div" data-testid="code-cell" data-line-number="433" style="position:relative"> <span class="pl-c1">LOCK</span>(pool.<span class="pl-smi">cs</span>); <span class="pl-c"><span class="pl-c">//</span> mempool &quot;read lock&quot; (held through GetMainSignals().TransactionAddedToMempool())</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC434" class="react-file-line html-div" data-testid="code-cell" data-line-number="434" style="position:relative"> <span class="pl-k">if</span> (pfMissingInputs) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC435" class="react-file-line html-div" data-testid="code-cell" data-line-number="435" style="position:relative"> *pfMissingInputs = <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC436" class="react-file-line html-div" data-testid="code-cell" data-line-number="436" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC437" class="react-file-line html-div" data-testid="code-cell" data-line-number="437" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC438" class="react-file-line html-div" data-testid="code-cell" data-line-number="438" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">CheckTransaction</span>(tx, state))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC439" class="react-file-line html-div" data-testid="code-cell" data-line-number="439" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>; <span class="pl-c"><span class="pl-c">//</span> state filled in by CheckTransaction</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC440" class="react-file-line html-div" data-testid="code-cell" data-line-number="440" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC441" class="react-file-line html-div" data-testid="code-cell" data-line-number="441" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Coinbase is only valid in a block, not as a loose transaction</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC442" class="react-file-line html-div" data-testid="code-cell" data-line-number="442" style="position:relative"> <span class="pl-k">if</span> (tx.<span class="pl-c1">IsCoinBase</span>())</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC443" class="react-file-line html-div" data-testid="code-cell" data-line-number="443" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::CONSENSUS, <span class="pl-c1">false</span>, REJECT_INVALID, <span class="pl-s"><span class="pl-pds">&quot;</span>coinbase<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC444" class="react-file-line html-div" data-testid="code-cell" data-line-number="444" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC445" class="react-file-line html-div" data-testid="code-cell" data-line-number="445" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Rather not work on nonstandard transactions (unless -testnet/-regtest)</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC446" class="react-file-line html-div" data-testid="code-cell" data-line-number="446" style="position:relative"> std::string reason;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC447" class="react-file-line html-div" data-testid="code-cell" data-line-number="447" style="position:relative"> <span class="pl-k">if</span> (<span class="pl-smi">fRequireStandard</span> &amp;&amp; !<span class="pl-c1">IsStandardTx</span>(tx, reason))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC448" class="react-file-line html-div" data-testid="code-cell" data-line-number="448" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_NOT_STANDARD, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, reason);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC449" class="react-file-line html-div" data-testid="code-cell" data-line-number="449" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC450" class="react-file-line html-div" data-testid="code-cell" data-line-number="450" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Do not work on transactions that are too small.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC451" class="react-file-line html-div" data-testid="code-cell" data-line-number="451" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> A transaction with 1 segwit input and 1 P2WPHK output has non-witness size of 82 bytes.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC452" class="react-file-line html-div" data-testid="code-cell" data-line-number="452" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Transactions smaller than this are not relayed to reduce unnecessary malloc overhead.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC453" class="react-file-line html-div" data-testid="code-cell" data-line-number="453" style="position:relative"> <span class="pl-k">if</span> (::<span class="pl-c1">GetSerializeSize</span>(tx, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) &lt; MIN_STANDARD_TX_NONWITNESS_SIZE)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC454" class="react-file-line html-div" data-testid="code-cell" data-line-number="454" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_NOT_STANDARD, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>tx-size-small<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC455" class="react-file-line html-div" data-testid="code-cell" data-line-number="455" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC456" class="react-file-line html-div" data-testid="code-cell" data-line-number="456" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Only accept nLockTime-using transactions that can be mined in the next</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC457" class="react-file-line html-div" data-testid="code-cell" data-line-number="457" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> block; we don&#039;t want our mempool filled up with transactions that can&#039;t</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC458" class="react-file-line html-div" data-testid="code-cell" data-line-number="458" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> be mined yet.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC459" class="react-file-line html-div" data-testid="code-cell" data-line-number="459" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">CheckFinalTx</span>(tx, STANDARD_LOCKTIME_VERIFY_FLAGS))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC460" class="react-file-line html-div" data-testid="code-cell" data-line-number="460" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_PREMATURE_SPEND, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>non-final<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC461" class="react-file-line html-div" data-testid="code-cell" data-line-number="461" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC462" class="react-file-line html-div" data-testid="code-cell" data-line-number="462" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> is it already in the memory pool?</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC463" class="react-file-line html-div" data-testid="code-cell" data-line-number="463" style="position:relative"> <span class="pl-k">if</span> (pool.<span class="pl-c1">exists</span>(hash)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC464" class="react-file-line html-div" data-testid="code-cell" data-line-number="464" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_CONFLICT, <span class="pl-c1">false</span>, REJECT_DUPLICATE, <span class="pl-s"><span class="pl-pds">&quot;</span>txn-already-in-mempool<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC465" class="react-file-line html-div" data-testid="code-cell" data-line-number="465" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC466" class="react-file-line html-div" data-testid="code-cell" data-line-number="466" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC467" class="react-file-line html-div" data-testid="code-cell" data-line-number="467" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check for conflicts with in-memory transactions</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC468" class="react-file-line html-div" data-testid="code-cell" data-line-number="468" style="position:relative"> std::set&lt;uint256&gt; setConflicts;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC469" class="react-file-line html-div" data-testid="code-cell" data-line-number="469" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> CTxIn &amp;txin : tx.<span class="pl-smi">vin</span>)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC470" class="react-file-line html-div" data-testid="code-cell" data-line-number="470" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC471" class="react-file-line html-div" data-testid="code-cell" data-line-number="471" style="position:relative"> <span class="pl-k">const</span> CTransaction* ptxConflicting = pool.<span class="pl-c1">GetConflictTx</span>(txin.<span class="pl-smi">prevout</span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC472" class="react-file-line html-div" data-testid="code-cell" data-line-number="472" style="position:relative"> <span class="pl-k">if</span> (ptxConflicting) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC473" class="react-file-line html-div" data-testid="code-cell" data-line-number="473" style="position:relative"> <span class="pl-k">if</span> (!setConflicts.<span class="pl-c1">count</span>(ptxConflicting-&gt;<span class="pl-c1">GetHash</span>()))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC474" class="react-file-line html-div" data-testid="code-cell" data-line-number="474" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC475" class="react-file-line html-div" data-testid="code-cell" data-line-number="475" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Allow opt-out of transaction replacement by setting</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC476" class="react-file-line html-div" data-testid="code-cell" data-line-number="476" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> nSequence &gt; MAX_BIP125_RBF_SEQUENCE (SEQUENCE_FINAL-2) on all inputs.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC477" class="react-file-line html-div" data-testid="code-cell" data-line-number="477" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC478" class="react-file-line html-div" data-testid="code-cell" data-line-number="478" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> SEQUENCE_FINAL-1 is picked to still allow use of nLockTime by</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC479" class="react-file-line html-div" data-testid="code-cell" data-line-number="479" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> non-replaceable transactions. All inputs rather than just one</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC480" class="react-file-line html-div" data-testid="code-cell" data-line-number="480" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> is for the sake of multi-party protocols, where we don&#039;t</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC481" class="react-file-line html-div" data-testid="code-cell" data-line-number="481" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> want a single party to be able to disable replacement.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC482" class="react-file-line html-div" data-testid="code-cell" data-line-number="482" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC483" class="react-file-line html-div" data-testid="code-cell" data-line-number="483" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> The opt-out ignores descendants as anyone relying on</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC484" class="react-file-line html-div" data-testid="code-cell" data-line-number="484" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> first-seen mempool behavior should be checking all</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC485" class="react-file-line html-div" data-testid="code-cell" data-line-number="485" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> unconfirmed ancestors anyway; doing otherwise is hopelessly</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC486" class="react-file-line html-div" data-testid="code-cell" data-line-number="486" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> insecure.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC487" class="react-file-line html-div" data-testid="code-cell" data-line-number="487" style="position:relative"> <span class="pl-k">bool</span> <span class="pl-smi">fReplacementOptOut</span> = <span class="pl-c1">true</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC488" class="react-file-line html-div" data-testid="code-cell" data-line-number="488" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> CTxIn &amp;_txin : ptxConflicting-&gt;<span class="pl-smi">vin</span>)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC489" class="react-file-line html-div" data-testid="code-cell" data-line-number="489" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC490" class="react-file-line html-div" data-testid="code-cell" data-line-number="490" style="position:relative"> <span class="pl-k">if</span> (_txin.<span class="pl-smi">nSequence</span> &lt;= MAX_BIP125_RBF_SEQUENCE)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC491" class="react-file-line html-div" data-testid="code-cell" data-line-number="491" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC492" class="react-file-line html-div" data-testid="code-cell" data-line-number="492" style="position:relative"> <span class="pl-smi">fReplacementOptOut</span> = <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC493" class="react-file-line html-div" data-testid="code-cell" data-line-number="493" style="position:relative"> <span class="pl-k">break</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC494" class="react-file-line html-div" data-testid="code-cell" data-line-number="494" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC495" class="react-file-line html-div" data-testid="code-cell" data-line-number="495" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC496" class="react-file-line html-div" data-testid="code-cell" data-line-number="496" style="position:relative"> <span class="pl-k">if</span> (<span class="pl-smi">fReplacementOptOut</span>) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC497" class="react-file-line html-div" data-testid="code-cell" data-line-number="497" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_DUPLICATE, <span class="pl-s"><span class="pl-pds">&quot;</span>txn-mempool-conflict<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC498" class="react-file-line html-div" data-testid="code-cell" data-line-number="498" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC499" class="react-file-line html-div" data-testid="code-cell" data-line-number="499" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC500" class="react-file-line html-div" data-testid="code-cell" data-line-number="500" style="position:relative"> setConflicts.<span class="pl-c1">insert</span>(ptxConflicting-&gt;<span class="pl-c1">GetHash</span>());</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC501" class="react-file-line html-div" data-testid="code-cell" data-line-number="501" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC502" class="react-file-line html-div" data-testid="code-cell" data-line-number="502" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC503" class="react-file-line html-div" data-testid="code-cell" data-line-number="503" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC504" class="react-file-line html-div" data-testid="code-cell" data-line-number="504" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC505" class="react-file-line html-div" data-testid="code-cell" data-line-number="505" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC506" class="react-file-line html-div" data-testid="code-cell" data-line-number="506" style="position:relative"> CCoinsView dummy;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC507" class="react-file-line html-div" data-testid="code-cell" data-line-number="507" style="position:relative"> CCoinsViewCache <span class="pl-smi">view</span>(&amp;dummy);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC508" class="react-file-line html-div" data-testid="code-cell" data-line-number="508" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC509" class="react-file-line html-div" data-testid="code-cell" data-line-number="509" style="position:relative"> LockPoints lp;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC510" class="react-file-line html-div" data-testid="code-cell" data-line-number="510" style="position:relative"> CCoinsViewMemPool <span class="pl-smi">viewMemPool</span>(pcoinsTip.<span class="pl-c1">get</span>(), pool);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC511" class="react-file-line html-div" data-testid="code-cell" data-line-number="511" style="position:relative"> view.<span class="pl-c1">SetBackend</span>(viewMemPool);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC512" class="react-file-line html-div" data-testid="code-cell" data-line-number="512" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC513" class="react-file-line html-div" data-testid="code-cell" data-line-number="513" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> do all inputs exist?</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC514" class="react-file-line html-div" data-testid="code-cell" data-line-number="514" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> CTxIn&amp; txin : tx.<span class="pl-smi">vin</span>) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC515" class="react-file-line html-div" data-testid="code-cell" data-line-number="515" style="position:relative"> <span class="pl-k">if</span> (!pcoinsTip-&gt;<span class="pl-c1">HaveCoinInCache</span>(txin.<span class="pl-smi">prevout</span>)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC516" class="react-file-line html-div" data-testid="code-cell" data-line-number="516" style="position:relative"> coins_to_uncache.<span class="pl-c1">push_back</span>(txin.<span class="pl-smi">prevout</span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC517" class="react-file-line html-div" data-testid="code-cell" data-line-number="517" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC518" class="react-file-line html-div" data-testid="code-cell" data-line-number="518" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC519" class="react-file-line html-div" data-testid="code-cell" data-line-number="519" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Note: this call may add txin.prevout to the coins cache</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC520" class="react-file-line html-div" data-testid="code-cell" data-line-number="520" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> (pcoinsTip.cacheCoins) by way of FetchCoin(). It should be removed</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC521" class="react-file-line html-div" data-testid="code-cell" data-line-number="521" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> later (via coins_to_uncache) if this tx turns out to be invalid.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC522" class="react-file-line html-div" data-testid="code-cell" data-line-number="522" style="position:relative"> <span class="pl-k">if</span> (!view.<span class="pl-c1">HaveCoin</span>(txin.<span class="pl-smi">prevout</span>)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC523" class="react-file-line html-div" data-testid="code-cell" data-line-number="523" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Are inputs missing because we already have the tx?</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC524" class="react-file-line html-div" data-testid="code-cell" data-line-number="524" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-c1">size_t</span> out = <span class="pl-c1">0</span>; out &lt; tx.<span class="pl-smi">vout</span>.<span class="pl-c1">size</span>(); out++) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC525" class="react-file-line html-div" data-testid="code-cell" data-line-number="525" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Optimistically just do efficient check of cache for outputs</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC526" class="react-file-line html-div" data-testid="code-cell" data-line-number="526" style="position:relative"> <span class="pl-k">if</span> (pcoinsTip-&gt;<span class="pl-c1">HaveCoinInCache</span>(<span class="pl-c1">COutPoint</span>(hash, out))) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC527" class="react-file-line html-div" data-testid="code-cell" data-line-number="527" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_CONFLICT, <span class="pl-c1">false</span>, REJECT_DUPLICATE, <span class="pl-s"><span class="pl-pds">&quot;</span>txn-already-known<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC528" class="react-file-line html-div" data-testid="code-cell" data-line-number="528" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC529" class="react-file-line html-div" data-testid="code-cell" data-line-number="529" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC530" class="react-file-line html-div" data-testid="code-cell" data-line-number="530" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Otherwise assume this might be an orphan tx for which we just haven&#039;t seen parents yet</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC531" class="react-file-line html-div" data-testid="code-cell" data-line-number="531" style="position:relative"> <span class="pl-k">if</span> (pfMissingInputs) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC532" class="react-file-line html-div" data-testid="code-cell" data-line-number="532" style="position:relative"> *pfMissingInputs = <span class="pl-c1">true</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC533" class="react-file-line html-div" data-testid="code-cell" data-line-number="533" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC534" class="react-file-line html-div" data-testid="code-cell" data-line-number="534" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>; <span class="pl-c"><span class="pl-c">//</span> fMissingInputs and !state.IsInvalid() is used to detect this condition, don&#039;t set state.Invalid()</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC535" class="react-file-line html-div" data-testid="code-cell" data-line-number="535" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC536" class="react-file-line html-div" data-testid="code-cell" data-line-number="536" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC537" class="react-file-line html-div" data-testid="code-cell" data-line-number="537" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC538" class="react-file-line html-div" data-testid="code-cell" data-line-number="538" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Bring the best block into scope</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC539" class="react-file-line html-div" data-testid="code-cell" data-line-number="539" style="position:relative"> view.<span class="pl-c1">GetBestBlock</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC540" class="react-file-line html-div" data-testid="code-cell" data-line-number="540" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC541" class="react-file-line html-div" data-testid="code-cell" data-line-number="541" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> we have all inputs cached now, so switch back to dummy, so we don&#039;t need to keep lock on mempool</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC542" class="react-file-line html-div" data-testid="code-cell" data-line-number="542" style="position:relative"> view.<span class="pl-c1">SetBackend</span>(dummy);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC543" class="react-file-line html-div" data-testid="code-cell" data-line-number="543" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC544" class="react-file-line html-div" data-testid="code-cell" data-line-number="544" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Only accept BIP68 sequence locked transactions that can be mined in the next</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC545" class="react-file-line html-div" data-testid="code-cell" data-line-number="545" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> block; we don&#039;t want our mempool filled up with transactions that can&#039;t</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC546" class="react-file-line html-div" data-testid="code-cell" data-line-number="546" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> be mined yet.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC547" class="react-file-line html-div" data-testid="code-cell" data-line-number="547" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Must keep pool.cs for this unless we change CheckSequenceLocks to take a</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC548" class="react-file-line html-div" data-testid="code-cell" data-line-number="548" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> CoinsViewCache instead of create its own</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC549" class="react-file-line html-div" data-testid="code-cell" data-line-number="549" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">CheckSequenceLocks</span>(pool, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &amp;lp))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC550" class="react-file-line html-div" data-testid="code-cell" data-line-number="550" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_PREMATURE_SPEND, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>non-BIP68-final<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC551" class="react-file-line html-div" data-testid="code-cell" data-line-number="551" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC552" class="react-file-line html-div" data-testid="code-cell" data-line-number="552" style="position:relative"> CAmount nFees = <span class="pl-c1">0</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC553" class="react-file-line html-div" data-testid="code-cell" data-line-number="553" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">Consensus::CheckTxInputs</span>(tx, state, view, <span class="pl-c1">GetSpendHeight</span>(view), nFees)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC554" class="react-file-line html-div" data-testid="code-cell" data-line-number="554" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: Consensus::CheckTxInputs: %s, %s<span class="pl-pds">&quot;</span></span>, __func__, tx.<span class="pl-c1">GetHash</span>().<span class="pl-c1">ToString</span>(), <span class="pl-c1">FormatStateMessage</span>(state));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC555" class="react-file-line html-div" data-testid="code-cell" data-line-number="555" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC556" class="react-file-line html-div" data-testid="code-cell" data-line-number="556" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC557" class="react-file-line html-div" data-testid="code-cell" data-line-number="557" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check for non-standard pay-to-script-hash in inputs</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC558" class="react-file-line html-div" data-testid="code-cell" data-line-number="558" style="position:relative"> <span class="pl-k">if</span> (<span class="pl-smi">fRequireStandard</span> &amp;&amp; !<span class="pl-c1">AreInputsStandard</span>(tx, view))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC559" class="react-file-line html-div" data-testid="code-cell" data-line-number="559" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_NOT_STANDARD, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>bad-txns-nonstandard-inputs<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC560" class="react-file-line html-div" data-testid="code-cell" data-line-number="560" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC561" class="react-file-line html-div" data-testid="code-cell" data-line-number="561" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check for non-standard witness in P2WSH</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC562" class="react-file-line html-div" data-testid="code-cell" data-line-number="562" style="position:relative"> <span class="pl-k">if</span> (tx.<span class="pl-c1">HasWitness</span>() &amp;&amp; <span class="pl-smi">fRequireStandard</span> &amp;&amp; !<span class="pl-c1">IsWitnessStandard</span>(tx, view))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC563" class="react-file-line html-div" data-testid="code-cell" data-line-number="563" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_WITNESS_MUTATED, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>bad-witness-nonstandard<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC564" class="react-file-line html-div" data-testid="code-cell" data-line-number="564" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC565" class="react-file-line html-div" data-testid="code-cell" data-line-number="565" style="position:relative"> <span class="pl-c1">int64_t</span> nSigOpsCost = <span class="pl-c1">GetTransactionSigOpCost</span>(tx, view, STANDARD_SCRIPT_VERIFY_FLAGS);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC566" class="react-file-line html-div" data-testid="code-cell" data-line-number="566" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC567" class="react-file-line html-div" data-testid="code-cell" data-line-number="567" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> nModifiedFees includes any fee deltas from PrioritiseTransaction</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC568" class="react-file-line html-div" data-testid="code-cell" data-line-number="568" style="position:relative"> CAmount nModifiedFees = nFees;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC569" class="react-file-line html-div" data-testid="code-cell" data-line-number="569" style="position:relative"> pool.<span class="pl-c1">ApplyDelta</span>(hash, nModifiedFees);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC570" class="react-file-line html-div" data-testid="code-cell" data-line-number="570" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC571" class="react-file-line html-div" data-testid="code-cell" data-line-number="571" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Keep track of transactions that spend a coinbase, which we re-scan</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC572" class="react-file-line html-div" data-testid="code-cell" data-line-number="572" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> during reorgs to ensure COINBASE_MATURITY is still met.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC573" class="react-file-line html-div" data-testid="code-cell" data-line-number="573" style="position:relative"> <span class="pl-k">bool</span> <span class="pl-smi">fSpendsCoinbase</span> = <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC574" class="react-file-line html-div" data-testid="code-cell" data-line-number="574" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> CTxIn &amp;txin : tx.<span class="pl-smi">vin</span>) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC575" class="react-file-line html-div" data-testid="code-cell" data-line-number="575" style="position:relative"> <span class="pl-k">const</span> Coin &amp;coin = view.<span class="pl-c1">AccessCoin</span>(txin.<span class="pl-smi">prevout</span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC576" class="react-file-line html-div" data-testid="code-cell" data-line-number="576" style="position:relative"> <span class="pl-k">if</span> (coin.<span class="pl-c1">IsCoinBase</span>()) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC577" class="react-file-line html-div" data-testid="code-cell" data-line-number="577" style="position:relative"> <span class="pl-smi">fSpendsCoinbase</span> = <span class="pl-c1">true</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC578" class="react-file-line html-div" data-testid="code-cell" data-line-number="578" style="position:relative"> <span class="pl-k">break</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC579" class="react-file-line html-div" data-testid="code-cell" data-line-number="579" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC580" class="react-file-line html-div" data-testid="code-cell" data-line-number="580" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC581" class="react-file-line html-div" data-testid="code-cell" data-line-number="581" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC582" class="react-file-line html-div" data-testid="code-cell" data-line-number="582" style="position:relative"> CTxMemPoolEntry <span class="pl-smi">entry</span>(ptx, nFees, nAcceptTime, ::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Height</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC583" class="react-file-line html-div" data-testid="code-cell" data-line-number="583" style="position:relative"> <span class="pl-smi">fSpendsCoinbase</span>, nSigOpsCost, lp);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC584" class="react-file-line html-div" data-testid="code-cell" data-line-number="584" style="position:relative"> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> nSize = entry.<span class="pl-c1">GetTxSize</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC585" class="react-file-line html-div" data-testid="code-cell" data-line-number="585" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC586" class="react-file-line html-div" data-testid="code-cell" data-line-number="586" style="position:relative"> <span class="pl-k">if</span> (nSigOpsCost &gt; MAX_STANDARD_TX_SIGOPS_COST)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC587" class="react-file-line html-div" data-testid="code-cell" data-line-number="587" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_NOT_STANDARD, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>bad-txns-too-many-sigops<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC588" class="react-file-line html-div" data-testid="code-cell" data-line-number="588" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%d<span class="pl-pds">&quot;</span></span>, nSigOpsCost));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC589" class="react-file-line html-div" data-testid="code-cell" data-line-number="589" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC590" class="react-file-line html-div" data-testid="code-cell" data-line-number="590" style="position:relative"> CAmount mempoolRejectFee = pool.<span class="pl-c1">GetMinFee</span>(<span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-maxmempool<span class="pl-pds">&quot;</span></span>, DEFAULT_MAX_MEMPOOL_SIZE) * <span class="pl-c1">1000000</span>).<span class="pl-c1">GetFee</span>(nSize);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC591" class="react-file-line html-div" data-testid="code-cell" data-line-number="591" style="position:relative"> <span class="pl-k">if</span> (!bypass_limits &amp;&amp; mempoolRejectFee &gt; <span class="pl-c1">0</span> &amp;&amp; nModifiedFees &lt; mempoolRejectFee) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC592" class="react-file-line html-div" data-testid="code-cell" data-line-number="592" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_INSUFFICIENTFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>mempool min fee not met<span class="pl-pds">&quot;</span></span>, <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%d &lt; %d<span class="pl-pds">&quot;</span></span>, nModifiedFees, mempoolRejectFee));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC593" class="react-file-line html-div" data-testid="code-cell" data-line-number="593" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC594" class="react-file-line html-div" data-testid="code-cell" data-line-number="594" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC595" class="react-file-line html-div" data-testid="code-cell" data-line-number="595" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> No transactions are allowed below minRelayTxFee except from disconnected blocks</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC596" class="react-file-line html-div" data-testid="code-cell" data-line-number="596" style="position:relative"> <span class="pl-k">if</span> (!bypass_limits &amp;&amp; nModifiedFees &lt; ::minRelayTxFee.<span class="pl-c1">GetFee</span>(nSize)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC597" class="react-file-line html-div" data-testid="code-cell" data-line-number="597" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_INSUFFICIENTFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>min relay fee not met<span class="pl-pds">&quot;</span></span>, <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%d &lt; %d<span class="pl-pds">&quot;</span></span>, nModifiedFees, ::minRelayTxFee.<span class="pl-c1">GetFee</span>(nSize)));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC598" class="react-file-line html-div" data-testid="code-cell" data-line-number="598" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC599" class="react-file-line html-div" data-testid="code-cell" data-line-number="599" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC600" class="react-file-line html-div" data-testid="code-cell" data-line-number="600" style="position:relative"> <span class="pl-k">if</span> (nAbsurdFee &amp;&amp; nFees &gt; nAbsurdFee)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC601" class="react-file-line html-div" data-testid="code-cell" data-line-number="601" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_NOT_STANDARD, <span class="pl-c1">false</span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC602" class="react-file-line html-div" data-testid="code-cell" data-line-number="602" style="position:relative"> REJECT_HIGHFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>absurdly-high-fee<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC603" class="react-file-line html-div" data-testid="code-cell" data-line-number="603" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%d &gt; %d<span class="pl-pds">&quot;</span></span>, nFees, nAbsurdFee));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC604" class="react-file-line html-div" data-testid="code-cell" data-line-number="604" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC605" class="react-file-line html-div" data-testid="code-cell" data-line-number="605" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Calculate in-mempool ancestors, up to a limit.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC606" class="react-file-line html-div" data-testid="code-cell" data-line-number="606" style="position:relative"> CTxMemPool::setEntries setAncestors;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC607" class="react-file-line html-div" data-testid="code-cell" data-line-number="607" style="position:relative"> <span class="pl-c1">size_t</span> nLimitAncestors = <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-limitancestorcount<span class="pl-pds">&quot;</span></span>, DEFAULT_ANCESTOR_LIMIT);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC608" class="react-file-line html-div" data-testid="code-cell" data-line-number="608" style="position:relative"> <span class="pl-c1">size_t</span> nLimitAncestorSize = <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-limitancestorsize<span class="pl-pds">&quot;</span></span>, DEFAULT_ANCESTOR_SIZE_LIMIT)*<span class="pl-c1">1000</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC609" class="react-file-line html-div" data-testid="code-cell" data-line-number="609" style="position:relative"> <span class="pl-c1">size_t</span> nLimitDescendants = <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-limitdescendantcount<span class="pl-pds">&quot;</span></span>, DEFAULT_DESCENDANT_LIMIT);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC610" class="react-file-line html-div" data-testid="code-cell" data-line-number="610" style="position:relative"> <span class="pl-c1">size_t</span> nLimitDescendantSize = <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-limitdescendantsize<span class="pl-pds">&quot;</span></span>, DEFAULT_DESCENDANT_SIZE_LIMIT)*<span class="pl-c1">1000</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC611" class="react-file-line html-div" data-testid="code-cell" data-line-number="611" style="position:relative"> std::string errString;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC612" class="react-file-line html-div" data-testid="code-cell" data-line-number="612" style="position:relative"> <span class="pl-k">if</span> (!pool.<span class="pl-c1">CalculateMemPoolAncestors</span>(entry, setAncestors, nLimitAncestors, nLimitAncestorSize, nLimitDescendants, nLimitDescendantSize, errString)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC613" class="react-file-line html-div" data-testid="code-cell" data-line-number="613" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>too-long-mempool-chain<span class="pl-pds">&quot;</span></span>, errString);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC614" class="react-file-line html-div" data-testid="code-cell" data-line-number="614" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC615" class="react-file-line html-div" data-testid="code-cell" data-line-number="615" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC616" class="react-file-line html-div" data-testid="code-cell" data-line-number="616" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> A transaction that spends outputs that would be replaced by it is invalid. Now</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC617" class="react-file-line html-div" data-testid="code-cell" data-line-number="617" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> that we have the set of all ancestors we can detect this</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC618" class="react-file-line html-div" data-testid="code-cell" data-line-number="618" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> pathological case by making sure setConflicts and setAncestors don&#039;t</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC619" class="react-file-line html-div" data-testid="code-cell" data-line-number="619" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> intersect.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC620" class="react-file-line html-div" data-testid="code-cell" data-line-number="620" style="position:relative"> <span class="pl-k">for</span> (CTxMemPool::txiter ancestorIt : setAncestors)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC621" class="react-file-line html-div" data-testid="code-cell" data-line-number="621" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC622" class="react-file-line html-div" data-testid="code-cell" data-line-number="622" style="position:relative"> <span class="pl-k">const</span> uint256 &amp;hashAncestor = ancestorIt-&gt;<span class="pl-c1">GetTx</span>().<span class="pl-c1">GetHash</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC623" class="react-file-line html-div" data-testid="code-cell" data-line-number="623" style="position:relative"> <span class="pl-k">if</span> (setConflicts.<span class="pl-c1">count</span>(hashAncestor))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC624" class="react-file-line html-div" data-testid="code-cell" data-line-number="624" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC625" class="react-file-line html-div" data-testid="code-cell" data-line-number="625" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::CONSENSUS, <span class="pl-c1">false</span>, REJECT_INVALID, <span class="pl-s"><span class="pl-pds">&quot;</span>bad-txns-spends-conflicting-tx<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC626" class="react-file-line html-div" data-testid="code-cell" data-line-number="626" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s spends conflicting transaction %s<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC627" class="react-file-line html-div" data-testid="code-cell" data-line-number="627" style="position:relative"> hash.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC628" class="react-file-line html-div" data-testid="code-cell" data-line-number="628" style="position:relative"> hashAncestor.<span class="pl-c1">ToString</span>()));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC629" class="react-file-line html-div" data-testid="code-cell" data-line-number="629" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC630" class="react-file-line html-div" data-testid="code-cell" data-line-number="630" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC631" class="react-file-line html-div" data-testid="code-cell" data-line-number="631" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC632" class="react-file-line html-div" data-testid="code-cell" data-line-number="632" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check if it&#039;s economically rational to mine this transaction rather</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC633" class="react-file-line html-div" data-testid="code-cell" data-line-number="633" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> than the ones it replaces.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC634" class="react-file-line html-div" data-testid="code-cell" data-line-number="634" style="position:relative"> CAmount nConflictingFees = <span class="pl-c1">0</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC635" class="react-file-line html-div" data-testid="code-cell" data-line-number="635" style="position:relative"> <span class="pl-c1">size_t</span> nConflictingSize = <span class="pl-c1">0</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC636" class="react-file-line html-div" data-testid="code-cell" data-line-number="636" style="position:relative"> <span class="pl-c1">uint64_t</span> nConflictingCount = <span class="pl-c1">0</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC637" class="react-file-line html-div" data-testid="code-cell" data-line-number="637" style="position:relative"> CTxMemPool::setEntries allConflicting;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC638" class="react-file-line html-div" data-testid="code-cell" data-line-number="638" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC639" class="react-file-line html-div" data-testid="code-cell" data-line-number="639" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> If we don&#039;t hold the lock allConflicting might be incomplete; the</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC640" class="react-file-line html-div" data-testid="code-cell" data-line-number="640" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> subsequent RemoveStaged() and addUnchecked() calls don&#039;t guarantee</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC641" class="react-file-line html-div" data-testid="code-cell" data-line-number="641" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> mempool consistency for us.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC642" class="react-file-line html-div" data-testid="code-cell" data-line-number="642" style="position:relative"> <span class="pl-k">const</span> <span class="pl-k">bool</span> <span class="pl-smi">fReplacementTransaction</span> = setConflicts.<span class="pl-c1">size</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC643" class="react-file-line html-div" data-testid="code-cell" data-line-number="643" style="position:relative"> <span class="pl-k">if</span> (<span class="pl-smi">fReplacementTransaction</span>)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC644" class="react-file-line html-div" data-testid="code-cell" data-line-number="644" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC645" class="react-file-line html-div" data-testid="code-cell" data-line-number="645" style="position:relative"> CFeeRate <span class="pl-smi">newFeeRate</span>(nModifiedFees, nSize);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC646" class="react-file-line html-div" data-testid="code-cell" data-line-number="646" style="position:relative"> std::set&lt;uint256&gt; setConflictsParents;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC647" class="react-file-line html-div" data-testid="code-cell" data-line-number="647" style="position:relative"> <span class="pl-k">const</span> <span class="pl-k">int</span> maxDescendantsToVisit = <span class="pl-c1">100</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC648" class="react-file-line html-div" data-testid="code-cell" data-line-number="648" style="position:relative"> <span class="pl-k">const</span> CTxMemPool::setEntries setIterConflicting = pool.<span class="pl-c1">GetIterSet</span>(setConflicts);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC649" class="react-file-line html-div" data-testid="code-cell" data-line-number="649" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> <span class="pl-k">auto</span>&amp; mi : setIterConflicting) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC650" class="react-file-line html-div" data-testid="code-cell" data-line-number="650" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Don&#039;t allow the replacement to reduce the feerate of the</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC651" class="react-file-line html-div" data-testid="code-cell" data-line-number="651" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> mempool.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC652" class="react-file-line html-div" data-testid="code-cell" data-line-number="652" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC653" class="react-file-line html-div" data-testid="code-cell" data-line-number="653" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> We usually don&#039;t want to accept replacements with lower</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC654" class="react-file-line html-div" data-testid="code-cell" data-line-number="654" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> feerates than what they replaced as that would lower the</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC655" class="react-file-line html-div" data-testid="code-cell" data-line-number="655" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> feerate of the next block. Requiring that the feerate always</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC656" class="react-file-line html-div" data-testid="code-cell" data-line-number="656" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> be increased is also an easy-to-reason about way to prevent</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC657" class="react-file-line html-div" data-testid="code-cell" data-line-number="657" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> DoS attacks via replacements.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC658" class="react-file-line html-div" data-testid="code-cell" data-line-number="658" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC659" class="react-file-line html-div" data-testid="code-cell" data-line-number="659" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> We only consider the feerates of transactions being directly</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC660" class="react-file-line html-div" data-testid="code-cell" data-line-number="660" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> replaced, not their indirect descendants. While that does</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC661" class="react-file-line html-div" data-testid="code-cell" data-line-number="661" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> mean high feerate children are ignored when deciding whether</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC662" class="react-file-line html-div" data-testid="code-cell" data-line-number="662" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> or not to replace, we do require the replacement to pay more</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC663" class="react-file-line html-div" data-testid="code-cell" data-line-number="663" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> overall fees too, mitigating most cases.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC664" class="react-file-line html-div" data-testid="code-cell" data-line-number="664" style="position:relative"> CFeeRate <span class="pl-smi">oldFeeRate</span>(mi-&gt;<span class="pl-c1">GetModifiedFee</span>(), mi-&gt;<span class="pl-c1">GetTxSize</span>());</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC665" class="react-file-line html-div" data-testid="code-cell" data-line-number="665" style="position:relative"> <span class="pl-k">if</span> (newFeeRate &lt;= oldFeeRate)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC666" class="react-file-line html-div" data-testid="code-cell" data-line-number="666" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC667" class="react-file-line html-div" data-testid="code-cell" data-line-number="667" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_INSUFFICIENTFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>insufficient fee<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC668" class="react-file-line html-div" data-testid="code-cell" data-line-number="668" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rejecting replacement %s; new feerate %s &lt;= old feerate %s<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC669" class="react-file-line html-div" data-testid="code-cell" data-line-number="669" style="position:relative"> hash.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC670" class="react-file-line html-div" data-testid="code-cell" data-line-number="670" style="position:relative"> newFeeRate.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC671" class="react-file-line html-div" data-testid="code-cell" data-line-number="671" style="position:relative"> oldFeeRate.<span class="pl-c1">ToString</span>()));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC672" class="react-file-line html-div" data-testid="code-cell" data-line-number="672" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC673" class="react-file-line html-div" data-testid="code-cell" data-line-number="673" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC674" class="react-file-line html-div" data-testid="code-cell" data-line-number="674" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> CTxIn &amp;txin : mi-&gt;<span class="pl-c1">GetTx</span>().<span class="pl-smi">vin</span>)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC675" class="react-file-line html-div" data-testid="code-cell" data-line-number="675" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC676" class="react-file-line html-div" data-testid="code-cell" data-line-number="676" style="position:relative"> setConflictsParents.<span class="pl-c1">insert</span>(txin.<span class="pl-smi">prevout</span>.<span class="pl-smi">hash</span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC677" class="react-file-line html-div" data-testid="code-cell" data-line-number="677" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC678" class="react-file-line html-div" data-testid="code-cell" data-line-number="678" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC679" class="react-file-line html-div" data-testid="code-cell" data-line-number="679" style="position:relative"> nConflictingCount += mi-&gt;<span class="pl-c1">GetCountWithDescendants</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC680" class="react-file-line html-div" data-testid="code-cell" data-line-number="680" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC681" class="react-file-line html-div" data-testid="code-cell" data-line-number="681" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> This potentially overestimates the number of actual descendants</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC682" class="react-file-line html-div" data-testid="code-cell" data-line-number="682" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> but we just want to be conservative to avoid doing too much</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC683" class="react-file-line html-div" data-testid="code-cell" data-line-number="683" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> work.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC684" class="react-file-line html-div" data-testid="code-cell" data-line-number="684" style="position:relative"> <span class="pl-k">if</span> (nConflictingCount &lt;= maxDescendantsToVisit) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC685" class="react-file-line html-div" data-testid="code-cell" data-line-number="685" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> If not too many to replace, then calculate the set of</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC686" class="react-file-line html-div" data-testid="code-cell" data-line-number="686" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> transactions that would have to be evicted</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC687" class="react-file-line html-div" data-testid="code-cell" data-line-number="687" style="position:relative"> <span class="pl-k">for</span> (CTxMemPool::txiter it : setIterConflicting) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC688" class="react-file-line html-div" data-testid="code-cell" data-line-number="688" style="position:relative"> pool.<span class="pl-c1">CalculateDescendants</span>(it, allConflicting);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC689" class="react-file-line html-div" data-testid="code-cell" data-line-number="689" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC690" class="react-file-line html-div" data-testid="code-cell" data-line-number="690" style="position:relative"> <span class="pl-k">for</span> (CTxMemPool::txiter it : allConflicting) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC691" class="react-file-line html-div" data-testid="code-cell" data-line-number="691" style="position:relative"> nConflictingFees += it-&gt;<span class="pl-c1">GetModifiedFee</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC692" class="react-file-line html-div" data-testid="code-cell" data-line-number="692" style="position:relative"> nConflictingSize += it-&gt;<span class="pl-c1">GetTxSize</span>();</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC693" class="react-file-line html-div" data-testid="code-cell" data-line-number="693" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC694" class="react-file-line html-div" data-testid="code-cell" data-line-number="694" style="position:relative"> } <span class="pl-k">else</span> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC695" class="react-file-line html-div" data-testid="code-cell" data-line-number="695" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>too many potential replacements<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC696" class="react-file-line html-div" data-testid="code-cell" data-line-number="696" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rejecting replacement %s; too many potential replacements (%d &gt; %d)<span class="pl-cce">\n</span><span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC697" class="react-file-line html-div" data-testid="code-cell" data-line-number="697" style="position:relative"> hash.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC698" class="react-file-line html-div" data-testid="code-cell" data-line-number="698" style="position:relative"> nConflictingCount,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC699" class="react-file-line html-div" data-testid="code-cell" data-line-number="699" style="position:relative"> maxDescendantsToVisit));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC700" class="react-file-line html-div" data-testid="code-cell" data-line-number="700" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC701" class="react-file-line html-div" data-testid="code-cell" data-line-number="701" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC702" class="react-file-line html-div" data-testid="code-cell" data-line-number="702" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">unsigned</span> <span class="pl-k">int</span> j = <span class="pl-c1">0</span>; j &lt; tx.<span class="pl-smi">vin</span>.<span class="pl-c1">size</span>(); j++)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC703" class="react-file-line html-div" data-testid="code-cell" data-line-number="703" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC704" class="react-file-line html-div" data-testid="code-cell" data-line-number="704" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> We don&#039;t want to accept replacements that require low</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC705" class="react-file-line html-div" data-testid="code-cell" data-line-number="705" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> feerate junk to be mined first. Ideally we&#039;d keep track of</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC706" class="react-file-line html-div" data-testid="code-cell" data-line-number="706" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> the ancestor feerates and make the decision based on that,</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC707" class="react-file-line html-div" data-testid="code-cell" data-line-number="707" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> but for now requiring all new inputs to be confirmed works.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC708" class="react-file-line html-div" data-testid="code-cell" data-line-number="708" style="position:relative"> <span class="pl-k">if</span> (!setConflictsParents.<span class="pl-c1">count</span>(tx.<span class="pl-smi">vin</span>[j].<span class="pl-smi">prevout</span>.<span class="pl-smi">hash</span>))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC709" class="react-file-line html-div" data-testid="code-cell" data-line-number="709" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC710" class="react-file-line html-div" data-testid="code-cell" data-line-number="710" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Rather than check the UTXO set - potentially expensive -</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC711" class="react-file-line html-div" data-testid="code-cell" data-line-number="711" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> it&#039;s cheaper to just check if the new input refers to a</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC712" class="react-file-line html-div" data-testid="code-cell" data-line-number="712" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> tx that&#039;s in the mempool.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC713" class="react-file-line html-div" data-testid="code-cell" data-line-number="713" style="position:relative"> <span class="pl-k">if</span> (pool.<span class="pl-c1">exists</span>(tx.<span class="pl-smi">vin</span>[j].<span class="pl-smi">prevout</span>.<span class="pl-smi">hash</span>)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC714" class="react-file-line html-div" data-testid="code-cell" data-line-number="714" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_NONSTANDARD, <span class="pl-s"><span class="pl-pds">&quot;</span>replacement-adds-unconfirmed<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC715" class="react-file-line html-div" data-testid="code-cell" data-line-number="715" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>replacement %s adds unconfirmed input, idx %d<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC716" class="react-file-line html-div" data-testid="code-cell" data-line-number="716" style="position:relative"> hash.<span class="pl-c1">ToString</span>(), j));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC717" class="react-file-line html-div" data-testid="code-cell" data-line-number="717" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC718" class="react-file-line html-div" data-testid="code-cell" data-line-number="718" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC719" class="react-file-line html-div" data-testid="code-cell" data-line-number="719" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC720" class="react-file-line html-div" data-testid="code-cell" data-line-number="720" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC721" class="react-file-line html-div" data-testid="code-cell" data-line-number="721" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> The replacement must pay greater fees than the transactions it</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC722" class="react-file-line html-div" data-testid="code-cell" data-line-number="722" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> replaces - if we did the bandwidth used by those conflicting</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC723" class="react-file-line html-div" data-testid="code-cell" data-line-number="723" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> transactions would not be paid for.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC724" class="react-file-line html-div" data-testid="code-cell" data-line-number="724" style="position:relative"> <span class="pl-k">if</span> (nModifiedFees &lt; nConflictingFees)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC725" class="react-file-line html-div" data-testid="code-cell" data-line-number="725" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC726" class="react-file-line html-div" data-testid="code-cell" data-line-number="726" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_INSUFFICIENTFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>insufficient fee<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC727" class="react-file-line html-div" data-testid="code-cell" data-line-number="727" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rejecting replacement %s, less fees than conflicting txs; %s &lt; %s<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC728" class="react-file-line html-div" data-testid="code-cell" data-line-number="728" style="position:relative"> hash.<span class="pl-c1">ToString</span>(), <span class="pl-c1">FormatMoney</span>(nModifiedFees), <span class="pl-c1">FormatMoney</span>(nConflictingFees)));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC729" class="react-file-line html-div" data-testid="code-cell" data-line-number="729" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC730" class="react-file-line html-div" data-testid="code-cell" data-line-number="730" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC731" class="react-file-line html-div" data-testid="code-cell" data-line-number="731" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Finally in addition to paying more fees than the conflicts the</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC732" class="react-file-line html-div" data-testid="code-cell" data-line-number="732" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> new transaction must pay for its own bandwidth.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC733" class="react-file-line html-div" data-testid="code-cell" data-line-number="733" style="position:relative"> CAmount nDeltaFees = nModifiedFees - nConflictingFees;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC734" class="react-file-line html-div" data-testid="code-cell" data-line-number="734" style="position:relative"> <span class="pl-k">if</span> (nDeltaFees &lt; ::incrementalRelayFee.<span class="pl-c1">GetFee</span>(nSize))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC735" class="react-file-line html-div" data-testid="code-cell" data-line-number="735" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC736" class="react-file-line html-div" data-testid="code-cell" data-line-number="736" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_INSUFFICIENTFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>insufficient fee<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC737" class="react-file-line html-div" data-testid="code-cell" data-line-number="737" style="position:relative"> <span class="pl-c1">strprintf</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rejecting replacement %s, not enough additional fees to relay; %s &lt; %s<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC738" class="react-file-line html-div" data-testid="code-cell" data-line-number="738" style="position:relative"> hash.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC739" class="react-file-line html-div" data-testid="code-cell" data-line-number="739" style="position:relative"> <span class="pl-c1">FormatMoney</span>(nDeltaFees),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC740" class="react-file-line html-div" data-testid="code-cell" data-line-number="740" style="position:relative"> <span class="pl-c1">FormatMoney</span>(::incrementalRelayFee.<span class="pl-c1">GetFee</span>(nSize))));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC741" class="react-file-line html-div" data-testid="code-cell" data-line-number="741" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC742" class="react-file-line html-div" data-testid="code-cell" data-line-number="742" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC743" class="react-file-line html-div" data-testid="code-cell" data-line-number="743" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC744" class="react-file-line html-div" data-testid="code-cell" data-line-number="744" style="position:relative"> <span class="pl-k">constexpr</span> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> scriptVerifyFlags = STANDARD_SCRIPT_VERIFY_FLAGS;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC745" class="react-file-line html-div" data-testid="code-cell" data-line-number="745" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC746" class="react-file-line html-div" data-testid="code-cell" data-line-number="746" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check against previous transactions</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC747" class="react-file-line html-div" data-testid="code-cell" data-line-number="747" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> This is done last to help prevent CPU exhaustion denial-of-service attacks.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC748" class="react-file-line html-div" data-testid="code-cell" data-line-number="748" style="position:relative"> PrecomputedTransactionData <span class="pl-smi">txdata</span>(tx);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC749" class="react-file-line html-div" data-testid="code-cell" data-line-number="749" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">CheckInputs</span>(tx, state, view, <span class="pl-c1">true</span>, scriptVerifyFlags, <span class="pl-c1">true</span>, <span class="pl-c1">false</span>, txdata)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC750" class="react-file-line html-div" data-testid="code-cell" data-line-number="750" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> SCRIPT_VERIFY_CLEANSTACK requires SCRIPT_VERIFY_WITNESS, so we</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC751" class="react-file-line html-div" data-testid="code-cell" data-line-number="751" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> need to turn both off, and compare against just turning off CLEANSTACK</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC752" class="react-file-line html-div" data-testid="code-cell" data-line-number="752" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> to see if the failure is specifically due to witness validation.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC753" class="react-file-line html-div" data-testid="code-cell" data-line-number="753" style="position:relative"> CValidationState stateDummy; <span class="pl-c"><span class="pl-c">//</span> Want reported failures to be from first CheckInputs</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC754" class="react-file-line html-div" data-testid="code-cell" data-line-number="754" style="position:relative"> <span class="pl-k">if</span> (!tx.<span class="pl-c1">HasWitness</span>() &amp;&amp; <span class="pl-c1">CheckInputs</span>(tx, stateDummy, view, <span class="pl-c1">true</span>, scriptVerifyFlags &amp; ~(SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_CLEANSTACK), <span class="pl-c1">true</span>, <span class="pl-c1">false</span>, txdata) &amp;&amp;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC755" class="react-file-line html-div" data-testid="code-cell" data-line-number="755" style="position:relative"> !<span class="pl-c1">CheckInputs</span>(tx, stateDummy, view, <span class="pl-c1">true</span>, scriptVerifyFlags &amp; ~SCRIPT_VERIFY_CLEANSTACK, <span class="pl-c1">true</span>, <span class="pl-c1">false</span>, txdata)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC756" class="react-file-line html-div" data-testid="code-cell" data-line-number="756" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Only the witness is missing, so the transaction itself may be fine.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC757" class="react-file-line html-div" data-testid="code-cell" data-line-number="757" style="position:relative"> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_WITNESS_MUTATED, <span class="pl-c1">false</span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC758" class="react-file-line html-div" data-testid="code-cell" data-line-number="758" style="position:relative"> state.<span class="pl-c1">GetRejectCode</span>(), state.<span class="pl-c1">GetRejectReason</span>(), state.<span class="pl-c1">GetDebugMessage</span>());</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC759" class="react-file-line html-div" data-testid="code-cell" data-line-number="759" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC760" class="react-file-line html-div" data-testid="code-cell" data-line-number="760" style="position:relative"> <span class="pl-c1">assert</span>(<span class="pl-c1">IsTransactionReason</span>(state.<span class="pl-c1">GetReason</span>()));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC761" class="react-file-line html-div" data-testid="code-cell" data-line-number="761" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>; <span class="pl-c"><span class="pl-c">//</span> state filled in by CheckInputs</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC762" class="react-file-line html-div" data-testid="code-cell" data-line-number="762" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC763" class="react-file-line html-div" data-testid="code-cell" data-line-number="763" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC764" class="react-file-line html-div" data-testid="code-cell" data-line-number="764" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check again against the current block tip&#039;s script verification</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC765" class="react-file-line html-div" data-testid="code-cell" data-line-number="765" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> flags to cache our script execution flags. This is, of course,</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC766" class="react-file-line html-div" data-testid="code-cell" data-line-number="766" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> useless if the next block has different script flags from the</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC767" class="react-file-line html-div" data-testid="code-cell" data-line-number="767" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> previous one, but because the cache tracks script flags for us it</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC768" class="react-file-line html-div" data-testid="code-cell" data-line-number="768" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> will auto-invalidate and we&#039;ll just have a few blocks of extra</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC769" class="react-file-line html-div" data-testid="code-cell" data-line-number="769" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> misses on soft-fork activation.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC770" class="react-file-line html-div" data-testid="code-cell" data-line-number="770" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC771" class="react-file-line html-div" data-testid="code-cell" data-line-number="771" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> This is also useful in case of bugs in the standard flags that cause</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC772" class="react-file-line html-div" data-testid="code-cell" data-line-number="772" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> transactions to pass as valid when they&#039;re actually invalid. For</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC773" class="react-file-line html-div" data-testid="code-cell" data-line-number="773" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> instance the STRICTENC flag was incorrectly allowing certain</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC774" class="react-file-line html-div" data-testid="code-cell" data-line-number="774" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> CHECKSIG NOT scripts to pass, even though they were invalid.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC775" class="react-file-line html-div" data-testid="code-cell" data-line-number="775" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC776" class="react-file-line html-div" data-testid="code-cell" data-line-number="776" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> There is a similar check in CreateNewBlock() to prevent creating</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC777" class="react-file-line html-div" data-testid="code-cell" data-line-number="777" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> invalid blocks (using TestBlockValidity), however allowing such</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC778" class="react-file-line html-div" data-testid="code-cell" data-line-number="778" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> transactions into the mempool can be exploited as a DoS attack.</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC779" class="react-file-line html-div" data-testid="code-cell" data-line-number="779" style="position:relative"> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> currentBlockScriptVerifyFlags = <span class="pl-c1">GetBlockScriptFlags</span>(::<span class="pl-c1">ChainActive</span>().<span class="pl-c1">Tip</span>(), chainparams.<span class="pl-c1">GetConsensus</span>());</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC780" class="react-file-line html-div" data-testid="code-cell" data-line-number="780" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">CheckInputsFromMempoolAndCache</span>(tx, state, view, pool, currentBlockScriptVerifyFlags, <span class="pl-c1">true</span>, txdata)) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC781" class="react-file-line html-div" data-testid="code-cell" data-line-number="781" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: BUG! PLEASE REPORT THIS! CheckInputs failed against latest-block but not STANDARD flags %s, %s<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC782" class="react-file-line html-div" data-testid="code-cell" data-line-number="782" style="position:relative"> __func__, hash.<span class="pl-c1">ToString</span>(), <span class="pl-c1">FormatStateMessage</span>(state));</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC783" class="react-file-line html-div" data-testid="code-cell" data-line-number="783" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC784" class="react-file-line html-div" data-testid="code-cell" data-line-number="784" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC785" class="react-file-line html-div" data-testid="code-cell" data-line-number="785" style="position:relative"> <span class="pl-k">if</span> (test_accept) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC786" class="react-file-line html-div" data-testid="code-cell" data-line-number="786" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Tx was accepted, but not added</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC787" class="react-file-line html-div" data-testid="code-cell" data-line-number="787" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC788" class="react-file-line html-div" data-testid="code-cell" data-line-number="788" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC789" class="react-file-line html-div" data-testid="code-cell" data-line-number="789" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC790" class="react-file-line html-div" data-testid="code-cell" data-line-number="790" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Remove conflicting transactions from the mempool</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC791" class="react-file-line html-div" data-testid="code-cell" data-line-number="791" style="position:relative"> <span class="pl-k">for</span> (CTxMemPool::txiter it : allConflicting)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC792" class="react-file-line html-div" data-testid="code-cell" data-line-number="792" style="position:relative"> {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC793" class="react-file-line html-div" data-testid="code-cell" data-line-number="793" style="position:relative"> <span class="pl-c1">LogPrint</span>(BCLog::MEMPOOL, <span class="pl-s"><span class="pl-pds">&quot;</span>replacing tx %s with %s for %s BTC additional fees, %d delta bytes<span class="pl-cce">\n</span><span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC794" class="react-file-line html-div" data-testid="code-cell" data-line-number="794" style="position:relative"> it-&gt;<span class="pl-c1">GetTx</span>().<span class="pl-c1">GetHash</span>().<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC795" class="react-file-line html-div" data-testid="code-cell" data-line-number="795" style="position:relative"> hash.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC796" class="react-file-line html-div" data-testid="code-cell" data-line-number="796" style="position:relative"> <span class="pl-c1">FormatMoney</span>(nModifiedFees - nConflictingFees),</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC797" class="react-file-line html-div" data-testid="code-cell" data-line-number="797" style="position:relative"> (<span class="pl-k">int</span>)nSize - (<span class="pl-k">int</span>)nConflictingSize);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC798" class="react-file-line html-div" data-testid="code-cell" data-line-number="798" style="position:relative"> <span class="pl-k">if</span> (plTxnReplaced)</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC799" class="react-file-line html-div" data-testid="code-cell" data-line-number="799" style="position:relative"> plTxnReplaced-&gt;<span class="pl-c1">push_back</span>(it-&gt;<span class="pl-c1">GetSharedTx</span>());</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC800" class="react-file-line html-div" data-testid="code-cell" data-line-number="800" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC801" class="react-file-line html-div" data-testid="code-cell" data-line-number="801" style="position:relative"> pool.<span class="pl-c1">RemoveStaged</span>(allConflicting, <span class="pl-c1">false</span>, MemPoolRemovalReason::REPLACED);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC802" class="react-file-line html-div" data-testid="code-cell" data-line-number="802" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC803" class="react-file-line html-div" data-testid="code-cell" data-line-number="803" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> This transaction should only count for fee estimation if:</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC804" class="react-file-line html-div" data-testid="code-cell" data-line-number="804" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> - it isn&#039;t a BIP 125 replacement transaction (may not be widely supported)</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC805" class="react-file-line html-div" data-testid="code-cell" data-line-number="805" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> - it&#039;s not being re-added during a reorg which bypasses typical mempool fee limits</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC806" class="react-file-line html-div" data-testid="code-cell" data-line-number="806" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> - the node is not behind</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC807" class="react-file-line html-div" data-testid="code-cell" data-line-number="807" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> - the transaction is not dependent on any other transactions in the mempool</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC808" class="react-file-line html-div" data-testid="code-cell" data-line-number="808" style="position:relative"> <span class="pl-k">bool</span> validForFeeEstimation = !<span class="pl-smi">fReplacementTransaction</span> &amp;&amp; !bypass_limits &amp;&amp; <span class="pl-c1">IsCurrentForFeeEstimation</span>() &amp;&amp; pool.<span class="pl-c1">HasNoInputsOf</span>(tx);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC809" class="react-file-line html-div" data-testid="code-cell" data-line-number="809" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC810" class="react-file-line html-div" data-testid="code-cell" data-line-number="810" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Store transaction in memory</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC811" class="react-file-line html-div" data-testid="code-cell" data-line-number="811" style="position:relative"> pool.<span class="pl-c1">addUnchecked</span>(entry, setAncestors, validForFeeEstimation);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC812" class="react-file-line html-div" data-testid="code-cell" data-line-number="812" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC813" class="react-file-line html-div" data-testid="code-cell" data-line-number="813" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> trim mempool and check if tx was trimmed</span></div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC814" class="react-file-line html-div" data-testid="code-cell" data-line-number="814" style="position:relative"> <span class="pl-k">if</span> (!bypass_limits) {</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC815" class="react-file-line html-div" data-testid="code-cell" data-line-number="815" style="position:relative"> <span class="pl-c1">LimitMempoolSize</span>(pool, <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-maxmempool<span class="pl-pds">&quot;</span></span>, DEFAULT_MAX_MEMPOOL_SIZE) * <span class="pl-c1">1000000</span>, <span class="pl-smi">gArgs</span>.<span class="pl-c1">GetArg</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>-mempoolexpiry<span class="pl-pds">&quot;</span></span>, DEFAULT_MEMPOOL_EXPIRY) * <span class="pl-c1">60</span> * <span class="pl-c1">60</span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC816" class="react-file-line html-div" data-testid="code-cell" data-line-number="816" style="position:relative"> <span class="pl-k">if</span> (!pool.<span class="pl-c1">exists</span>(hash))</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC817" class="react-file-line html-div" data-testid="code-cell" data-line-number="817" style="position:relative"> <span class="pl-k">return</span> state.<span class="pl-c1">Invalid</span>(ValidationInvalidReason::TX_MEMPOOL_POLICY, <span class="pl-c1">false</span>, REJECT_INSUFFICIENTFEE, <span class="pl-s"><span class="pl-pds">&quot;</span>mempool full<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC818" class="react-file-line html-div" data-testid="code-cell" data-line-number="818" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC819" class="react-file-line html-div" data-testid="code-cell" data-line-number="819" style="position:relative"> }</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC820" class="react-file-line html-div" data-testid="code-cell" data-line-number="820" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC821" class="react-file-line html-div" data-testid="code-cell" data-line-number="821" style="position:relative"> <span class="pl-c1">GetMainSignals</span>().<span class="pl-c1">TransactionAddedToMempool</span>(ptx);</div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC822" class="react-file-line html-div" data-testid="code-cell" data-line-number="822" style="position:relative"> </div></div></div><div class="child-of-line-427 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC823" class="react-file-line html-div" data-testid="code-cell" data-line-number="823" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC824" class="react-file-line html-div" data-testid="code-cell" data-line-number="824" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC825" class="react-file-line html-div" data-testid="code-cell" data-line-number="825" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC826" class="react-file-line html-div" data-testid="code-cell" data-line-number="826" style="position:relative"><span class="pl-c"><span class="pl-c">/*</span>* (try to) add transaction to memory pool with a specified acceptance time *<span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC827" class="react-file-line html-div" data-testid="code-cell" data-line-number="827" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">bool</span> <span class="pl-en">AcceptToMemoryPoolWithTime</span>(<span class="pl-k">const</span> CChainParams&amp; chainparams, CTxMemPool&amp; pool, CValidationState &amp;state, <span class="pl-k">const</span> CTransactionRef &amp;tx,</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC828" class="react-file-line html-div" data-testid="code-cell" data-line-number="828" style="position:relative"> <span class="pl-k">bool</span>* pfMissingInputs, <span class="pl-c1">int64_t</span> nAcceptTime, std::list&lt;CTransactionRef&gt;* plTxnReplaced,</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC829" class="react-file-line html-div" data-testid="code-cell" data-line-number="829" style="position:relative"> <span class="pl-k">bool</span> bypass_limits, <span class="pl-k">const</span> CAmount nAbsurdFee, <span class="pl-k">bool</span> test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main)</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC830" class="react-file-line html-div" data-testid="code-cell" data-line-number="830" style="position:relative">{</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC831" class="react-file-line html-div" data-testid="code-cell" data-line-number="831" style="position:relative"> std::vector&lt;COutPoint&gt; coins_to_uncache;</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC832" class="react-file-line html-div" data-testid="code-cell" data-line-number="832" style="position:relative"> <span class="pl-k">bool</span> res = <span class="pl-c1">AcceptToMemoryPoolWorker</span>(chainparams, pool, state, tx, pfMissingInputs, nAcceptTime, plTxnReplaced, bypass_limits, nAbsurdFee, coins_to_uncache, test_accept);</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC833" class="react-file-line html-div" data-testid="code-cell" data-line-number="833" style="position:relative"> <span class="pl-k">if</span> (!res) {</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC834" class="react-file-line html-div" data-testid="code-cell" data-line-number="834" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Remove coins that were not present in the coins cache before calling ATMPW;</span></div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC835" class="react-file-line html-div" data-testid="code-cell" data-line-number="835" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> this is to prevent memory DoS in case we receive a large number of</span></div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC836" class="react-file-line html-div" data-testid="code-cell" data-line-number="836" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> invalid transactions that attempt to overrun the in-memory coins cache</span></div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC837" class="react-file-line html-div" data-testid="code-cell" data-line-number="837" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> (`CCoinsViewCache::cacheCoins`).</span></div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC838" class="react-file-line html-div" data-testid="code-cell" data-line-number="838" style="position:relative"> </div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC839" class="react-file-line html-div" data-testid="code-cell" data-line-number="839" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> COutPoint&amp; hashTx : coins_to_uncache)</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC840" class="react-file-line html-div" data-testid="code-cell" data-line-number="840" style="position:relative"> pcoinsTip-&gt;<span class="pl-c1">Uncache</span>(hashTx);</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC841" class="react-file-line html-div" data-testid="code-cell" data-line-number="841" style="position:relative"> }</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC842" class="react-file-line html-div" data-testid="code-cell" data-line-number="842" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> After we&#039;ve (potentially) uncached entries, ensure our coins cache is still within its size limits</span></div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC843" class="react-file-line html-div" data-testid="code-cell" data-line-number="843" style="position:relative"> CValidationState stateDummy;</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC844" class="react-file-line html-div" data-testid="code-cell" data-line-number="844" style="position:relative"> <span class="pl-en">::ChainstateActive</span>().FlushStateToDisk(chainparams, stateDummy, FlushStateMode::PERIODIC);</div></div></div><div class="child-of-line-828 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC845" class="react-file-line html-div" data-testid="code-cell" data-line-number="845" style="position:relative"> <span class="pl-k">return</span> res;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC846" class="react-file-line html-div" data-testid="code-cell" data-line-number="846" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC847" class="react-file-line html-div" data-testid="code-cell" data-line-number="847" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC848" class="react-file-line html-div" data-testid="code-cell" data-line-number="848" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">AcceptToMemoryPool</span>(CTxMemPool&amp; pool, CValidationState &amp;state, <span class="pl-k">const</span> CTransactionRef &amp;tx,</div></div></div><div class="child-of-line-847 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC849" class="react-file-line html-div" data-testid="code-cell" data-line-number="849" style="position:relative"> <span class="pl-k">bool</span>* pfMissingInputs, std::list&lt;CTransactionRef&gt;* plTxnReplaced,</div></div></div><div class="child-of-line-847 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC850" class="react-file-line html-div" data-testid="code-cell" data-line-number="850" style="position:relative"> <span class="pl-k">bool</span> bypass_limits, <span class="pl-k">const</span> CAmount nAbsurdFee, <span class="pl-k">bool</span> test_accept)</div></div></div><div class="child-of-line-847 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC851" class="react-file-line html-div" data-testid="code-cell" data-line-number="851" style="position:relative">{</div></div></div><div class="child-of-line-847 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC852" class="react-file-line html-div" data-testid="code-cell" data-line-number="852" style="position:relative"> <span class="pl-k">const</span> CChainParams&amp; chainparams = <span class="pl-c1">Params</span>();</div></div></div><div class="child-of-line-847 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC853" class="react-file-line html-div" data-testid="code-cell" data-line-number="853" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">AcceptToMemoryPoolWithTime</span>(chainparams, pool, state, tx, pfMissingInputs, <span class="pl-c1">GetTime</span>(), plTxnReplaced, bypass_limits, nAbsurdFee, test_accept);</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC854" class="react-file-line html-div" data-testid="code-cell" data-line-number="854" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC855" class="react-file-line html-div" data-testid="code-cell" data-line-number="855" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC856" class="react-file-line html-div" data-testid="code-cell" data-line-number="856" style="position:relative"><span class="pl-c"><span class="pl-c">/*</span>*</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC857" class="react-file-line html-div" data-testid="code-cell" data-line-number="857" style="position:relative"><span class="pl-c"> * Return transaction in txOut, and if it was found inside a block, its hash is placed in hashBlock.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC858" class="react-file-line html-div" data-testid="code-cell" data-line-number="858" style="position:relative"><span class="pl-c"> * If blockIndex is provided, the transaction is fetched from the corresponding block.</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC859" class="react-file-line html-div" data-testid="code-cell" data-line-number="859" style="position:relative"><span class="pl-c"> <span class="pl-c">*/</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC860" class="react-file-line html-div" data-testid="code-cell" data-line-number="860" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">GetTransaction</span>(<span class="pl-k">const</span> uint256&amp; hash, CTransactionRef&amp; txOut, <span class="pl-k">const</span> Consensus::Params&amp; consensusParams, uint256&amp; hashBlock, <span class="pl-k">const</span> CBlockIndex* <span class="pl-k">const</span> block_index)</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC861" class="react-file-line html-div" data-testid="code-cell" data-line-number="861" style="position:relative">{</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC862" class="react-file-line html-div" data-testid="code-cell" data-line-number="862" style="position:relative"> <span class="pl-c1">LOCK</span>(cs_main);</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC863" class="react-file-line html-div" data-testid="code-cell" data-line-number="863" style="position:relative"> </div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC864" class="react-file-line html-div" data-testid="code-cell" data-line-number="864" style="position:relative"> <span class="pl-k">if</span> (!block_index) {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC865" class="react-file-line html-div" data-testid="code-cell" data-line-number="865" style="position:relative"> CTransactionRef ptx = mempool.<span class="pl-c1">get</span>(hash);</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC866" class="react-file-line html-div" data-testid="code-cell" data-line-number="866" style="position:relative"> <span class="pl-k">if</span> (ptx) {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC867" class="react-file-line html-div" data-testid="code-cell" data-line-number="867" style="position:relative"> txOut = ptx;</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC868" class="react-file-line html-div" data-testid="code-cell" data-line-number="868" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC869" class="react-file-line html-div" data-testid="code-cell" data-line-number="869" style="position:relative"> }</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC870" class="react-file-line html-div" data-testid="code-cell" data-line-number="870" style="position:relative"> </div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC871" class="react-file-line html-div" data-testid="code-cell" data-line-number="871" style="position:relative"> <span class="pl-k">if</span> (g_txindex) {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC872" class="react-file-line html-div" data-testid="code-cell" data-line-number="872" style="position:relative"> <span class="pl-k">return</span> g_txindex-&gt;<span class="pl-c1">FindTx</span>(hash, hashBlock, txOut);</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC873" class="react-file-line html-div" data-testid="code-cell" data-line-number="873" style="position:relative"> }</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC874" class="react-file-line html-div" data-testid="code-cell" data-line-number="874" style="position:relative"> } <span class="pl-k">else</span> {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC875" class="react-file-line html-div" data-testid="code-cell" data-line-number="875" style="position:relative"> CBlock block;</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC876" class="react-file-line html-div" data-testid="code-cell" data-line-number="876" style="position:relative"> <span class="pl-k">if</span> (<span class="pl-c1">ReadBlockFromDisk</span>(block, block_index, consensusParams)) {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC877" class="react-file-line html-div" data-testid="code-cell" data-line-number="877" style="position:relative"> <span class="pl-k">for</span> (<span class="pl-k">const</span> <span class="pl-k">auto</span>&amp; tx : block.<span class="pl-smi">vtx</span>) {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC878" class="react-file-line html-div" data-testid="code-cell" data-line-number="878" style="position:relative"> <span class="pl-k">if</span> (tx-&gt;<span class="pl-c1">GetHash</span>() == hash) {</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC879" class="react-file-line html-div" data-testid="code-cell" data-line-number="879" style="position:relative"> txOut = tx;</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC880" class="react-file-line html-div" data-testid="code-cell" data-line-number="880" style="position:relative"> hashBlock = block_index-&gt;<span class="pl-c1">GetBlockHash</span>();</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC881" class="react-file-line html-div" data-testid="code-cell" data-line-number="881" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC882" class="react-file-line html-div" data-testid="code-cell" data-line-number="882" style="position:relative"> }</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC883" class="react-file-line html-div" data-testid="code-cell" data-line-number="883" style="position:relative"> }</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC884" class="react-file-line html-div" data-testid="code-cell" data-line-number="884" style="position:relative"> }</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC885" class="react-file-line html-div" data-testid="code-cell" data-line-number="885" style="position:relative"> }</div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC886" class="react-file-line html-div" data-testid="code-cell" data-line-number="886" style="position:relative"> </div></div></div><div class="child-of-line-859 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC887" class="react-file-line html-div" data-testid="code-cell" data-line-number="887" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC888" class="react-file-line html-div" data-testid="code-cell" data-line-number="888" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC889" class="react-file-line html-div" data-testid="code-cell" data-line-number="889" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC890" class="react-file-line html-div" data-testid="code-cell" data-line-number="890" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC891" class="react-file-line html-div" data-testid="code-cell" data-line-number="891" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC892" class="react-file-line html-div" data-testid="code-cell" data-line-number="892" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC893" class="react-file-line html-div" data-testid="code-cell" data-line-number="893" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC894" class="react-file-line html-div" data-testid="code-cell" data-line-number="894" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC895" class="react-file-line html-div" data-testid="code-cell" data-line-number="895" style="position:relative"><span class="pl-c"><span class="pl-c">//</span>////////////////////////////////////////////////////////////////////////////</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC896" class="react-file-line html-div" data-testid="code-cell" data-line-number="896" style="position:relative"><span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC897" class="react-file-line html-div" data-testid="code-cell" data-line-number="897" style="position:relative"><span class="pl-c"><span class="pl-c">//</span> CBlock and CBlockIndex</span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC898" class="react-file-line html-div" data-testid="code-cell" data-line-number="898" style="position:relative"><span class="pl-c"><span class="pl-c">//</span></span></div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC899" class="react-file-line html-div" data-testid="code-cell" data-line-number="899" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC900" class="react-file-line html-div" data-testid="code-cell" data-line-number="900" style="position:relative"><span class="pl-k">static</span> <span class="pl-k">bool</span> <span class="pl-en">WriteBlockToDisk</span>(<span class="pl-k">const</span> CBlock&amp; block, FlatFilePos&amp; pos, <span class="pl-k">const</span> CMessageHeader::MessageStartChars&amp; messageStart)</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC901" class="react-file-line html-div" data-testid="code-cell" data-line-number="901" style="position:relative">{</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC902" class="react-file-line html-div" data-testid="code-cell" data-line-number="902" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Open history file to append</span></div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC903" class="react-file-line html-div" data-testid="code-cell" data-line-number="903" style="position:relative"> CAutoFile <span class="pl-smi">fileout</span>(<span class="pl-c1">OpenBlockFile</span>(pos), SER_DISK, CLIENT_VERSION);</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC904" class="react-file-line html-div" data-testid="code-cell" data-line-number="904" style="position:relative"> <span class="pl-k">if</span> (fileout.<span class="pl-c1">IsNull</span>())</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC905" class="react-file-line html-div" data-testid="code-cell" data-line-number="905" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>WriteBlockToDisk: OpenBlockFile failed<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC906" class="react-file-line html-div" data-testid="code-cell" data-line-number="906" style="position:relative"> </div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC907" class="react-file-line html-div" data-testid="code-cell" data-line-number="907" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Write index header</span></div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC908" class="react-file-line html-div" data-testid="code-cell" data-line-number="908" style="position:relative"> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> nSize = <span class="pl-c1">GetSerializeSize</span>(block, fileout.<span class="pl-c1">GetVersion</span>());</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC909" class="react-file-line html-div" data-testid="code-cell" data-line-number="909" style="position:relative"> fileout &lt;&lt; messageStart &lt;&lt; nSize;</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC910" class="react-file-line html-div" data-testid="code-cell" data-line-number="910" style="position:relative"> </div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC911" class="react-file-line html-div" data-testid="code-cell" data-line-number="911" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Write block</span></div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC912" class="react-file-line html-div" data-testid="code-cell" data-line-number="912" style="position:relative"> <span class="pl-k">long</span> fileOutPos = <span class="pl-c1">ftell</span>(fileout.<span class="pl-c1">Get</span>());</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC913" class="react-file-line html-div" data-testid="code-cell" data-line-number="913" style="position:relative"> <span class="pl-k">if</span> (fileOutPos &lt; <span class="pl-c1">0</span>)</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC914" class="react-file-line html-div" data-testid="code-cell" data-line-number="914" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>WriteBlockToDisk: ftell failed<span class="pl-pds">&quot;</span></span>);</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC915" class="react-file-line html-div" data-testid="code-cell" data-line-number="915" style="position:relative"> pos.<span class="pl-smi">nPos</span> = (<span class="pl-k">unsigned</span> <span class="pl-k">int</span>)fileOutPos;</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC916" class="react-file-line html-div" data-testid="code-cell" data-line-number="916" style="position:relative"> fileout &lt;&lt; block;</div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC917" class="react-file-line html-div" data-testid="code-cell" data-line-number="917" style="position:relative"> </div></div></div><div class="child-of-line-899 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC918" class="react-file-line html-div" data-testid="code-cell" data-line-number="918" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC919" class="react-file-line html-div" data-testid="code-cell" data-line-number="919" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC920" class="react-file-line html-div" data-testid="code-cell" data-line-number="920" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC921" class="react-file-line html-div" data-testid="code-cell" data-line-number="921" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">ReadBlockFromDisk</span>(CBlock&amp; block, <span class="pl-k">const</span> FlatFilePos&amp; pos, <span class="pl-k">const</span> Consensus::Params&amp; consensusParams)</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC922" class="react-file-line html-div" data-testid="code-cell" data-line-number="922" style="position:relative">{</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC923" class="react-file-line html-div" data-testid="code-cell" data-line-number="923" style="position:relative"> block.<span class="pl-c1">SetNull</span>();</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC924" class="react-file-line html-div" data-testid="code-cell" data-line-number="924" style="position:relative"> </div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC925" class="react-file-line html-div" data-testid="code-cell" data-line-number="925" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Open history file to read</span></div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC926" class="react-file-line html-div" data-testid="code-cell" data-line-number="926" style="position:relative"> CAutoFile <span class="pl-smi">filein</span>(<span class="pl-c1">OpenBlockFile</span>(pos, <span class="pl-c1">true</span>), SER_DISK, CLIENT_VERSION);</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC927" class="react-file-line html-div" data-testid="code-cell" data-line-number="927" style="position:relative"> <span class="pl-k">if</span> (filein.<span class="pl-c1">IsNull</span>())</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC928" class="react-file-line html-div" data-testid="code-cell" data-line-number="928" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>ReadBlockFromDisk: OpenBlockFile failed for %s<span class="pl-pds">&quot;</span></span>, pos.<span class="pl-c1">ToString</span>());</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC929" class="react-file-line html-div" data-testid="code-cell" data-line-number="929" style="position:relative"> </div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC930" class="react-file-line html-div" data-testid="code-cell" data-line-number="930" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Read block</span></div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC931" class="react-file-line html-div" data-testid="code-cell" data-line-number="931" style="position:relative"> <span class="pl-k">try</span> {</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC932" class="react-file-line html-div" data-testid="code-cell" data-line-number="932" style="position:relative"> filein &gt;&gt; block;</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC933" class="react-file-line html-div" data-testid="code-cell" data-line-number="933" style="position:relative"> }</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC934" class="react-file-line html-div" data-testid="code-cell" data-line-number="934" style="position:relative"> <span class="pl-k">catch</span> (<span class="pl-k">const</span> std::<span class="pl-c1">exception</span>&amp; e) {</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC935" class="react-file-line html-div" data-testid="code-cell" data-line-number="935" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: Deserialize or I/O error - %s at %s<span class="pl-pds">&quot;</span></span>, __func__, e.<span class="pl-c1">what</span>(), pos.<span class="pl-c1">ToString</span>());</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC936" class="react-file-line html-div" data-testid="code-cell" data-line-number="936" style="position:relative"> }</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC937" class="react-file-line html-div" data-testid="code-cell" data-line-number="937" style="position:relative"> </div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC938" class="react-file-line html-div" data-testid="code-cell" data-line-number="938" style="position:relative"> <span class="pl-c"><span class="pl-c">//</span> Check the header</span></div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC939" class="react-file-line html-div" data-testid="code-cell" data-line-number="939" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">CheckProofOfWork</span>(block.<span class="pl-c1">GetHash</span>(), block.<span class="pl-smi">nBits</span>, consensusParams))</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC940" class="react-file-line html-div" data-testid="code-cell" data-line-number="940" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>ReadBlockFromDisk: Errors in block header at %s<span class="pl-pds">&quot;</span></span>, pos.<span class="pl-c1">ToString</span>());</div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC941" class="react-file-line html-div" data-testid="code-cell" data-line-number="941" style="position:relative"> </div></div></div><div class="child-of-line-920 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC942" class="react-file-line html-div" data-testid="code-cell" data-line-number="942" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC943" class="react-file-line html-div" data-testid="code-cell" data-line-number="943" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC944" class="react-file-line html-div" data-testid="code-cell" data-line-number="944" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC945" class="react-file-line html-div" data-testid="code-cell" data-line-number="945" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">ReadBlockFromDisk</span>(CBlock&amp; block, <span class="pl-k">const</span> CBlockIndex* pindex, <span class="pl-k">const</span> Consensus::Params&amp; consensusParams)</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC946" class="react-file-line html-div" data-testid="code-cell" data-line-number="946" style="position:relative">{</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC947" class="react-file-line html-div" data-testid="code-cell" data-line-number="947" style="position:relative"> FlatFilePos blockPos;</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC948" class="react-file-line html-div" data-testid="code-cell" data-line-number="948" style="position:relative"> {</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC949" class="react-file-line html-div" data-testid="code-cell" data-line-number="949" style="position:relative"> <span class="pl-c1">LOCK</span>(cs_main);</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC950" class="react-file-line html-div" data-testid="code-cell" data-line-number="950" style="position:relative"> blockPos = pindex-&gt;<span class="pl-c1">GetBlockPos</span>();</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC951" class="react-file-line html-div" data-testid="code-cell" data-line-number="951" style="position:relative"> }</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC952" class="react-file-line html-div" data-testid="code-cell" data-line-number="952" style="position:relative"> </div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC953" class="react-file-line html-div" data-testid="code-cell" data-line-number="953" style="position:relative"> <span class="pl-k">if</span> (!<span class="pl-c1">ReadBlockFromDisk</span>(block, blockPos, consensusParams))</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC954" class="react-file-line html-div" data-testid="code-cell" data-line-number="954" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">false</span>;</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC955" class="react-file-line html-div" data-testid="code-cell" data-line-number="955" style="position:relative"> <span class="pl-k">if</span> (block.<span class="pl-c1">GetHash</span>() != pindex-&gt;<span class="pl-c1">GetBlockHash</span>())</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC956" class="react-file-line html-div" data-testid="code-cell" data-line-number="956" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>ReadBlockFromDisk(CBlock&amp;, CBlockIndex*): GetHash() doesn&#039;t match index for %s at %s<span class="pl-pds">&quot;</span></span>,</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC957" class="react-file-line html-div" data-testid="code-cell" data-line-number="957" style="position:relative"> pindex-&gt;<span class="pl-c1">ToString</span>(), pindex-&gt;<span class="pl-c1">GetBlockPos</span>().<span class="pl-c1">ToString</span>());</div></div></div><div class="child-of-line-944 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC958" class="react-file-line html-div" data-testid="code-cell" data-line-number="958" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC959" class="react-file-line html-div" data-testid="code-cell" data-line-number="959" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC960" class="react-file-line html-div" data-testid="code-cell" data-line-number="960" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC961" class="react-file-line html-div" data-testid="code-cell" data-line-number="961" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">ReadRawBlockFromDisk</span>(std::vector&lt;<span class="pl-c1">uint8_t</span>&gt;&amp; block, <span class="pl-k">const</span> FlatFilePos&amp; pos, <span class="pl-k">const</span> CMessageHeader::MessageStartChars&amp; message_start)</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC962" class="react-file-line html-div" data-testid="code-cell" data-line-number="962" style="position:relative">{</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC963" class="react-file-line html-div" data-testid="code-cell" data-line-number="963" style="position:relative"> FlatFilePos hpos = pos;</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC964" class="react-file-line html-div" data-testid="code-cell" data-line-number="964" style="position:relative"> hpos.<span class="pl-smi">nPos</span> -= <span class="pl-c1">8</span>; <span class="pl-c"><span class="pl-c">//</span> Seek back 8 bytes for meta header</span></div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC965" class="react-file-line html-div" data-testid="code-cell" data-line-number="965" style="position:relative"> CAutoFile <span class="pl-smi">filein</span>(<span class="pl-c1">OpenBlockFile</span>(hpos, <span class="pl-c1">true</span>), SER_DISK, CLIENT_VERSION);</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC966" class="react-file-line html-div" data-testid="code-cell" data-line-number="966" style="position:relative"> <span class="pl-k">if</span> (filein.<span class="pl-c1">IsNull</span>()) {</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC967" class="react-file-line html-div" data-testid="code-cell" data-line-number="967" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: OpenBlockFile failed for %s<span class="pl-pds">&quot;</span></span>, __func__, pos.<span class="pl-c1">ToString</span>());</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC968" class="react-file-line html-div" data-testid="code-cell" data-line-number="968" style="position:relative"> }</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC969" class="react-file-line html-div" data-testid="code-cell" data-line-number="969" style="position:relative"> </div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC970" class="react-file-line html-div" data-testid="code-cell" data-line-number="970" style="position:relative"> <span class="pl-k">try</span> {</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC971" class="react-file-line html-div" data-testid="code-cell" data-line-number="971" style="position:relative"> CMessageHeader::MessageStartChars blk_start;</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC972" class="react-file-line html-div" data-testid="code-cell" data-line-number="972" style="position:relative"> <span class="pl-k">unsigned</span> <span class="pl-k">int</span> blk_size;</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC973" class="react-file-line html-div" data-testid="code-cell" data-line-number="973" style="position:relative"> </div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC974" class="react-file-line html-div" data-testid="code-cell" data-line-number="974" style="position:relative"> filein &gt;&gt; blk_start &gt;&gt; blk_size;</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC975" class="react-file-line html-div" data-testid="code-cell" data-line-number="975" style="position:relative"> </div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC976" class="react-file-line html-div" data-testid="code-cell" data-line-number="976" style="position:relative"> <span class="pl-k">if</span> (<span class="pl-c1">memcmp</span>(blk_start, message_start, CMessageHeader::MESSAGE_START_SIZE)) {</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC977" class="react-file-line html-div" data-testid="code-cell" data-line-number="977" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: Block magic mismatch for %s: %s versus expected %s<span class="pl-pds">&quot;</span></span>, __func__, pos.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC978" class="react-file-line html-div" data-testid="code-cell" data-line-number="978" style="position:relative"> <span class="pl-c1">HexStr</span>(blk_start, blk_start + CMessageHeader::MESSAGE_START_SIZE),</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC979" class="react-file-line html-div" data-testid="code-cell" data-line-number="979" style="position:relative"> <span class="pl-c1">HexStr</span>(message_start, message_start + CMessageHeader::MESSAGE_START_SIZE));</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC980" class="react-file-line html-div" data-testid="code-cell" data-line-number="980" style="position:relative"> }</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC981" class="react-file-line html-div" data-testid="code-cell" data-line-number="981" style="position:relative"> </div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC982" class="react-file-line html-div" data-testid="code-cell" data-line-number="982" style="position:relative"> <span class="pl-k">if</span> (blk_size &gt; MAX_SIZE) {</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC983" class="react-file-line html-div" data-testid="code-cell" data-line-number="983" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: Block data is larger than maximum deserialization size for %s: %s versus %s<span class="pl-pds">&quot;</span></span>, __func__, pos.<span class="pl-c1">ToString</span>(),</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC984" class="react-file-line html-div" data-testid="code-cell" data-line-number="984" style="position:relative"> blk_size, MAX_SIZE);</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC985" class="react-file-line html-div" data-testid="code-cell" data-line-number="985" style="position:relative"> }</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC986" class="react-file-line html-div" data-testid="code-cell" data-line-number="986" style="position:relative"> </div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC987" class="react-file-line html-div" data-testid="code-cell" data-line-number="987" style="position:relative"> block.<span class="pl-c1">resize</span>(blk_size); <span class="pl-c"><span class="pl-c">//</span> Zeroing of memory is intentional here</span></div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC988" class="react-file-line html-div" data-testid="code-cell" data-line-number="988" style="position:relative"> filein.<span class="pl-c1">read</span>((<span class="pl-k">char</span>*)block.<span class="pl-c1">data</span>(), blk_size);</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC989" class="react-file-line html-div" data-testid="code-cell" data-line-number="989" style="position:relative"> } <span class="pl-k">catch</span>(<span class="pl-k">const</span> std::<span class="pl-c1">exception</span>&amp; e) {</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC990" class="react-file-line html-div" data-testid="code-cell" data-line-number="990" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">error</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>%s: Read from block file failed: %s for %s<span class="pl-pds">&quot;</span></span>, __func__, e.<span class="pl-c1">what</span>(), pos.<span class="pl-c1">ToString</span>());</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC991" class="react-file-line html-div" data-testid="code-cell" data-line-number="991" style="position:relative"> }</div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC992" class="react-file-line html-div" data-testid="code-cell" data-line-number="992" style="position:relative"> </div></div></div><div class="child-of-line-960 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC993" class="react-file-line html-div" data-testid="code-cell" data-line-number="993" style="position:relative"> <span class="pl-k">return</span> <span class="pl-c1">true</span>;</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC994" class="react-file-line html-div" data-testid="code-cell" data-line-number="994" style="position:relative">}</div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC995" class="react-file-line html-div" data-testid="code-cell" data-line-number="995" style="position:relative"> </div></div></div><div class="react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC996" class="react-file-line html-div" data-testid="code-cell" data-line-number="996" style="position:relative"><span class="pl-k">bool</span> <span class="pl-en">ReadRawBlockFromDisk</span>(std::vector&lt;<span class="pl-c1">uint8_t</span>&gt;&amp; block, <span class="pl-k">const</span> CBlockIndex* pindex, <span class="pl-k">const</span> CMessageHeader::MessageStartChars&amp; message_start)</div></div></div><div class="child-of-line-995 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC997" class="react-file-line html-div" data-testid="code-cell" data-line-number="997" style="position:relative">{</div></div></div><div class="child-of-line-995 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC998" class="react-file-line html-div" data-testid="code-cell" data-line-number="998" style="position:relative"> FlatFilePos block_pos;</div></div></div><div class="child-of-line-995 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC999" class="react-file-line html-div" data-testid="code-cell" data-line-number="999" style="position:relative"> {</div></div></div><div class="child-of-line-995 react-code-text react-code-line-contents" style="min-height:auto"><div><div id="LC1000" class="react-file-line html-div" data-testid="code-cell" data-line-number="1000" style="position:relative"> <span class="pl-c1">LOCK</span>(cs_main);</div></div></div></div></div><div class="Box-sc-g0xbh4-0 gkZUDI"><a class="prc-Link-Link-85e08" href="https://github.com/bitcoin/bitcoin/raw/332c6134bb15384e5b91c631e821fe52a591d3bc/src/validation.cpp">View remainder of file in raw view</a></div></div><div id="copilot-button-container"></div></div><div id="highlighted-line-menu-container"></div></div></div><button hidden="" data-testid="hotkey-button" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button></section></div></div></div> <!-- --> <!-- --> </div></div></div><div class="Box-sc-g0xbh4-0"></div></div></div></div></div><div id="find-result-marks-container" class="Box-sc-g0xbh4-0 cCoXib"></div><button hidden="" data-testid="" data-hotkey-scope="read-only-cursor-text-area"></button><button hidden=""></button></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-app> </turbo-frame> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <span> &copy; 2024 GitHub,&nbsp;Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10