diff --git a/CHANGES b/CHANGES index 3234af79d3..7bfa87945c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,8 +1,27 @@ v3.x.y - YYYY-MMM-DD (to be released) -------------------------------------- - - - +------------------------------------- + + - More structured rules dump. Better supporting debugging. + [@zimmerle] + - Added the basics for supporting better error/warning handling while + loading configurations. + [@zimmerle] + - IMPORTANT: SecDefaultAction behaves changing: SecDefaultAction specified + on a child configuration will overwrite the ones specified on the parent; + Previously it was concatenating. + [@zimmerle] + - Using std::shared_ptr instead of generates its own references counters + for Rules and related. + [@zimmerle] + - Better handle shared_pointers on messages aiming for better performance. + [@zimmerle] + - Better handle memory usage on transformations aiming for better + performance. + [@zimmerle] + - Coding refactoring on the Rule class. The Rule class is now refactored + into RuleWithOperator, RuleWithActions, and RuleUnconditional. + - EXPERIMENTAL: Add new transformation call phpArgsNames + [Issue #2387 - @marshal09] v3.0.5 - 2021-Jul-07 diff --git a/Makefile.am b/Makefile.am index 9f32fde9a4..8c85b0a914 100644 --- a/Makefile.am +++ b/Makefile.am @@ -319,6 +319,7 @@ TESTS+=test/test-cases/secrules-language-tests/transformations/htmlEntityDecode. TESTS+=test/test-cases/secrules-language-tests/transformations/jsDecode.json TESTS+=test/test-cases/secrules-language-tests/transformations/length.json TESTS+=test/test-cases/secrules-language-tests/transformations/lowercase.json +TESTS+=test/test-cases/secrules-language-tests/transformations/phpArgsNames.json TESTS+=test/test-cases/secrules-language-tests/transformations/md5.json TESTS+=test/test-cases/secrules-language-tests/transformations/normalisePath.json TESTS+=test/test-cases/secrules-language-tests/transformations/normalisePathWin.json diff --git a/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h b/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h index 58cbba8b2f..98e0a0ec42 100644 --- a/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h +++ b/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h @@ -176,21 +176,22 @@ class ReadingLogsViaRuleMessage { return; } - const modsecurity::RuleMessage *ruleMessage = \ - reinterpret_cast(ruleMessagev); + modsecurity::RuleMessage ruleMessage( + *reinterpret_cast(ruleMessagev)); - std::cout << "Rule Id: " << std::to_string(ruleMessage->m_ruleId); - std::cout << " phase: " << std::to_string(ruleMessage->m_phase); + + std::cout << "Rule Id: " << std::to_string(ruleMessage.getRuleId()); + std::cout << " phase: " << std::to_string(ruleMessage.getPhase()); std::cout << std::endl; - if (ruleMessage->m_isDisruptive) { + if (ruleMessage.isDisruptive()) { std::cout << " * Disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; std::cout << " ** %d is meant to be informed by the webserver."; std::cout << std::endl; } else { std::cout << " * Match, but no disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; } } diff --git a/examples/using_bodies_in_chunks/simple_request.cc b/examples/using_bodies_in_chunks/simple_request.cc index 0f55562220..87899fcbd5 100644 --- a/examples/using_bodies_in_chunks/simple_request.cc +++ b/examples/using_bodies_in_chunks/simple_request.cc @@ -69,21 +69,21 @@ static void logCb(void *data, const void *ruleMessagev) { return; } - const modsecurity::RuleMessage *ruleMessage = \ - reinterpret_cast(ruleMessagev); + modsecurity::RuleMessage ruleMessage( + *reinterpret_cast(ruleMessagev)); - std::cout << "Rule Id: " << std::to_string(ruleMessage->m_ruleId); - std::cout << " phase: " << std::to_string(ruleMessage->m_phase); + std::cout << "Rule Id: " << std::to_string(ruleMessage.getRuleId()); + std::cout << " phase: " << std::to_string(ruleMessage.getPhase()); std::cout << std::endl; - if (ruleMessage->m_isDisruptive) { + if (ruleMessage.isDisruptive()) { std::cout << " * Disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; std::cout << " ** %d is meant to be informed by the webserver."; std::cout << std::endl; } else { std::cout << " * Match, but no disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; } } diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 374b77d6c6..821ce07269 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -23,7 +23,6 @@ #include "modsecurity/intervention.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" #ifndef HEADERS_MODSECURITY_ACTIONS_ACTION_H_ #define HEADERS_MODSECURITY_ACTIONS_ACTION_H_ @@ -32,41 +31,28 @@ namespace modsecurity { class Transaction; -class RuleWithOperator; +class RuleWithActions; + namespace actions { class Action { - public: - explicit Action(const std::string& _action) - : m_isNone(false), - temporaryAction(false), - action_kind(2), - m_name(nullptr), - m_parser_payload("") { - set_name_and_payload(_action); - } - explicit Action(const std::string& _action, int kind) - : m_isNone(false), - temporaryAction(false), - action_kind(kind), + public: + explicit Action(const std::string& _action, int kind = RunTimeOnlyIfMatchKind) + : m_actionKind(kind), m_name(nullptr), m_parser_payload("") { set_name_and_payload(_action); } Action(const Action &a) - : m_isNone(a.m_isNone), - temporaryAction(a.temporaryAction), - action_kind(a.action_kind), + : m_actionKind(a.m_actionKind), m_name(a.m_name), m_parser_payload(a.m_parser_payload) { } Action &operator=(const Action& a) { - m_isNone = a.m_isNone; - temporaryAction = a.temporaryAction; - action_kind = a.action_kind; + m_actionKind = a.m_actionKind; m_name = a.m_name; m_parser_payload = a.m_parser_payload; return *this; @@ -74,44 +60,23 @@ class Action { virtual ~Action() { } - virtual std::string evaluate(const std::string &exp, - Transaction *transaction); - virtual bool evaluate(RuleWithActions *rule, Transaction *transaction); - virtual bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr ruleMessage) { - return evaluate(rule, transaction); - } virtual bool init(std::string *error) { return true; } - virtual bool isDisruptive() { return false; } - - - void set_name_and_payload(const std::string& data) { - size_t pos = data.find(":"); - std::string t = "t:"; - - if (data.compare(0, t.length(), t) == 0) { - pos = data.find(":", 2); - } - if (pos == std::string::npos) { - m_name = std::shared_ptr(new std::string(data)); - return; - } - - m_name = std::shared_ptr(new std::string(data, 0, pos)); - m_parser_payload = std::string(data, pos + 1, data.length()); - - if (m_parser_payload.at(0) == '\'' && m_parser_payload.size() > 2) { - m_parser_payload.erase(0, 1); - m_parser_payload.pop_back(); - } - } + virtual std::string execute(const std::string &exp, + Transaction *transaction); + virtual bool execute(RuleWithActions *rule, + Transaction *transaction); + /** + * This method is meant to be used by transformations — a particular + * type of action. + * + */ + virtual void execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + }; - bool m_isNone; - bool temporaryAction; - int action_kind; - std::shared_ptr m_name; - std::string m_parser_payload; + virtual bool isDisruptive() { return false; } /** * @@ -144,7 +109,35 @@ class Action { */ RunTimeOnlyIfMatchKind, }; - }; + + int m_actionKind; + std::shared_ptr m_name; + std::string m_parser_payload; + + private: + + void set_name_and_payload(const std::string& data) { + size_t pos = data.find(":"); + std::string t = "t:"; + + if (data.compare(0, t.length(), t) == 0) { + pos = data.find(":", 2); + } + + if (pos == std::string::npos) { + m_name = std::shared_ptr(new std::string(data)); + return; + } + + m_name = std::shared_ptr(new std::string(data, 0, pos)); + m_parser_payload = std::string(data, pos + 1, data.length()); + + if (m_parser_payload.at(0) == '\'' && m_parser_payload.size() > 2) { + m_parser_payload.erase(0, 1); + m_parser_payload.pop_back(); + } + } +}; } // namespace actions diff --git a/headers/modsecurity/anchored_set_variable.h b/headers/modsecurity/anchored_set_variable.h index 5b41e8502d..367e40f2f1 100644 --- a/headers/modsecurity/anchored_set_variable.h +++ b/headers/modsecurity/anchored_set_variable.h @@ -27,10 +27,13 @@ #include #include #include + +#include "modsecurity/string_view.hpp" #endif #include "modsecurity/variable_value.h" + #ifndef HEADERS_MODSECURITY_ANCHORED_SET_VARIABLE_H_ #define HEADERS_MODSECURITY_ANCHORED_SET_VARIABLE_H_ @@ -79,6 +82,12 @@ class AnchoredSetVariable : public std::unordered_multimap #include #include +#include + +#include "modsecurity/string_view.hpp" #endif #include "modsecurity/variable_value.h" + #ifndef HEADERS_MODSECURITY_ANCHORED_VARIABLE_H_ #define HEADERS_MODSECURITY_ANCHORED_VARIABLE_H_ @@ -59,6 +63,8 @@ class AnchoredVariable { void unset(); void set(const std::string &a, size_t offset); + void set(const bpstd::string_view &a, size_t offset); + void set(const char *a, size_t offset); void set(const std::string &a, size_t offset, size_t offsetLen); void append(const std::string &a, size_t offset, bool spaceSeparator = false); diff --git a/headers/modsecurity/modsecurity.h b/headers/modsecurity/modsecurity.h index d4892f960d..9c76fe81ff 100644 --- a/headers/modsecurity/modsecurity.h +++ b/headers/modsecurity/modsecurity.h @@ -78,6 +78,7 @@ #include #include #include +#include #endif @@ -89,6 +90,18 @@ typedef struct ModSecurity_t modsecurity; #else namespace modsecurity { + /** + * Further that will be changed to be a stack-based string, + * for the benefit of performance. + */ + using ModSecString = std::string; + + using RulesErrors = std::vector>; + using RulesWarnings = std::vector>; + + + using RuleId = int64_t; + /** * * The Phases enumerator consists in mapping the different stages of a @@ -292,7 +305,7 @@ class ModSecurity { */ void setServerLogCb(ModSecLogCb cb, int properties); - void serverLog(void *data, std::shared_ptr rm); + void serverLog(void *data, RuleMessage *rm); const std::string& getConnectorInformation() const; diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index b10e0556e8..9067b5fdb3 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -36,42 +36,18 @@ namespace variables { class Variable; class Variables; } -namespace actions { -class Action; -class Severity; -class LogData; -class Msg; -class Rev; -class SetVar; -class Tag; -namespace transformations { -class Transformation; -} -} namespace operators { class Operator; } -using TransformationResult = std::pair, - std::shared_ptr>; -using TransformationResults = std::list; - -using Transformation = actions::transformations::Transformation; -using Transformations = std::vector; - -using Actions = std::vector; - -using Tags = std::vector; -using SetVars = std::vector; -using MatchActions = std::vector; class Rule { public: Rule(std::unique_ptr fileName, int lineNumber) : m_fileName(std::make_shared(*fileName)), m_lineNumber(lineNumber), - m_phase(modsecurity::Phases::RequestHeadersPhase) { - } + m_phase(modsecurity::Phases::RequestHeadersPhase) + { } Rule(const Rule &other) : m_fileName(other.m_fileName), @@ -88,9 +64,6 @@ class Rule { virtual bool evaluate(Transaction *transaction) = 0; - virtual bool evaluate(Transaction *transaction, - std::shared_ptr rm) = 0; - std::shared_ptr getFileName() const { return m_fileName; } @@ -109,8 +82,17 @@ class Rule { return "<>:" + std::to_string(m_lineNumber); } + virtual void dump(std::stringstream &out) { + out << getOriginInTextFormat() << std::endl; + } - virtual bool isMarker() { return false; } + protected: + std::string getOriginInTextFormat() const { + std::stringstream ss; + ss << "# File name: " << *getFileName() << std::endl; + ss << "# Line number: " << getLineNumber(); + return ss.str(); + } private: std::shared_ptr m_fileName; diff --git a/headers/modsecurity/rule_message.h b/headers/modsecurity/rule_message.h index 51eca0e8ef..1111831050 100644 --- a/headers/modsecurity/rule_message.h +++ b/headers/modsecurity/rule_message.h @@ -26,14 +26,15 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_operator.h" #ifdef __cplusplus namespace modsecurity { - - +namespace actions { +class Tag; +}; +class RuleWithActions; class RuleMessage { public: @@ -42,120 +43,59 @@ class RuleMessage { ClientLogMessageInfo = 4 }; - /** - * - * FIXME: RuleMessage is currently too big, doing a lot of - * unnecessary data duplication. Needs to be shrink down. - * - */ - RuleMessage(RuleWithActions *rule, Transaction *trans) : - m_accuracy(rule->m_accuracy), - m_clientIpAddress(trans->m_clientIpAddress), + + explicit RuleMessage(const RuleMessage &ruleMessage) : + m_severity(ruleMessage.m_severity), + m_tags(), + m_data(ruleMessage.m_data), + m_match(ruleMessage.m_match), + m_message(ruleMessage.m_message), + m_reference(ruleMessage.m_reference), + m_transaction(ruleMessage.m_transaction), + m_rule(ruleMessage.m_rule) + { } + + + explicit RuleMessage(Transaction *transaction) : + m_severity(0), + m_tags(), m_data(""), - m_id(trans->m_id), - m_isDisruptive(false), m_match(""), - m_maturity(rule->m_maturity), m_message(""), - m_noAuditLog(false), - m_phase(rule->getPhase() - 1), m_reference(""), - m_rev(rule->m_rev), - m_rule(rule), - m_ruleFile(rule->getFileName()), - m_ruleId(rule->m_ruleId), - m_ruleLine(rule->getLineNumber()), - m_saveMessage(true), - m_serverIpAddress(trans->m_serverIpAddress), - m_severity(0), - m_uriNoQueryStringDecoded(trans->m_uri_no_query_string_decoded), - m_ver(rule->m_ver), - m_tags() + m_transaction(transaction), + m_rule(nullptr) + { } explicit RuleMessage(RuleMessage *rule) : - m_accuracy(rule->m_accuracy), - m_clientIpAddress(rule->m_clientIpAddress), + m_severity(rule->m_severity), + m_tags(rule->m_tags), m_data(rule->m_data), - m_id(rule->m_id), - m_isDisruptive(rule->m_isDisruptive), m_match(rule->m_match), - m_maturity(rule->m_maturity), m_message(rule->m_message), - m_noAuditLog(rule->m_noAuditLog), - m_phase(rule->m_phase), m_reference(rule->m_reference), - m_rev(rule->m_rev), - m_rule(rule->m_rule), - m_ruleFile(rule->m_ruleFile), - m_ruleId(rule->m_ruleId), - m_ruleLine(rule->m_ruleLine), - m_saveMessage(rule->m_saveMessage), - m_serverIpAddress(rule->m_serverIpAddress), - m_severity(rule->m_severity), - m_uriNoQueryStringDecoded(rule->m_uriNoQueryStringDecoded), - m_ver(rule->m_ver), - m_tags(rule->m_tags) - { } - - RuleMessage(const RuleMessage& ruleMessage) - : m_accuracy(ruleMessage.m_accuracy), - m_clientIpAddress(ruleMessage.m_clientIpAddress), - m_data(ruleMessage.m_data), - m_id(ruleMessage.m_id), - m_isDisruptive(ruleMessage.m_isDisruptive), - m_match(ruleMessage.m_match), - m_maturity(ruleMessage.m_maturity), - m_message(ruleMessage.m_message), - m_noAuditLog(ruleMessage.m_noAuditLog), - m_phase(ruleMessage.m_phase), - m_reference(ruleMessage.m_reference), - m_rev(ruleMessage.m_rev), - m_rule(ruleMessage.m_rule), - m_ruleFile(ruleMessage.m_ruleFile), - m_ruleId(ruleMessage.m_ruleId), - m_ruleLine(ruleMessage.m_ruleLine), - m_saveMessage(ruleMessage.m_saveMessage), - m_serverIpAddress(ruleMessage.m_serverIpAddress), - m_severity(ruleMessage.m_severity), - m_uriNoQueryStringDecoded(ruleMessage.m_uriNoQueryStringDecoded), - m_ver(ruleMessage.m_ver), - m_tags(ruleMessage.m_tags) + m_transaction(rule->m_transaction), + m_rule(rule->m_rule) { } RuleMessage &operator=(const RuleMessage& ruleMessage) { - m_accuracy = ruleMessage.m_accuracy; - m_clientIpAddress = ruleMessage.m_clientIpAddress; + m_severity = ruleMessage.m_severity; + m_tags = ruleMessage.m_tags; m_data = ruleMessage.m_data; - m_id = ruleMessage.m_id; - m_isDisruptive = ruleMessage.m_isDisruptive; m_match = ruleMessage.m_match; - m_maturity = ruleMessage.m_maturity; m_message = ruleMessage.m_message; - m_noAuditLog = ruleMessage.m_noAuditLog; - m_phase = ruleMessage.m_phase; m_reference = ruleMessage.m_reference; - m_rev = ruleMessage.m_rev; + m_transaction = ruleMessage.m_transaction; m_rule = ruleMessage.m_rule; - m_ruleFile = ruleMessage.m_ruleFile; - m_ruleId = ruleMessage.m_ruleId; - m_ruleLine = ruleMessage.m_ruleLine; - m_saveMessage = ruleMessage.m_saveMessage; - m_serverIpAddress = ruleMessage.m_serverIpAddress; - m_severity = ruleMessage.m_severity; - m_uriNoQueryStringDecoded = ruleMessage.m_uriNoQueryStringDecoded; - m_ver = ruleMessage.m_ver; - m_tags = ruleMessage.m_tags; return *this; } void clean() { m_data = ""; m_match = ""; - m_isDisruptive = false; m_reference = ""; m_severity = 0; - m_ver = ""; } std::string log() { @@ -183,29 +123,36 @@ class RuleMessage { static std::string _details(const RuleMessage *rm); static std::string _errorLogTail(const RuleMessage *rm); - int m_accuracy; - std::shared_ptr m_clientIpAddress; + RuleWithActions *getRule() const; + void setRule(RuleWithActions *rule); + bool isSettle() const; + int getRuleId() const; + int getPhase() const; + std::string getFileName() const; + int getLineNumber() const; + std::string getRev() const; + std::string getVer() const; + int getMaturity() const; + int getAccuracy() const; + std::string getClientIpAddress() const; + std::string getServerIpAddress() const; + std::string getRequestId() const; + std::string getUri() const; + bool isDisruptive() const; + + int m_severity; + std::list m_tags; + + // Transaction std::string m_data; - std::shared_ptr m_id; - bool m_isDisruptive; std::string m_match; - int m_maturity; + std::string m_message; - bool m_noAuditLog; - int m_phase; std::string m_reference; - std::string m_rev; - RuleWithActions *m_rule; - std::shared_ptr m_ruleFile; - int m_ruleId; - int m_ruleLine; - bool m_saveMessage; - std::shared_ptr m_serverIpAddress; - int m_severity; - std::shared_ptr m_uriNoQueryStringDecoded; - std::string m_ver; - std::list m_tags; + private: + Transaction *m_transaction; + RuleWithActions *m_rule; }; diff --git a/headers/modsecurity/rule_with_actions.h b/headers/modsecurity/rule_with_actions.h deleted file mode 100644 index 4b7db43f73..0000000000 --- a/headers/modsecurity/rule_with_actions.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * ModSecurity, http://www.modsecurity.org/ - * Copyright (c) 2015 - 2021 Trustwave Holdings, Inc. (http://www.trustwave.com/) - * - * You may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * If any of the files related to licensing are missing or if you have any - * other questions related to licensing please contact Trustwave Holdings, Inc. - * directly using the email address security@modsecurity.org. - * - */ - -#ifdef __cplusplus -#include -#include -#include -#include -#include -#include -#endif - -#ifndef HEADERS_MODSECURITY_RULE_WITH_ACTIONS_H_ -#define HEADERS_MODSECURITY_RULE_WITH_ACTIONS_H_ - -#include "modsecurity/transaction.h" -#include "modsecurity/modsecurity.h" -#include "modsecurity/variable_value.h" -#include "modsecurity/rule.h" - -#ifdef __cplusplus - -namespace modsecurity { - - -class RuleWithActions : public Rule { - public: - RuleWithActions( - Actions *a, - Transformations *t, - std::unique_ptr fileName, - int lineNumber); - - ~RuleWithActions(); - - RuleWithActions(const RuleWithActions& r) - : Rule(r), - m_rev(r.m_rev), - m_ver(r.m_ver), - m_accuracy(r.m_accuracy), - m_maturity(r.m_maturity), - m_ruleId(r.m_ruleId), - m_chainedRuleChild(r.m_chainedRuleChild), - m_chainedRuleParent(r.m_chainedRuleParent), - m_disruptiveAction(r.m_disruptiveAction), - m_logData(r.m_logData), - m_msg(r.m_msg), - m_severity(r.m_severity), - m_actionsRuntimePos(r.m_actionsRuntimePos), - m_actionsSetVar(r.m_actionsSetVar), - m_actionsTag(r.m_actionsTag), - m_transformations(r.m_transformations), - m_containsCaptureAction(r.m_containsCaptureAction), - m_containsMultiMatchAction(r.m_containsMultiMatchAction), - m_containsStaticBlockAction(r.m_containsStaticBlockAction), - m_isChained(r.m_isChained) - { } - - RuleWithActions &operator=(const RuleWithActions& r) { - Rule::operator = (r); - m_rev = r.m_rev; - m_ver = r.m_ver; - m_accuracy = r.m_accuracy; - m_maturity = r.m_maturity; - m_ruleId = r.m_ruleId; - m_chainedRuleChild = r.m_chainedRuleChild; - m_chainedRuleParent = r.m_chainedRuleParent; - - m_disruptiveAction = r.m_disruptiveAction; - m_logData = r.m_logData; - m_msg = r.m_msg; - m_severity = r.m_severity; - m_actionsRuntimePos = r.m_actionsRuntimePos; - m_actionsSetVar = r.m_actionsSetVar; - m_actionsTag = r.m_actionsTag; - - m_transformations = r.m_transformations; - - m_containsCaptureAction = r.m_containsCaptureAction; - m_containsMultiMatchAction = r.m_containsMultiMatchAction; - m_containsStaticBlockAction = r.m_containsStaticBlockAction; - m_isChained = r.m_isChained; - - return *this; - } - - virtual bool evaluate(Transaction *transaction, std::shared_ptr ruleMessage) override; - - virtual bool evaluate(Transaction *transaction) override; - - - void executeActionsIndependentOfChainedRuleResult( - Transaction *trasn, - bool *containsDisruptive, - std::shared_ptr ruleMessage); - - void executeActionsAfterFullMatch( - Transaction *trasn, - bool containsDisruptive, - std::shared_ptr ruleMessage); - - void executeAction(Transaction *trans, - bool containsBlock, - std::shared_ptr ruleMessage, - actions::Action *a, - bool context); - - - void executeTransformations( - Transaction *trasn, const std::string &value, TransformationResults &ret); - - inline void executeTransformation( - actions::transformations::Transformation *a, - std::shared_ptr *value, - Transaction *trans, - TransformationResults *ret, - std::string *path, - int *nth) const; - - - void performLogging(Transaction *trans, - std::shared_ptr ruleMessage, - bool lastLog = true, - bool chainedParentNull = false); - - std::vector getActionsByName(const std::string& name, - Transaction *t); - bool containsTag(const std::string& name, Transaction *t); - bool containsMsg(const std::string& name, Transaction *t); - - inline bool isChained() const { return m_isChained == true; } - inline bool hasCaptureAction() const { return m_containsCaptureAction == true; } - inline void setChained(bool b) { m_isChained = b; } - inline bool hasDisruptiveAction() const { return m_disruptiveAction != NULL; } - inline bool hasBlockAction() const { return m_containsStaticBlockAction == true; } - inline bool hasMultimatch() const { return m_containsMultiMatchAction == true; } - - inline bool hasLogData() const { return m_logData != NULL; } - std::string logData(Transaction *t); - inline bool hasMsg() const { return m_msg != NULL; } - std::string msg(Transaction *t); - inline bool hasSeverity() const { return m_severity != NULL; } - int severity() const; - - std::string m_rev; - std::string m_ver; - int m_accuracy; - int m_maturity; - - - int64_t m_ruleId; - - std::shared_ptr m_chainedRuleChild; - RuleWithActions *m_chainedRuleParent; - - private: - /* actions */ - actions::Action *m_disruptiveAction; - actions::LogData *m_logData; - actions::Msg *m_msg; - actions::Severity *m_severity; - MatchActions m_actionsRuntimePos; - SetVars m_actionsSetVar; - Tags m_actionsTag; - - /* actions > transformations */ - Transformations m_transformations; - - bool m_containsCaptureAction:1; - bool m_containsMultiMatchAction:1; - bool m_containsStaticBlockAction:1; - bool m_isChained:1; -}; - -} // namespace modsecurity -#endif - - -#endif // HEADERS_MODSECURITY_RULE_WITH_ACTIONS_H_ \ No newline at end of file diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 1aaa65b549..7dc86b49a3 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -27,64 +27,53 @@ #endif #include "modsecurity/rule.h" -#include "modsecurity/rule_with_operator.h" -#include "modsecurity/rule_with_actions.h" + #ifndef HEADERS_MODSECURITY_RULES_H_ #define HEADERS_MODSECURITY_RULES_H_ - #ifdef __cplusplus namespace modsecurity { +namespace actions { +namespace transformations { +class Transformation; +} +} class Rules { public: - void dump() const { - for (int j = 0; j < m_rules.size(); j++) { - std::cout << " Rule ID: " << m_rules.at(j)->getReference(); - std::cout << "--" << m_rules.at(j) << std::endl; - } - } - - int append(Rules *from, const std::vector &ids, std::ostringstream *err) { - size_t j = 0; - for (; j < from->size(); j++) { - RuleWithOperator *rule = dynamic_cast(from->at(j).get()); - if (rule && std::binary_search(ids.begin(), ids.end(), rule->m_ruleId)) { - if (err != NULL) { - *err << "Rule id: " << std::to_string(rule->m_ruleId) \ - << " is duplicated" << std::endl; - } - return -1; - } - } - m_rules.insert(m_rules.end(), from->m_rules.begin(), from->m_rules.end()); - return j; - } - - bool insert(const std::shared_ptr &rule) { - return insert(rule, nullptr, nullptr); - } - - bool insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { - RuleWithOperator *r = dynamic_cast(rule.get()); - if (r && ids != nullptr && std::binary_search(ids->begin(), ids->end(), r->m_ruleId)) { - if (err != nullptr) { - *err << "Rule id: " << std::to_string(r->m_ruleId) \ - << " is duplicated" << std::endl; - } - return false; - } - m_rules.push_back(rule); - return true; - } - - size_t size() const { return m_rules.size(); } - std::shared_ptr operator[](int index) const { return m_rules[index]; } - std::shared_ptr at(int index) const { return m_rules[index]; } - - std::vector > m_rules; + using container=std::vector>; + using iterator=typename container::iterator; + using const_iterator=typename container::const_iterator; + + int append(Rules *from); + + bool insert(const std::shared_ptr &rule); + + size_t size() const; + + std::shared_ptr operator[](int index) const; + std::shared_ptr at(int index) const; + + void fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors); + + std::vector > m_defaultActions; + std::vector > m_defaultTransformations; + + virtual void dump() { + std::stringstream ss; + dump(ss); + std::cout << ss.str(); + }; + virtual void dump(std::stringstream &out); + + inline iterator begin() noexcept { return m_rules.begin(); } + inline const_iterator cbegin() const noexcept { return m_rules.cbegin(); } + inline iterator end() noexcept { return m_rules.end(); } + inline const_iterator cend() const noexcept { return m_rules.cend(); } + private: + container m_rules; }; diff --git a/headers/modsecurity/rules_set.h b/headers/modsecurity/rules_set.h index 4af55f405e..d2bc95b65a 100644 --- a/headers/modsecurity/rules_set.h +++ b/headers/modsecurity/rules_set.h @@ -22,6 +22,7 @@ #include #include #include +#include #endif @@ -42,8 +43,6 @@ namespace Parser { class Driver; } - - /** @ingroup ModSecurity_CPP_API */ class RulesSet : public RulesSetProperties { public: @@ -68,12 +67,13 @@ class RulesSet : public RulesSetProperties { int load(const char *rules); int load(const char *rules, const std::string &ref); - void dump() const; + void dump(); int merge(Parser::Driver *driver); int merge(RulesSet *rules); int evaluate(int phase, Transaction *transaction); + std::string getParserError(); void debug(int level, const std::string &id, const std::string &uri, @@ -81,6 +81,7 @@ class RulesSet : public RulesSetProperties { RulesSetPhases m_rulesSetPhases; private: + bool containsDuplicatedIds(RulesWarnings *warnings, RulesErrors *errors); #ifndef NO_LOGS uint8_t m_secmarker_skipped; #endif diff --git a/headers/modsecurity/rules_set_phases.h b/headers/modsecurity/rules_set_phases.h index 849d8ec1bf..1acdf4f48b 100644 --- a/headers/modsecurity/rules_set_phases.h +++ b/headers/modsecurity/rules_set_phases.h @@ -23,6 +23,7 @@ #include #include #include +#include #endif @@ -42,18 +43,33 @@ class Driver; /** @ingroup ModSecurity_CPP_API */ class RulesSetPhases { public: + using container = std::array; + using iterator = typename container::iterator; + using const_iterator = typename container::const_iterator; - bool insert(std::shared_ptr rule); + void insert(std::shared_ptr rule); + void append(RulesSetPhases *from); int append(RulesSetPhases *from, std::ostringstream *err); - void dump() const; + void dump(); - Rules *operator[](int index) { return &m_rulesAtPhase[index]; } - Rules *at(int index) { return &m_rulesAtPhase[index]; } + Rules *operator[](int index); + Rules *at(int index); + static size_t size() { return modsecurity::Phases::NUMBER_OF_PHASES; } - private: - Rules m_rulesAtPhase[8]; + void fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors) { + for (auto &phase : m_rulesAtPhase) { + phase.fixDefaultActions(warnings, errors); + } + } + + inline iterator begin() noexcept { return m_rulesAtPhase.begin(); } + inline const_iterator cbegin() const noexcept { return m_rulesAtPhase.cbegin(); } + inline iterator end() noexcept { return m_rulesAtPhase.end(); } + inline const_iterator cend() const noexcept { return m_rulesAtPhase.cend(); } + private: + container m_rulesAtPhase; }; diff --git a/headers/modsecurity/rules_set_properties.h b/headers/modsecurity/rules_set_properties.h index 13519fcb5a..1ee8822c68 100644 --- a/headers/modsecurity/rules_set_properties.h +++ b/headers/modsecurity/rules_set_properties.h @@ -201,16 +201,6 @@ class RulesSetProperties { RulesSetProperties &operator =(const RulesSetProperties &r) = delete; ~RulesSetProperties() { - int i = 0; - - for (i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - std::vector > *tmp = \ - &m_defaultActions[i]; - while (tmp->empty() == false) { - tmp->pop_back(); - } - } - delete m_debugLog; delete m_auditLog; } @@ -340,7 +330,9 @@ class RulesSetProperties { static int mergeProperties(RulesSetProperties *from, - RulesSetProperties *to, std::ostringstream *err) { + RulesSetProperties *to, + RulesWarnings *warning, + RulesErrors *error) { merge_ruleengine_value(to->m_secRuleEngine, from->m_secRuleEngine, PropertyNotSetRuleEngine); @@ -410,21 +402,11 @@ class RulesSetProperties { to->m_responseBodyTypeToBeInspected.m_set = true; } - for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - std::vector > *actions_from = \ - &from->m_defaultActions[i]; - std::vector > *actions_to = \ - &to->m_defaultActions[i]; - for (size_t j = 0; j < actions_from->size(); j++) { - actions_to->push_back(actions_from->at(j)); - } - } - if (to->m_auditLog) { - std::string error; - to->m_auditLog->merge(from->m_auditLog, &error); - if (error.size() > 0) { - *err << error; + std::string error_; + to->m_auditLog->merge(from->m_auditLog, &error_); + if (error_.size() > 0) { + error->push_back(std::unique_ptr(new std::string(error_))); return -1; } } @@ -432,12 +414,12 @@ class RulesSetProperties { if (from->m_debugLog && to->m_debugLog && from->m_debugLog->isLogFileSet()) { if (to->m_debugLog->isLogFileSet() == false) { - std::string error; + std::string error_; to->m_debugLog->setDebugLogFile( from->m_debugLog->getDebugLogFile(), - &error); - if (error.size() > 0) { - *err << error; + &error_); + if (error_.size() > 0) { + error->push_back(std::unique_ptr(new std::string(error_))); return -1; } } @@ -481,8 +463,6 @@ class RulesSetProperties { ConfigString m_uploadTmpDirectory; ConfigString m_secArgumentSeparator; ConfigString m_secWebAppId; - std::vector > \ - m_defaultActions[modsecurity::Phases::NUMBER_OF_PHASES]; ConfigUnicodeMap m_unicodeMapTable; }; diff --git a/headers/modsecurity/string_view.hpp b/headers/modsecurity/string_view.hpp new file mode 100644 index 0000000000..ce9929534b --- /dev/null +++ b/headers/modsecurity/string_view.hpp @@ -0,0 +1,1422 @@ +/** + * \file string_view.hpp + * + * \brief This header contains the definition of the string_view type, as + * described by the C++17 standard. + * + * \author Matthew Rodusek (matthew.rodusek@gmail.com) + * \copyright Matthew Rodusek + */ + +/* + * The MIT License (MIT) + * + * Licensed under the MIT License . + * Copyright (c) 2016 Matthew Rodusek + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef BPSTD_STRING_VIEW_HPP +#define BPSTD_STRING_VIEW_HPP + +#include // std:: +#include // std::char_traits +#include // std::basic_ostream +#include // std::size_t +#include // std::allocator +#include // std::out_of_range +#include // std::reverse_iterator +namespace bpstd { // back-port std + + //////////////////////////////////////////////////////////////////////////// + /// \brief A wrapper around non-owned strings. + /// + /// This is an implementation of the C++17 string_view proposal + /// + /// \ingroup core + //////////////////////////////////////////////////////////////////////////// + template< + typename CharT, + typename Traits = std::char_traits + > + class basic_string_view final + { + //------------------------------------------------------------------------ + // Public Member Types + //------------------------------------------------------------------------ + public: + + using char_type = CharT; + using traits_type = Traits; + using size_type = std::size_t; + + using value_type = CharT; + using reference = value_type&; + using const_reference = const value_type&; + using pointer = value_type*; + using const_pointer = const value_type*; + + using iterator = const CharT*; + using const_iterator = const CharT*; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + + //------------------------------------------------------------------------ + // Public Members + //------------------------------------------------------------------------ + public: + + static constexpr size_type npos = size_type(-1); + + //------------------------------------------------------------------------ + // Constructors + //------------------------------------------------------------------------ + public: + + /// \brief Default constructs a basic_string_view without any content + constexpr basic_string_view() noexcept; + + /// \brief Constructs a basic_string_view by copying another one + /// + /// \param other the string view being copied + constexpr basic_string_view(const basic_string_view& other) noexcept = default; + + /// \brief Constructs a basic_string_view by moving anothe rone + /// + /// \param other the string view being moved + constexpr basic_string_view(basic_string_view&& other) noexcept = default; + + /// \brief Constructs a basic_string_view from a std::basic_string + /// + /// \param str the string to view + template + basic_string_view(const std::basic_string& str) noexcept; + + /// \brief Constructs a basic_string_view from an ansi-string + /// + /// \param str the string to view + constexpr basic_string_view(const char_type* str) noexcept; + + /// \brief Constructs a basic_string_view from an ansi string of a given size + /// + /// \param str the string to view + /// \param count the size of the string + constexpr basic_string_view(const char_type* str, size_type count) noexcept; + + //------------------------------------------------------------------------ + // Assignment + //------------------------------------------------------------------------ + public: + + /// \brief Assigns a basic_string_view from an ansi-string + /// + /// \param view the string to view + /// \return reference to \c (*this) + basic_string_view& operator=(const basic_string_view& view) = default; + + //------------------------------------------------------------------------ + // Capacity + //------------------------------------------------------------------------ + public: + + /// \brief Returns the length of the string, in terms of bytes + /// + /// \return the length of the string, in terms of bytes + constexpr size_type size() const noexcept; + + /// \copydoc basic_string_view::size + constexpr size_type length() const noexcept; + + /// \brief The largest possible number of char-like objects that can be + /// referred to by a basic_string_view. + /// \return Maximum number of characters + constexpr size_type max_size() const noexcept; + + /// \brief Returns whether the basic_string_view is empty + /// (i.e. whether its length is 0). + /// + /// \return whether the basic_string_view is empty + constexpr bool empty() const noexcept; + + //------------------------------------------------------------------------ + // Element Access + //------------------------------------------------------------------------ + public: + + /// \brief Gets the ansi-string of the current basic_string_view + /// + /// \return the ansi-string pointer + constexpr const char_type* c_str() const noexcept; + + /// \brief Gets the data of the current basic_string_view + /// + /// \note This is an alias of #c_str + /// + /// \return the data this basic_string_view contains + constexpr const char_type* data() const noexcept; + + /// \brief Accesses the element at index \p pos + /// + /// \param pos the index to access + /// \return const reference to the character + constexpr const_reference operator[](size_type pos) const noexcept; + + /// \brief Accesses the element at index \p pos + /// + /// \param pos the index to access + /// \return const reference to the character + constexpr const_reference at(size_type pos) const; + + /// \brief Access the first character of the string + /// + /// \note Undefined behavior if basic_string_view is empty + /// + /// \return reference to the first character of the string + constexpr const_reference front() const noexcept; + + /// \brief References the last character of the string + /// + /// \note Undefined behavior if basic_string_view is empty + /// + /// \return reference to the last character of the string + constexpr const_reference back() const noexcept; + + //------------------------------------------------------------------------ + // Modifiers + //------------------------------------------------------------------------ + public: + + /// \brief Moves the start of the view forward by n characters. + /// + /// The behavior is undefined if n > size(). + /// + /// \param n number of characters to remove from the start of the view + void remove_prefix(size_type n) noexcept; + + /// \brief Moves the end of the view back by n characters. + /// + /// The behavior is undefined if n > size(). + /// + /// \param n number of characters to remove from the end of the view + void remove_suffix(size_type n) noexcept; + + /// \brief Exchanges the view with that of v. + /// + /// \param v view to swap with + void swap(basic_string_view& v) noexcept; + + //------------------------------------------------------------------------ + // Conversions + //------------------------------------------------------------------------ + public: + + /// \brief Creates a basic_string with a copy of the content of the current view. + /// + /// \tparam Allocator type used to allocate internal storage + /// \param a Allocator instance to use for allocating the new string + /// + /// \return A basic_string containing a copy of the characters of the current view. + template> + constexpr std::basic_string + to_string(const Allocator& a = Allocator()) const; + + /// \copydoc basic_string_view::to_string + template + explicit constexpr operator std::basic_string() const; + + //------------------------------------------------------------------------ + // Operations + //------------------------------------------------------------------------ + public: + + /// \brief Copies the substring [pos, pos + rcount) to the character string pointed + /// to by dest, where rcount is the smaller of count and size() - pos. + /// + /// \param dest pointer to the destination character string + /// \param count requested substring length + /// \param pos position of the first character + size_type copy( char_type* dest, + size_type count = npos, + size_type pos = 0 ) const; + + /// \brief Returns a substring of this viewed string + /// + /// \param pos the position of the first character in the substring + /// \param len the length of the substring + /// \return the created substring + basic_string_view substr(size_t pos = 0, size_t len = npos) const; + + //------------------------------------------------------------------------ + + /// \brief Compares two character sequences + /// + /// \param v view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(basic_string_view v) const noexcept; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count number of characters of this view to compare + /// \param v view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(size_type pos, size_type count, basic_string_view v) const; + + /// \brief Compares two character sequences + /// + /// \param pos1 position of the first character in this view to compare + /// \param count1 number of characters of this view to compare + /// \param v view to compare + /// \param pos2 position of the second character in this view to compare + /// \param count2 number of characters of the given view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare( size_type pos1, size_type count1, basic_string_view v, + size_type pos2, size_type count2 ) const; + + /// \brief Compares two character sequences + /// + /// \param s pointer to the character string to compare to + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(const char_type* s) const; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count number of characters of this view to compare + /// \param s pointer to the character string to compare to + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(size_type pos, size_type count, const char_type* s) const; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count1 number of characters of this view to compare + /// \param s pointer to the character string to compare to + /// \param count2 number of characters of the given view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare( size_type pos, size_type count1, const char_type* s, + size_type count2 ) const; + + //------------------------------------------------------------------------ + + size_type find(basic_string_view v, size_type pos = 0) const; + + size_type find(char_type c, size_type pos = 0) const; + + size_type find(const char_type* s, size_type pos, size_type count) const; + + size_type find(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type rfind(basic_string_view v, size_type pos = npos) const; + + size_type rfind(char_type c, size_type pos = npos) const; + + size_type rfind(const char_type* s, size_type pos, size_type count) const; + + size_type rfind(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + + size_type find_first_of(basic_string_view v, size_type pos = 0) const; + + size_type find_first_of(char_type c, size_type pos = 0) const; + + size_type find_first_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_first_of(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type find_last_of(basic_string_view v, size_type pos = npos) const; + + size_type find_last_of(char_type c, size_type pos = npos) const; + + size_type find_last_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_last_of(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + + size_type find_first_not_of(basic_string_view v, size_type pos = 0) const; + + size_type find_first_not_of(char_type c, size_type pos = 0) const; + + size_type find_first_not_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_first_not_of(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type find_last_not_of(basic_string_view v, size_type pos = npos) const; + + size_type find_last_not_of(char_type c, size_type pos = npos) const; + + size_type find_last_not_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_last_not_of(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + // Iterators + //------------------------------------------------------------------------ + public: + + /// \{ + /// \brief Retrieves the begin iterator for this basic_string_view + /// + /// \return the begin iterator + const_iterator begin() const noexcept; + const_iterator cbegin() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the end iterator for this basic_string_view + /// + /// \return the end iterator + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the reverse begin iterator for this basic_string_view + /// + /// \return the reverse begin iterator + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator rend() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the reverse end iterator for this basic_string_view + /// + /// \return the reverse end iterator + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + /// \} + + //------------------------------------------------------------------------ + // Private Member + //------------------------------------------------------------------------ + private: + + const char_type* m_str; ///< The internal string type + size_type m_size; ///< The size of this string + + /// \brief Checks whether \p c is one of the characters in \p str + /// + /// \param c the character to check + /// \param str the characters to compare against + /// \return true if \p c is one of the characters in \p str + static bool is_one_of(CharT c, basic_string_view str); + }; + + template + const typename basic_string_view::size_type + basic_string_view::npos; + + //-------------------------------------------------------------------------- + // Public Functions + //-------------------------------------------------------------------------- + + /// \brief Overload for ostream output of basic_string_view + /// + /// \param o The output stream to print to + /// \param str the string to print + /// \return reference to the output stream + template + std::basic_ostream& operator<<(std::basic_ostream& o, + const basic_string_view& str); + + template + void swap(basic_string_view& lhs, + basic_string_view& rhs) noexcept; + + //-------------------------------------------------------------------------- + // Comparison Functions + //-------------------------------------------------------------------------- + + template + bool operator==(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator!=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator<(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator>(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator<=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator>=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + + //-------------------------------------------------------------------------- + // Type Aliases + //-------------------------------------------------------------------------- + + using string_view = basic_string_view; + using wstring_view = basic_string_view; + using u16string_view = basic_string_view; + using u32string_view = basic_string_view; + +} // namespace bpstd + +#ifndef BPSTD_DETAIL_STRING_VIEW_INL +#define BPSTD_DETAIL_STRING_VIEW_INL + +namespace bpstd { + + //-------------------------------------------------------------------------- + // Constructor + //-------------------------------------------------------------------------- + + template + inline constexpr basic_string_view::basic_string_view() + noexcept + : m_str(nullptr), + m_size(0) + { + + } + + template + template + inline basic_string_view::basic_string_view(const std::basic_string& str) + noexcept + : m_str(str.c_str()), + m_size(str.size()) + { + + } + + template + inline constexpr basic_string_view::basic_string_view(const char_type* str) + noexcept + : m_str(str), + m_size(traits_type::length(str)) + { + + } + + template + inline constexpr basic_string_view::basic_string_view(const char_type* str, size_type count) + noexcept + : m_str(str), + m_size(count) + { + + } + + //-------------------------------------------------------------------------- + // Capacity + //-------------------------------------------------------------------------- + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::size() + const noexcept + { + return m_size; + } + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::length() + const noexcept + { + return size(); + } + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::max_size() + const noexcept + { + return npos - 1; + } + + template + inline constexpr bool basic_string_view::empty() + const noexcept + { + return m_size == 0; + } + + //-------------------------------------------------------------------------- + // Element Access + //-------------------------------------------------------------------------- + + template + inline constexpr const typename basic_string_view::char_type* + basic_string_view::c_str() + const noexcept + { + return m_str; + } + + template + inline constexpr const typename basic_string_view::char_type* + basic_string_view::data() + const noexcept + { + return m_str; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::operator[](size_type pos) + const noexcept + { + return m_str[pos]; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::at(size_type pos) + const + { + return pos < m_size ? m_str[pos] : throw std::out_of_range("Input out of range in basic_string_view::at"), m_str[pos]; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::front( ) + const noexcept + { + return *m_str; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::back( ) + const noexcept + { + return m_str[m_size-1]; + } + + //-------------------------------------------------------------------------- + // Modifiers + //-------------------------------------------------------------------------- + + template + inline void + basic_string_view::remove_prefix(size_type n) + noexcept + { + m_str += n, m_size -= n; + } + + template + inline void + basic_string_view::remove_suffix(size_type n) + noexcept + { + m_size -= n; + } + + template + inline void + basic_string_view::swap(basic_string_view& v) + noexcept + { + using std::swap; + swap(m_size,v.m_size); + swap(m_str,v.m_str); + } + + //-------------------------------------------------------------------------- + // Conversions + //-------------------------------------------------------------------------- + + template + template + inline constexpr std::basic_string + basic_string_view::to_string(const Allocator& a) + const + { + return std::basic_string(m_str, m_size, a); + } + + template + template + inline constexpr basic_string_view::operator + std::basic_string() + const + { + return std::basic_string(m_str, m_size); + } + + //-------------------------------------------------------------------------- + // String Operations + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::copy(char_type* dest, + size_type count, + size_type pos) + const + { + if(pos >= m_size) { + throw std::out_of_range("Index out of range in basic_string_view::copy"); + } + + const size_type rcount = std::min(m_size - pos,count+1); + std::copy( m_str + pos, m_str + pos + rcount, dest); + return rcount; + } + + template + inline basic_string_view + basic_string_view::substr(size_type pos, + size_type len) + const + { + const size_type max_length = pos > m_size ? 0 : m_size - pos; + + if (pos > size()) { + throw std::out_of_range("Index out of range in basic_string_view::substr"); + } + + return basic_string_view(m_str + pos, std::min(len, max_length) ); + } + + //-------------------------------------------------------------------------- + + template + inline int basic_string_view::compare(basic_string_view v) + const noexcept + { + const size_type rlen = std::min(m_size,v.m_size); + const int compare = Traits::compare(m_str,v.m_str,rlen); + + return (compare ? compare : (m_size < v.m_size ? -1 : (m_size > v.m_size ? 1 : 0))); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count, + basic_string_view v) + const + { + return substr(pos,count).compare(v); + } + + template + inline int basic_string_view::compare(size_type pos1, + size_type count1, + basic_string_view v, + size_type pos2, + size_type count2) + const + { + return substr(pos1,count1).compare(v.substr(pos2,count2)); + } + + template + inline int basic_string_view::compare(const char_type* s) + const + { + return compare(basic_string_view(s)); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count, + const char_type* s) + const + { + return substr(pos, count).compare(basic_string_view(s)); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count1, + const char_type* s, + size_type count2) + const + { + return substr(pos, count1).compare(basic_string_view(s, count2)); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find(basic_string_view v, + size_type pos) + const + { + // Can't find a substring if the substring is bigger than this + if (pos > size()) { + return npos; + } + if ((pos + v.size()) > size()) { + return npos; + } + + const auto offset = pos; + const auto increments = size() - v.size(); + + for (auto i = 0u; i <= increments; ++i) { + const auto j = i + offset; + if (substr(j, v.size()) == v) { + return j; + } + } + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(char_type c, + size_type pos) + const + { + return find(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(const char_type* s, size_type pos, + size_type count) + const + { + return find(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(const char_type* s, + size_type pos) + const + { + return find(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return v.empty() ? 0u : npos; + } + if (v.empty()) { + return std::min(size() - 1, pos); + } + if (v.size() > size()) { + return npos; + } + + auto i = std::min(pos, (size() - v.size())); + while (i != npos) { + if (substr(i, v.size()) == v) { + return i; + } + --i; + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(char_type c, + size_type pos) + const + { + return rfind(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(const char_type* s, size_type pos, + size_type count) + const + { + return rfind(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(const char_type* s, + size_type pos) + const + { + return rfind(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(basic_string_view v, + size_type pos) + const + { + const auto max_index = size(); + for (auto i = pos; i < max_index; ++i) { + if (is_one_of(m_str[i],v)) { + return i; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(char_type c, + size_type pos) + const + { + return find_first_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(const char_type* s, size_type pos, + size_type count) + const + { + return find_first_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(const char_type* s, + size_type pos) + const + { + return find_first_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return npos; + } + const auto max_index = std::min(size() - 1, pos); + for (auto i = 0u; i <= max_index; ++i) { + const auto j = max_index - i; + + if (is_one_of(m_str[j],v)) { + return j; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(char_type c, + size_type pos) + const + { + return find_last_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(const char_type* s, size_type pos, + size_type count) + const + { + return find_last_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(const char_type* s, + size_type pos) + const + { + return find_last_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(basic_string_view v, + size_type pos) + const + { + const auto max_index = size(); + for (auto i = pos; i < max_index; ++i) { + if (!is_one_of(m_str[i],v)) { + return i; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(char_type c, + size_type pos) + const + { + return find_first_not_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(const char_type* s, + size_type pos, + size_type count) + const + { + return find_first_not_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(const char_type* s, + size_type pos) + const + { + return find_first_not_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return npos; + } + const auto max_index = std::min(size() - 1, pos); + for (auto i = 0u; i <= max_index; ++i) { + const auto j = max_index - i; + + if (!is_one_of(m_str[j],v)) { + return j; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(char_type c, + size_type pos) + const + { + return find_last_not_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(const char_type* s, + size_type pos, + size_type count) + const + { + return find_last_not_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(const char_type* s, + size_type pos) + const + { + return find_last_not_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + // Iterator + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::const_iterator + basic_string_view::begin() + const noexcept + { + return m_str; + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::cbegin() + const noexcept + { + return begin(); + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::end() + const noexcept + { + return m_str + m_size; + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::cend() + const noexcept + { + return cend(); + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::rbegin() + const noexcept + { + return const_reverse_iterator{end()}; + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::crbegin() + const noexcept + { + return rbegin(); + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::rend() + const noexcept + { + return const_reverse_iterator{begin()}; + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::crend() + const noexcept + { + return crend(); + } + + template + inline bool basic_string_view::is_one_of(CharT c, + basic_string_view str) + { + for (auto s : str) { + if (c == s) { + return true; + } + } + return false; + } + + //-------------------------------------------------------------------------- + // Public Functions + //-------------------------------------------------------------------------- + + template + std::basic_ostream& operator<<(std::basic_ostream& o, + const basic_string_view& str) + { + o.write(str.data(),str.size()); + return o; + } + + template + inline void swap(basic_string_view& lhs, + basic_string_view& rhs) + noexcept + { + lhs.swap(rhs); + } + + //-------------------------------------------------------------------------- + // Comparison Functions + //-------------------------------------------------------------------------- + + template + inline bool operator==(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) == 0; + } + + template + inline bool operator==(basic_string_view lhs, + const CharT* rhs) + noexcept + { + return lhs == basic_string_view(rhs); + } + + template + inline bool operator==(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) == rhs; + } + + template + inline bool operator==(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) == rhs; + } + + template + inline bool operator==(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs == basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator!=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) != 0; + } + + template + inline bool operator!=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs != basic_string_view(rhs); + } + + template + inline bool operator!=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) != rhs; + } + + template + inline bool operator!=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) != rhs; + } + + template + inline bool operator!=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs != basic_string_view(rhs); + } + //-------------------------------------------------------------------------- + + template + inline bool operator<(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) < 0; + } + + template + inline bool operator<(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs < basic_string_view(rhs); + } + + template + inline bool operator<(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) < rhs; + } + + template + inline bool operator<(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) < rhs; + } + + template + inline bool operator<(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs < basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator>(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) > 0; + } + + template + inline bool operator>(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs > basic_string_view(rhs); + } + + template + inline bool operator>(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) > rhs; + } + + template + inline bool operator>(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) > rhs; + } + + template + inline bool operator>(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs > basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator<=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) <= 0; + } + + template + inline bool operator<=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs <= basic_string_view(rhs); + } + + template + inline bool operator<=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) <= rhs; + } + + template + inline bool operator<=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) <= rhs; + } + + template + inline bool operator<=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs <= basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator>=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) >= 0; + } + + template + inline bool operator>=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs >= basic_string_view(rhs); + } + + template + inline bool operator>=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) >= rhs; + } + + template + inline bool operator>=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) >= rhs; + } + + template + inline bool operator>=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs >= basic_string_view(rhs); + } + +} // namespace bpstd + +#endif /* BPSTD_DETAIL_STRING_VIEW_INL */ + +#endif /* BPSTD_STRING_VIEW_HPP */ diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index 6d9949dbbd..6f1647c639 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -50,7 +50,6 @@ typedef struct Rules_t RulesSet; #include "modsecurity/variable_origin.h" #include "modsecurity/anchored_set_variable_translation_proxy.h" - #ifndef NO_LOGS #define ms_dbg(b, c) \ do { \ @@ -103,6 +102,7 @@ class ModSecurity; class Transaction; class RulesSet; class RuleMessage; +class RuleWithActions; namespace actions { class Action; namespace disruptive { @@ -303,7 +303,7 @@ class TransactionSecMarkerManagement { if (m_marker) { return m_marker; } else { - throw; + throw std::runtime_error("Error get current marker\n"); } } @@ -319,8 +319,56 @@ class TransactionSecMarkerManagement { std::shared_ptr m_marker; }; +class TransactionRuleMessageManagement { + public: + explicit TransactionRuleMessageManagement(Transaction *t) + : m_transaction(t), + m_noAuditLog(false) { + messageNew(); + }; + + RuleMessage *messageGetLast(); + void messageNew(); + + void logMatchLastRuleOnTheChain(RuleWithActions *rule); + + void messageSetNoAuditLog(bool a) { + m_noAuditLog = a; + } + + bool messageSaveAuditLog() const { + return m_noAuditLog; + } + + std::list messageGetAll() { + std::list messages; + for (RuleMessage *a : m_rulesMessages) { + messages.push_back(a); + } + + return messages; + } + + void messageClear() { + m_rulesMessages.clear(); + } + + private: + /** + * This variable holds all the messages asked to be save by the utilization + * of the actions: `log_data' and `msg'. These should be included on the + * auditlogs. + */ + std::list m_rulesMessages; + + Transaction *m_transaction; + bool m_noAuditLog; +}; + + /** @ingroup ModSecurity_CPP_API */ -class Transaction : public TransactionAnchoredVariables, public TransactionSecMarkerManagement { +class Transaction : public TransactionAnchoredVariables, public TransactionSecMarkerManagement, \ + public TransactionRuleMessageManagement { public: Transaction(ModSecurity *transaction, RulesSet *rules, void *logCbData); Transaction(ModSecurity *transaction, RulesSet *rules, char *id, @@ -400,7 +448,7 @@ class Transaction : public TransactionAnchoredVariables, public TransactionSecMa #ifndef NO_LOGS void debug(int, std::string) const; #endif - void serverLog(std::shared_ptr rm); + void serverLog(RuleMessage *rm); int getRuleEngineState() const; @@ -529,13 +577,6 @@ class Transaction : public TransactionAnchoredVariables, public TransactionSecMa */ std::list< std::pair > m_auditLogModifier; - /** - * This variable holds all the messages asked to be save by the utilization - * of the actions: `log_data' and `msg'. These should be included on the - * auditlogs. - */ - std::list m_rulesMessages; - /** * Holds the request body, in case of any. */ diff --git a/src/Makefile.am b/src/Makefile.am index b339b1ba5d..1a6f1b88c3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -43,21 +43,19 @@ pkginclude_HEADERS = \ ../headers/modsecurity/intervention.h \ ../headers/modsecurity/modsecurity.h \ ../headers/modsecurity/rule.h \ - ../headers/modsecurity/rule_marker.h \ - ../headers/modsecurity/rule_unconditional.h \ - ../headers/modsecurity/rule_with_actions.h \ - ../headers/modsecurity/rule_with_operator.h \ ../headers/modsecurity/rules.h \ ../headers/modsecurity/rule_message.h \ ../headers/modsecurity/rules_set.h \ ../headers/modsecurity/rules_set_phases.h \ ../headers/modsecurity/rules_set_properties.h \ ../headers/modsecurity/rules_exceptions.h \ + ../headers/modsecurity/string_view.hpp \ ../headers/modsecurity/transaction.h \ ../headers/modsecurity/variable_origin.h \ ../headers/modsecurity/variable_value.h + libmodsecurity_includesub_collection_HEADERS = \ ../headers/modsecurity/collection/collection.h \ ../headers/modsecurity/collection/collections.h @@ -167,6 +165,7 @@ ACTIONS = \ actions/transformations/js_decode.cc \ actions/transformations/length.cc \ actions/transformations/lower_case.cc \ + actions/transformations/php_args_names.cc \ actions/transformations/md5.cc \ actions/transformations/none.cc \ actions/transformations/normalise_path.cc \ @@ -288,6 +287,7 @@ libmodsecurity_la_SOURCES = \ debug_log/debug_log_writer.cc \ run_time_string.cc \ rule.cc \ + rules.cc \ rule_unconditional.cc \ rule_with_actions.cc \ rule_with_operator.cc \ diff --git a/src/actions/accuracy.cc b/src/actions/accuracy.cc index c8cfca72aa..91f02b40fd 100644 --- a/src/actions/accuracy.cc +++ b/src/actions/accuracy.cc @@ -21,6 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "src/rule_with_actions.h" namespace modsecurity { @@ -39,8 +40,8 @@ bool Accuracy::init(std::string *error) { } -bool Accuracy::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_accuracy = m_accuracy; +bool Accuracy::execute(RuleWithActions *rule, Transaction *transaction) { + rule->setAccuracy(m_accuracy); return true; } diff --git a/src/actions/accuracy.h b/src/actions/accuracy.h index f787af190c..1ca9a299dc 100644 --- a/src/actions/accuracy.h +++ b/src/actions/accuracy.h @@ -33,8 +33,9 @@ class Accuracy : public Action { : Action(action, ConfigurationKind), m_accuracy(0) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; + int getAccuracy() const { return m_accuracy; } private: int m_accuracy; diff --git a/src/actions/action.cc b/src/actions/action.cc index e58e2067e7..d5eb758c71 100644 --- a/src/actions/action.cc +++ b/src/actions/action.cc @@ -45,13 +45,13 @@ namespace modsecurity { namespace actions { -std::string Action::evaluate(const std::string &value, +std::string Action::execute(const std::string &value, Transaction *transaction) { return value; } -bool Action::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Action::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/audit_log.cc b/src/actions/audit_log.cc index c628ac2364..6562bcbe3f 100644 --- a/src/actions/audit_log.cc +++ b/src/actions/audit_log.cc @@ -27,12 +27,8 @@ namespace modsecurity { namespace actions { -bool AuditLog::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_noAuditLog = false; - ms_dbg_a(transaction, 9, "Saving transaction to logs"); - rm->m_saveMessage = true; - +bool AuditLog::execute(RuleWithActions *rule, Transaction *transaction) { + transaction->messageSetNoAuditLog(false); return true; } diff --git a/src/actions/audit_log.h b/src/actions/audit_log.h index d870de2ac3..56026b8a3f 100644 --- a/src/actions/audit_log.h +++ b/src/actions/audit_log.h @@ -35,8 +35,7 @@ class AuditLog : public Action { explicit AuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/block.cc b/src/actions/block.cc index bde5e63464..d036213eac 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -24,22 +24,15 @@ #include "modsecurity/rule.h" #include "modsecurity/intervention.h" #include "src/actions/data/status.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { -bool Block::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Block::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 8, "Marking request as disruptive."); - - for (auto &a : transaction->m_rules->m_defaultActions[rule->getPhase()]) { - if (a->isDisruptive() == false) { - continue; - } - a->evaluate(rule, transaction, rm); - } - return true; } diff --git a/src/actions/block.h b/src/actions/block.h index 7c40bbd830..0c30130897 100644 --- a/src/actions/block.h +++ b/src/actions/block.h @@ -35,8 +35,10 @@ class Block : public Action { public: explicit Block(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + Block(const Block &a) = delete; + Block &operator=(const Block &a) = delete; + + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/capture.cc b/src/actions/capture.cc index 62b86fc979..68f49b04a0 100644 --- a/src/actions/capture.cc +++ b/src/actions/capture.cc @@ -32,7 +32,7 @@ namespace modsecurity { namespace actions { -bool Capture::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Capture::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/capture.h b/src/actions/capture.h index 33207439c9..d7bd30e054 100644 --- a/src/actions/capture.h +++ b/src/actions/capture.h @@ -31,7 +31,7 @@ class Capture : public Action { explicit Capture(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/chain.cc b/src/actions/chain.cc index 197f861ff2..d51fe37778 100644 --- a/src/actions/chain.cc +++ b/src/actions/chain.cc @@ -20,13 +20,15 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { -bool Chain::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->setChained(true); +bool Chain::execute(RuleWithActions *rule, Transaction *transaction) { + rule->setHasChainAction(true); return true; } diff --git a/src/actions/chain.h b/src/actions/chain.h index c5642baa6e..8de292c076 100644 --- a/src/actions/chain.h +++ b/src/actions/chain.h @@ -35,7 +35,7 @@ class Chain : public Action { explicit Chain(const std::string &action) : Action(action, ConfigurationKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/ctl/audit_log_parts.cc b/src/actions/ctl/audit_log_parts.cc index 8420b4925c..335b2d2178 100644 --- a/src/actions/ctl/audit_log_parts.cc +++ b/src/actions/ctl/audit_log_parts.cc @@ -38,7 +38,7 @@ bool AuditLogParts::init(std::string *error) { return true; } -bool AuditLogParts::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool AuditLogParts::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_auditLogModifier.push_back( std::make_pair(mPartsAction, mParts)); return true; diff --git a/src/actions/ctl/audit_log_parts.h b/src/actions/ctl/audit_log_parts.h index f4980780ef..0e182a3149 100644 --- a/src/actions/ctl/audit_log_parts.h +++ b/src/actions/ctl/audit_log_parts.h @@ -33,7 +33,7 @@ class AuditLogParts : public Action { mPartsAction(0), mParts("") { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; protected: diff --git a/src/actions/ctl/request_body_access.cc b/src/actions/ctl/request_body_access.cc index 0d3415551f..72c5cd6d19 100644 --- a/src/actions/ctl/request_body_access.cc +++ b/src/actions/ctl/request_body_access.cc @@ -42,7 +42,7 @@ bool RequestBodyAccess::init(std::string *error) { return true; } -bool RequestBodyAccess::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RequestBodyAccess::execute(RuleWithActions *rule, Transaction *transaction) { if (m_request_body_access) { transaction->m_requestBodyAccess = RulesSetProperties::TrueConfigBoolean; } else { diff --git a/src/actions/ctl/request_body_access.h b/src/actions/ctl/request_body_access.h index afe3b3d489..a52fa3c95c 100644 --- a/src/actions/ctl/request_body_access.h +++ b/src/actions/ctl/request_body_access.h @@ -34,7 +34,7 @@ class RequestBodyAccess : public Action { m_request_body_access(false) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool m_request_body_access; }; diff --git a/src/actions/ctl/request_body_processor_json.cc b/src/actions/ctl/request_body_processor_json.cc index 5a9593a359..58bf8ec32c 100644 --- a/src/actions/ctl/request_body_processor_json.cc +++ b/src/actions/ctl/request_body_processor_json.cc @@ -25,7 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorJSON::evaluate(RuleWithActions *rule, +bool RequestBodyProcessorJSON::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_requestBodyProcessor = Transaction::JSONRequestBody; transaction->m_variableReqbodyProcessor.set("JSON", diff --git a/src/actions/ctl/request_body_processor_json.h b/src/actions/ctl/request_body_processor_json.h index 48125597e0..1d4d164500 100644 --- a/src/actions/ctl/request_body_processor_json.h +++ b/src/actions/ctl/request_body_processor_json.h @@ -31,7 +31,7 @@ class RequestBodyProcessorJSON : public Action { explicit RequestBodyProcessorJSON(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/ctl/request_body_processor_urlencoded.cc b/src/actions/ctl/request_body_processor_urlencoded.cc index 2fecee79c4..8a8dafd182 100644 --- a/src/actions/ctl/request_body_processor_urlencoded.cc +++ b/src/actions/ctl/request_body_processor_urlencoded.cc @@ -25,7 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorURLENCODED::evaluate(RuleWithActions *rule, +bool RequestBodyProcessorURLENCODED::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_requestBodyType = Transaction::WWWFormUrlEncoded; transaction->m_variableReqbodyProcessor.set("URLENCODED", diff --git a/src/actions/ctl/request_body_processor_urlencoded.h b/src/actions/ctl/request_body_processor_urlencoded.h index 5b5557d431..454212c05b 100644 --- a/src/actions/ctl/request_body_processor_urlencoded.h +++ b/src/actions/ctl/request_body_processor_urlencoded.h @@ -31,7 +31,7 @@ class RequestBodyProcessorURLENCODED : public Action { explicit RequestBodyProcessorURLENCODED(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/ctl/request_body_processor_xml.cc b/src/actions/ctl/request_body_processor_xml.cc index 02c41bb2ba..f45dcf962a 100644 --- a/src/actions/ctl/request_body_processor_xml.cc +++ b/src/actions/ctl/request_body_processor_xml.cc @@ -25,7 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorXML::evaluate(RuleWithActions *rule, +bool RequestBodyProcessorXML::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_requestBodyProcessor = Transaction::XMLRequestBody; transaction->m_variableReqbodyProcessor.set("XML", diff --git a/src/actions/ctl/request_body_processor_xml.h b/src/actions/ctl/request_body_processor_xml.h index 9084d1d98a..3be32ccfcd 100644 --- a/src/actions/ctl/request_body_processor_xml.h +++ b/src/actions/ctl/request_body_processor_xml.h @@ -31,7 +31,7 @@ class RequestBodyProcessorXML : public Action { explicit RequestBodyProcessorXML(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/ctl/rule_engine.cc b/src/actions/ctl/rule_engine.cc index 66809f4b1c..a143e68ac4 100644 --- a/src/actions/ctl/rule_engine.cc +++ b/src/actions/ctl/rule_engine.cc @@ -45,7 +45,7 @@ bool RuleEngine::init(std::string *error) { return true; } -bool RuleEngine::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleEngine::execute(RuleWithActions *rule, Transaction *transaction) { std::stringstream a; a << "Setting SecRuleEngine to "; a << modsecurity::RulesSetProperties::ruleEngineStateString(m_ruleEngine); diff --git a/src/actions/ctl/rule_engine.h b/src/actions/ctl/rule_engine.h index fca5d39b16..f9ac4db794 100644 --- a/src/actions/ctl/rule_engine.h +++ b/src/actions/ctl/rule_engine.h @@ -35,7 +35,7 @@ class RuleEngine : public Action { m_ruleEngine(RulesSetProperties::PropertyNotSetRuleEngine) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; RulesSetProperties::RuleEngine m_ruleEngine; }; diff --git a/src/actions/ctl/rule_remove_by_id.cc b/src/actions/ctl/rule_remove_by_id.cc index e76a3119d2..1dc1814a91 100644 --- a/src/actions/ctl/rule_remove_by_id.cc +++ b/src/actions/ctl/rule_remove_by_id.cc @@ -83,7 +83,7 @@ bool RuleRemoveById::init(std::string *error) { return false; } -bool RuleRemoveById::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveById::execute(RuleWithActions *rule, Transaction *transaction) { for (auto &i : m_ids) { transaction->m_ruleRemoveById.push_back(i); } diff --git a/src/actions/ctl/rule_remove_by_id.h b/src/actions/ctl/rule_remove_by_id.h index e0f0902b8a..58ed0519ca 100644 --- a/src/actions/ctl/rule_remove_by_id.h +++ b/src/actions/ctl/rule_remove_by_id.h @@ -33,7 +33,7 @@ class RuleRemoveById : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::list > m_ranges; std::list m_ids; diff --git a/src/actions/ctl/rule_remove_by_tag.cc b/src/actions/ctl/rule_remove_by_tag.cc index 76e7406fc2..e53a6f6d01 100644 --- a/src/actions/ctl/rule_remove_by_tag.cc +++ b/src/actions/ctl/rule_remove_by_tag.cc @@ -32,7 +32,7 @@ bool RuleRemoveByTag::init(std::string *error) { return true; } -bool RuleRemoveByTag::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveByTag::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_ruleRemoveByTag.push_back(m_tag); return true; } diff --git a/src/actions/ctl/rule_remove_by_tag.h b/src/actions/ctl/rule_remove_by_tag.h index 5689b7b166..35015eab7f 100644 --- a/src/actions/ctl/rule_remove_by_tag.h +++ b/src/actions/ctl/rule_remove_by_tag.h @@ -34,7 +34,7 @@ class RuleRemoveByTag : public Action { m_tag("") { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string m_tag; }; diff --git a/src/actions/ctl/rule_remove_target_by_id.cc b/src/actions/ctl/rule_remove_target_by_id.cc index 0776e34486..1eb668d6cb 100644 --- a/src/actions/ctl/rule_remove_target_by_id.cc +++ b/src/actions/ctl/rule_remove_target_by_id.cc @@ -51,7 +51,7 @@ bool RuleRemoveTargetById::init(std::string *error) { return true; } -bool RuleRemoveTargetById::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveTargetById::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_ruleRemoveTargetById.push_back( std::make_pair(m_id, m_target)); return true; diff --git a/src/actions/ctl/rule_remove_target_by_id.h b/src/actions/ctl/rule_remove_target_by_id.h index d71e4fc215..01a74907d8 100644 --- a/src/actions/ctl/rule_remove_target_by_id.h +++ b/src/actions/ctl/rule_remove_target_by_id.h @@ -35,7 +35,7 @@ class RuleRemoveTargetById : public Action { m_target("") { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_id; std::string m_target; diff --git a/src/actions/ctl/rule_remove_target_by_tag.cc b/src/actions/ctl/rule_remove_target_by_tag.cc index 1be6603fd8..5285b1619a 100644 --- a/src/actions/ctl/rule_remove_target_by_tag.cc +++ b/src/actions/ctl/rule_remove_target_by_tag.cc @@ -44,7 +44,7 @@ bool RuleRemoveTargetByTag::init(std::string *error) { return true; } -bool RuleRemoveTargetByTag::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveTargetByTag::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_ruleRemoveTargetByTag.push_back( std::make_pair(m_tag, m_target)); return true; diff --git a/src/actions/ctl/rule_remove_target_by_tag.h b/src/actions/ctl/rule_remove_target_by_tag.h index 7863e5a521..223816e147 100644 --- a/src/actions/ctl/rule_remove_target_by_tag.h +++ b/src/actions/ctl/rule_remove_target_by_tag.h @@ -33,7 +33,7 @@ class RuleRemoveTargetByTag : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string m_tag; std::string m_target; diff --git a/src/actions/data/status.cc b/src/actions/data/status.cc index 9429973859..0a81a6709f 100644 --- a/src/actions/data/status.cc +++ b/src/actions/data/status.cc @@ -38,8 +38,7 @@ bool Status::init(std::string *error) { } -bool Status::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Status::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_it.status = m_status; return true; } diff --git a/src/actions/data/status.h b/src/actions/data/status.h index d792247d68..5aa294e122 100644 --- a/src/actions/data/status.h +++ b/src/actions/data/status.h @@ -37,8 +37,7 @@ class Status : public Action { m_status(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_status; }; diff --git a/src/actions/disruptive/allow.cc b/src/actions/disruptive/allow.cc index 59e17374a1..5f689a80e6 100644 --- a/src/actions/disruptive/allow.cc +++ b/src/actions/disruptive/allow.cc @@ -49,7 +49,7 @@ bool Allow::init(std::string *error) { } -bool Allow::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Allow::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 4, "Dropping the evaluation of upcoming rules " \ "in favor of an `allow' action of type: " \ + allowTypeToName(m_allowType)); diff --git a/src/actions/disruptive/allow.h b/src/actions/disruptive/allow.h index d9a716cec7..84d09e21ae 100644 --- a/src/actions/disruptive/allow.h +++ b/src/actions/disruptive/allow.h @@ -59,7 +59,7 @@ class Allow : public Action { bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } AllowType m_allowType; diff --git a/src/actions/disruptive/deny.cc b/src/actions/disruptive/deny.cc index e105d65127..3a9ade8e27 100644 --- a/src/actions/disruptive/deny.cc +++ b/src/actions/disruptive/deny.cc @@ -28,8 +28,7 @@ namespace actions { namespace disruptive { -bool Deny::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Deny::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 8, "Running action deny"); if (transaction->m_it.status == 200) { @@ -38,9 +37,9 @@ bool Deny::evaluate(RuleWithActions *rule, Transaction *transaction, transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm->m_isDisruptive = true; + transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( - rm->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/deny.h b/src/actions/disruptive/deny.h index fb841a49a7..28ba74c016 100644 --- a/src/actions/disruptive/deny.h +++ b/src/actions/disruptive/deny.h @@ -33,8 +33,7 @@ class Deny : public Action { public: explicit Deny(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/drop.cc b/src/actions/disruptive/drop.cc index 18a3b55280..fe6b94b572 100644 --- a/src/actions/disruptive/drop.cc +++ b/src/actions/disruptive/drop.cc @@ -32,8 +32,7 @@ namespace actions { namespace disruptive { -bool Drop::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Drop::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 8, "Running action drop " \ "[executing deny instead of drop.]"); @@ -43,9 +42,9 @@ bool Drop::evaluate(RuleWithActions *rule, Transaction *transaction, transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm->m_isDisruptive = true; + transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( - rm->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/drop.h b/src/actions/disruptive/drop.h index f60eddfa6d..71394bca12 100644 --- a/src/actions/disruptive/drop.h +++ b/src/actions/disruptive/drop.h @@ -32,8 +32,7 @@ class Drop : public Action { public: explicit Drop(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/pass.cc b/src/actions/disruptive/pass.cc index e0f038c4cb..fc6833849d 100644 --- a/src/actions/disruptive/pass.cc +++ b/src/actions/disruptive/pass.cc @@ -29,8 +29,7 @@ namespace actions { namespace disruptive { -bool Pass::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Pass::execute(RuleWithActions *rule, Transaction *transaction) { intervention::free(&transaction->m_it); intervention::reset(&transaction->m_it); diff --git a/src/actions/disruptive/pass.h b/src/actions/disruptive/pass.h index 0c09d2874f..a21900a5d3 100644 --- a/src/actions/disruptive/pass.h +++ b/src/actions/disruptive/pass.h @@ -31,8 +31,7 @@ class Pass : public Action { public: explicit Pass(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/redirect.cc b/src/actions/disruptive/redirect.cc index ac2993b4c0..ff4640604f 100644 --- a/src/actions/disruptive/redirect.cc +++ b/src/actions/disruptive/redirect.cc @@ -34,8 +34,7 @@ bool Redirect::init(std::string *error) { } -bool Redirect::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Redirect::execute(RuleWithActions *rule, Transaction *transaction) { std::string m_urlExpanded(m_string->evaluate(transaction)); /* if it was changed before, lets keep it. */ if (transaction->m_it.status == 200 @@ -47,9 +46,9 @@ bool Redirect::evaluate(RuleWithActions *rule, Transaction *transaction, transaction->m_it.url = strdup(m_urlExpanded.c_str()); transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm->m_isDisruptive = true; + transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( - rm->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/redirect.h b/src/actions/disruptive/redirect.h index 46b5d51a96..2a1574a509 100644 --- a/src/actions/disruptive/redirect.h +++ b/src/actions/disruptive/redirect.h @@ -46,8 +46,7 @@ class Redirect : public Action { m_status(0), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; bool isDisruptive() override { return true; } diff --git a/src/actions/exec.cc b/src/actions/exec.cc index 8ed21d73ea..ab2dd041d8 100644 --- a/src/actions/exec.cc +++ b/src/actions/exec.cc @@ -49,7 +49,7 @@ bool Exec::init(std::string *error) { } -bool Exec::evaluate(RuleWithActions *rule, Transaction *t) { +bool Exec::execute(RuleWithActions *rule, Transaction *t) { ms_dbg_a(t, 8, "Running script... " + m_script); m_lua.run(t); return true; diff --git a/src/actions/exec.h b/src/actions/exec.h index f899982182..f12ed2d5d2 100644 --- a/src/actions/exec.h +++ b/src/actions/exec.h @@ -36,7 +36,7 @@ class Exec : public Action { ~Exec() { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/init_col.cc b/src/actions/init_col.cc index fe80068c58..38021982bf 100644 --- a/src/actions/init_col.cc +++ b/src/actions/init_col.cc @@ -54,7 +54,7 @@ bool InitCol::init(std::string *error) { } -bool InitCol::evaluate(RuleWithActions *rule, Transaction *t) { +bool InitCol::execute(RuleWithActions *rule, Transaction *t) { std::string collectionName(m_string->evaluate(t)); if (m_collection_key == "ip") { diff --git a/src/actions/init_col.h b/src/actions/init_col.h index 16d7ace921..4da8b31f0f 100644 --- a/src/actions/init_col.h +++ b/src/actions/init_col.h @@ -38,11 +38,11 @@ class InitCol : public Action { : Action(action, RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: std::string m_collection_key; - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/log.cc b/src/actions/log.cc index 6ca507cdb1..87dc252ae7 100644 --- a/src/actions/log.cc +++ b/src/actions/log.cc @@ -28,10 +28,7 @@ namespace modsecurity { namespace actions { -bool Log::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - ms_dbg_a(transaction, 9, "Saving transaction to logs"); - rm->m_saveMessage = true; +bool Log::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/log.h b/src/actions/log.h index 736d4a1304..d8c3483836 100644 --- a/src/actions/log.h +++ b/src/actions/log.h @@ -33,8 +33,7 @@ class Log : public Action { explicit Log(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/log_data.cc b/src/actions/log_data.cc index 49c539cfc4..9af821d42f 100644 --- a/src/actions/log_data.cc +++ b/src/actions/log_data.cc @@ -29,9 +29,8 @@ namespace modsecurity { namespace actions { -bool LogData::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_data = data(transaction); +bool LogData::execute(RuleWithActions *rule, Transaction *transaction) { + transaction->messageGetLast()->m_data = data(transaction); return true; } diff --git a/src/actions/log_data.h b/src/actions/log_data.h index da2fbf4df0..2c29cd468c 100644 --- a/src/actions/log_data.h +++ b/src/actions/log_data.h @@ -39,12 +39,11 @@ class LogData : public Action { : Action("logdata", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string data(Transaction *Transaction); - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/maturity.cc b/src/actions/maturity.cc index 131d2148bd..9b4ffaecd6 100644 --- a/src/actions/maturity.cc +++ b/src/actions/maturity.cc @@ -21,6 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "src/rule_with_actions.h" namespace modsecurity { @@ -39,8 +40,7 @@ bool Maturity::init(std::string *error) { } -bool Maturity::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_maturity = m_maturity; +bool Maturity::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/maturity.h b/src/actions/maturity.h index dd185efaa2..3f77c2c18e 100644 --- a/src/actions/maturity.h +++ b/src/actions/maturity.h @@ -33,8 +33,9 @@ class Maturity : public Action { : Action(action, ConfigurationKind), m_maturity(0) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; + int getMaturity() const { return m_maturity; } private: int m_maturity; diff --git a/src/actions/msg.cc b/src/actions/msg.cc index 1f0b3538d1..5a005f4195 100644 --- a/src/actions/msg.cc +++ b/src/actions/msg.cc @@ -46,10 +46,9 @@ namespace modsecurity { namespace actions { -bool Msg::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Msg::execute(RuleWithActions *rule, Transaction *transaction) { std::string msg = data(transaction); - rm->m_message = msg; + transaction->messageGetLast()->m_message = msg; ms_dbg_a(transaction, 9, "Saving msg: " + msg); return true; diff --git a/src/actions/msg.h b/src/actions/msg.h index 61661194ba..a2044e053d 100644 --- a/src/actions/msg.h +++ b/src/actions/msg.h @@ -40,11 +40,10 @@ class Msg : public Action { : Action("msg", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string data(Transaction *Transaction); - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/multi_match.cc b/src/actions/multi_match.cc index fb30f15516..3f6381ab99 100644 --- a/src/actions/multi_match.cc +++ b/src/actions/multi_match.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace actions { -bool MultiMatch::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool MultiMatch::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/multi_match.h b/src/actions/multi_match.h index b0fd2c767e..14a1751bdd 100644 --- a/src/actions/multi_match.h +++ b/src/actions/multi_match.h @@ -35,7 +35,7 @@ class MultiMatch : public Action { explicit MultiMatch(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/no_audit_log.cc b/src/actions/no_audit_log.cc index e4a59f7361..8283059b70 100644 --- a/src/actions/no_audit_log.cc +++ b/src/actions/no_audit_log.cc @@ -26,11 +26,8 @@ namespace modsecurity { namespace actions { -bool NoAuditLog::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_noAuditLog = true; - rm->m_saveMessage = false; - +bool NoAuditLog::execute(RuleWithActions *rule, Transaction *transaction) { + transaction->messageSetNoAuditLog(true); return true; } diff --git a/src/actions/no_audit_log.h b/src/actions/no_audit_log.h index dbd5d098fb..22491171dd 100644 --- a/src/actions/no_audit_log.h +++ b/src/actions/no_audit_log.h @@ -35,8 +35,7 @@ class NoAuditLog : public Action { explicit NoAuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/no_log.cc b/src/actions/no_log.cc index 501ea4da4d..4fadc190f4 100644 --- a/src/actions/no_log.cc +++ b/src/actions/no_log.cc @@ -29,9 +29,7 @@ namespace modsecurity { namespace actions { -bool NoLog::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_saveMessage = false; +bool NoLog::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/no_log.h b/src/actions/no_log.h index 87d4e30593..bb42a4f614 100644 --- a/src/actions/no_log.h +++ b/src/actions/no_log.h @@ -33,8 +33,7 @@ class NoLog : public Action { explicit NoLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/phase.cc b/src/actions/phase.cc index 2e9e727786..d8937c5765 100644 --- a/src/actions/phase.cc +++ b/src/actions/phase.cc @@ -22,6 +22,7 @@ #include "modsecurity/rule.h" #include "modsecurity/modsecurity.h" #include "src/utils/string.h" +#include "src/rule_with_actions.h" namespace modsecurity { @@ -72,7 +73,7 @@ bool Phase::init(std::string *error) { } -bool Phase::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Phase::execute(RuleWithActions *rule, Transaction *transaction) { rule->setPhase(m_phase); return true; } diff --git a/src/actions/phase.h b/src/actions/phase.h index 0fada3c3c5..056d55deba 100644 --- a/src/actions/phase.h +++ b/src/actions/phase.h @@ -37,7 +37,7 @@ class Phase : public Action { m_secRulesPhase(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_phase; int m_secRulesPhase; diff --git a/src/actions/rev.cc b/src/actions/rev.cc index 43d8d1be46..cda632dcf1 100644 --- a/src/actions/rev.cc +++ b/src/actions/rev.cc @@ -21,6 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "src/rule_with_actions.h" namespace modsecurity { @@ -33,8 +34,7 @@ bool Rev::init(std::string *error) { } -bool Rev::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_rev = m_rev; +bool Rev::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/rev.h b/src/actions/rev.h index 9e3c1bfb64..1556d76989 100644 --- a/src/actions/rev.h +++ b/src/actions/rev.h @@ -31,11 +31,12 @@ class Rev : public Action { public: explicit Rev(const std::string &action) : Action(action, ConfigurationKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; + std::string getRevision() const { return m_rev; } private: - std::string m_rev; + std::string m_rev; }; diff --git a/src/actions/rule_id.cc b/src/actions/rule_id.cc index d16bf63bec..5e4b3538c0 100644 --- a/src/actions/rule_id.cc +++ b/src/actions/rule_id.cc @@ -20,6 +20,8 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { @@ -48,8 +50,8 @@ bool RuleId::init(std::string *error) { } -bool RuleId::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_ruleId = m_ruleId; +bool RuleId::execute(RuleWithActions *rule, Transaction *transaction) { + rule->setId(m_ruleId); return true; } diff --git a/src/actions/rule_id.h b/src/actions/rule_id.h index 2e26f87f52..4b5e2d0707 100644 --- a/src/actions/rule_id.h +++ b/src/actions/rule_id.h @@ -37,7 +37,7 @@ class RuleId : public Action { m_ruleId(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; private: double m_ruleId; diff --git a/src/actions/set_env.cc b/src/actions/set_env.cc index f3fcc104b0..fd0abbed06 100644 --- a/src/actions/set_env.cc +++ b/src/actions/set_env.cc @@ -21,6 +21,8 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" #include "src/utils/string.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { @@ -31,7 +33,7 @@ bool SetENV::init(std::string *error) { } -bool SetENV::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetENV::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); auto pair = utils::string::ssplit_pair(colNameExpanded, '='); diff --git a/src/actions/set_env.h b/src/actions/set_env.h index 33ccfc3380..7622e22fd4 100644 --- a/src/actions/set_env.h +++ b/src/actions/set_env.h @@ -39,11 +39,11 @@ class SetENV : public Action { : Action("setenv", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_rsc.cc b/src/actions/set_rsc.cc index 8464a9b688..e6bace3c72 100644 --- a/src/actions/set_rsc.cc +++ b/src/actions/set_rsc.cc @@ -31,7 +31,7 @@ bool SetRSC::init(std::string *error) { } -bool SetRSC::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetRSC::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); ms_dbg_a(t, 8, "RESOURCE initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_rsc.h b/src/actions/set_rsc.h index 5913b7c799..d169c7cd24 100644 --- a/src/actions/set_rsc.h +++ b/src/actions/set_rsc.h @@ -39,11 +39,11 @@ class SetRSC : public Action { : Action("setsrc", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_sid.cc b/src/actions/set_sid.cc index c7a0db687a..2582cce13d 100644 --- a/src/actions/set_sid.cc +++ b/src/actions/set_sid.cc @@ -31,7 +31,7 @@ bool SetSID::init(std::string *error) { } -bool SetSID::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetSID::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); ms_dbg_a(t, 8, "Session ID initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_sid.h b/src/actions/set_sid.h index 64f8f3cc78..dd9d108551 100644 --- a/src/actions/set_sid.h +++ b/src/actions/set_sid.h @@ -39,11 +39,11 @@ class SetSID : public Action { : Action("setsid", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_uid.cc b/src/actions/set_uid.cc index 997df77b63..9ce487b175 100644 --- a/src/actions/set_uid.cc +++ b/src/actions/set_uid.cc @@ -31,7 +31,7 @@ bool SetUID::init(std::string *error) { } -bool SetUID::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetUID::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); ms_dbg_a(t, 8, "User collection initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_uid.h b/src/actions/set_uid.h index b8c3a0db74..7e3cdedc24 100644 --- a/src/actions/set_uid.h +++ b/src/actions/set_uid.h @@ -39,11 +39,11 @@ class SetUID : public Action { : Action("setuid", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index 6befdf0ccb..e274332e71 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -30,6 +30,8 @@ #include "src/variables/tx.h" #include "src/variables/user.h" #include "src/variables/variable.h" +#include "src/rule_with_operator.h" + namespace modsecurity { namespace actions { @@ -40,7 +42,7 @@ bool SetVar::init(std::string *error) { } -bool SetVar::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetVar::execute(RuleWithActions *rule, Transaction *t) { std::string targetValue; std::string resolvedPre; diff --git a/src/actions/set_var.h b/src/actions/set_var.h index 5fe9de0329..7687d96d9a 100644 --- a/src/actions/set_var.h +++ b/src/actions/set_var.h @@ -58,13 +58,13 @@ class SetVar : public Action { m_operation(operation), m_variable(std::move(variable)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: SetVarOperation m_operation; - std::unique_ptr m_variable; - std::unique_ptr m_string; + std::shared_ptr m_variable; + std::shared_ptr m_string; }; } // namespace actions diff --git a/src/actions/severity.cc b/src/actions/severity.cc index 8344e1052d..14af0f91c1 100644 --- a/src/actions/severity.cc +++ b/src/actions/severity.cc @@ -71,18 +71,7 @@ bool Severity::init(std::string *error) { } -bool Severity::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - ms_dbg_a(transaction, 9, "This rule severity is: " + \ - std::to_string(this->m_severity) + " current transaction is: " + \ - std::to_string(transaction->m_highestSeverityAction)); - - rm->m_severity = m_severity; - - if (transaction->m_highestSeverityAction > this->m_severity) { - transaction->m_highestSeverityAction = this->m_severity; - } - +bool Severity::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/severity.h b/src/actions/severity.h index 32a223e005..a07193e8a4 100644 --- a/src/actions/severity.h +++ b/src/actions/severity.h @@ -35,8 +35,7 @@ class Severity : public Action { : Action(action), m_severity(0) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; int m_severity; diff --git a/src/actions/skip.cc b/src/actions/skip.cc index fd2abfe219..441b34f83d 100644 --- a/src/actions/skip.cc +++ b/src/actions/skip.cc @@ -38,7 +38,7 @@ bool Skip::init(std::string *error) { } -bool Skip::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Skip::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 5, "Skipping the next " + \ std::to_string(m_skip_next) + " rules."); diff --git a/src/actions/skip.h b/src/actions/skip.h index 71e5d7aa05..aaf356be27 100644 --- a/src/actions/skip.h +++ b/src/actions/skip.h @@ -34,7 +34,7 @@ class Skip : public Action { m_skip_next(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_skip_next; }; diff --git a/src/actions/skip_after.cc b/src/actions/skip_after.cc index 64cccb48d0..a9fabc3d35 100644 --- a/src/actions/skip_after.cc +++ b/src/actions/skip_after.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace actions { -bool SkipAfter::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool SkipAfter::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 5, "Setting skipAfter for: " + *m_skipName); transaction->addMarker(m_skipName); return true; diff --git a/src/actions/skip_after.h b/src/actions/skip_after.h index f7e0680d72..ba9e12e9fb 100644 --- a/src/actions/skip_after.h +++ b/src/actions/skip_after.h @@ -34,7 +34,7 @@ class SkipAfter : public Action { : Action(action, RunTimeOnlyIfMatchKind), m_skipName(std::make_shared(m_parser_payload)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; private: std::shared_ptr m_skipName; }; diff --git a/src/actions/tag.cc b/src/actions/tag.cc index 3b1b6fd539..454ffea605 100644 --- a/src/actions/tag.cc +++ b/src/actions/tag.cc @@ -57,13 +57,11 @@ std::string Tag::getName(Transaction *transaction) { } -bool Tag::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { +bool Tag::execute(RuleWithActions *rule, Transaction *transaction) { std::string tag = getName(transaction); ms_dbg_a(transaction, 9, "Rule tag: " + tag); - rm->m_tags.push_back(tag); - + transaction->messageGetLast()->m_tags.push_back(tag); return true; } diff --git a/src/actions/tag.h b/src/actions/tag.h index 75369f5f7c..799b948d47 100644 --- a/src/actions/tag.h +++ b/src/actions/tag.h @@ -38,11 +38,10 @@ class Tag : public Action { std::string getName(Transaction *transaction); - bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; protected: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/transformations/base64_decode.cc b/src/actions/transformations/base64_decode.cc index 8ddfe23525..7e45edd308 100644 --- a/src/actions/transformations/base64_decode.cc +++ b/src/actions/transformations/base64_decode.cc @@ -32,11 +32,12 @@ namespace actions { namespace transformations { -std::string Base64Decode::evaluate(const std::string &value, - Transaction *transaction) { +void Base64Decode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + std::string value(in.c_str(), in.size()); std::string ret = Utils::Base64::decode(value); - - return ret; + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_decode.h b/src/actions/transformations/base64_decode.h index a82276990b..e4efdb2eb0 100644 --- a/src/actions/transformations/base64_decode.h +++ b/src/actions/transformations/base64_decode.h @@ -30,10 +30,12 @@ namespace transformations { class Base64Decode : public Transformation { public: - explicit Base64Decode(const std::string &action) : Transformation(action) { } + explicit Base64Decode(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/base64_decode_ext.cc b/src/actions/transformations/base64_decode_ext.cc index ee8e4b5b2c..3792eeec82 100644 --- a/src/actions/transformations/base64_decode_ext.cc +++ b/src/actions/transformations/base64_decode_ext.cc @@ -32,11 +32,11 @@ namespace actions { namespace transformations { -std::string Base64DecodeExt::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret = Utils::Base64::decode_forgiven(value); - - return ret; +void Base64DecodeExt::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + std::string ret = Utils::Base64::decode_forgiven(in); + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_decode_ext.h b/src/actions/transformations/base64_decode_ext.h index ad0efbdc0e..5adae8abef 100644 --- a/src/actions/transformations/base64_decode_ext.h +++ b/src/actions/transformations/base64_decode_ext.h @@ -30,10 +30,12 @@ namespace transformations { class Base64DecodeExt : public Transformation { public: - explicit Base64DecodeExt(const std::string &action) : Transformation(action) { } + explicit Base64DecodeExt(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/base64_encode.cc b/src/actions/transformations/base64_encode.cc index 8be748033c..86630e9a50 100644 --- a/src/actions/transformations/base64_encode.cc +++ b/src/actions/transformations/base64_encode.cc @@ -32,11 +32,12 @@ namespace actions { namespace transformations { -std::string Base64Encode::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret = Utils::Base64::encode(value); - - return ret; +void Base64Encode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + std::string ret = Utils::Base64::encode( + std::string(in.c_str(), in.size())); + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_encode.h b/src/actions/transformations/base64_encode.h index 0f7fd1fe53..6da7417360 100644 --- a/src/actions/transformations/base64_encode.h +++ b/src/actions/transformations/base64_encode.h @@ -30,10 +30,12 @@ namespace transformations { class Base64Encode : public Transformation { public: - explicit Base64Encode(const std::string &action) : Transformation(action) { } + explicit Base64Encode(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/cmd_line.cc b/src/actions/transformations/cmd_line.cc index 72087e36b9..45e1adb998 100644 --- a/src/actions/transformations/cmd_line.cc +++ b/src/actions/transformations/cmd_line.cc @@ -31,12 +31,12 @@ namespace actions { namespace transformations { -std::string CmdLine::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void CmdLine::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int space = 0; - for (auto& a : value) { + for (auto& a : in) { switch (a) { /* remove some characters */ case '"': @@ -53,7 +53,7 @@ std::string CmdLine::evaluate(const std::string &value, case '\r': case '\n': if (space == 0) { - ret.append(" "); + out.append(" "); space++; } break; @@ -62,22 +62,20 @@ std::string CmdLine::evaluate(const std::string &value, case '/': case '(': if (space) { - ret.pop_back(); + out.pop_back(); } space = 0; - ret.append(&a, 1); + out.append(&a, 1); break; /* copy normal characters */ default : char b = std::tolower(a); - ret.append(&b, 1); + out.append(&b, 1); space = 0; break; } } - - return ret; } diff --git a/src/actions/transformations/cmd_line.h b/src/actions/transformations/cmd_line.h index 851f29385f..c071e99c4d 100644 --- a/src/actions/transformations/cmd_line.h +++ b/src/actions/transformations/cmd_line.h @@ -30,11 +30,12 @@ namespace transformations { class CmdLine : public Transformation { public: - explicit CmdLine(const std::string &action) + explicit CmdLine(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/compress_whitespace.cc b/src/actions/transformations/compress_whitespace.cc index 506de2483d..bf0a79e125 100644 --- a/src/actions/transformations/compress_whitespace.cc +++ b/src/actions/transformations/compress_whitespace.cc @@ -30,37 +30,32 @@ namespace modsecurity { namespace actions { namespace transformations { -CompressWhitespace::CompressWhitespace(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string CompressWhitespace::evaluate(const std::string &value, - Transaction *transaction) { - std::string a; +void CompressWhitespace::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int inWhiteSpace = 0; - int i = 0; + size_t i = 0; + out.reserve(in.size()); - while (i < value.size()) { - if (isspace(value[i])) { + while (i < in.size()) { + if (isspace(in[i])) { if (inWhiteSpace) { i++; continue; } else { inWhiteSpace = 1; - a.append(" ", 1); + out.append(" ", 1); } } else { inWhiteSpace = 0; - a.append(&value.at(i), 1); + out.append(&in.at(i), 1); } i++; } - - return a; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/compress_whitespace.h b/src/actions/transformations/compress_whitespace.h index 184ddcfab1..3e42047cce 100644 --- a/src/actions/transformations/compress_whitespace.h +++ b/src/actions/transformations/compress_whitespace.h @@ -30,11 +30,12 @@ namespace transformations { class CompressWhitespace : public Transformation { public: + explicit CompressWhitespace(const std::string &action) + : Transformation(action) { } - explicit CompressWhitespace(const std::string &action) ; - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/css_decode.cc b/src/actions/transformations/css_decode.cc index f808512385..9f86d4848e 100644 --- a/src/actions/transformations/css_decode.cc +++ b/src/actions/transformations/css_decode.cc @@ -34,20 +34,21 @@ namespace actions { namespace transformations { -std::string CssDecode::evaluate(const std::string &value, - Transaction *transaction) { +void CssDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + size_t s = in.size(); char *tmp = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + malloc(sizeof(char) * s + 1)); + memcpy(tmp, in.c_str(), s + 1); + tmp[s] = '\0'; - CssDecode::css_decode_inplace(reinterpret_cast(tmp), - value.size()); + size_t r = CssDecode::css_decode_inplace(reinterpret_cast(tmp), + s); - std::string ret(tmp, 0, value.size()); + out.assign(tmp, r); free(tmp); - return ret; } diff --git a/src/actions/transformations/css_decode.h b/src/actions/transformations/css_decode.h index a6769bad39..f76ec571f1 100644 --- a/src/actions/transformations/css_decode.h +++ b/src/actions/transformations/css_decode.h @@ -31,10 +31,12 @@ namespace transformations { class CssDecode : public Transformation { public: - explicit CssDecode(const std::string &action) + explicit CssDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; static int css_decode_inplace(unsigned char *input, int64_t input_len); }; diff --git a/src/actions/transformations/escape_seq_decode.cc b/src/actions/transformations/escape_seq_decode.cc index 03303272ef..51f3158cd6 100644 --- a/src/actions/transformations/escape_seq_decode.cc +++ b/src/actions/transformations/escape_seq_decode.cc @@ -31,11 +31,6 @@ namespace modsecurity { namespace actions { namespace transformations { -EscapeSeqDecode::EscapeSeqDecode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, int input_len) { @@ -140,21 +135,17 @@ int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, } -std::string EscapeSeqDecode::evaluate(const std::string &value, - Transaction *transaction) { - +void EscapeSeqDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *tmp = (unsigned char *) malloc(sizeof(char) - * value.size() + 1); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + * in.size() + 1); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; - int size = ansi_c_sequences_decode_inplace(tmp, value.size()); - - std::string ret(""); - ret.assign(reinterpret_cast(tmp), size); + int size = ansi_c_sequences_decode_inplace(tmp, in.size()); + out.assign(reinterpret_cast(tmp), size); free(tmp); - - return ret; } } // namespace transformations diff --git a/src/actions/transformations/escape_seq_decode.h b/src/actions/transformations/escape_seq_decode.h index d68f33b56f..9acf001e7e 100644 --- a/src/actions/transformations/escape_seq_decode.h +++ b/src/actions/transformations/escape_seq_decode.h @@ -30,12 +30,14 @@ namespace transformations { class EscapeSeqDecode : public Transformation { public: + explicit EscapeSeqDecode(const std::string &action) + : Transformation(action) { } - explicit EscapeSeqDecode(const std::string &action) ; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; - int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); + static int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); }; } // namespace transformations diff --git a/src/actions/transformations/hex_decode.cc b/src/actions/transformations/hex_decode.cc index e626bc5f35..46faa809fa 100644 --- a/src/actions/transformations/hex_decode.cc +++ b/src/actions/transformations/hex_decode.cc @@ -32,27 +32,25 @@ namespace actions { namespace transformations { -std::string HexDecode::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void HexDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; int size = 0; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size = inplace(input, value.length()); + size = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), size); + out.assign(reinterpret_cast(input), size); free(input); - - return ret; } diff --git a/src/actions/transformations/hex_decode.h b/src/actions/transformations/hex_decode.h index a2f48c6d8f..d28b760164 100644 --- a/src/actions/transformations/hex_decode.h +++ b/src/actions/transformations/hex_decode.h @@ -30,10 +30,12 @@ namespace transformations { class HexDecode : public Transformation { public: - explicit HexDecode(const std::string &action) : Transformation(action) { } + explicit HexDecode(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *data, int len); }; diff --git a/src/actions/transformations/hex_encode.cc b/src/actions/transformations/hex_encode.cc index 4e6121df60..211f49dba0 100644 --- a/src/actions/transformations/hex_encode.cc +++ b/src/actions/transformations/hex_encode.cc @@ -31,23 +31,20 @@ namespace modsecurity { namespace actions { namespace transformations { -HexEncode::HexEncode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string HexEncode::evaluate(const std::string &value, - Transaction *transaction) { +void HexEncode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { std::stringstream result; - for (std::size_t i=0; i < value.length(); i++) { - unsigned int ii = (unsigned char)(value[i]); + for (std::size_t i=0; i < in.length(); i++) { + int ii = reinterpret_cast(in[i]); result << std::setw(2) << std::setfill('0') << std::hex << ii; } - return result.str(); + out.assign(result.str().c_str()); } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/hex_encode.h b/src/actions/transformations/hex_encode.h index 1ba39c56a1..723418ab6e 100644 --- a/src/actions/transformations/hex_encode.h +++ b/src/actions/transformations/hex_encode.h @@ -30,11 +30,13 @@ namespace transformations { class HexEncode : public Transformation { public: + explicit HexEncode(const std::string &action) + : Transformation(action) { } - explicit HexEncode(const std::string &action); + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; }; } // namespace transformations diff --git a/src/actions/transformations/html_entity_decode.cc b/src/actions/transformations/html_entity_decode.cc index b9268df55c..b0ff0f4284 100644 --- a/src/actions/transformations/html_entity_decode.cc +++ b/src/actions/transformations/html_entity_decode.cc @@ -33,26 +33,24 @@ namespace actions { namespace transformations { -std::string HtmlEntityDecode::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void HtmlEntityDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size_t i = inplace(input, value.length()); + size_t i = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), i); + out.assign(reinterpret_cast(input), i); free(input); - - return ret; } diff --git a/src/actions/transformations/html_entity_decode.h b/src/actions/transformations/html_entity_decode.h index 44fcc32319..0a24543ccb 100644 --- a/src/actions/transformations/html_entity_decode.h +++ b/src/actions/transformations/html_entity_decode.h @@ -36,8 +36,9 @@ class HtmlEntityDecode : public Transformation { explicit HtmlEntityDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/js_decode.cc b/src/actions/transformations/js_decode.cc index 2f4cf8bb57..de1d3fb00c 100644 --- a/src/actions/transformations/js_decode.cc +++ b/src/actions/transformations/js_decode.cc @@ -34,26 +34,24 @@ namespace actions { namespace transformations { -std::string JsDecode::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void JsDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size_t i = inplace(input, value.length()); + size_t i = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), i); + out.assign(reinterpret_cast(input), i); free(input); - - return ret; } diff --git a/src/actions/transformations/js_decode.h b/src/actions/transformations/js_decode.h index 60d6617b35..a15f58d057 100644 --- a/src/actions/transformations/js_decode.h +++ b/src/actions/transformations/js_decode.h @@ -33,8 +33,10 @@ class JsDecode : public Transformation { explicit JsDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; + static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/length.cc b/src/actions/transformations/length.cc index 61015b82bf..2b572f6183 100644 --- a/src/actions/transformations/length.cc +++ b/src/actions/transformations/length.cc @@ -30,15 +30,11 @@ namespace modsecurity { namespace actions { namespace transformations { -Length::Length(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string Length::evaluate(const std::string &value, - Transaction *transaction) { - return std::to_string(value.size()); +void Length::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + out.assign(std::to_string(in.size()).c_str()); } } // namespace transformations diff --git a/src/actions/transformations/length.h b/src/actions/transformations/length.h index 8892a9dcd2..b17ed09c77 100644 --- a/src/actions/transformations/length.h +++ b/src/actions/transformations/length.h @@ -30,11 +30,12 @@ namespace transformations { class Length : public Transformation { public: + explicit Length(const std::string &action) + : Transformation(action) { }; - explicit Length(const std::string &action); - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/lower_case.cc b/src/actions/transformations/lower_case.cc index d00ab40cb6..39a2f0196f 100644 --- a/src/actions/transformations/lower_case.cc +++ b/src/actions/transformations/lower_case.cc @@ -27,22 +27,17 @@ namespace actions { namespace transformations { -LowerCase::LowerCase(const std::string &a) - : Transformation(a) { -} - -std::string LowerCase::evaluate(const std::string &val, - Transaction *transaction) { +void LowerCase::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { std::locale loc; - std::string value(val); - - for (std::string::size_type i=0; i < value.length(); ++i) { - value[i] = std::tolower(value[i], loc); + out.resize(in.size()); + for (std::string::size_type i=0; i < in.size(); ++i) { + out[i] = std::tolower(in[i], loc); } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/lower_case.h b/src/actions/transformations/lower_case.h index 590498405b..9ff3adf064 100644 --- a/src/actions/transformations/lower_case.h +++ b/src/actions/transformations/lower_case.h @@ -32,9 +32,12 @@ namespace transformations { class LowerCase : public Transformation { public: - explicit LowerCase(const std::string &action); - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + explicit LowerCase(const std::string &action) + : Transformation(action) { }; + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/md5.cc b/src/actions/transformations/md5.cc index 71c36bc300..538e737008 100644 --- a/src/actions/transformations/md5.cc +++ b/src/actions/transformations/md5.cc @@ -31,11 +31,12 @@ namespace actions { namespace transformations { -std::string Md5::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret = Utils::Md5::digest(value); +void Md5::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + std::string ret = Utils::Md5::digest(std::string(in.c_str(), in.size())); - return ret; + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/md5.h b/src/actions/transformations/md5.h index 37f22473fa..063c9994fb 100644 --- a/src/actions/transformations/md5.h +++ b/src/actions/transformations/md5.h @@ -30,10 +30,12 @@ namespace transformations { class Md5 : public Transformation { public: - explicit Md5(const std::string &action) : Transformation(action) { } + explicit Md5(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/none.cc b/src/actions/transformations/none.cc index f122bf035c..6533a5e83a 100644 --- a/src/actions/transformations/none.cc +++ b/src/actions/transformations/none.cc @@ -31,10 +31,9 @@ namespace actions { namespace transformations { -std::string None::evaluate(const std::string &value, - Transaction *transaction) { - return value; -} +void None::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { } } // namespace transformations diff --git a/src/actions/transformations/none.h b/src/actions/transformations/none.h index e8a0e9d956..2cdf045ad4 100644 --- a/src/actions/transformations/none.h +++ b/src/actions/transformations/none.h @@ -32,10 +32,15 @@ class None : public Transformation { public: explicit None(const std::string &action) : Transformation(action) - { m_isNone = true; } + { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; + + bool isNone() override { + return true; + } }; } // namespace transformations diff --git a/src/actions/transformations/normalise_path.cc b/src/actions/transformations/normalise_path.cc index e75b984986..34b1ad1724 100644 --- a/src/actions/transformations/normalise_path.cc +++ b/src/actions/transformations/normalise_path.cc @@ -32,28 +32,22 @@ namespace modsecurity { namespace actions { namespace transformations { -NormalisePath::NormalisePath(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string NormalisePath::evaluate(const std::string &value, - Transaction *transaction) { +void NormalisePath::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int changed = 0; char *tmp = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; int i = normalize_path_inplace((unsigned char *)tmp, - value.size(), 0, &changed); + in.size(), 0, &changed); - std::string ret(""); - ret.assign(tmp, i); + out.assign(tmp, i); free(tmp); - - return ret; } diff --git a/src/actions/transformations/normalise_path.h b/src/actions/transformations/normalise_path.h index b3869bea04..a345992c70 100644 --- a/src/actions/transformations/normalise_path.h +++ b/src/actions/transformations/normalise_path.h @@ -30,11 +30,12 @@ namespace transformations { class NormalisePath : public Transformation { public: + explicit NormalisePath(const std::string &action) + : Transformation(action) { }; - explicit NormalisePath(const std::string &action); - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; static int normalize_path_inplace(unsigned char *input, int input_len, int win, int *changed); diff --git a/src/actions/transformations/normalise_path_win.cc b/src/actions/transformations/normalise_path_win.cc index 6c171a59c4..3e1de68442 100644 --- a/src/actions/transformations/normalise_path_win.cc +++ b/src/actions/transformations/normalise_path_win.cc @@ -34,24 +34,22 @@ namespace actions { namespace transformations { -std::string NormalisePathWin::evaluate(const std::string &value, - Transaction *transaction) { +void NormalisePathWin::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int changed; char *tmp = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; int i = NormalisePath::normalize_path_inplace( reinterpret_cast(tmp), - value.size(), 1, &changed); + in.size(), 1, &changed); - std::string ret(""); - ret.assign(tmp, i); + out.assign(tmp, i); free(tmp); - - return ret; } diff --git a/src/actions/transformations/normalise_path_win.h b/src/actions/transformations/normalise_path_win.h index a1f8c5f746..ae95988fd7 100644 --- a/src/actions/transformations/normalise_path_win.h +++ b/src/actions/transformations/normalise_path_win.h @@ -33,8 +33,9 @@ class NormalisePathWin : public Transformation { explicit NormalisePathWin(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/parity_even_7bit.cc b/src/actions/transformations/parity_even_7bit.cc index 2c0be31cd4..e0f89484ac 100644 --- a/src/actions/transformations/parity_even_7bit.cc +++ b/src/actions/transformations/parity_even_7bit.cc @@ -32,28 +32,27 @@ namespace actions { namespace transformations { -std::string ParityEven7bit::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void ParityEven7bit::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - std::memcpy(input, value.c_str(), value.length()+1); + std::memcpy(input, in.c_str(), in.length()+1); - inplace(input, value.length()); + inplace(input, in.length()); - ret.assign(reinterpret_cast(input), value.length()); + out.assign(reinterpret_cast(input), in.length()); free(input); - - return ret; } + bool ParityEven7bit::inplace(unsigned char *input, uint64_t input_len) { uint64_t i; @@ -76,7 +75,6 @@ bool ParityEven7bit::inplace(unsigned char *input, uint64_t input_len) { } - } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/parity_even_7bit.h b/src/actions/transformations/parity_even_7bit.h index 08aa88230a..efbb113e94 100644 --- a/src/actions/transformations/parity_even_7bit.h +++ b/src/actions/transformations/parity_even_7bit.h @@ -30,9 +30,13 @@ namespace transformations { class ParityEven7bit : public Transformation { public: - explicit ParityEven7bit(const std::string &action) : Transformation(action) { } + explicit ParityEven7bit(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_odd_7bit.cc b/src/actions/transformations/parity_odd_7bit.cc index 5ac38d20dc..9d0091776b 100644 --- a/src/actions/transformations/parity_odd_7bit.cc +++ b/src/actions/transformations/parity_odd_7bit.cc @@ -32,28 +32,27 @@ namespace actions { namespace transformations { -std::string ParityOdd7bit::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void ParityOdd7bit::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - inplace(input, value.length()); + inplace(input, in.length()); - ret.assign(reinterpret_cast(input), value.length()); + out.assign(reinterpret_cast(input), in.length()); free(input); - - return ret; } + bool ParityOdd7bit::inplace(unsigned char *input, uint64_t input_len) { uint64_t i; diff --git a/src/actions/transformations/parity_odd_7bit.h b/src/actions/transformations/parity_odd_7bit.h index 8b7e34d289..61730adf05 100644 --- a/src/actions/transformations/parity_odd_7bit.h +++ b/src/actions/transformations/parity_odd_7bit.h @@ -30,9 +30,13 @@ namespace transformations { class ParityOdd7bit : public Transformation { public: - explicit ParityOdd7bit(const std::string &action) : Transformation(action) { } + explicit ParityOdd7bit(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_zero_7bit.cc b/src/actions/transformations/parity_zero_7bit.cc index 7bb846362c..92dd539b53 100644 --- a/src/actions/transformations/parity_zero_7bit.cc +++ b/src/actions/transformations/parity_zero_7bit.cc @@ -32,26 +32,24 @@ namespace actions { namespace transformations { -std::string ParityZero7bit::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void ParityZero7bit::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - inplace(input, value.length()); + inplace(input, in.length()); - ret.assign(reinterpret_cast(input), value.length()); + out.assign(reinterpret_cast(input), in.length()); free(input); - - return ret; } diff --git a/src/actions/transformations/parity_zero_7bit.h b/src/actions/transformations/parity_zero_7bit.h index 4b4ccd23e1..5a58c0d19d 100644 --- a/src/actions/transformations/parity_zero_7bit.h +++ b/src/actions/transformations/parity_zero_7bit.h @@ -30,9 +30,13 @@ namespace transformations { class ParityZero7bit : public Transformation { public: - explicit ParityZero7bit(const std::string &action) : Transformation(action) { } + explicit ParityZero7bit(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/php_args_names.cc b/src/actions/transformations/php_args_names.cc new file mode 100644 index 0000000000..6f9cdf3cc2 --- /dev/null +++ b/src/actions/transformations/php_args_names.cc @@ -0,0 +1,103 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 - 2020 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include "src/actions/transformations/php_args_names.h" + +#include +#include +#include + +#include "modsecurity/transaction.h" +#include "src/actions/transformations/transformation.h" +#include "modsecurity/actions/action.h" + +namespace modsecurity { +namespace actions { +namespace transformations { + + +PhpArgsNames::PhpArgsNames(const std::string &a) + : Transformation(a) { +} + + +void PhpArgsNames::execute(Transaction *t, + ModSecString &val, + ModSecString &out) { + //Took the logic from php src code: + //https://github.com/php/php-src/blob/master/main/php_variables.c + //Function call PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *track_vars_array) + std::string value(val); + std::string ret = ""; + if(value[0] == '[' || value[0] == '=') { + out.assign(ret); + return; + } + std::string::size_type i = 0; + while(value[i] == ' ') { + i++; + } + std::string::size_type val_size = value.length(); + bool is_array = false; + bool is_open_sq_bracket = false; + for (; i < val_size; ++i) { + if(value[i] == '[' && !is_open_sq_bracket) { + if(strchr(&value[i], ']') != NULL) { + is_array = true; + break; + } + + ret += '_'; + is_open_sq_bracket = true; + } + else if( !is_open_sq_bracket && (value[i] == ' ' || value[i] == '.') ) { + ret += '_'; + } + else { + ret += value[i]; + } + } + + if(is_array) { + char* start = &value[0]; + while(true) { + char *tmp = &value[i]; + char *close_bra = strchr(tmp, ']'); + if(close_bra == NULL) { + out.assign(ret); + return; + } + int array_size = (int)(close_bra - start) + 1; + if(array_size - i == 3 && value[i+1] == ' ') { + ret += '['; + i+=2; + } + for(;i < array_size; ++i) { + ret += value[i]; + } + if(i >= val_size || value[i] != '[') { + out.assign(ret); + return; + } + } + } + out.assign(ret); + return; + +} + +} // namespace transformations +} // namespace actions +} // namespace modsecurity diff --git a/src/actions/transformations/php_args_names.h b/src/actions/transformations/php_args_names.h new file mode 100644 index 0000000000..a9694a32dd --- /dev/null +++ b/src/actions/transformations/php_args_names.h @@ -0,0 +1,48 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 - 2020 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include +#include + +#include "modsecurity/actions/action.h" +#include "src/actions/transformations/transformation.h" + +#ifndef SRC_ACTIONS_TRANSFORMATIONS_PHP_ARGS_NAMES_H_ +#define SRC_ACTIONS_TRANSFORMATIONS_PHP_ARGS_NAMES_H_ + +#ifdef __cplusplus + +namespace modsecurity { +class Transaction; +namespace actions { +namespace transformations { + + +class PhpArgsNames : public Transformation { + public: + explicit PhpArgsNames(const std::string &action); + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; +}; + +} // namespace transformations +} // namespace actions +} // namespace modsecurity + +#endif + +#endif // SRC_ACTIONS_TRANSFORMATIONS_PHP_ARGS_NAMES_H_ diff --git a/src/actions/transformations/remove_comments.cc b/src/actions/transformations/remove_comments.cc index 043dd9505a..aa41d988ef 100644 --- a/src/actions/transformations/remove_comments.cc +++ b/src/actions/transformations/remove_comments.cc @@ -32,21 +32,21 @@ namespace actions { namespace transformations { -std::string RemoveComments::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void RemoveComments::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - uint64_t input_len = value.size(); + uint64_t input_len = in.size(); uint64_t i, j, incomment; i = j = incomment = 0; @@ -100,10 +100,8 @@ std::string RemoveComments::evaluate(const std::string &value, input[j++] = ' '; } - ret.assign(reinterpret_cast(input), j); + out.assign(reinterpret_cast(input), j); free(input); - - return ret; } diff --git a/src/actions/transformations/remove_comments.h b/src/actions/transformations/remove_comments.h index 78dd213d69..cf36e41e68 100644 --- a/src/actions/transformations/remove_comments.h +++ b/src/actions/transformations/remove_comments.h @@ -31,10 +31,12 @@ namespace transformations { class RemoveComments : public Transformation { public: - explicit RemoveComments(const std::string &action) : Transformation(action) { } + explicit RemoveComments(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override;; }; diff --git a/src/actions/transformations/remove_comments_char.cc b/src/actions/transformations/remove_comments_char.cc index 529f3a67f3..15cb1474fa 100644 --- a/src/actions/transformations/remove_comments_char.cc +++ b/src/actions/transformations/remove_comments_char.cc @@ -30,48 +30,45 @@ namespace modsecurity { namespace actions { namespace transformations { -RemoveCommentsChar::RemoveCommentsChar(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string RemoveCommentsChar::evaluate(const std::string &val, - Transaction *transaction) { +void RemoveCommentsChar::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int64_t i; - std::string value(val); + out = in; i = 0; - while (i < value.size()) { - if (value.at(i) == '/' - && (i+1 < value.size()) && value.at(i+1) == '*') { - value.erase(i, 2); - } else if (value.at(i) == '*' - && (i+1 < value.size()) && value.at(i+1) == '/') { - value.erase(i, 2); - } else if (value.at(i) == '<' - && (i+1 < value.size()) - && value.at(i+1) == '!' - && (i+2 < value.size()) - && value.at(i+2) == '-' - && (i+3 < value.size()) - && value.at(i+3) == '-') { - value.erase(i, 4); - } else if (value.at(i) == '-' - && (i+1 < value.size()) && value.at(i+1) == '-' - && (i+2 < value.size()) && value.at(i+2) == '>') { - value.erase(i, 3); - } else if (value.at(i) == '-' - && (i+1 < value.size()) && value.at(i+1) == '-') { - value.erase(i, 2); - } else if (value.at(i) == '#') { - value.erase(i, 1); + while (i < out.size()) { + if (out.at(i) == '/' + && (i+1 < out.size()) && out.at(i+1) == '*') { + out.erase(i, 2); + } else if (out.at(i) == '*' + && (i+1 < out.size()) && out.at(i+1) == '/') { + out.erase(i, 2); + } else if (out.at(i) == '<' + && (i+1 < out.size()) + && out.at(i+1) == '!' + && (i+2 < out.size()) + && out.at(i+2) == '-' + && (i+3 < out.size()) + && out.at(i+3) == '-') { + out.erase(i, 4); + } else if (out.at(i) == '-' + && (i+1 < out.size()) && out.at(i+1) == '-' + && (i+2 < out.size()) && out.at(i+2) == '>') { + out.erase(i, 3); + } else if (out.at(i) == '-' + && (i+1 < out.size()) && out.at(i+1) == '-') { + out.erase(i, 2); + } else if (out.at(i) == '#') { + out.erase(i, 1); } else { i++; } } - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/remove_comments_char.h b/src/actions/transformations/remove_comments_char.h index 722aba5926..8064bc37a1 100644 --- a/src/actions/transformations/remove_comments_char.h +++ b/src/actions/transformations/remove_comments_char.h @@ -30,10 +30,12 @@ namespace transformations { class RemoveCommentsChar : public Transformation { public: - explicit RemoveCommentsChar(const std::string &action); + explicit RemoveCommentsChar(const std::string &action) + : Transformation(action) { }; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_nulls.cc b/src/actions/transformations/remove_nulls.cc index 5dd576cb49..4ff86fb730 100644 --- a/src/actions/transformations/remove_nulls.cc +++ b/src/actions/transformations/remove_nulls.cc @@ -33,21 +33,20 @@ namespace actions { namespace transformations { -std::string RemoveNulls::evaluate(const std::string &val, - Transaction *transaction) { +void RemoveNulls::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int64_t i; - std::string value(val); + out = in; i = 0; - while (i < value.size()) { - if (value.at(i) == '\0') { - value.erase(i, 1); + while (i < out.size()) { + if (out.at(i) == '\0') { + out.erase(i, 1); } else { i++; } } - - return value; } diff --git a/src/actions/transformations/remove_nulls.h b/src/actions/transformations/remove_nulls.h index eeb33b363f..be9fb3b4bc 100644 --- a/src/actions/transformations/remove_nulls.h +++ b/src/actions/transformations/remove_nulls.h @@ -33,8 +33,9 @@ class RemoveNulls : public Transformation { explicit RemoveNulls(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_whitespace.cc b/src/actions/transformations/remove_whitespace.cc index b9ffcc0649..ac03bcec57 100644 --- a/src/actions/transformations/remove_whitespace.cc +++ b/src/actions/transformations/remove_whitespace.cc @@ -30,26 +30,22 @@ namespace modsecurity { namespace actions { namespace transformations { -RemoveWhitespace::RemoveWhitespace(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string RemoveWhitespace::evaluate(const std::string &val, - Transaction *transaction) { - std::string value(val); +void RemoveWhitespace::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + out = in; int64_t i = 0; const char nonBreakingSpaces = 0xa0; const char nonBreakingSpaces2 = 0xc2; // loop through all the chars - while (i < value.size()) { + while (i < out.size()) { // remove whitespaces and non breaking spaces (NBSP) - if (std::isspace(static_cast(value[i])) - || (value[i] == nonBreakingSpaces) - || value[i] == nonBreakingSpaces2) { - value.erase(i, 1); + if (std::isspace(static_cast(out[i])) + || (out[i] == nonBreakingSpaces) + || out[i] == nonBreakingSpaces2) { + out.erase(i, 1); } else { /* if the space is not a whitespace char, increment counter counter should not be incremented if a character is erased because @@ -57,10 +53,9 @@ std::string RemoveWhitespace::evaluate(const std::string &val, i++; } } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/remove_whitespace.h b/src/actions/transformations/remove_whitespace.h index f977914cb0..e33037ab09 100644 --- a/src/actions/transformations/remove_whitespace.h +++ b/src/actions/transformations/remove_whitespace.h @@ -30,10 +30,12 @@ namespace transformations { class RemoveWhitespace : public Transformation { public: - explicit RemoveWhitespace(const std::string &action); + explicit RemoveWhitespace(const std::string &action) + : Transformation(action) { }; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/replace_comments.cc b/src/actions/transformations/replace_comments.cc index 77e3e3b700..8073a3071c 100644 --- a/src/actions/transformations/replace_comments.cc +++ b/src/actions/transformations/replace_comments.cc @@ -31,24 +31,21 @@ namespace modsecurity { namespace actions { namespace transformations { -ReplaceComments::ReplaceComments(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string ReplaceComments::evaluate(const std::string &value, - Transaction *transaction) { +void ReplaceComments::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { uint64_t i, j, incomment; char *input = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(input, value.c_str(), value.size() + 1); - input[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(input, in.c_str(), in.size() + 1); + input[in.size()] = '\0'; i = j = incomment = 0; - while (i < value.size()) { + while (i < in.size()) { if (incomment == 0) { - if ((input[i] == '/') && (i + 1 < value.size()) + if ((input[i] == '/') && (i + 1 < in.size()) && (input[i + 1] == '*')) { incomment = 1; i += 2; @@ -58,7 +55,7 @@ std::string ReplaceComments::evaluate(const std::string &value, j++; } } else { - if ((input[i] == '*') && (i + 1 < value.size()) + if ((input[i] == '*') && (i + 1 < in.size()) && (input[i + 1] == '/')) { incomment = 0; i += 2; @@ -74,13 +71,9 @@ std::string ReplaceComments::evaluate(const std::string &value, input[j++] = ' '; } - - std::string resp; - resp.append(reinterpret_cast(input), j); + out.append(reinterpret_cast(input), j); free(input); - - return resp; } } // namespace transformations diff --git a/src/actions/transformations/replace_comments.h b/src/actions/transformations/replace_comments.h index 6808f426c1..3f49dda267 100644 --- a/src/actions/transformations/replace_comments.h +++ b/src/actions/transformations/replace_comments.h @@ -30,11 +30,12 @@ namespace transformations { class ReplaceComments : public Transformation { public: + explicit ReplaceComments(const std::string &action) + : Transformation(action) { }; - explicit ReplaceComments(const std::string &action) ; - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/replace_nulls.cc b/src/actions/transformations/replace_nulls.cc index 0a37149003..6f31716c60 100644 --- a/src/actions/transformations/replace_nulls.cc +++ b/src/actions/transformations/replace_nulls.cc @@ -30,29 +30,25 @@ namespace modsecurity { namespace actions { namespace transformations { -ReplaceNulls::ReplaceNulls(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string ReplaceNulls::evaluate(const std::string &val, - Transaction *transaction) { +void ReplaceNulls::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int64_t i; - std::string value(val); + out = in; i = 0; - while (i < value.size()) { - if (value.at(i) == '\0') { - value.erase(i, 1); - value.insert(i, " ", 1); + while (i < out.size()) { + if (out.at(i) == '\0') { + out.erase(i, 1); + out.insert(i, " ", 1); } else { i++; } } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/replace_nulls.h b/src/actions/transformations/replace_nulls.h index 8e2d315fc5..85422830a3 100644 --- a/src/actions/transformations/replace_nulls.h +++ b/src/actions/transformations/replace_nulls.h @@ -30,11 +30,12 @@ namespace transformations { class ReplaceNulls : public Transformation { public: + explicit ReplaceNulls(const std::string &action) + : Transformation(action) { }; - explicit ReplaceNulls(const std::string &action) ; - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/sha1.cc b/src/actions/transformations/sha1.cc index 9e0c7f53e7..d2759d1f22 100644 --- a/src/actions/transformations/sha1.cc +++ b/src/actions/transformations/sha1.cc @@ -31,17 +31,19 @@ namespace modsecurity { namespace actions { namespace transformations { -Sha1::Sha1(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string Sha1::evaluate(const std::string &value, - Transaction *transaction) { +void Sha1::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + + auto a = Utils::Sha1::digest( + std::string(in.c_str(), in.size()) + ); - return Utils::Sha1::digest(value); + out.assign(a.c_str(), a.size()); } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/sha1.h b/src/actions/transformations/sha1.h index eb5fb3f135..f053835c2a 100644 --- a/src/actions/transformations/sha1.h +++ b/src/actions/transformations/sha1.h @@ -30,9 +30,12 @@ namespace transformations { class Sha1 : public Transformation { public: - explicit Sha1(const std::string &action) ; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + explicit Sha1(const std::string &action) + : Transformation(action) { }; + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/sql_hex_decode.cc b/src/actions/transformations/sql_hex_decode.cc index 8c8805ff67..143fe11287 100644 --- a/src/actions/transformations/sql_hex_decode.cc +++ b/src/actions/transformations/sql_hex_decode.cc @@ -41,27 +41,25 @@ namespace transformations { #define ISODIGIT(X) ((X >= '0') && (X <= '7')) #endif -std::string SqlHexDecode::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void SqlHexDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; int size = 0; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size = inplace(input, value.length()); + size = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), size); + out.assign(reinterpret_cast(input), size); free(input); - - return ret; } diff --git a/src/actions/transformations/sql_hex_decode.h b/src/actions/transformations/sql_hex_decode.h index 9a3afe0f5e..a90ee05077 100644 --- a/src/actions/transformations/sql_hex_decode.h +++ b/src/actions/transformations/sql_hex_decode.h @@ -30,10 +30,12 @@ namespace transformations { class SqlHexDecode : public Transformation { public: - explicit SqlHexDecode(const std::string &action) : Transformation(action) { } + explicit SqlHexDecode(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *data, int len); diff --git a/src/actions/transformations/transformation.cc b/src/actions/transformations/transformation.cc index 3b38431ad1..32ee548e01 100644 --- a/src/actions/transformations/transformation.cc +++ b/src/actions/transformations/transformation.cc @@ -35,6 +35,7 @@ #include "src/actions/transformations/js_decode.h" #include "src/actions/transformations/length.h" #include "src/actions/transformations/lower_case.h" +#include "src/actions/transformations/php_args_names.h" #include "src/actions/transformations/md5.h" #include "src/actions/transformations/none.h" #include "src/actions/transformations/normalise_path.h" @@ -69,11 +70,6 @@ namespace actions { namespace transformations { -std::string Transformation::evaluate(const std::string &value, - Transaction *transaction) { - return value; -} - Transformation* Transformation::instantiate(std::string a) { IF_MATCH(base64DecodeExt) { return new Base64DecodeExt(a); } IF_MATCH(base64Decode) { return new Base64Decode(a); } @@ -88,6 +84,7 @@ Transformation* Transformation::instantiate(std::string a) { IF_MATCH(jsDecode) { return new JsDecode(a); } IF_MATCH(length) { return new Length(a); } IF_MATCH(lowercase) { return new LowerCase(a); } + IF_MATCH(phpArgsNames) { return new PhpArgsNames(a); } IF_MATCH(md5) { return new Md5(a); } IF_MATCH(none) { return new None(a); } IF_MATCH(normalizePathWin) { return new NormalisePathWin(a); } @@ -119,6 +116,7 @@ Transformation* Transformation::instantiate(std::string a) { return new Transformation(a); } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/transformation.h b/src/actions/transformations/transformation.h index f1d81503ec..5cbe6d995d 100644 --- a/src/actions/transformations/transformation.h +++ b/src/actions/transformations/transformation.h @@ -32,11 +32,7 @@ class Transformation : public Action { explicit Transformation(const std::string& _action) : Action(_action, RunTimeBeforeMatchAttemptKind) { } - explicit Transformation(const std::string& _action, int kind) - : Action(_action, kind) { } - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + virtual bool isNone() { return false; } static Transformation* instantiate(std::string a); }; diff --git a/src/actions/transformations/trim.cc b/src/actions/transformations/trim.cc index 5902497f40..94c86b3736 100644 --- a/src/actions/transformations/trim.cc +++ b/src/actions/transformations/trim.cc @@ -31,47 +31,38 @@ namespace actions { namespace transformations { -std::string *Trim::ltrim(std::string *s) { +void Trim::ltrim(ModSecString *s) { s->erase( s->begin(), std::find_if(s->begin(), s->end(), [](unsigned char c) { return !std::isspace(c); }) ); - - return s; } -std::string *Trim::rtrim(std::string *s) { +void Trim::rtrim(ModSecString *s) { s->erase( std::find_if(s->rbegin(), s->rend(), [](unsigned char c) { return !std::isspace(c); }).base(), s->end() ); - - return s; -} - - -std::string *Trim::trim(std::string *s) { - return ltrim(rtrim(s)); } -Trim::Trim(const std::string &action) - : Transformation(action) { - this->action_kind = 1; +void Trim::trim(ModSecString *s) { + rtrim(s); + ltrim(s); } -std::string -Trim::evaluate(const std::string &val, - Transaction *transaction) { - std::string value(val); - return *this->trim(&value); -} +void Trim::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + out = in; + trim(&out); +}; } // namespace transformations diff --git a/src/actions/transformations/trim.h b/src/actions/transformations/trim.h index ac16050cfd..c1ee52c4f7 100644 --- a/src/actions/transformations/trim.h +++ b/src/actions/transformations/trim.h @@ -30,15 +30,16 @@ namespace transformations { class Trim : public Transformation { public: + explicit Trim(const std::string &action) + : Transformation(action) { }; - explicit Trim(const std::string &action) ; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; - - std::string *ltrim(std::string *s); - std::string *rtrim(std::string *s); - std::string *trim(std::string *s); + static void ltrim(ModSecString *s); + static void rtrim(ModSecString *s); + static void trim(ModSecString *s); }; } // namespace transformations diff --git a/src/actions/transformations/trim_left.cc b/src/actions/transformations/trim_left.cc index 50c0cc6aa5..43027b79b8 100644 --- a/src/actions/transformations/trim_left.cc +++ b/src/actions/transformations/trim_left.cc @@ -32,17 +32,13 @@ namespace actions { namespace transformations { +void TrimLeft::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + out = in; + ltrim(&out); +}; -TrimLeft::TrimLeft(const std::string &action) - : Trim(action) { - this->action_kind = 1; -} - -std::string TrimLeft::evaluate(const std::string &val, - Transaction *transaction) { - std::string value(val); - return *ltrim(&value); -} } // namespace transformations } // namespace actions diff --git a/src/actions/transformations/trim_left.h b/src/actions/transformations/trim_left.h index 54e4885c05..8073fd0450 100644 --- a/src/actions/transformations/trim_left.h +++ b/src/actions/transformations/trim_left.h @@ -31,10 +31,12 @@ namespace transformations { class TrimLeft : public Trim { public: - explicit TrimLeft(const std::string &action) ; + explicit TrimLeft(const std::string &action) + : Trim(action) { }; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/trim_right.cc b/src/actions/transformations/trim_right.cc index 92383f7e00..545689f78e 100644 --- a/src/actions/transformations/trim_right.cc +++ b/src/actions/transformations/trim_right.cc @@ -31,16 +31,13 @@ namespace actions { namespace transformations { -TrimRight::TrimRight(const std::string &action) - : Trim(action) { - this->action_kind = 1; -} - -std::string TrimRight::evaluate(const std::string &val, - Transaction *transaction) { - std::string value(val); - return *this->rtrim(&value); -} +void TrimRight::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + out = in; + rtrim(&out); +}; + } // namespace transformations } // namespace actions diff --git a/src/actions/transformations/trim_right.h b/src/actions/transformations/trim_right.h index 9a96b4c5cc..29ac3f5fac 100644 --- a/src/actions/transformations/trim_right.h +++ b/src/actions/transformations/trim_right.h @@ -31,10 +31,12 @@ namespace transformations { class TrimRight : public Trim { public: - explicit TrimRight(const std::string &action) ; + explicit TrimRight(const std::string &action) + : Trim(action) { }; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/upper_case.cc b/src/actions/transformations/upper_case.cc index 118696ad43..be33a781f1 100644 --- a/src/actions/transformations/upper_case.cc +++ b/src/actions/transformations/upper_case.cc @@ -27,22 +27,17 @@ namespace actions { namespace transformations { -UpperCase::UpperCase(const std::string &a) - : Transformation(a) { -} - -std::string UpperCase::evaluate(const std::string &val, - Transaction *transaction) { - std::string value(val); +void UpperCase::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { std::locale loc; - - for (std::string::size_type i=0; i < value.length(); ++i) { - value[i] = std::toupper(value[i], loc); + out.reserve(in.size()); + for (std::string::size_type i=0; i < in.size(); ++i) { + out += std::toupper(in[i], loc); } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/upper_case.h b/src/actions/transformations/upper_case.h index f4a77220c6..9994113ea0 100644 --- a/src/actions/transformations/upper_case.h +++ b/src/actions/transformations/upper_case.h @@ -32,10 +32,12 @@ namespace transformations { class UpperCase : public Transformation { public: - explicit UpperCase(const std::string &action) ; + explicit UpperCase(const std::string &action) + : Transformation(action) { }; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/url_decode.cc b/src/actions/transformations/url_decode.cc index 845c6a647a..cd91431e7b 100644 --- a/src/actions/transformations/url_decode.cc +++ b/src/actions/transformations/url_decode.cc @@ -32,30 +32,22 @@ namespace actions { namespace transformations { -UrlDecode::UrlDecode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string UrlDecode::evaluate(const std::string &value, - Transaction *transaction) { +void UrlDecode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *val(NULL); int invalid_count = 0; int changed; - val = (unsigned char *) malloc(sizeof(char) * value.size() + 1); - memcpy(val, value.c_str(), value.size() + 1); - val[value.size()] = '\0'; + val = (unsigned char *) malloc(sizeof(char) * in.size() + 1); + memcpy(val, in.c_str(), in.size() + 1); + val[in.size()] = '\0'; - int size = utils::urldecode_nonstrict_inplace(val, value.size(), + int size = utils::urldecode_nonstrict_inplace(val, in.size(), &invalid_count, &changed); - std::string out; - out.append((const char *)val, size); free(val); - - return out; } diff --git a/src/actions/transformations/url_decode.h b/src/actions/transformations/url_decode.h index e965dae7fe..75dfef72d5 100644 --- a/src/actions/transformations/url_decode.h +++ b/src/actions/transformations/url_decode.h @@ -32,11 +32,12 @@ namespace transformations { class UrlDecode : public Transformation { public: + explicit UrlDecode(const std::string &action) + : Transformation(action) { }; - explicit UrlDecode(const std::string &action) ; - - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/url_decode_uni.cc b/src/actions/transformations/url_decode_uni.cc index ad5b8111c6..4613794df0 100644 --- a/src/actions/transformations/url_decode_uni.cc +++ b/src/actions/transformations/url_decode_uni.cc @@ -38,26 +38,24 @@ namespace actions { namespace transformations { -std::string UrlDecodeUni::evaluate(const std::string &value, - Transaction *t) { - std::string ret; +void UrlDecodeUni::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size_t i = inplace(input, value.length(), t); + size_t i = inplace(input, in.length(), t); - ret.assign(reinterpret_cast(input), i); + out.assign(reinterpret_cast(input), i); free(input); - - return ret; } diff --git a/src/actions/transformations/url_decode_uni.h b/src/actions/transformations/url_decode_uni.h index d7b0dd2152..64b55f2015 100644 --- a/src/actions/transformations/url_decode_uni.h +++ b/src/actions/transformations/url_decode_uni.h @@ -31,9 +31,13 @@ namespace transformations { class UrlDecodeUni : public Transformation { public: - explicit UrlDecodeUni(const std::string &action) : Transformation(action) { } + explicit UrlDecodeUni(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *input, uint64_t input_len, Transaction *transaction); }; diff --git a/src/actions/transformations/url_encode.cc b/src/actions/transformations/url_encode.cc index 19ecb3349d..a5184d7bc4 100644 --- a/src/actions/transformations/url_encode.cc +++ b/src/actions/transformations/url_encode.cc @@ -31,12 +31,6 @@ namespace actions { namespace transformations { -UrlEncode::UrlEncode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - - std::string UrlEncode::url_enc(const char *input, unsigned int input_len, int *changed) { char *rval, *d; @@ -87,13 +81,13 @@ std::string UrlEncode::url_enc(const char *input, } -std::string UrlEncode::evaluate(const std::string &value, - Transaction *transaction) { +void UrlEncode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { int changed; - std::string ret = url_enc(value.c_str(), value.size(), &changed); - - return ret; + std::string ret = url_enc(in.c_str(), in.size(), &changed); + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/url_encode.h b/src/actions/transformations/url_encode.h index a45be56402..03b9eca625 100644 --- a/src/actions/transformations/url_encode.h +++ b/src/actions/transformations/url_encode.h @@ -30,13 +30,14 @@ namespace transformations { class UrlEncode : public Transformation { public: + explicit UrlEncode(const std::string &action) + : Transformation(action) { }; - explicit UrlEncode(const std::string &action) ; + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; - std::string evaluate(const std::string &exp, - Transaction *transaction) override; - - std::string url_enc(const char *input, + static std::string url_enc(const char *input, unsigned int input_len, int *changed); }; diff --git a/src/actions/transformations/utf8_to_unicode.cc b/src/actions/transformations/utf8_to_unicode.cc index 70c1f9c8e1..9457d07074 100644 --- a/src/actions/transformations/utf8_to_unicode.cc +++ b/src/actions/transformations/utf8_to_unicode.cc @@ -33,31 +33,31 @@ namespace actions { namespace transformations { -std::string Utf8ToUnicode::evaluate(const std::string &value, - Transaction *transaction) { - std::string ret; +void Utf8ToUnicode::execute(Transaction *t, + ModSecString &in, + ModSecString &out) { + unsigned char *input; int changed = 0; - char *out; + char *out2; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memset(input, '\0', in.length()+1); + memcpy(input, in.c_str(), in.length()+1); - out = inplace(input, value.size() + 1, &changed); - free(input); - if (out != NULL) { - ret.assign(reinterpret_cast(out), - strlen(reinterpret_cast(out))); - free(out); + out2 = inplace(input, in.size() + 1, &changed); + if (out2 != NULL) { + out.assign(reinterpret_cast(out2), + strlen(reinterpret_cast(out2))); + free(out2); } - - return ret; + free(input); } diff --git a/src/actions/transformations/utf8_to_unicode.h b/src/actions/transformations/utf8_to_unicode.h index 4d488410e0..738771dff8 100644 --- a/src/actions/transformations/utf8_to_unicode.h +++ b/src/actions/transformations/utf8_to_unicode.h @@ -35,10 +35,13 @@ namespace transformations { class Utf8ToUnicode : public Transformation { public: - explicit Utf8ToUnicode(const std::string &action) : Transformation(action) { } + explicit Utf8ToUnicode(const std::string &action) + : Transformation(action) { } - std::string evaluate(const std::string &exp, - Transaction *transaction) override; + + void execute(Transaction *t, + ModSecString &in, + ModSecString &out) override; static char *inplace(unsigned char *input, uint64_t input_len, int *changed); diff --git a/src/actions/ver.cc b/src/actions/ver.cc index 43b8b832e2..4c5124bd4c 100644 --- a/src/actions/ver.cc +++ b/src/actions/ver.cc @@ -21,14 +21,14 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "src/rule_with_actions.h" namespace modsecurity { namespace actions { -bool Ver::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_ver = m_parser_payload; +bool Ver::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/ver.h b/src/actions/ver.h index 364d567b31..024d946597 100644 --- a/src/actions/ver.h +++ b/src/actions/ver.h @@ -31,7 +31,7 @@ class Ver : public Action { public: explicit Ver(const std::string &action) : Action(action, ConfigurationKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; private: std::string m_ver; diff --git a/src/actions/xmlns.h b/src/actions/xmlns.h index 7b8e2f1e4b..677d84f7ee 100644 --- a/src/actions/xmlns.h +++ b/src/actions/xmlns.h @@ -31,7 +31,7 @@ class XmlNS : public Action { public: explicit XmlNS(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override { + bool execute(RuleWithActions *rule, Transaction *transaction) override { return true; } diff --git a/src/anchored_set_variable.cc b/src/anchored_set_variable.cc index 32bddf8801..1ba31b38d2 100644 --- a/src/anchored_set_variable.cc +++ b/src/anchored_set_variable.cc @@ -80,6 +80,36 @@ void AnchoredSetVariable::set(const std::string &key, } +void AnchoredSetVariable::set(const std::string &key, + const bpstd::string_view &value, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + std::string *v = new std::string(value.c_str()); + VariableValue *var = new VariableValue(&m_name, &key, v); + delete v; + + origin->m_offset = offset; + origin->m_length = value.size(); + + var->addOrigin(std::move(origin)); + emplace(key, var); +} + + +void AnchoredSetVariable::set(const std::string &key, + const char *value, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + std::string *v = new std::string(value); + VariableValue *var = new VariableValue(&m_name, &key, v); + delete v; + + origin->m_offset = offset; + origin->m_length = strlen(value); + + var->addOrigin(std::move(origin)); + emplace(key, var); +} + + void AnchoredSetVariable::resolve( std::vector *l) { for (const auto& x : *this) { diff --git a/src/anchored_variable.cc b/src/anchored_variable.cc index 63128bb286..4c3853210c 100644 --- a/src/anchored_variable.cc +++ b/src/anchored_variable.cc @@ -23,6 +23,7 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/utils/regex.h" +#include "modsecurity/string_view.hpp" namespace modsecurity { @@ -75,6 +76,29 @@ void AnchoredVariable::set(const std::string &a, size_t offset) { } +void AnchoredVariable::set(const char *a, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + + m_offset = offset; + m_value.assign(a, strlen(a)); + origin->m_offset = offset; + origin->m_length = m_value.size(); + m_var->addOrigin(std::move(origin)); +} + + +void AnchoredVariable::set(const bpstd::string_view &a, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + + m_offset = offset; + m_value.assign(a.c_str(), a.size()); + origin->m_offset = offset; + origin->m_length = m_value.size(); + + m_var->addOrigin(std::move(origin)); +} + + void AnchoredVariable::append(const std::string &a, size_t offset, bool spaceSeparator) { std::unique_ptr origin( diff --git a/src/audit_log/audit_log.cc b/src/audit_log/audit_log.cc index 50213d5df9..b159f779c1 100644 --- a/src/audit_log/audit_log.cc +++ b/src/audit_log/audit_log.cc @@ -295,12 +295,7 @@ bool AuditLog::saveIfRelevant(Transaction *transaction, int parts) { return true; } - for (RuleMessage &i : transaction->m_rulesMessages) { - if (i.m_noAuditLog == false) { - saveAnyway = true; - break; - } - } + saveAnyway = transaction->messageSaveAuditLog(); if ((m_status == RelevantOnlyAuditLogStatus && this->isRelevant(transaction->m_httpCodeReturned) == false) diff --git a/src/engine/lua.cc b/src/engine/lua.cc index 203e5c4d43..a28e6b76bf 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -439,13 +439,17 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, "t:" + std::string(name)); // FIXME: transformation is not yet returning null. if (tfn) { - newVar = tfn->evaluate(newVar, t); + ModSecString in; + ModSecString out; + in.assign(newVar.c_str(), newVar.size()); + tfn->execute(t, in, out); + newVar.assign(out.c_str(), out.size()); + delete tfn; } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ + std::string(name)); } - delete tfn; } return newVar; @@ -461,7 +465,11 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, // FIXME: transformation is not yet returning null. if (tfn) { - newVar = tfn->evaluate(newVar, t); + ModSecString in; + ModSecString out; + in.assign(newVar.c_str(), newVar.size()); + tfn->execute(t, in, out); + newVar.assign(out.c_str(), out.size()); delete tfn; } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ diff --git a/src/modsecurity.cc b/src/modsecurity.cc index 854ec31ea9..1c834e8390 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -190,7 +190,7 @@ const std::string& ModSecurity::getConnectorInformation() const { return m_connector; } -void ModSecurity::serverLog(void *data, std::shared_ptr rm) { +void ModSecurity::serverLog(void *data, RuleMessage *rm) { if (m_logCb == NULL) { std::cerr << "Server log callback is not set -- " << rm->errorLog(); std::cerr << std::endl; @@ -209,7 +209,7 @@ void ModSecurity::serverLog(void *data, std::shared_ptr rm) { } if (m_logProperties & RuleMessageLogProperty) { - const void *a = static_cast(rm.get()); + const void *a = static_cast(rm); if (m_logProperties & IncludeFullHighlightLogProperty) { m_logCb(data, a); return; @@ -307,7 +307,9 @@ int ModSecurity::processContentOffset(const char *content, size_t len, while (!trans.empty()) { modsecurity::actions::transformations::Transformation *t; - std::string varValueRes; + ModSecString in; + ModSecString out; + yajl_gen_map_open(g); yajl_gen_string(g, reinterpret_cast("transformation"), @@ -319,8 +321,9 @@ int ModSecurity::processContentOffset(const char *content, size_t len, t = modsecurity::actions::transformations::Transformation::instantiate( trans.back().str().c_str()); - varValueRes = t->evaluate(varValue, NULL); - varValue.assign(varValueRes); + in.assign(varValue.c_str()); + t->execute(NULL, in, out); + varValue.assign(out.c_str()); trans.pop_back(); yajl_gen_string(g, reinterpret_cast("value"), diff --git a/src/operators/begins_with.cc b/src/operators/begins_with.cc index a2f89fce9c..09571b701f 100644 --- a/src/operators/begins_with.cc +++ b/src/operators/begins_with.cc @@ -24,8 +24,10 @@ namespace modsecurity { namespace operators { -bool BeginsWith::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { +bool BeginsWith::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); if (str.size() < p.size()) { diff --git a/src/operators/begins_with.h b/src/operators/begins_with.h index c9fcee467a..58bb7512a3 100644 --- a/src/operators/begins_with.h +++ b/src/operators/begins_with.h @@ -32,8 +32,10 @@ class BeginsWith : public Operator { explicit BeginsWith(std::unique_ptr param) : Operator("BeginsWith", std::move(param)) { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/contains.cc b/src/operators/contains.cc index 95c2702a88..15e61ab56f 100644 --- a/src/operators/contains.cc +++ b/src/operators/contains.cc @@ -21,10 +21,12 @@ namespace modsecurity { namespace operators { -bool Contains::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { +bool Contains::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - size_t offset = input.find(p); + size_t offset = input.to_string().find(p); bool contains = offset != std::string::npos; diff --git a/src/operators/contains.h b/src/operators/contains.h index 13fcda9224..505f8a1e14 100644 --- a/src/operators/contains.h +++ b/src/operators/contains.h @@ -33,10 +33,12 @@ class Contains : public Operator { public: /** @ingroup ModSecurity_Operator */ explicit Contains(std::unique_ptr param) - : Operator("Contains", std::move(param)) { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, - std::shared_ptr ruleMessage) override; + : Operator("Contains", std::move(param)) { }; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/contains_word.cc b/src/operators/contains_word.cc index 9bcdbd6cf3..2a5d7ab964 100644 --- a/src/operators/contains_word.cc +++ b/src/operators/contains_word.cc @@ -23,7 +23,7 @@ namespace modsecurity { namespace operators { -bool ContainsWord::acceptableChar(const std::string& a, size_t pos) { +bool ContainsWord::acceptableChar(const bpstd::string_view &a, size_t pos) { if (a.size() - 1 < pos) { return false; } @@ -36,37 +36,40 @@ bool ContainsWord::acceptableChar(const std::string& a, size_t pos) { return true; } -bool ContainsWord::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { +bool ContainsWord::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &inputView, + RuleMessage *ruleMessage) { std::string paramTarget(m_string->evaluate(transaction)); + std::string input = inputView.to_string(); if (paramTarget.empty()) { return true; } - if (str.empty()) { + if (input.empty()) { return false; } - if (str == paramTarget) { + if (input == paramTarget) { return true; } - size_t pos = str.find(paramTarget); + size_t pos = input.find(paramTarget); while (pos != std::string::npos) { - if (pos == 0 && acceptableChar(str, paramTarget.size())) { + if (pos == 0 && acceptableChar(input, paramTarget.size())) { logOffset(ruleMessage, 0, paramTarget.size()); return true; } - if (pos + paramTarget.size() == str.size() && - acceptableChar(str, pos - 1)) { + if (pos + paramTarget.size() == input.size() && + acceptableChar(input, pos - 1)) { logOffset(ruleMessage, pos, paramTarget.size()); return true; } - if (acceptableChar(str, pos - 1) && - acceptableChar(str, pos + paramTarget.size())) { + if (acceptableChar(input, pos - 1) && + acceptableChar(input, pos + paramTarget.size())) { logOffset(ruleMessage, pos, paramTarget.size()); return true; } - pos = str.find(paramTarget, pos + 1); + pos = input.find(paramTarget, pos + 1); } return false; diff --git a/src/operators/contains_word.h b/src/operators/contains_word.h index c15e399089..30177bf3bc 100644 --- a/src/operators/contains_word.h +++ b/src/operators/contains_word.h @@ -32,12 +32,13 @@ class ContainsWord : public Operator { explicit ContainsWord(std::unique_ptr param) : Operator("ContainsWord", std::move(param)) { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; private: - static bool acceptableChar(const std::string& a, size_t pos); + static bool acceptableChar(const bpstd::string_view &a, size_t pos); }; } // namespace operators diff --git a/src/operators/detect_sqli.cc b/src/operators/detect_sqli.cc index 793d564406..29d43a3c16 100644 --- a/src/operators/detect_sqli.cc +++ b/src/operators/detect_sqli.cc @@ -20,36 +20,40 @@ #include "src/operators/operator.h" #include "others/libinjection/src/libinjection.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace operators { -bool DetectSQLi::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { +bool DetectSQLi::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { char fingerprint[8]; int issqli; issqli = libinjection_sqli(input.c_str(), input.length(), fingerprint); - if (!t) { + if (!transaction) { goto tisempty; } if (issqli) { - t->m_matched.push_back(fingerprint); - ms_dbg_a(t, 4, "detected SQLi using libinjection with " \ + transaction->m_matched.push_back(fingerprint); + ms_dbg_a(transaction, 4, "detected SQLi using libinjection with " \ "fingerprint '" + std::string(fingerprint) + "' at: '" + - input + "'"); + input.to_string() + "'"); if (rule && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", std::string(fingerprint)); - ms_dbg_a(t, 7, "Added DetectSQLi match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added DetectSQLi match TX.0: " + \ std::string(fingerprint)); } } else { - ms_dbg_a(t, 9, "detected SQLi: not able to find an " \ - "inject on '" + input + "'"); + ms_dbg_a(transaction, 9, "detected SQLi: not able to find an " \ + "inject on '" + input.to_string() + "'"); } tisempty: diff --git a/src/operators/detect_sqli.h b/src/operators/detect_sqli.h index 237e6a2ffd..a7df9deded 100644 --- a/src/operators/detect_sqli.h +++ b/src/operators/detect_sqli.h @@ -32,9 +32,10 @@ class DetectSQLi : public Operator { m_match_message.assign("detected SQLi using libinjection."); } - bool evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/detect_xss.cc b/src/operators/detect_xss.cc index 6c89ef7203..7bc3c9ebfd 100644 --- a/src/operators/detect_xss.cc +++ b/src/operators/detect_xss.cc @@ -19,30 +19,33 @@ #include "src/operators/operator.h" #include "others/libinjection/src/libinjection.h" +#include "src/rule_with_actions.h" namespace modsecurity { namespace operators { -bool DetectXSS::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { +bool DetectXSS::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { int is_xss; is_xss = libinjection_xss(input.c_str(), input.length()); - if (t) { + if (transaction) { if (is_xss) { - ms_dbg_a(t, 5, "detected XSS using libinjection."); + ms_dbg_a(transaction, 5, "detected XSS using libinjection."); if (rule && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", std::string(input)); - ms_dbg_a(t, 7, "Added DetectXSS match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added DetectXSS match TX.0: " + \ std::string(input)); } } else { - ms_dbg_a(t, 9, "libinjection was not able to " \ - "find any XSS in: " + input); + ms_dbg_a(transaction, 9, "libinjection was not able to " \ + "find any XSS in: " + input.to_string()); } } return is_xss != 0; diff --git a/src/operators/detect_xss.h b/src/operators/detect_xss.h index c455462513..1f4f033948 100644 --- a/src/operators/detect_xss.h +++ b/src/operators/detect_xss.h @@ -31,9 +31,10 @@ class DetectXSS : public Operator { m_match_message.assign("detected XSS using libinjection."); } - bool evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/ends_with.cc b/src/operators/ends_with.cc index 404f3ffd03..d8c36fd4ea 100644 --- a/src/operators/ends_with.cc +++ b/src/operators/ends_with.cc @@ -23,16 +23,18 @@ namespace modsecurity { namespace operators { -bool EndsWith::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { +bool EndsWith::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { bool ret = false; std::string p(m_string->evaluate(transaction)); - if (str.length() >= p.length()) { - ret = (0 == str.compare(str.length() - p.length(), + if (input.length() >= p.length()) { + ret = (0 == input.compare(input.length() - p.length(), p.length(), p)); if (ret) { - logOffset(ruleMessage, str.length() - p.length(), + logOffset(ruleMessage, input.length() - p.length(), p.size()); } } diff --git a/src/operators/ends_with.h b/src/operators/ends_with.h index 47e42c3fd9..c376f49c32 100644 --- a/src/operators/ends_with.h +++ b/src/operators/ends_with.h @@ -33,9 +33,11 @@ class EndsWith : public Operator { : Operator("EndsWith", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, - std::shared_ptr ruleMessage) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; diff --git a/src/operators/eq.cc b/src/operators/eq.cc index 473356d303..7513b73bfe 100644 --- a/src/operators/eq.cc +++ b/src/operators/eq.cc @@ -24,7 +24,10 @@ namespace modsecurity { namespace operators { -bool Eq::evaluate(Transaction *transaction, const std::string &input) { +bool Eq::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { int p = 0; int i = 0; std::string pt(m_string->evaluate(transaction)); @@ -35,7 +38,7 @@ bool Eq::evaluate(Transaction *transaction, const std::string &input) { p = 0; } try { - i = std::stoi(input); + i = std::stoi(input.c_str()); } catch (...) { i = 0; } diff --git a/src/operators/eq.h b/src/operators/eq.h index 02494f6f92..578e0796a6 100644 --- a/src/operators/eq.h +++ b/src/operators/eq.h @@ -31,7 +31,11 @@ class Eq : public Operator { /** @ingroup ModSecurity_Operator */ explicit Eq(std::unique_ptr param) : Operator("Eq", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &input) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/fuzzy_hash.cc b/src/operators/fuzzy_hash.cc index df31a98c2b..f4c1359418 100644 --- a/src/operators/fuzzy_hash.cc +++ b/src/operators/fuzzy_hash.cc @@ -96,21 +96,24 @@ FuzzyHash::~FuzzyHash() { } -bool FuzzyHash::evaluate(Transaction *t, const std::string &str) { +bool FuzzyHash::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { #ifdef WITH_SSDEEP char result[FUZZY_MAX_RESULT]; struct fuzzy_hash_chunk *chunk = m_head; if (fuzzy_hash_buf((const unsigned char*)str.c_str(), str.size(), result)) { - ms_dbg_a(t, 4, "Problems generating fuzzy hash"); + ms_dbg_a(transaction, 4, "Problems generating fuzzy hash"); return false; } while (chunk != NULL) { int i = fuzzy_compare(chunk->data, result); if (i >= m_threshold) { - ms_dbg_a(t, 4, "Fuzzy hash: matched " \ + ms_dbg_a(transaction, 4, "Fuzzy hash: matched " \ "with score: " + std::to_string(i) + "."); return true; } diff --git a/src/operators/fuzzy_hash.h b/src/operators/fuzzy_hash.h index b555eff55f..d007906b39 100644 --- a/src/operators/fuzzy_hash.h +++ b/src/operators/fuzzy_hash.h @@ -44,9 +44,12 @@ class FuzzyHash : public Operator { m_head(NULL) { } ~FuzzyHash(); - bool evaluate(Transaction *transaction, const std::string &std) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; - bool init(const std::string ¶m, std::string *error) override; + bool init(const std::string &file, std::string *error) override; private: int m_threshold; struct fuzzy_hash_chunk *m_head; diff --git a/src/operators/ge.cc b/src/operators/ge.cc index 2a3b39ec8c..acd0333418 100644 --- a/src/operators/ge.cc +++ b/src/operators/ge.cc @@ -23,11 +23,13 @@ namespace modsecurity { namespace operators { -bool Ge::evaluate(Transaction *transaction, const std::string &input) { +bool Ge::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - std::string i = input; - bool ge = atoll(i.c_str()) >= atoll(p.c_str()); + bool ge = atoll(str.c_str()) >= atoll(p.c_str()); return ge; } diff --git a/src/operators/ge.h b/src/operators/ge.h index 4830e91ea1..6716f3d408 100644 --- a/src/operators/ge.h +++ b/src/operators/ge.h @@ -32,7 +32,11 @@ class Ge : public Operator { : Operator("Ge", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/geo_lookup.cc b/src/operators/geo_lookup.cc index 5717b7afb3..c79591fb83 100644 --- a/src/operators/geo_lookup.cc +++ b/src/operators/geo_lookup.cc @@ -34,16 +34,19 @@ namespace modsecurity { namespace operators { -bool GeoLookup::evaluate(Transaction *trans, const std::string &exp) { +bool GeoLookup::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { using std::placeholders::_1; using std::placeholders::_2; bool ret = true; - if (trans) { - ret = Utils::GeoLookup::getInstance().lookup(exp, trans, - std::bind(&GeoLookup::debug, this, trans, _1, _2)); + if (transaction) { + ret = Utils::GeoLookup::getInstance().lookup(str.c_str(), transaction, + std::bind(&GeoLookup::debug, this, transaction, _1, _2)); } else { - ret = Utils::GeoLookup::getInstance().lookup(exp, NULL, + ret = Utils::GeoLookup::getInstance().lookup(str.c_str(), NULL, nullptr); } diff --git a/src/operators/geo_lookup.h b/src/operators/geo_lookup.h index e019378259..ffbbacd238 100644 --- a/src/operators/geo_lookup.h +++ b/src/operators/geo_lookup.h @@ -29,11 +29,15 @@ class GeoLookup : public Operator { /** @ingroup ModSecurity_Operator */ GeoLookup() : Operator("GeoLookup") { } - bool evaluate(Transaction *transaction, const std::string &exp) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; protected: - bool debug(Transaction *transaction, int x, const std::string &a) { - ms_dbg_a(transaction, x, a); + bool debug(Transaction *transaction, int x, const bpstd::string_view &str) { + ms_dbg_a(transaction, x, str.to_string()); return true; } }; diff --git a/src/operators/gsblookup.cc b/src/operators/gsblookup.cc index ca934b4777..98eaefba26 100644 --- a/src/operators/gsblookup.cc +++ b/src/operators/gsblookup.cc @@ -23,7 +23,10 @@ namespace modsecurity { namespace operators { -bool GsbLookup::evaluate(Transaction *transaction, const std::string &str) { +bool GsbLookup::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { /** * @todo Implement the operator GeoLookup. * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#gsblookup diff --git a/src/operators/gsblookup.h b/src/operators/gsblookup.h index 63c32ae2eb..c25a445e68 100644 --- a/src/operators/gsblookup.h +++ b/src/operators/gsblookup.h @@ -31,7 +31,10 @@ class GsbLookup : public Operator { explicit GsbLookup(std::unique_ptr param) : Operator("GsbLookup", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/gt.cc b/src/operators/gt.cc index 47bb2fb78c..edbbc03eef 100644 --- a/src/operators/gt.cc +++ b/src/operators/gt.cc @@ -23,10 +23,13 @@ namespace modsecurity { namespace operators { -bool Gt::evaluate(Transaction *transaction, const std::string &input) { +bool Gt::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool gt = atoll(input.c_str()) > atoll(p.c_str()); + bool gt = atoll(str.c_str()) > atoll(p.c_str()); return gt; } diff --git a/src/operators/gt.h b/src/operators/gt.h index 0e80853f9f..969f8259e1 100644 --- a/src/operators/gt.h +++ b/src/operators/gt.h @@ -33,7 +33,11 @@ class Gt : public Operator { : Operator("Gt", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/inspect_file.cc b/src/operators/inspect_file.cc index 9ce43af0d8..2d2cd9638e 100644 --- a/src/operators/inspect_file.cc +++ b/src/operators/inspect_file.cc @@ -49,9 +49,12 @@ bool InspectFile::init(const std::string ¶m2, std::string *error) { } -bool InspectFile::evaluate(Transaction *transaction, const std::string &str) { +bool InspectFile::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { if (m_isScript) { - return m_lua.run(transaction, str); + return m_lua.run(transaction, str.c_str()); } else { FILE *in; char buff[512]; @@ -61,7 +64,7 @@ bool InspectFile::evaluate(Transaction *transaction, const std::string &str) { openstr.append(m_param); openstr.append(" "); - openstr.append(str); + openstr.append(str.c_str()); if (!(in = popen(openstr.c_str(), "r"))) { return false; } diff --git a/src/operators/inspect_file.h b/src/operators/inspect_file.h index e398eb30c1..7b1f16f2a3 100644 --- a/src/operators/inspect_file.h +++ b/src/operators/inspect_file.h @@ -35,8 +35,13 @@ class InspectFile : public Operator { m_file(""), m_isScript(false) { } - bool init(const std::string ¶m, std::string *error) override; - bool evaluate(Transaction *transaction, const std::string &str) override; + bool init(const std::string &file, std::string *error) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + private: std::string m_file; bool m_isScript; diff --git a/src/operators/ip_match.cc b/src/operators/ip_match.cc index 35a993fbee..9a739507c4 100644 --- a/src/operators/ip_match.cc +++ b/src/operators/ip_match.cc @@ -37,8 +37,11 @@ bool IpMatch::init(const std::string &file, std::string *error) { } -bool IpMatch::evaluate(Transaction *transaction, const std::string &input) { - return m_tree.contains(input); +bool IpMatch::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { + return m_tree.contains(str.c_str()); } diff --git a/src/operators/ip_match.h b/src/operators/ip_match.h index b0c080c755..72d55e2e7e 100644 --- a/src/operators/ip_match.h +++ b/src/operators/ip_match.h @@ -34,7 +34,10 @@ class IpMatch : public Operator { IpMatch(const std::string &n, std::unique_ptr param) : Operator(n, std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/le.cc b/src/operators/le.cc index e448a383fe..fe9c96daf0 100644 --- a/src/operators/le.cc +++ b/src/operators/le.cc @@ -23,10 +23,13 @@ namespace modsecurity { namespace operators { -bool Le::evaluate(Transaction *transaction, const std::string &input) { +bool Le::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool le = atoll(input.c_str()) <= atoll(p.c_str()); + bool le = atoll(str.c_str()) <= atoll(p.c_str()); return le; } diff --git a/src/operators/le.h b/src/operators/le.h index 2549112ec2..f9ecd7e501 100644 --- a/src/operators/le.h +++ b/src/operators/le.h @@ -34,7 +34,10 @@ class Le : public Operator { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; diff --git a/src/operators/lt.cc b/src/operators/lt.cc index 2cb05c6cfa..715898a28f 100644 --- a/src/operators/lt.cc +++ b/src/operators/lt.cc @@ -22,10 +22,13 @@ namespace modsecurity { namespace operators { -bool Lt::evaluate(Transaction *transaction, const std::string &input) { +bool Lt::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool lt = atoll(input.c_str()) < atoll(p.c_str()); + bool lt = atoll(str.c_str()) < atoll(p.c_str()); return lt; } diff --git a/src/operators/lt.h b/src/operators/lt.h index aa5c4b82d3..d83f03dddc 100644 --- a/src/operators/lt.h +++ b/src/operators/lt.h @@ -34,7 +34,10 @@ class Lt : public Operator { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/no_match.cc b/src/operators/no_match.cc index 4509bf5fa4..3fcb77c757 100644 --- a/src/operators/no_match.cc +++ b/src/operators/no_match.cc @@ -20,7 +20,10 @@ namespace modsecurity { namespace operators { -bool NoMatch::evaluate(Transaction *transaction, const std::string &str) { +bool NoMatch::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { return false; } diff --git a/src/operators/no_match.h b/src/operators/no_match.h index e6012cb3ac..b872810556 100644 --- a/src/operators/no_match.h +++ b/src/operators/no_match.h @@ -32,7 +32,10 @@ class NoMatch : public Operator { NoMatch() : Operator("NoMatch") { } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/operator.cc b/src/operators/operator.cc index b74b072946..b45d0035c9 100644 --- a/src/operators/operator.cc +++ b/src/operators/operator.cc @@ -71,7 +71,7 @@ namespace operators { bool Operator::evaluateInternal(Transaction *transaction, - RuleWithActions *rule, const std::string& a, std::shared_ptr rm) { + RuleWithActions *rule, const bpstd::string_view &a, RuleMessage *rm) { bool res = evaluate(transaction, rule, a, rm); if (m_negation) { @@ -81,28 +81,6 @@ bool Operator::evaluateInternal(Transaction *transaction, return res; } -bool Operator::evaluateInternal(Transaction *transaction, - RuleWithActions *rule, const std::string& a) { - bool res = evaluate(transaction, rule, a); - - if (m_negation) { - return !res; - } - - return res; -} - -bool Operator::evaluateInternal(Transaction *transaction, - const std::string& a) { - bool res = evaluate(transaction, a); - - if (m_negation) { - return !res; - } - - return res; -} - std::string Operator::resolveMatchMessage(Transaction *t, std::string key, std::string value) { @@ -132,7 +110,10 @@ std::string Operator::resolveMatchMessage(Transaction *t, } -bool Operator::evaluate(Transaction *transaction, const std::string& a) { +bool Operator::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { ms_dbg_a(transaction, 2, "Operator: " + m_op + \ " is not implemented or malfunctioning."); return true; diff --git a/src/operators/operator.h b/src/operators/operator.h index 4a21e59524..405567e609 100644 --- a/src/operators/operator.h +++ b/src/operators/operator.h @@ -24,6 +24,7 @@ #include "modsecurity/rule.h" #include "modsecurity/rule_message.h" #include "src/run_time_string.h" +#include "modsecurity/string_view.hpp" namespace modsecurity { namespace operators { @@ -107,27 +108,18 @@ class Operator { return true; } - virtual std::string resolveMatchMessage(Transaction *t, - std::string key, std::string value); - - bool evaluateInternal(Transaction *t, const std::string& a); - bool evaluateInternal(Transaction *t, RuleWithActions *rule, - const std::string& a); - bool evaluateInternal(Transaction *t, RuleWithActions *rule, - const std::string& a, std::shared_ptr ruleMessage); + bool evaluateInternal(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view& a, + RuleMessage *ruleMessage); + virtual bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage); - virtual bool evaluate(Transaction *transaction, const std::string &str); - virtual bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str) { - return evaluate(transaction, str); - } - virtual bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { - return evaluate(transaction, str); - } - static void logOffset(std::shared_ptr ruleMessage, int offset, int len) { + static void logOffset(RuleMessage *ruleMessage, int offset, int len) { if (ruleMessage) { ruleMessage->m_reference.append("o" + std::to_string(offset) + "," @@ -135,6 +127,10 @@ class Operator { } } + virtual std::string resolveMatchMessage(Transaction *t, + std::string key, std::string value); + + std::string m_match_message; bool m_negation; std::string m_op; diff --git a/src/operators/pm.cc b/src/operators/pm.cc index ebf31c4077..412c598570 100644 --- a/src/operators/pm.cc +++ b/src/operators/pm.cc @@ -28,6 +28,8 @@ #include "src/operators/operator.h" #include "src/utils/acmp.h" #include "src/utils/string.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace operators { @@ -81,9 +83,11 @@ void Pm::postOrderTraversal(acmp_btree_node_t *node) { } -bool Pm::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { - int rc; +bool Pm::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { + int rc = -1; ACMPT pt; pt.parser = m_p; pt.ptr = NULL; @@ -91,7 +95,7 @@ bool Pm::evaluate(Transaction *transaction, RuleWithActions *rule, #ifdef MODSEC_MUTEX_ON_PM pthread_mutex_lock(&m_lock); #endif - rc = acmp_process_quick(&pt, &match, input.c_str(), input.length()); + rc = acmp_process_quick(&pt, &match, str.c_str(), str.length()); #ifdef MODSEC_MUTEX_ON_PM pthread_mutex_unlock(&m_lock); #endif diff --git a/src/operators/pm.h b/src/operators/pm.h index b090ec5dc5..b34cf1c74e 100644 --- a/src/operators/pm.h +++ b/src/operators/pm.h @@ -41,9 +41,11 @@ class Pm : public Operator { m_p = acmp_create(0); } ~Pm(); - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, - std::shared_ptr ruleMessage) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/pm_from_file.cc b/src/operators/pm_from_file.cc index f70677cdc6..097e901f94 100644 --- a/src/operators/pm_from_file.cc +++ b/src/operators/pm_from_file.cc @@ -56,7 +56,7 @@ bool PmFromFile::init(const std::string &config, std::string *error) { iss = new std::stringstream(client.content); } else { std::string err; - std::string resource = utils::find_resource(m_param, config, &err); + std::string resource = utils::find_resource(m_param, config.c_str(), &err); iss = new std::ifstream(resource, std::ios::in); if (((std::ifstream *)iss)->is_open() == false) { diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index ffdb17a288..19f7cdd545 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -25,6 +25,8 @@ #include "modsecurity/rules_set.h" #include "src/operators/operator.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace operators { @@ -200,11 +202,12 @@ void Rbl::furtherInfo(struct sockaddr_in *sin, const std::string &ipStr, } -bool Rbl::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& ipStr, - std::shared_ptr ruleMessage) { +bool Rbl::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { struct addrinfo *info = NULL; - std::string host = Rbl::mapIpToAddress(ipStr, t); + std::string host = Rbl::mapIpToAddress(str.c_str(), transaction); int rc = 0; if (host.empty()) { @@ -217,20 +220,20 @@ bool Rbl::evaluate(Transaction *t, RuleWithActions *rule, if (info != NULL) { freeaddrinfo(info); } - ms_dbg_a(t, 5, "RBL lookup of " + ipStr + " failed."); + ms_dbg_a(transaction, 5, "RBL lookup of " + str.to_string() + " failed."); return false; } struct sockaddr *addr = info->ai_addr; struct sockaddr_in *sin = (struct sockaddr_in *) addr; - furtherInfo(sin, ipStr, t, m_provider); + furtherInfo(sin, str.c_str(), transaction, m_provider); freeaddrinfo(info); - if (rule && t && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( - "0", std::string(ipStr)); - ms_dbg_a(t, 7, "Added RXL match TX.0: " + \ - std::string(ipStr)); + if (rule && transaction && rule->hasCaptureAction()) { + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( + "0", std::string(str)); + ms_dbg_a(transaction, 7, "Added RXL match TX.0: " + \ + std::string(str)); } return true; diff --git a/src/operators/rbl.h b/src/operators/rbl.h index f002d532c5..74a32db644 100644 --- a/src/operators/rbl.h +++ b/src/operators/rbl.h @@ -76,9 +76,11 @@ class Rbl : public Operator { m_provider = RblProvider::httpbl; } } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; std::string mapIpToAddress(const std::string &ipStr, Transaction *trans) const; diff --git a/src/operators/rsub.cc b/src/operators/rsub.cc index d310185b73..979117febb 100644 --- a/src/operators/rsub.cc +++ b/src/operators/rsub.cc @@ -23,7 +23,10 @@ namespace modsecurity { namespace operators { -bool Rsub::evaluate(Transaction *transaction, const std::string &str) { +bool Rsub::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { /** * @todo Implement the operator Rsub. * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#rsub diff --git a/src/operators/rsub.h b/src/operators/rsub.h index 15c80085a2..84981a7356 100644 --- a/src/operators/rsub.h +++ b/src/operators/rsub.h @@ -32,7 +32,11 @@ class Rsub : public Operator { /** @ingroup ModSecurity_Operator */ explicit Rsub(std::unique_ptr param) : Operator("Rsub", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; diff --git a/src/operators/rx.cc b/src/operators/rx.cc index f69ca97dde..7183707911 100644 --- a/src/operators/rx.cc +++ b/src/operators/rx.cc @@ -22,12 +22,14 @@ #include "src/operators/operator.h" #include "modsecurity/rule.h" #include "modsecurity/rule_message.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace operators { -bool Rx::init(const std::string &arg, std::string *error) { +bool Rx::init(const std::string &file, std::string *error) { if (m_string->m_containsMacro == false) { m_re = new Regex(m_param); } @@ -36,8 +38,10 @@ bool Rx::init(const std::string &arg, std::string *error) { } -bool Rx::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { +bool Rx::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { Regex *re; if (m_param.empty() && !m_string->m_containsMacro) { @@ -52,8 +56,8 @@ bool Rx::evaluate(Transaction *transaction, RuleWithActions *rule, } std::vector captures; - re->searchOneMatch(input, captures); - + // FIXME: searchOneMatch should accept string_view. + re->searchOneMatch(input.c_str(), captures); if (rule && rule->hasCaptureAction() && transaction) { for (const Utils::SMatchCapture& capture : captures) { const std::string capture_substring(input.substr(capture.m_offset,capture.m_length)); diff --git a/src/operators/rx.h b/src/operators/rx.h index 817e74eb0b..874ec1f728 100644 --- a/src/operators/rx.h +++ b/src/operators/rx.h @@ -49,11 +49,12 @@ class Rx : public Operator { } } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; - bool init(const std::string &arg, std::string *error) override; + bool init(const std::string &file, std::string *error) override; private: Regex *m_re; diff --git a/src/operators/rx_global.cc b/src/operators/rx_global.cc index f715a4fd13..c0c4cee8c3 100644 --- a/src/operators/rx_global.cc +++ b/src/operators/rx_global.cc @@ -20,7 +20,7 @@ #include #include "src/operators/operator.h" -#include "modsecurity/rule.h" +#include "src/rule_with_actions.h" #include "modsecurity/rule_message.h" namespace modsecurity { @@ -37,7 +37,7 @@ bool RxGlobal::init(const std::string &arg, std::string *error) { bool RxGlobal::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const bpstd::string_view& input, RuleMessage *ruleMessage) { Regex *re; if (m_param.empty() && !m_string->m_containsMacro) { @@ -52,7 +52,7 @@ bool RxGlobal::evaluate(Transaction *transaction, RuleWithActions *rule, } std::vector captures; - re->searchGlobal(input, captures); + re->searchGlobal(input.c_str(), captures); if (rule && rule->hasCaptureAction() && transaction) { for (const Utils::SMatchCapture& capture : captures) { diff --git a/src/operators/rx_global.h b/src/operators/rx_global.h index 86e37d0d5f..a508d34f61 100644 --- a/src/operators/rx_global.h +++ b/src/operators/rx_global.h @@ -50,8 +50,8 @@ class RxGlobal : public Operator { } bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + const bpstd::string_view& input, + RuleMessage *ruleMessage) override; bool init(const std::string &arg, std::string *error) override; diff --git a/src/operators/str_eq.cc b/src/operators/str_eq.cc index 13c0368823..160c4196fe 100644 --- a/src/operators/str_eq.cc +++ b/src/operators/str_eq.cc @@ -20,9 +20,12 @@ namespace modsecurity { namespace operators { -bool StrEq::evaluate(Transaction *transaction, const std::string &str) { +bool StrEq::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string pt(m_string->evaluate(transaction)); - return !pt.compare(str); + return !pt.compare(str.to_string()); } diff --git a/src/operators/str_eq.h b/src/operators/str_eq.h index 10f38e3c25..0510439197 100644 --- a/src/operators/str_eq.h +++ b/src/operators/str_eq.h @@ -34,7 +34,10 @@ class StrEq : public Operator { explicit StrEq(std::unique_ptr param) : Operator("StrEq", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/str_match.cc b/src/operators/str_match.cc index ce7dfb2b92..51a2bb28c7 100644 --- a/src/operators/str_match.cc +++ b/src/operators/str_match.cc @@ -24,9 +24,12 @@ namespace modsecurity { namespace operators { -bool StrMatch::evaluate(Transaction *transaction, const std::string &input) { +bool StrMatch::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool ret = input.find(p) != std::string::npos; + bool ret = str.find(p) != std::string::npos; return ret; } diff --git a/src/operators/str_match.h b/src/operators/str_match.h index 4f77532f29..07a25e56a2 100644 --- a/src/operators/str_match.h +++ b/src/operators/str_match.h @@ -34,7 +34,10 @@ class StrMatch : public Operator { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/unconditional_match.cc b/src/operators/unconditional_match.cc index b79275d234..e68630b6bf 100644 --- a/src/operators/unconditional_match.cc +++ b/src/operators/unconditional_match.cc @@ -19,7 +19,9 @@ namespace modsecurity { namespace operators { bool UnconditionalMatch::evaluate(Transaction *transaction, - const std::string &input) { + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { return true; } diff --git a/src/operators/unconditional_match.h b/src/operators/unconditional_match.h index a54c768272..fafafa3ca2 100644 --- a/src/operators/unconditional_match.h +++ b/src/operators/unconditional_match.h @@ -31,7 +31,10 @@ class UnconditionalMatch : public Operator { UnconditionalMatch() : Operator("UnconditionalMatch") { } - bool evaluate(Transaction *transaction, const std::string &exp) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/validate_byte_range.cc b/src/operators/validate_byte_range.cc index 07b88149c2..b1a68d2a88 100644 --- a/src/operators/validate_byte_range.cc +++ b/src/operators/validate_byte_range.cc @@ -23,7 +23,7 @@ namespace modsecurity { namespace operators { -bool ValidateByteRange::getRange(const std::string &rangeRepresentation, +bool ValidateByteRange::getRange(const bpstd::string_view &rangeRepresentation, std::string *error) { size_t pos = rangeRepresentation.find_first_of("-"); int start; @@ -31,9 +31,10 @@ bool ValidateByteRange::getRange(const std::string &rangeRepresentation, if (pos == std::string::npos) { try { - start = std::stoi(rangeRepresentation); + start = std::stoi(rangeRepresentation.c_str()); } catch(...) { - error->assign("Not able to convert '" + rangeRepresentation + + error->assign("Not able to convert '" + \ + rangeRepresentation.to_string() + "' into a number"); return false; } @@ -42,19 +43,19 @@ bool ValidateByteRange::getRange(const std::string &rangeRepresentation, } try { - start = std::stoi(std::string(rangeRepresentation, 0, pos)); + start = std::stoi(std::string(rangeRepresentation.c_str(), 0, pos)); } catch (...) { error->assign("Not able to convert '" + - std::string(rangeRepresentation, 0, pos) + + std::string(rangeRepresentation.c_str(), 0, pos) + "' into a number"); return false; } try { - end = std::stoi(std::string(rangeRepresentation, pos + 1, + end = std::stoi(std::string(rangeRepresentation.c_str(), pos + 1, rangeRepresentation.length() - (pos + 1))); } catch (...) { - error->assign("Not able to convert '" + std::string(rangeRepresentation, + error->assign("Not able to convert '" + std::string(rangeRepresentation.c_str(), pos + 1, rangeRepresentation.length() - (pos + 1)) + "' into a number"); return false; @@ -110,16 +111,18 @@ bool ValidateByteRange::init(const std::string &file, } -bool ValidateByteRange::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { +bool ValidateByteRange::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { bool ret = true; size_t count = 0; - for (int i = 0; i < input.length(); i++) { - int x = (unsigned char) input.at(i); + for (int i = 0; i < str.length(); i++) { + int x = (unsigned char) str.at(i); if (!(table[x >> 3] & (1 << (x & 0x7)))) { // debug(9, "Value " + std::to_string(x) + " in " + - // input + " ouside range: " + param); + // str + " ouside range: " + param); logOffset(ruleMessage, i, 1); count++; } diff --git a/src/operators/validate_byte_range.h b/src/operators/validate_byte_range.h index 2c44e76921..fbcf70149c 100644 --- a/src/operators/validate_byte_range.h +++ b/src/operators/validate_byte_range.h @@ -37,10 +37,12 @@ class ValidateByteRange : public Operator { } ~ValidateByteRange() override { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, - std::shared_ptr ruleMessage) override; - bool getRange(const std::string &rangeRepresentation, std::string *error); + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + + bool getRange(const bpstd::string_view &rangeRepresentation, std::string *error); bool init(const std::string& file, std::string *error) override; private: std::vector ranges; diff --git a/src/operators/validate_dtd.cc b/src/operators/validate_dtd.cc index f57dbed3a5..7d3d0c77f4 100644 --- a/src/operators/validate_dtd.cc +++ b/src/operators/validate_dtd.cc @@ -43,25 +43,28 @@ bool ValidateDTD::init(const std::string &file, std::string *error) { } -bool ValidateDTD::evaluate(Transaction *t, const std::string &str) { +bool ValidateDTD::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { xmlValidCtxtPtr cvp; m_dtd = xmlParseDTD(NULL, (const xmlChar *)m_resource.c_str()); if (m_dtd == NULL) { std::string err = std::string("XML: Failed to load DTD: ") \ + m_resource; - ms_dbg_a(t, 4, err); + ms_dbg_a(transaction, 4, err); return true; } - if (t->m_xml->m_data.doc == NULL) { - ms_dbg_a(t, 4, "XML document tree could not "\ + if (transaction->m_xml->m_data.doc == NULL) { + ms_dbg_a(transaction, 4, "XML document tree could not "\ "be found for DTD validation."); return true; } - if (t->m_xml->m_data.well_formed != 1) { - ms_dbg_a(t, 4, "XML: DTD validation failed because " \ + if (transaction->m_xml->m_data.well_formed != 1) { + ms_dbg_a(transaction, 4, "XML: DTD validation failed because " \ "content is not well formed."); return true; } @@ -78,22 +81,23 @@ bool ValidateDTD::evaluate(Transaction *t, const std::string &str) { cvp = xmlNewValidCtxt(); if (cvp == NULL) { - ms_dbg_a(t, 4, "XML: Failed to create a validation context."); + ms_dbg_a(transaction, 4, + "XML: Failed to create a validation context."); return true; } /* Send validator errors/warnings to msr_log */ cvp->error = (xmlSchemaValidityErrorFunc)error_runtime; cvp->warning = (xmlSchemaValidityErrorFunc)warn_runtime; - cvp->userData = t; + cvp->userData = transaction; - if (!xmlValidateDtd(cvp, t->m_xml->m_data.doc, m_dtd)) { - ms_dbg_a(t, 4, "XML: DTD validation failed."); + if (!xmlValidateDtd(cvp, transaction->m_xml->m_data.doc, m_dtd)) { + ms_dbg_a(transaction, 4, "XML: DTD validation failed."); xmlFreeValidCtxt(cvp); return true; } - ms_dbg_a(t, 4, std::string("XML: Successfully validated " \ + ms_dbg_a(transaction, 4, std::string("XML: Successfully validated " \ "payload against DTD: ") + m_resource); xmlFreeValidCtxt(cvp); diff --git a/src/operators/validate_dtd.h b/src/operators/validate_dtd.h index ace6aad464..a5cd610b90 100644 --- a/src/operators/validate_dtd.h +++ b/src/operators/validate_dtd.h @@ -46,7 +46,11 @@ class ValidateDTD : public Operator { } } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/validate_hash.cc b/src/operators/validate_hash.cc index b608ac2b5a..3ceaa1ae97 100644 --- a/src/operators/validate_hash.cc +++ b/src/operators/validate_hash.cc @@ -22,7 +22,10 @@ namespace modsecurity { namespace operators { -bool ValidateHash::evaluate(Transaction *transaction, const std::string &str) { +bool ValidateHash::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { /** * @todo Implement the operator ValidateHash. * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#validateHash diff --git a/src/operators/validate_hash.h b/src/operators/validate_hash.h index 47e25fdf45..f9de9aa6b0 100644 --- a/src/operators/validate_hash.h +++ b/src/operators/validate_hash.h @@ -31,7 +31,11 @@ class ValidateHash : public Operator { /** @ingroup ModSecurity_Operator */ explicit ValidateHash(std::unique_ptr param) : Operator("ValidateHash", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/validate_schema.cc b/src/operators/validate_schema.cc index a94ca4f8a3..182df2072b 100644 --- a/src/operators/validate_schema.cc +++ b/src/operators/validate_schema.cc @@ -39,8 +39,10 @@ bool ValidateSchema::init(const std::string &file, std::string *error) { } -bool ValidateSchema::evaluate(Transaction *t, - const std::string &str) { +bool ValidateSchema::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { int rc; m_parserCtx = xmlSchemaNewParserCtxt(m_resource.c_str()); @@ -52,7 +54,7 @@ bool ValidateSchema::evaluate(Transaction *t, if (m_err.empty() == false) { err << m_err; } - ms_dbg_a(t, 4, err.str()); + ms_dbg_a(transaction, 4, err.str()); return true; } @@ -75,7 +77,7 @@ bool ValidateSchema::evaluate(Transaction *t, if (m_err.empty() == false) { err << " " << m_err; } - ms_dbg_a(t, 4, err.str()); + ms_dbg_a(transaction, 4, err.str()); xmlSchemaFreeParserCtxt(m_parserCtx); return true; } @@ -86,23 +88,23 @@ bool ValidateSchema::evaluate(Transaction *t, if (m_err.empty() == false) { err << " " << m_err; } - ms_dbg_a(t, 4, err.str()); + ms_dbg_a(transaction, 4, err.str()); return true; } /* Send validator errors/warnings to msr_log */ xmlSchemaSetValidErrors(m_validCtx, (xmlSchemaValidityErrorFunc)error_runtime, - (xmlSchemaValidityWarningFunc)warn_runtime, t); + (xmlSchemaValidityWarningFunc)warn_runtime, transaction); - if (t->m_xml->m_data.doc == NULL) { - ms_dbg_a(t, 4, "XML document tree could not be found for " \ + if (transaction->m_xml->m_data.doc == NULL) { + ms_dbg_a(transaction, 4, "XML document tree could not be found for " \ "schema validation."); return true; } - if (t->m_xml->m_data.well_formed != 1) { - ms_dbg_a(t, 4, "XML: Schema validation failed because " \ + if (transaction->m_xml->m_data.well_formed != 1) { + ms_dbg_a(transaction, 4, "XML: Schema validation failed because " \ "content is not well formed."); return true; } @@ -116,15 +118,15 @@ bool ValidateSchema::evaluate(Transaction *t, } */ - rc = xmlSchemaValidateDoc(m_validCtx, t->m_xml->m_data.doc); + rc = xmlSchemaValidateDoc(m_validCtx, transaction->m_xml->m_data.doc); if (rc != 0) { - ms_dbg_a(t, 4, "XML: Schema validation failed."); + ms_dbg_a(transaction, 4, "XML: Schema validation failed."); xmlSchemaFree(m_schema); xmlSchemaFreeParserCtxt(m_parserCtx); return true; /* No match. */ } - ms_dbg_a(t, 4, "XML: Successfully validated payload against " \ + ms_dbg_a(transaction, 4, "XML: Successfully validated payload against " \ "Schema: " + m_resource); xmlSchemaFree(m_schema); xmlSchemaFreeParserCtxt(m_parserCtx); diff --git a/src/operators/validate_schema.h b/src/operators/validate_schema.h index b190ef15d9..80d5aaacee 100644 --- a/src/operators/validate_schema.h +++ b/src/operators/validate_schema.h @@ -58,7 +58,11 @@ class ValidateSchema : public Operator { } } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/validate_url_encoding.cc b/src/operators/validate_url_encoding.cc index 20a86eb625..c82eb62c72 100644 --- a/src/operators/validate_url_encoding.cc +++ b/src/operators/validate_url_encoding.cc @@ -68,8 +68,10 @@ int ValidateUrlEncoding::validate_url_encoding(const char *input, } -bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { +bool ValidateUrlEncoding::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { size_t offset = 0; bool res = false; @@ -82,14 +84,15 @@ bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *ru case 1 : /* Encoding is valid */ if (transaction) { - ms_dbg_a(transaction, 7, "Valid URL Encoding at '" +input + "'"); + ms_dbg_a(transaction, 7, "Valid URL Encoding at '" + \ + input.to_string() + "'"); } res = false; break; case -2 : if (transaction) { ms_dbg_a(transaction, 7, "Invalid URL Encoding: Non-hexadecimal " - "digits used at '" + input + "'"); + "digits used at '" + input.to_string() + "'"); logOffset(ruleMessage, offset, input.size()); } res = true; /* Invalid match. */ @@ -97,7 +100,7 @@ bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *ru case -3 : if (transaction) { ms_dbg_a(transaction, 7, "Invalid URL Encoding: Not enough " \ - "characters at the end of input at '" + input + "'"); + "characters at the end of input at '" + input.to_string() + "'"); logOffset(ruleMessage, offset, input.size()); } res = true; /* Invalid match. */ @@ -107,7 +110,7 @@ bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *ru if (transaction) { ms_dbg_a(transaction, 7, "Invalid URL Encoding: Internal " \ "Error (rc = " + std::to_string(rc) + ") at '" + - input + "'"); + input.to_string() + "'"); logOffset(ruleMessage, offset, input.size()); } res = true; diff --git a/src/operators/validate_url_encoding.h b/src/operators/validate_url_encoding.h index fe274dc0a0..b7a5dc169f 100644 --- a/src/operators/validate_url_encoding.h +++ b/src/operators/validate_url_encoding.h @@ -31,9 +31,10 @@ class ValidateUrlEncoding : public Operator { ValidateUrlEncoding() : Operator("ValidateUrlEncoding") { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; static int validate_url_encoding(const char *input, uint64_t input_length, size_t *offset); diff --git a/src/operators/validate_utf8_encoding.cc b/src/operators/validate_utf8_encoding.cc index e95061af3c..8952ae57d5 100644 --- a/src/operators/validate_utf8_encoding.cc +++ b/src/operators/validate_utf8_encoding.cc @@ -113,8 +113,10 @@ int ValidateUtf8Encoding::detect_utf8_character( return unicode_len; } -bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { +bool ValidateUtf8Encoding::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { unsigned int i, bytes_left; const char *str_c = str.c_str(); @@ -128,7 +130,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "not enough bytes in character " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); } return true; @@ -137,7 +139,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "invalid byte value in character " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -147,7 +149,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "overlong character detected " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -157,7 +159,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "use of restricted character " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -166,7 +168,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r case UNICODE_ERROR_DECODING_ERROR : if (transaction) { ms_dbg_a(transaction, 8, "Error validating UTF-8 decoding " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -177,7 +179,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (rc <= 0) { if (transaction) { ms_dbg_a(transaction, 8, "Internal error during UTF-8 validation " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } diff --git a/src/operators/validate_utf8_encoding.h b/src/operators/validate_utf8_encoding.h index e59eef5897..0f695c22f1 100644 --- a/src/operators/validate_utf8_encoding.h +++ b/src/operators/validate_utf8_encoding.h @@ -38,9 +38,10 @@ class ValidateUtf8Encoding : public Operator { ValidateUtf8Encoding() : Operator("ValidateUtf8Encoding") { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; static int detect_utf8_character(const unsigned char *p_read, unsigned int length); diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index a0d76cc376..45b1e951ff 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -21,6 +21,8 @@ #include #include "src/operators/operator.h" +#include "src/rule_with_actions.h" + #if PCRE_HAVE_JIT #define pcre_study_opt PCRE_STUDY_JIT_COMPILE @@ -117,8 +119,10 @@ bool VerifyCC::init(const std::string ¶m2, std::string *error) { } -bool VerifyCC::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& i, std::shared_ptr ruleMessage) { +bool VerifyCC::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &i, + RuleMessage *ruleMessage) { int offset = 0; int target_length = i.length(); @@ -137,18 +141,18 @@ bool VerifyCC::evaluate(Transaction *t, RuleWithActions *rule, return false; } if (ret > 0) { - match = std::string(i, ovector[0], ovector[1] - ovector[0]); + match = std::string(i.to_string(), ovector[0], ovector[1] - ovector[0]); int is_cc = luhnVerify(match.c_str(), match.size()); if (is_cc) { - if (t) { + if (transaction) { if (rule && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", std::string(match)); - ms_dbg_a(t, 7, "Added VerifyCC match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added VerifyCC match TX.0: " + \ std::string(match)); } - ms_dbg_a(t, 9, "CC# match \"" + m_param + - "\" at " + i + ". [offset " + + ms_dbg_a(transaction, 9, "CC# match \"" + m_param + + "\" at " + i.to_string() + ". [offset " + std::to_string(offset) + "]"); } return true; diff --git a/src/operators/verify_cc.h b/src/operators/verify_cc.h index dc82492c9a..d4cdf18566 100644 --- a/src/operators/verify_cc.h +++ b/src/operators/verify_cc.h @@ -35,10 +35,13 @@ class VerifyCC : public Operator { m_pce(NULL) { } ~VerifyCC(); - bool evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; bool init(const std::string ¶m, std::string *error) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + private: pcre *m_pc; pcre_extra *m_pce; diff --git a/src/operators/verify_cpf.cc b/src/operators/verify_cpf.cc index 778584db62..922d62232e 100644 --- a/src/operators/verify_cpf.cc +++ b/src/operators/verify_cpf.cc @@ -19,6 +19,8 @@ #include #include "src/operators/operator.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace operators { @@ -108,8 +110,10 @@ bool VerifyCPF::verify(const char *cpfnumber, int len) { } -bool VerifyCPF::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { +bool VerifyCPF::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { std::list matches; bool is_cpf = false; int i; @@ -119,15 +123,15 @@ bool VerifyCPF::evaluate(Transaction *t, RuleWithActions *rule, } for (i = 0; i < input.size() - 1 && is_cpf == false; i++) { - matches = m_re->searchAll(input.substr(i, input.size())); + matches = m_re->searchAll(input.substr(i, input.size()).to_string()); for (const auto & m : matches) { is_cpf = verify(m.str().c_str(), m.str().size()); if (is_cpf) { logOffset(ruleMessage, m.offset(), m.str().size()); - if (rule && t && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + if (rule && transaction && rule->hasCaptureAction()) { + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", m.str()); - ms_dbg_a(t, 7, "Added VerifyCPF match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added VerifyCPF match TX.0: " + \ m.str()); } diff --git a/src/operators/verify_cpf.h b/src/operators/verify_cpf.h index eecf71b1a2..9ee96643a9 100644 --- a/src/operators/verify_cpf.h +++ b/src/operators/verify_cpf.h @@ -46,9 +46,10 @@ class VerifyCPF : public Operator { bool operator=(const VerifyCPF &a) = delete; VerifyCPF(const VerifyCPF &a) = delete; - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; bool verify(const char *ssnumber, int len); diff --git a/src/operators/verify_ssn.cc b/src/operators/verify_ssn.cc index 59a36dd78f..f58d8d27a8 100644 --- a/src/operators/verify_ssn.cc +++ b/src/operators/verify_ssn.cc @@ -20,6 +20,8 @@ #include #include "src/operators/operator.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace operators { @@ -110,8 +112,10 @@ bool VerifySSN::verify(const char *ssnumber, int len) { } -bool VerifySSN::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { +bool VerifySSN::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { std::list matches; bool is_ssn = false; int i; @@ -121,15 +125,15 @@ bool VerifySSN::evaluate(Transaction *t, RuleWithActions *rule, } for (i = 0; i < input.size() - 1 && is_ssn == false; i++) { - matches = m_re->searchAll(input.substr(i, input.size())); + matches = m_re->searchAll(input.substr(i, input.size()).to_string()); for (const auto & j : matches) { is_ssn = verify(j.str().c_str(), j.str().size()); if (is_ssn) { logOffset(ruleMessage, j.offset(), j.str().size()); - if (rule && t && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + if (rule && transaction && rule->hasCaptureAction()) { + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", j.str()); - ms_dbg_a(t, 7, "Added VerifySSN match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added VerifySSN match TX.0: " + \ j.str()); } diff --git a/src/operators/verify_ssn.h b/src/operators/verify_ssn.h index 7c0828fbb9..a1c6b7803d 100644 --- a/src/operators/verify_ssn.h +++ b/src/operators/verify_ssn.h @@ -46,9 +46,10 @@ class VerifySSN : public Operator { bool operator=(const VerifySSN &a) = delete; VerifySSN(const VerifySSN &a) = delete; - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; diff --git a/src/operators/verify_svnr.cc b/src/operators/verify_svnr.cc index 248e6b4ec1..8f906b3c27 100644 --- a/src/operators/verify_svnr.cc +++ b/src/operators/verify_svnr.cc @@ -9,6 +9,7 @@ #include "modsecurity/rule_message.h" #include "modsecurity/rules_set_properties.h" +#include "src/rule_with_actions.h" namespace modsecurity { namespace operators { @@ -77,8 +78,10 @@ bool VerifySVNR::verify(const char *svnrnumber, int len) { } -bool VerifySVNR::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { +bool VerifySVNR::evaluate(Transaction *t, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage* ruleMessage) { std::list matches; bool is_svnr = false; int i; @@ -88,7 +91,7 @@ bool VerifySVNR::evaluate(Transaction *t, RuleWithActions *rule, } for (i = 0; i < input.size() - 1 && is_svnr == false; i++) { - matches = m_re->searchAll(input.substr(i, input.size())); + matches = m_re->searchAll(input.substr(i, input.size()).to_string()); for (const auto & j : matches) { is_svnr = verify(j.str().c_str(), j.str().size()); diff --git a/src/operators/verify_svnr.h b/src/operators/verify_svnr.h index 6fe9df9afb..b5ba924343 100644 --- a/src/operators/verify_svnr.h +++ b/src/operators/verify_svnr.h @@ -32,9 +32,10 @@ class VerifySVNR : public Operator { bool operator=(const VerifySVNR &a) = delete; VerifySVNR(const VerifySVNR &a) = delete; - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, - std::shared_ptr ruleMessage) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; bool verify(const char *ssnumber, int len); diff --git a/src/operators/within.cc b/src/operators/within.cc index ce781cc7d7..346243e11c 100644 --- a/src/operators/within.cc +++ b/src/operators/within.cc @@ -24,8 +24,10 @@ namespace modsecurity { namespace operators { -bool Within::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { +bool Within::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { bool res = false; size_t pos = 0; std::string paramTarget(m_string->evaluate(transaction)); @@ -34,7 +36,7 @@ bool Within::evaluate(Transaction *transaction, RuleWithActions *rule, return true; } - pos = paramTarget.find(str); + pos = paramTarget.find(str.c_str()); res = pos != std::string::npos; if (res) { logOffset(ruleMessage, pos, str.size()); diff --git a/src/operators/within.h b/src/operators/within.h index 7fcb430910..a6bc5d313b 100644 --- a/src/operators/within.h +++ b/src/operators/within.h @@ -33,8 +33,11 @@ class Within : public Operator { : Operator("Within", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/parser/driver.cc b/src/parser/driver.cc index c8d15b48af..6ba04cc19b 100644 --- a/src/parser/driver.cc +++ b/src/parser/driver.cc @@ -18,7 +18,7 @@ #include "modsecurity/rules_set_properties.h" #include "src/parser/seclang-parser.hh" #include "modsecurity/audit_log.h" -#include "modsecurity/rule_marker.h" +#include "src/rule_marker.h" using modsecurity::audit_log::AuditLog; using modsecurity::RuleWithOperator; @@ -81,16 +81,86 @@ int Driver::addSecRule(std::unique_ptr r) { } /* is it a chained rule? */ - if (m_lastRule != nullptr && m_lastRule->isChained()) { + if (m_lastRule != nullptr && m_lastRule->hasChainAction()) { r->setPhase(m_lastRule->getPhase()); if (r->hasDisruptiveAction()) { m_parserError << "Disruptive actions can only be specified by"; m_parserError << " chain starter rules."; return false; } - m_lastRule->m_chainedRuleChild = std::move(r); - m_lastRule->m_chainedRuleChild->m_chainedRuleParent = m_lastRule; - m_lastRule = m_lastRule->m_chainedRuleChild.get(); + + m_lastRule->setChainedNext(std::move(r)); + m_lastRule->getChainedNext()->setChainedParent(m_lastRule); + m_lastRule = m_lastRule->getChainedNext(); + + /* Lets set all meta-data to the first rule */ + RuleWithActions *firstRule = m_lastRule; + if (!firstRule->hasChainAction()) { + while (firstRule->getChainedParent() != nullptr) { + if (firstRule->hasMessageAction()) { + firstRule->getChainedParent()->setMessageAction( + firstRule->getMessageAction() + ); + firstRule->setMessageAction(nullptr); + } + if (firstRule->hasLogDataAction()) { + firstRule->getChainedParent()->setLogDataAction( + firstRule->getLogDataAction() + ); + firstRule->setLogDataAction(nullptr); + } + if (firstRule->hasSeverityAction()) { + firstRule->getChainedParent()->setSeverity( + firstRule->getSeverity() + ); + } + if (firstRule->hasRevisionAction()) { + firstRule->getChainedParent()->setRevision( + firstRule->getRevision() + ); + } + if (firstRule->hasVersionAction()) { + firstRule->getChainedParent()->setVersion( + firstRule->getVersion() + ); + } + if (firstRule->hasAccuracyAction()) { + firstRule->getChainedParent()->setAccuracy( + firstRule->getAccuracy() + ); + } + if (firstRule->hasMaturityAction()) { + firstRule->getChainedParent()->setMaturity( + firstRule->getMaturity() + ); + } + + if (firstRule->hasTagAction()) { + firstRule->getChainedParent()->setTags( + firstRule->getTagsAction() + ); + firstRule->cleanTags(); + } + + if (firstRule->hasDisruptiveAction()) { + firstRule->getChainedParent()->setDisruptiveAction( + firstRule->getDisruptiveAction() + ); + firstRule->setDisruptiveAction(nullptr); + } + firstRule->getChainedParent()->setHasBlockAction( + firstRule->hasBlockAction() + ); + firstRule->getChainedParent()->setHasLogAction( + firstRule->hasLogAction() + ); + firstRule->getChainedParent()->setHasLogAction( + firstRule->hasNoLogAction() + ); + firstRule = firstRule->getChainedParent(); + } + } + return true; } @@ -99,26 +169,15 @@ int Driver::addSecRule(std::unique_ptr r) { * Checking if the rule has an ID and also checking if this ID is not used * by other rule */ - if (rule->m_ruleId == 0) { + if (rule->getId() == 0) { m_parserError << "Rules must have an ID. File: "; m_parserError << rule->getFileName() << " at line: "; m_parserError << std::to_string(rule->getLineNumber()) << std::endl; return false; } - for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - Rules *rules = m_rulesSetPhases[i]; - for (int j = 0; j < rules->size(); j++) { - RuleWithOperator *lr = dynamic_cast(rules->at(j).get()); - if (lr && lr->m_ruleId == rule->m_ruleId) { - m_parserError << "Rule id: " << std::to_string(rule->m_ruleId) \ - << " is duplicated" << std::endl; - return false; - } - } - } - m_lastRule = rule.get(); + m_rulesSetPhases.insert(rule); return true; diff --git a/src/parser/location.hh b/src/parser/location.hh index 314b0693a1..3f87b6b7d8 100644 --- a/src/parser/location.hh +++ b/src/parser/location.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Locations for Bison parsers in C++ @@ -60,13 +60,11 @@ namespace yy { class position { public: - /// Type for file name. - typedef const std::string filename_type; /// Type for line and column numbers. typedef int counter_type; /// Construct a position. - explicit position (filename_type* f = YY_NULLPTR, + explicit position (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) : filename (f) @@ -76,7 +74,7 @@ namespace yy { /// Initialization. - void initialize (filename_type* fn = YY_NULLPTR, + void initialize (std::string* fn = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -105,7 +103,7 @@ namespace yy { /** \} */ /// File name to which this position refers. - filename_type* filename; + std::string* filename; /// Current line number. counter_type line; /// Current column number. @@ -148,6 +146,24 @@ namespace yy { return res -= width; } + /// Compare two position objects. + inline bool + operator== (const position& pos1, const position& pos2) + { + return (pos1.line == pos2.line + && pos1.column == pos2.column + && (pos1.filename == pos2.filename + || (pos1.filename && pos2.filename + && *pos1.filename == *pos2.filename))); + } + + /// Compare two position objects. + inline bool + operator!= (const position& pos1, const position& pos2) + { + return !(pos1 == pos2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param pos a reference to the position to redirect @@ -165,8 +181,6 @@ namespace yy { class location { public: - /// Type for file name. - typedef position::filename_type filename_type; /// Type for line and column numbers. typedef position::counter_type counter_type; @@ -183,7 +197,7 @@ namespace yy { {} /// Construct a 0-width location in \a f, \a l, \a c. - explicit location (filename_type* f, + explicit location (std::string* f, counter_type l = 1, counter_type c = 1) : begin (f, l, c) @@ -192,7 +206,7 @@ namespace yy { /// Initialization. - void initialize (filename_type* f = YY_NULLPTR, + void initialize (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -274,6 +288,20 @@ namespace yy { return res -= width; } + /// Compare two location objects. + inline bool + operator== (const location& loc1, const location& loc2) + { + return loc1.begin == loc2.begin && loc1.end == loc2.end; + } + + /// Compare two location objects. + inline bool + operator!= (const location& loc1, const location& loc2) + { + return !(loc1 == loc2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param loc a reference to the location to redirect @@ -299,6 +327,6 @@ namespace yy { } } // yy -#line 303 "location.hh" +#line 331 "location.hh" #endif // !YY_YY_LOCATION_HH_INCLUDED diff --git a/src/parser/position.hh b/src/parser/position.hh index 037a25d381..bf34c1c57a 100644 --- a/src/parser/position.hh +++ b/src/parser/position.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined in "location.hh". diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index dfabb43421..33e196c66e 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton implementation for Bison LALR(1) parsers in C++ @@ -30,9 +30,8 @@ // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. @@ -42,11 +41,11 @@ // Unqualified %code blocks. -#line 325 "seclang-parser.yy" +#line 328 "seclang-parser.yy" #include "src/parser/driver.h" -#line 50 "seclang-parser.cc" +#line 49 "seclang-parser.cc" #ifndef YY_ @@ -61,7 +60,6 @@ # endif #endif - // Whether we are compiled with exception support. #ifndef YY_EXCEPTIONS # if defined __GNUC__ && !defined __EXCEPTIONS @@ -117,7 +115,7 @@ # define YY_STACK_PRINT() \ do { \ if (yydebug_) \ - yy_stack_print_ (); \ + yystack_print_ (); \ } while (false) #else // !YYDEBUG @@ -138,7 +136,49 @@ #define YYRECOVERING() (!!yyerrstatus_) namespace yy { -#line 142 "seclang-parser.cc" +#line 140 "seclang-parser.cc" + + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + seclang_parser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + /// Build a parser object. seclang_parser::seclang_parser (modsecurity::Parser::Driver& driver_yyarg) @@ -158,7 +198,7 @@ namespace yy { {} /*---------------. - | symbol kinds. | + | Symbol types. | `---------------*/ @@ -189,13 +229,13 @@ namespace yy { : state (s) {} - seclang_parser::symbol_kind_type - seclang_parser::by_state::kind () const YY_NOEXCEPT + seclang_parser::symbol_number_type + seclang_parser::by_state::type_get () const YY_NOEXCEPT { if (state == empty_state) - return symbol_kind::S_YYEMPTY; + return empty_symbol; else - return YY_CAST (symbol_kind_type, yystos_[+state]); + return yystos_[+state]; } seclang_parser::stack_symbol_type::stack_symbol_type () @@ -204,234 +244,235 @@ namespace yy { seclang_parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) : super_type (YY_MOVE (that.state), YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.YY_MOVE_OR_COPY< std::unique_ptr > > > (YY_MOVE (that.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.YY_MOVE_OR_COPY< std::unique_ptr > > > (YY_MOVE (that.value)); break; @@ -448,234 +489,235 @@ namespace yy { seclang_parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) : super_type (s, YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.move< std::string > (YY_MOVE (that.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.move< std::unique_ptr > > > (YY_MOVE (that.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.move< std::unique_ptr > > > (YY_MOVE (that.value)); break; @@ -684,7 +726,7 @@ namespace yy { } // that is emptied. - that.kind_ = symbol_kind::S_YYEMPTY; + that.type = empty_symbol; } #if YY_CPLUSPLUS < 201103L @@ -692,234 +734,235 @@ namespace yy { seclang_parser::stack_symbol_type::operator= (const stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.copy< std::string > (that.value); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_var: // var + case 356: // var value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.copy< std::unique_ptr > > > (that.value); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.copy< std::unique_ptr > > > (that.value); break; @@ -935,234 +978,235 @@ namespace yy { seclang_parser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.move< std::string > (that.value); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_var: // var + case 356: // var value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.move< std::unique_ptr > > > (that.value); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.move< std::unique_ptr > > > (that.value); break; @@ -1188,21 +1232,23 @@ namespace yy { #if YYDEBUG template void - seclang_parser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const + seclang_parser::yy_print_ (std::ostream& yyo, + const basic_symbol& yysym) const { std::ostream& yyoutput = yyo; YYUSE (yyoutput); + symbol_number_type yytype = yysym.type_get (); +#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408 + // Avoid a (spurious) G++ 4.8 warning about "array subscript is + // below array bounds". if (yysym.empty ()) - yyo << "empty symbol"; - else - { - symbol_kind_type yykind = yysym.kind (); - yyo << (yykind < YYNTOKENS ? "token" : "nterm") - << ' ' << yysym.name () << " (" - << yysym.location << ": "; - YYUSE (yykind); - yyo << ')'; - } + std::abort (); +#endif + yyo << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << yysym.location << ": "; + YYUSE (yytype); + yyo << ')'; } #endif @@ -1261,11 +1307,11 @@ namespace yy { seclang_parser::state_type seclang_parser::yy_lr_goto_state_ (state_type yystate, int yysym) { - int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; + int yyr = yypgoto_[yysym - yyntokens_] + yystate; if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) return yytable_[yyr]; else - return yydefgoto_[yysym - YYNTOKENS]; + return yydefgoto_[yysym - yyntokens_]; } bool @@ -1314,13 +1360,13 @@ namespace yy { // User initialization code. -#line 318 "seclang-parser.yy" +#line 321 "seclang-parser.yy" { // Initialize the initial location. yyla.location.begin.filename = yyla.location.end.filename = new std::string(driver.file); } -#line 1324 "seclang-parser.cc" +#line 1370 "seclang-parser.cc" /* Initialize the stack. The initial state will be set in @@ -1335,7 +1381,6 @@ namespace yy { `-----------------------------------------------*/ yynewstate: YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; - YY_STACK_PRINT (); // Accept? if (yystack_[0].state == yyfinal_) @@ -1356,7 +1401,7 @@ namespace yy { // Read a lookahead token. if (yyla.empty ()) { - YYCDEBUG << "Reading a token\n"; + YYCDEBUG << "Reading a token: "; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS @@ -1375,20 +1420,10 @@ namespace yy { } YY_SYMBOL_PRINT ("Next token is", yyla); - if (yyla.kind () == symbol_kind::S_YYerror) - { - // The scanner already issued an error message, process directly - // to error recovery. But do not keep the error token as - // lookahead, it is too special and may lead us to an endless - // loop in error recovery. */ - yyla.kind_ = symbol_kind::S_YYUNDEF; - goto yyerrlab1; - } - /* If the proper action on seeing token YYLA.TYPE is to reduce or to detect an error, take that action. */ - yyn += yyla.kind (); - if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) + yyn += yyla.type_get (); + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ()) { goto yydefault; } @@ -1435,232 +1470,233 @@ namespace yy { when using variants. */ switch (yyr1_[yyn]) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" yylhs.value.emplace< std::string > (); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_var: // var + case 356: // var yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted yylhs.value.emplace< std::unique_ptr > > > (); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted yylhs.value.emplace< std::unique_ptr > > > (); break; @@ -1684,242 +1720,242 @@ namespace yy { { switch (yyn) { - case 2: // input: "end of file" -#line 711 "seclang-parser.yy" + case 2: +#line 715 "seclang-parser.yy" { return 0; } -#line 1693 "seclang-parser.cc" +#line 1729 "seclang-parser.cc" break; - case 6: // audit_log: "CONFIG_DIR_AUDIT_DIR_MOD" -#line 724 "seclang-parser.yy" + case 6: +#line 728 "seclang-parser.yy" { driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } -#line 1701 "seclang-parser.cc" +#line 1737 "seclang-parser.cc" break; - case 7: // audit_log: "CONFIG_DIR_AUDIT_DIR" -#line 730 "seclang-parser.yy" + case 7: +#line 734 "seclang-parser.yy" { driver.m_auditLog->setStorageDir(yystack_[0].value.as < std::string > ()); } -#line 1709 "seclang-parser.cc" +#line 1745 "seclang-parser.cc" break; - case 8: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_RELEVANT_ONLY" -#line 736 "seclang-parser.yy" + case 8: +#line 740 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus); } -#line 1717 "seclang-parser.cc" +#line 1753 "seclang-parser.cc" break; - case 9: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_OFF" -#line 740 "seclang-parser.yy" + case 9: +#line 744 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus); } -#line 1725 "seclang-parser.cc" +#line 1761 "seclang-parser.cc" break; - case 10: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_ON" -#line 744 "seclang-parser.yy" + case 10: +#line 748 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus); } -#line 1733 "seclang-parser.cc" +#line 1769 "seclang-parser.cc" break; - case 11: // audit_log: "CONFIG_DIR_AUDIT_FLE_MOD" -#line 750 "seclang-parser.yy" + case 11: +#line 754 "seclang-parser.yy" { driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } -#line 1741 "seclang-parser.cc" +#line 1777 "seclang-parser.cc" break; - case 12: // audit_log: "CONFIG_DIR_AUDIT_LOG2" -#line 756 "seclang-parser.yy" + case 12: +#line 760 "seclang-parser.yy" { driver.m_auditLog->setFilePath2(yystack_[0].value.as < std::string > ()); } -#line 1749 "seclang-parser.cc" +#line 1785 "seclang-parser.cc" break; - case 13: // audit_log: "CONFIG_DIR_AUDIT_LOG_P" -#line 762 "seclang-parser.yy" + case 13: +#line 766 "seclang-parser.yy" { driver.m_auditLog->setParts(yystack_[0].value.as < std::string > ()); } -#line 1757 "seclang-parser.cc" +#line 1793 "seclang-parser.cc" break; - case 14: // audit_log: "CONFIG_DIR_AUDIT_LOG" -#line 768 "seclang-parser.yy" + case 14: +#line 772 "seclang-parser.yy" { driver.m_auditLog->setFilePath1(yystack_[0].value.as < std::string > ()); } -#line 1765 "seclang-parser.cc" +#line 1801 "seclang-parser.cc" break; - case 15: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT JSON -#line 773 "seclang-parser.yy" + case 15: +#line 777 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat); } -#line 1773 "seclang-parser.cc" +#line 1809 "seclang-parser.cc" break; - case 16: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT NATIVE -#line 778 "seclang-parser.yy" + case 16: +#line 782 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat); } -#line 1781 "seclang-parser.cc" +#line 1817 "seclang-parser.cc" break; - case 17: // audit_log: "CONFIG_DIR_AUDIT_STS" -#line 784 "seclang-parser.yy" + case 17: +#line 788 "seclang-parser.yy" { std::string relevant_status(yystack_[0].value.as < std::string > ()); driver.m_auditLog->setRelevantStatus(relevant_status); } -#line 1790 "seclang-parser.cc" +#line 1826 "seclang-parser.cc" break; - case 18: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_SERIAL" -#line 791 "seclang-parser.yy" + case 18: +#line 795 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType); } -#line 1798 "seclang-parser.cc" +#line 1834 "seclang-parser.cc" break; - case 19: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_PARALLEL" -#line 795 "seclang-parser.yy" + case 19: +#line 799 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType); } -#line 1806 "seclang-parser.cc" +#line 1842 "seclang-parser.cc" break; - case 20: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_HTTPS" -#line 799 "seclang-parser.yy" + case 20: +#line 803 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType); } -#line 1814 "seclang-parser.cc" +#line 1850 "seclang-parser.cc" break; - case 21: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_ON" -#line 805 "seclang-parser.yy" + case 21: +#line 809 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 1822 "seclang-parser.cc" +#line 1858 "seclang-parser.cc" break; - case 22: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_OFF" -#line 809 "seclang-parser.yy" + case 22: +#line 813 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 1830 "seclang-parser.cc" +#line 1866 "seclang-parser.cc" break; - case 23: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_RELEVANT_ONLY" -#line 813 "seclang-parser.yy" + case 23: +#line 817 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off"); YYERROR; } -#line 1839 "seclang-parser.cc" +#line 1875 "seclang-parser.cc" break; - case 24: // audit_log: "CONFIG_UPLOAD_FILE_LIMIT" -#line 818 "seclang-parser.yy" + case 24: +#line 822 "seclang-parser.yy" { driver.m_uploadFileLimit.m_set = true; driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 10); } -#line 1848 "seclang-parser.cc" +#line 1884 "seclang-parser.cc" break; - case 25: // audit_log: "CONFIG_UPLOAD_FILE_MODE" -#line 823 "seclang-parser.yy" + case 25: +#line 827 "seclang-parser.yy" { driver.m_uploadFileMode.m_set = true; driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8); } -#line 1857 "seclang-parser.cc" +#line 1893 "seclang-parser.cc" break; - case 26: // audit_log: "CONFIG_UPLOAD_DIR" -#line 828 "seclang-parser.yy" + case 26: +#line 832 "seclang-parser.yy" { driver.m_uploadDirectory.m_set = true; driver.m_uploadDirectory.m_value = yystack_[0].value.as < std::string > (); } -#line 1866 "seclang-parser.cc" +#line 1902 "seclang-parser.cc" break; - case 27: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_ON" -#line 833 "seclang-parser.yy" + case 27: +#line 837 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 1874 "seclang-parser.cc" +#line 1910 "seclang-parser.cc" break; - case 28: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_OFF" -#line 837 "seclang-parser.yy" + case 28: +#line 841 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 1882 "seclang-parser.cc" +#line 1918 "seclang-parser.cc" break; - case 29: // actions: "QUOTATION_MARK" actions_may_quoted "QUOTATION_MARK" -#line 844 "seclang-parser.yy" + case 29: +#line 848 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 1890 "seclang-parser.cc" +#line 1926 "seclang-parser.cc" break; - case 30: // actions: actions_may_quoted -#line 848 "seclang-parser.yy" + case 30: +#line 852 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 1898 "seclang-parser.cc" +#line 1934 "seclang-parser.cc" break; - case 31: // actions_may_quoted: actions_may_quoted "," act -#line 855 "seclang-parser.yy" + case 31: +#line 859 "seclang-parser.yy" { ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[3].location) yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); } -#line 1908 "seclang-parser.cc" +#line 1944 "seclang-parser.cc" break; - case 32: // actions_may_quoted: act -#line 861 "seclang-parser.yy" + case 32: +#line 865 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[1].location) b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 1919 "seclang-parser.cc" +#line 1955 "seclang-parser.cc" break; - case 33: // op: op_before_init -#line 871 "seclang-parser.yy" + case 33: +#line 875 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); std::string error; @@ -1928,11 +1964,11 @@ namespace yy { YYERROR; } } -#line 1932 "seclang-parser.cc" +#line 1968 "seclang-parser.cc" break; - case 34: // op: "NOT" op_before_init -#line 880 "seclang-parser.yy" + case 34: +#line 884 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); yylhs.value.as < std::unique_ptr > ()->m_negation = true; @@ -1942,11 +1978,11 @@ namespace yy { YYERROR; } } -#line 1946 "seclang-parser.cc" +#line 1982 "seclang-parser.cc" break; - case 35: // op: run_time_string -#line 890 "seclang-parser.yy" + case 35: +#line 894 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); std::string error; @@ -1955,11 +1991,11 @@ namespace yy { YYERROR; } } -#line 1959 "seclang-parser.cc" +#line 1995 "seclang-parser.cc" break; - case 36: // op: "NOT" run_time_string -#line 899 "seclang-parser.yy" + case 36: +#line 903 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yylhs.value.as < std::unique_ptr > ()->m_negation = true; @@ -1969,302 +2005,302 @@ namespace yy { YYERROR; } } -#line 1973 "seclang-parser.cc" +#line 2009 "seclang-parser.cc" break; - case 37: // op_before_init: "OPERATOR_UNCONDITIONAL_MATCH" -#line 912 "seclang-parser.yy" + case 37: +#line 916 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::UnconditionalMatch()); } -#line 1981 "seclang-parser.cc" +#line 2017 "seclang-parser.cc" break; - case 38: // op_before_init: "OPERATOR_DETECT_SQLI" -#line 916 "seclang-parser.yy" + case 38: +#line 920 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectSQLi()); } -#line 1989 "seclang-parser.cc" +#line 2025 "seclang-parser.cc" break; - case 39: // op_before_init: "OPERATOR_DETECT_XSS" -#line 920 "seclang-parser.yy" + case 39: +#line 924 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectXSS()); } -#line 1997 "seclang-parser.cc" +#line 2033 "seclang-parser.cc" break; - case 40: // op_before_init: "OPERATOR_VALIDATE_URL_ENCODING" -#line 924 "seclang-parser.yy" + case 40: +#line 928 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUrlEncoding()); } -#line 2005 "seclang-parser.cc" +#line 2041 "seclang-parser.cc" break; - case 41: // op_before_init: "OPERATOR_VALIDATE_UTF8_ENCODING" -#line 928 "seclang-parser.yy" + case 41: +#line 932 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUtf8Encoding()); } -#line 2013 "seclang-parser.cc" +#line 2049 "seclang-parser.cc" break; - case 42: // op_before_init: "OPERATOR_INSPECT_FILE" run_time_string -#line 932 "seclang-parser.yy" + case 42: +#line 936 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2021 "seclang-parser.cc" +#line 2057 "seclang-parser.cc" break; - case 43: // op_before_init: "OPERATOR_FUZZY_HASH" run_time_string -#line 936 "seclang-parser.yy" + case 43: +#line 940 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2029 "seclang-parser.cc" +#line 2065 "seclang-parser.cc" break; - case 44: // op_before_init: "OPERATOR_VALIDATE_BYTE_RANGE" run_time_string -#line 940 "seclang-parser.yy" + case 44: +#line 944 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2037 "seclang-parser.cc" +#line 2073 "seclang-parser.cc" break; - case 45: // op_before_init: "OPERATOR_VALIDATE_DTD" run_time_string -#line 944 "seclang-parser.yy" + case 45: +#line 948 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2045 "seclang-parser.cc" +#line 2081 "seclang-parser.cc" break; - case 46: // op_before_init: "OPERATOR_VALIDATE_HASH" run_time_string -#line 948 "seclang-parser.yy" + case 46: +#line 952 "seclang-parser.yy" { /* $$ = new operators::ValidateHash($1); */ OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location); } -#line 2054 "seclang-parser.cc" +#line 2090 "seclang-parser.cc" break; - case 47: // op_before_init: "OPERATOR_VALIDATE_SCHEMA" run_time_string -#line 953 "seclang-parser.yy" + case 47: +#line 957 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2062 "seclang-parser.cc" +#line 2098 "seclang-parser.cc" break; - case 48: // op_before_init: "OPERATOR_VERIFY_CC" run_time_string -#line 957 "seclang-parser.yy" + case 48: +#line 961 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2070 "seclang-parser.cc" +#line 2106 "seclang-parser.cc" break; - case 49: // op_before_init: "OPERATOR_VERIFY_CPF" run_time_string -#line 961 "seclang-parser.yy" + case 49: +#line 965 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2078 "seclang-parser.cc" +#line 2114 "seclang-parser.cc" break; - case 50: // op_before_init: "OPERATOR_VERIFY_SSN" run_time_string -#line 965 "seclang-parser.yy" + case 50: +#line 969 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2086 "seclang-parser.cc" +#line 2122 "seclang-parser.cc" break; - case 51: // op_before_init: "OPERATOR_VERIFY_SVNR" run_time_string -#line 969 "seclang-parser.yy" + case 51: +#line 973 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySVNR(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2094 "seclang-parser.cc" +#line 2130 "seclang-parser.cc" break; - case 52: // op_before_init: "OPERATOR_GSB_LOOKUP" run_time_string -#line 973 "seclang-parser.yy" + case 52: +#line 977 "seclang-parser.yy" { /* $$ = new operators::GsbLookup($1); */ OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location); } -#line 2103 "seclang-parser.cc" +#line 2139 "seclang-parser.cc" break; - case 53: // op_before_init: "OPERATOR_RSUB" run_time_string -#line 978 "seclang-parser.yy" + case 53: +#line 982 "seclang-parser.yy" { /* $$ = new operators::Rsub($1); */ OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location); } -#line 2112 "seclang-parser.cc" +#line 2148 "seclang-parser.cc" break; - case 54: // op_before_init: "OPERATOR_WITHIN" run_time_string -#line 983 "seclang-parser.yy" + case 54: +#line 987 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2120 "seclang-parser.cc" +#line 2156 "seclang-parser.cc" break; - case 55: // op_before_init: "OPERATOR_CONTAINS_WORD" run_time_string -#line 987 "seclang-parser.yy" + case 55: +#line 991 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2128 "seclang-parser.cc" +#line 2164 "seclang-parser.cc" break; - case 56: // op_before_init: "OPERATOR_CONTAINS" run_time_string -#line 991 "seclang-parser.yy" + case 56: +#line 995 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2136 "seclang-parser.cc" +#line 2172 "seclang-parser.cc" break; - case 57: // op_before_init: "OPERATOR_ENDS_WITH" run_time_string -#line 995 "seclang-parser.yy" + case 57: +#line 999 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2144 "seclang-parser.cc" +#line 2180 "seclang-parser.cc" break; - case 58: // op_before_init: "OPERATOR_EQ" run_time_string -#line 999 "seclang-parser.yy" + case 58: +#line 1003 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2152 "seclang-parser.cc" +#line 2188 "seclang-parser.cc" break; - case 59: // op_before_init: "OPERATOR_GE" run_time_string -#line 1003 "seclang-parser.yy" + case 59: +#line 1007 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2160 "seclang-parser.cc" +#line 2196 "seclang-parser.cc" break; - case 60: // op_before_init: "OPERATOR_GT" run_time_string -#line 1007 "seclang-parser.yy" + case 60: +#line 1011 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2168 "seclang-parser.cc" +#line 2204 "seclang-parser.cc" break; - case 61: // op_before_init: "OPERATOR_IP_MATCH_FROM_FILE" run_time_string -#line 1011 "seclang-parser.yy" + case 61: +#line 1015 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2176 "seclang-parser.cc" +#line 2212 "seclang-parser.cc" break; - case 62: // op_before_init: "OPERATOR_IP_MATCH" run_time_string -#line 1015 "seclang-parser.yy" + case 62: +#line 1019 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2184 "seclang-parser.cc" +#line 2220 "seclang-parser.cc" break; - case 63: // op_before_init: "OPERATOR_LE" run_time_string -#line 1019 "seclang-parser.yy" + case 63: +#line 1023 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2192 "seclang-parser.cc" +#line 2228 "seclang-parser.cc" break; - case 64: // op_before_init: "OPERATOR_LT" run_time_string -#line 1023 "seclang-parser.yy" + case 64: +#line 1027 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2200 "seclang-parser.cc" +#line 2236 "seclang-parser.cc" break; - case 65: // op_before_init: "OPERATOR_PM_FROM_FILE" run_time_string -#line 1027 "seclang-parser.yy" + case 65: +#line 1031 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2208 "seclang-parser.cc" +#line 2244 "seclang-parser.cc" break; - case 66: // op_before_init: "OPERATOR_PM" run_time_string -#line 1031 "seclang-parser.yy" + case 66: +#line 1035 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2216 "seclang-parser.cc" +#line 2252 "seclang-parser.cc" break; - case 67: // op_before_init: "OPERATOR_RBL" run_time_string -#line 1035 "seclang-parser.yy" + case 67: +#line 1039 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2224 "seclang-parser.cc" +#line 2260 "seclang-parser.cc" break; - case 68: // op_before_init: "OPERATOR_RX" run_time_string -#line 1039 "seclang-parser.yy" + case 68: +#line 1043 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2232 "seclang-parser.cc" +#line 2268 "seclang-parser.cc" break; - case 69: // op_before_init: "OPERATOR_RX_GLOBAL" run_time_string -#line 1043 "seclang-parser.yy" + case 69: +#line 1047 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::RxGlobal(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2240 "seclang-parser.cc" +#line 2276 "seclang-parser.cc" break; - case 70: // op_before_init: "OPERATOR_STR_EQ" run_time_string -#line 1047 "seclang-parser.yy" + case 70: +#line 1051 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2248 "seclang-parser.cc" +#line 2284 "seclang-parser.cc" break; - case 71: // op_before_init: "OPERATOR_STR_MATCH" run_time_string -#line 1051 "seclang-parser.yy" + case 71: +#line 1055 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2256 "seclang-parser.cc" +#line 2292 "seclang-parser.cc" break; - case 72: // op_before_init: "OPERATOR_BEGINS_WITH" run_time_string -#line 1055 "seclang-parser.yy" + case 72: +#line 1059 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2264 "seclang-parser.cc" +#line 2300 "seclang-parser.cc" break; - case 73: // op_before_init: "OPERATOR_GEOLOOKUP" -#line 1059 "seclang-parser.yy" + case 73: +#line 1063 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::GeoLookup()); @@ -2275,17 +2311,19 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2279 "seclang-parser.cc" +#line 2315 "seclang-parser.cc" break; - case 75: // expression: "DIRECTIVE" variables op actions -#line 1074 "seclang-parser.yy" + case 75: +#line 1078 "seclang-parser.yy" { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *yystack_[0].value.as < std::unique_ptr > > > ().get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -2309,11 +2347,11 @@ namespace yy { YYERROR; } } -#line 2313 "seclang-parser.cc" +#line 2351 "seclang-parser.cc" break; - case 76: // expression: "DIRECTIVE" variables op -#line 1104 "seclang-parser.yy" + case 76: +#line 1110 "seclang-parser.yy" { variables::Variables *v = new variables::Variables(); for (auto &i : *yystack_[1].value.as < std::unique_ptr > > > ().get()) { @@ -2332,17 +2370,19 @@ namespace yy { YYERROR; } } -#line 2336 "seclang-parser.cc" +#line 2374 "seclang-parser.cc" break; - case 77: // expression: "CONFIG_DIR_SEC_ACTION" actions -#line 1123 "seclang-parser.yy" + case 77: +#line 1129 "seclang-parser.yy" { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *yystack_[0].value.as < std::unique_ptr > > > ().get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -2355,18 +2395,20 @@ namespace yy { )); driver.addSecAction(std::move(rule)); } -#line 2359 "seclang-parser.cc" +#line 2399 "seclang-parser.cc" break; - case 78: // expression: "DIRECTIVE_SECRULESCRIPT" actions -#line 1142 "seclang-parser.yy" + case 78: +#line 1150 "seclang-parser.yy" { std::string err; std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *yystack_[0].value.as < std::unique_ptr > > > ().get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -2387,11 +2429,11 @@ namespace yy { YYERROR; } } -#line 2391 "seclang-parser.cc" +#line 2433 "seclang-parser.cc" break; - case 79: // expression: "CONFIG_DIR_SEC_DEFAULT_ACTION" actions -#line 1170 "seclang-parser.yy" + case 79: +#line 1180 "seclang-parser.yy" { bool hasDisruptive = false; std::vector *actions = new std::vector(); @@ -2410,8 +2452,8 @@ namespace yy { definedPhase = phase->m_phase; secRuleDefinedPhase = phase->m_secRulesPhase; delete phase; - } else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind || - a->action_kind == actions::Action::RunTimeBeforeMatchAttemptKind) { + } else if (a->m_actionKind == actions::Action::RunTimeOnlyIfMatchKind || + a->m_actionKind == actions::Action::RunTimeBeforeMatchAttemptKind) { actions::transformations::None *none = dynamic_cast(a); if (none != NULL) { driver.error(yystack_[2].location, "The transformation none is not suitable to be part of the SecDefaultActions"); @@ -2432,7 +2474,7 @@ namespace yy { YYERROR; } - if (!driver.m_defaultActions[definedPhase].empty()) { + if (!driver.m_rulesSetPhases[definedPhase]->m_defaultActions.empty()) { std::stringstream ss; ss << "SecDefaultActions can only be placed once per phase and configuration context. Phase "; ss << secRuleDefinedPhase; @@ -2442,84 +2484,89 @@ namespace yy { } for (actions::Action *a : checkedActions) { - driver.m_defaultActions[definedPhase].push_back( - std::unique_ptr(a)); + if (dynamic_cast(a)) { + driver.m_rulesSetPhases[definedPhase]->m_defaultTransformations.push_back( + std::shared_ptr( + dynamic_cast(a))); + } else { + driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back(std::unique_ptr(a)); + } } delete actions; } -#line 2452 "seclang-parser.cc" +#line 2499 "seclang-parser.cc" break; - case 80: // expression: "CONFIG_DIR_SEC_MARKER" -#line 1227 "seclang-parser.yy" + case 80: +#line 1242 "seclang-parser.yy" { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as < std::string > ()), /* file name */ std::unique_ptr(new std::string(*yystack_[0].location.end.filename)), /* line number */ yystack_[0].location.end.line ); } -#line 2463 "seclang-parser.cc" +#line 2510 "seclang-parser.cc" break; - case 81: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_OFF" -#line 1234 "seclang-parser.yy" + case 81: +#line 1249 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DisabledRuleEngine; } -#line 2471 "seclang-parser.cc" +#line 2518 "seclang-parser.cc" break; - case 82: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_ON" -#line 1238 "seclang-parser.yy" + case 82: +#line 1253 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::EnabledRuleEngine; } -#line 2479 "seclang-parser.cc" +#line 2526 "seclang-parser.cc" break; - case 83: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_DETC" -#line 1242 "seclang-parser.yy" + case 83: +#line 1257 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DetectionOnlyRuleEngine; } -#line 2487 "seclang-parser.cc" +#line 2534 "seclang-parser.cc" break; - case 84: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_ON" -#line 1246 "seclang-parser.yy" + case 84: +#line 1261 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2495 "seclang-parser.cc" +#line 2542 "seclang-parser.cc" break; - case 85: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_OFF" -#line 1250 "seclang-parser.yy" + case 85: +#line 1265 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2503 "seclang-parser.cc" +#line 2550 "seclang-parser.cc" break; - case 86: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_ON" -#line 1254 "seclang-parser.yy" + case 86: +#line 1269 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2511 "seclang-parser.cc" +#line 2558 "seclang-parser.cc" break; - case 87: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_OFF" -#line 1258 "seclang-parser.yy" + case 87: +#line 1273 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2519 "seclang-parser.cc" +#line 2566 "seclang-parser.cc" break; - case 88: // expression: "CONFIG_SEC_ARGUMENT_SEPARATOR" -#line 1262 "seclang-parser.yy" + case 88: +#line 1277 "seclang-parser.yy" { if (yystack_[0].value.as < std::string > ().length() != 1) { driver.error(yystack_[1].location, "Argument separator should be set to a single character."); @@ -2528,259 +2575,259 @@ namespace yy { driver.m_secArgumentSeparator.m_value = yystack_[0].value.as < std::string > (); driver.m_secArgumentSeparator.m_set = true; } -#line 2532 "seclang-parser.cc" +#line 2579 "seclang-parser.cc" break; - case 89: // expression: "CONFIG_COMPONENT_SIG" -#line 1271 "seclang-parser.yy" + case 89: +#line 1286 "seclang-parser.yy" { driver.m_components.push_back(yystack_[0].value.as < std::string > ()); } -#line 2540 "seclang-parser.cc" +#line 2587 "seclang-parser.cc" break; - case 90: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_ON" -#line 1275 "seclang-parser.yy" + case 90: +#line 1290 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecConnEngine is not yet supported."); YYERROR; } -#line 2549 "seclang-parser.cc" +#line 2596 "seclang-parser.cc" break; - case 91: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_OFF" -#line 1280 "seclang-parser.yy" + case 91: +#line 1295 "seclang-parser.yy" { } -#line 2556 "seclang-parser.cc" +#line 2603 "seclang-parser.cc" break; - case 92: // expression: "CONFIG_SEC_WEB_APP_ID" -#line 1283 "seclang-parser.yy" + case 92: +#line 1298 "seclang-parser.yy" { driver.m_secWebAppId.m_value = yystack_[0].value.as < std::string > (); driver.m_secWebAppId.m_set = true; } -#line 2565 "seclang-parser.cc" +#line 2612 "seclang-parser.cc" break; - case 93: // expression: "CONFIG_SEC_SERVER_SIG" -#line 1288 "seclang-parser.yy" + case 93: +#line 1303 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecServerSignature is not supported."); YYERROR; } -#line 2574 "seclang-parser.cc" +#line 2621 "seclang-parser.cc" break; - case 94: // expression: "CONFIG_SEC_CACHE_TRANSFORMATIONS" -#line 1293 "seclang-parser.yy" + case 94: +#line 1308 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCacheTransformations is not supported."); YYERROR; } -#line 2583 "seclang-parser.cc" +#line 2630 "seclang-parser.cc" break; - case 95: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_ON" -#line 1298 "seclang-parser.yy" + case 95: +#line 1313 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported."); YYERROR; } -#line 2592 "seclang-parser.cc" +#line 2639 "seclang-parser.cc" break; - case 96: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_OFF" -#line 1303 "seclang-parser.yy" + case 96: +#line 1318 "seclang-parser.yy" { } -#line 2599 "seclang-parser.cc" +#line 2646 "seclang-parser.cc" break; - case 97: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_ON" -#line 1306 "seclang-parser.yy" + case 97: +#line 1321 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecContentInjection is not yet supported."); YYERROR; } -#line 2608 "seclang-parser.cc" +#line 2655 "seclang-parser.cc" break; - case 98: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_OFF" -#line 1311 "seclang-parser.yy" + case 98: +#line 1326 "seclang-parser.yy" { } -#line 2615 "seclang-parser.cc" +#line 2662 "seclang-parser.cc" break; - case 99: // expression: "CONFIG_SEC_CHROOT_DIR" -#line 1314 "seclang-parser.yy" + case 99: +#line 1329 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecChrootDir is not supported."); YYERROR; } -#line 2624 "seclang-parser.cc" +#line 2671 "seclang-parser.cc" break; - case 100: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_ON" -#line 1319 "seclang-parser.yy" + case 100: +#line 1334 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecHashEngine is not yet supported."); YYERROR; } -#line 2633 "seclang-parser.cc" +#line 2680 "seclang-parser.cc" break; - case 101: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_OFF" -#line 1324 "seclang-parser.yy" + case 101: +#line 1339 "seclang-parser.yy" { } -#line 2640 "seclang-parser.cc" +#line 2687 "seclang-parser.cc" break; - case 102: // expression: "CONFIG_SEC_HASH_KEY" -#line 1327 "seclang-parser.yy" + case 102: +#line 1342 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashKey is not yet supported."); YYERROR; } -#line 2649 "seclang-parser.cc" +#line 2696 "seclang-parser.cc" break; - case 103: // expression: "CONFIG_SEC_HASH_PARAM" -#line 1332 "seclang-parser.yy" + case 103: +#line 1347 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashParam is not yet supported."); YYERROR; } -#line 2658 "seclang-parser.cc" +#line 2705 "seclang-parser.cc" break; - case 104: // expression: "CONFIG_SEC_HASH_METHOD_RX" -#line 1337 "seclang-parser.yy" + case 104: +#line 1352 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported."); YYERROR; } -#line 2667 "seclang-parser.cc" +#line 2714 "seclang-parser.cc" break; - case 105: // expression: "CONFIG_SEC_HASH_METHOD_PM" -#line 1342 "seclang-parser.yy" + case 105: +#line 1357 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported."); YYERROR; } -#line 2676 "seclang-parser.cc" +#line 2723 "seclang-parser.cc" break; - case 106: // expression: "CONFIG_DIR_GSB_DB" -#line 1347 "seclang-parser.yy" + case 106: +#line 1362 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGsbLookupDb is not supported."); YYERROR; } -#line 2685 "seclang-parser.cc" +#line 2732 "seclang-parser.cc" break; - case 107: // expression: "CONFIG_SEC_GUARDIAN_LOG" -#line 1352 "seclang-parser.yy" + case 107: +#line 1367 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGuardianLog is not supported."); YYERROR; } -#line 2694 "seclang-parser.cc" +#line 2741 "seclang-parser.cc" break; - case 108: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_ON" -#line 1357 "seclang-parser.yy" + case 108: +#line 1372 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported."); YYERROR; } -#line 2703 "seclang-parser.cc" +#line 2750 "seclang-parser.cc" break; - case 109: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_OFF" -#line 1362 "seclang-parser.yy" + case 109: +#line 1377 "seclang-parser.yy" { } -#line 2710 "seclang-parser.cc" +#line 2757 "seclang-parser.cc" break; - case 110: // expression: "CONFIG_SEC_CONN_R_STATE_LIMIT" -#line 1365 "seclang-parser.yy" + case 110: +#line 1380 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported."); YYERROR; } -#line 2719 "seclang-parser.cc" +#line 2766 "seclang-parser.cc" break; - case 111: // expression: "CONFIG_SEC_CONN_W_STATE_LIMIT" -#line 1370 "seclang-parser.yy" + case 111: +#line 1385 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported."); YYERROR; } -#line 2728 "seclang-parser.cc" +#line 2775 "seclang-parser.cc" break; - case 112: // expression: "CONFIG_SEC_SENSOR_ID" -#line 1375 "seclang-parser.yy" + case 112: +#line 1390 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecSensorId is not yet supported."); YYERROR; } -#line 2737 "seclang-parser.cc" +#line 2784 "seclang-parser.cc" break; - case 113: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_ON" -#line 1380 "seclang-parser.yy" + case 113: +#line 1395 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported."); YYERROR; } -#line 2746 "seclang-parser.cc" +#line 2793 "seclang-parser.cc" break; - case 114: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_OFF" -#line 1385 "seclang-parser.yy" + case 114: +#line 1400 "seclang-parser.yy" { } -#line 2753 "seclang-parser.cc" +#line 2800 "seclang-parser.cc" break; - case 115: // expression: "CONFIG_SEC_RULE_PERF_TIME" -#line 1388 "seclang-parser.yy" + case 115: +#line 1403 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported."); YYERROR; } -#line 2762 "seclang-parser.cc" +#line 2809 "seclang-parser.cc" break; - case 116: // expression: "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" -#line 1393 "seclang-parser.yy" + case 116: +#line 1408 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported."); YYERROR; } -#line 2771 "seclang-parser.cc" +#line 2818 "seclang-parser.cc" break; - case 117: // expression: "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" -#line 1398 "seclang-parser.yy" + case 117: +#line 1413 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported."); YYERROR; } -#line 2780 "seclang-parser.cc" +#line 2827 "seclang-parser.cc" break; - case 118: // expression: "CONFIG_SEC_RULE_REMOVE_BY_ID" -#line 1403 "seclang-parser.yy" + case 118: +#line 1418 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.load(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2793,11 +2840,11 @@ namespace yy { YYERROR; } } -#line 2797 "seclang-parser.cc" +#line 2844 "seclang-parser.cc" break; - case 119: // expression: "CONFIG_SEC_RULE_REMOVE_BY_TAG" -#line 1416 "seclang-parser.yy" + case 119: +#line 1431 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByTag(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2810,11 +2857,11 @@ namespace yy { YYERROR; } } -#line 2814 "seclang-parser.cc" +#line 2861 "seclang-parser.cc" break; - case 120: // expression: "CONFIG_SEC_RULE_REMOVE_BY_MSG" -#line 1429 "seclang-parser.yy" + case 120: +#line 1444 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByMsg(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2827,11 +2874,11 @@ namespace yy { YYERROR; } } -#line 2831 "seclang-parser.cc" +#line 2878 "seclang-parser.cc" break; - case 121: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" variables_pre_process -#line 1442 "seclang-parser.yy" + case 121: +#line 1457 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByTag(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2844,11 +2891,11 @@ namespace yy { YYERROR; } } -#line 2848 "seclang-parser.cc" +#line 2895 "seclang-parser.cc" break; - case 122: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" variables_pre_process -#line 1455 "seclang-parser.yy" + case 122: +#line 1470 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByMsg(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2861,11 +2908,11 @@ namespace yy { YYERROR; } } -#line 2865 "seclang-parser.cc" +#line 2912 "seclang-parser.cc" break; - case 123: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" variables_pre_process -#line 1468 "seclang-parser.yy" + case 123: +#line 1483 "seclang-parser.yy" { std::string error; double ruleId; @@ -2891,11 +2938,11 @@ namespace yy { YYERROR; } } -#line 2895 "seclang-parser.cc" +#line 2942 "seclang-parser.cc" break; - case 124: // expression: "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" actions -#line 1494 "seclang-parser.yy" + case 124: +#line 1509 "seclang-parser.yy" { std::string error; double ruleId; @@ -2922,11 +2969,11 @@ namespace yy { YYERROR; } } -#line 2926 "seclang-parser.cc" +#line 2973 "seclang-parser.cc" break; - case 125: // expression: "CONFIG_DIR_DEBUG_LVL" -#line 1522 "seclang-parser.yy" + case 125: +#line 1537 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { driver.m_debugLog->setDebugLogLevel(atoi(yystack_[0].value.as < std::string > ().c_str())); @@ -2938,11 +2985,11 @@ namespace yy { YYERROR; } } -#line 2942 "seclang-parser.cc" +#line 2989 "seclang-parser.cc" break; - case 126: // expression: "CONFIG_DIR_DEBUG_LOG" -#line 1534 "seclang-parser.yy" + case 126: +#line 1549 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { std::string error; @@ -2961,11 +3008,11 @@ namespace yy { YYERROR; } } -#line 2965 "seclang-parser.cc" +#line 3012 "seclang-parser.cc" break; - case 127: // expression: "CONFIG_DIR_GEO_DB" -#line 1554 "seclang-parser.yy" + case 127: +#line 1569 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) std::string err; @@ -2992,38 +3039,38 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2996 "seclang-parser.cc" +#line 3043 "seclang-parser.cc" break; - case 128: // expression: "CONFIG_DIR_ARGS_LIMIT" -#line 1581 "seclang-parser.yy" + case 128: +#line 1596 "seclang-parser.yy" { driver.m_argumentsLimit.m_set = true; driver.m_argumentsLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3005 "seclang-parser.cc" +#line 3052 "seclang-parser.cc" break; - case 129: // expression: "CONFIG_DIR_REQ_BODY_LIMIT" -#line 1587 "seclang-parser.yy" + case 129: +#line 1602 "seclang-parser.yy" { driver.m_requestBodyLimit.m_set = true; driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3014 "seclang-parser.cc" +#line 3061 "seclang-parser.cc" break; - case 130: // expression: "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" -#line 1592 "seclang-parser.yy" + case 130: +#line 1607 "seclang-parser.yy" { driver.m_requestBodyNoFilesLimit.m_set = true; driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3023 "seclang-parser.cc" +#line 3070 "seclang-parser.cc" break; - case 131: // expression: "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" -#line 1597 "seclang-parser.yy" + case 131: +#line 1612 "seclang-parser.yy" { std::stringstream ss; ss << "As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer "; @@ -3032,68 +3079,68 @@ namespace yy { driver.error(yystack_[1].location, ss.str()); YYERROR; } -#line 3036 "seclang-parser.cc" +#line 3083 "seclang-parser.cc" break; - case 132: // expression: "CONFIG_DIR_RES_BODY_LIMIT" -#line 1606 "seclang-parser.yy" + case 132: +#line 1621 "seclang-parser.yy" { driver.m_responseBodyLimit.m_set = true; driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3045 "seclang-parser.cc" +#line 3092 "seclang-parser.cc" break; - case 133: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1611 "seclang-parser.yy" + case 133: +#line 1626 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3053 "seclang-parser.cc" +#line 3100 "seclang-parser.cc" break; - case 134: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1615 "seclang-parser.yy" + case 134: +#line 1630 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3061 "seclang-parser.cc" +#line 3108 "seclang-parser.cc" break; - case 135: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1619 "seclang-parser.yy" + case 135: +#line 1634 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3069 "seclang-parser.cc" +#line 3116 "seclang-parser.cc" break; - case 136: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1623 "seclang-parser.yy" + case 136: +#line 1638 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3077 "seclang-parser.cc" +#line 3124 "seclang-parser.cc" break; - case 137: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_ABORT" -#line 1627 "seclang-parser.yy" + case 137: +#line 1642 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction; } -#line 3085 "seclang-parser.cc" +#line 3132 "seclang-parser.cc" break; - case 138: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_WARN" -#line 1631 "seclang-parser.yy" + case 138: +#line 1646 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; } -#line 3093 "seclang-parser.cc" +#line 3140 "seclang-parser.cc" break; - case 141: // expression: "CONGIG_DIR_RESPONSE_BODY_MP" -#line 1645 "seclang-parser.yy" + case 141: +#line 1660 "seclang-parser.yy" { std::istringstream buf(yystack_[0].value.as < std::string > ()); std::istream_iterator beg(buf), end; @@ -3105,37 +3152,37 @@ namespace yy { driver.m_responseBodyTypeToBeInspected.m_value.insert(*it); } } -#line 3109 "seclang-parser.cc" +#line 3156 "seclang-parser.cc" break; - case 142: // expression: "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" -#line 1657 "seclang-parser.yy" + case 142: +#line 1672 "seclang-parser.yy" { driver.m_responseBodyTypeToBeInspected.m_set = true; driver.m_responseBodyTypeToBeInspected.m_clear = true; driver.m_responseBodyTypeToBeInspected.m_value.clear(); } -#line 3119 "seclang-parser.cc" +#line 3166 "seclang-parser.cc" break; - case 143: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_OFF" -#line 1663 "seclang-parser.yy" + case 143: +#line 1678 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 3127 "seclang-parser.cc" +#line 3174 "seclang-parser.cc" break; - case 144: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_ON" -#line 1667 "seclang-parser.yy" + case 144: +#line 1682 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 3135 "seclang-parser.cc" +#line 3182 "seclang-parser.cc" break; - case 145: // expression: "CONGIG_DIR_SEC_TMP_DIR" -#line 1671 "seclang-parser.yy" + case 145: +#line 1686 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default installations with modsecurity.conf-recommended std::stringstream ss; @@ -3146,31 +3193,31 @@ namespace yy { YYERROR; */ } -#line 3150 "seclang-parser.cc" +#line 3197 "seclang-parser.cc" break; - case 148: // expression: "CONGIG_DIR_SEC_COOKIE_FORMAT" -#line 1692 "seclang-parser.yy" + case 148: +#line 1707 "seclang-parser.yy" { if (atoi(yystack_[0].value.as < std::string > ().c_str()) == 1) { driver.error(yystack_[1].location, "SecCookieFormat 1 is not yet supported."); YYERROR; } } -#line 3161 "seclang-parser.cc" +#line 3208 "seclang-parser.cc" break; - case 149: // expression: "CONFIG_SEC_COOKIEV0_SEPARATOR" -#line 1699 "seclang-parser.yy" + case 149: +#line 1714 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported."); YYERROR; } -#line 3170 "seclang-parser.cc" +#line 3217 "seclang-parser.cc" break; - case 151: // expression: "CONFIG_DIR_UNICODE_MAP_FILE" -#line 1709 "seclang-parser.yy" + case 151: +#line 1724 "seclang-parser.yy" { std::string error; std::vector param; @@ -3224,31 +3271,31 @@ namespace yy { } } -#line 3228 "seclang-parser.cc" +#line 3275 "seclang-parser.cc" break; - case 152: // expression: "CONFIG_SEC_COLLECTION_TIMEOUT" -#line 1763 "seclang-parser.yy" + case 152: +#line 1778 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default CRS installations with crs-setup.conf-recommended driver.error(@0, "SecCollectionTimeout is not yet supported."); YYERROR; */ } -#line 3239 "seclang-parser.cc" +#line 3286 "seclang-parser.cc" break; - case 153: // expression: "CONFIG_SEC_HTTP_BLKEY" -#line 1770 "seclang-parser.yy" + case 153: +#line 1785 "seclang-parser.yy" { driver.m_httpblKey.m_set = true; driver.m_httpblKey.m_value = yystack_[0].value.as < std::string > (); } -#line 3248 "seclang-parser.cc" +#line 3295 "seclang-parser.cc" break; - case 154: // variables: variables_pre_process -#line 1778 "seclang-parser.yy" + case 154: +#line 1793 "seclang-parser.yy" { std::unique_ptr > > originalList = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); std::unique_ptr>> newList(new std::vector>()); @@ -3282,2363 +3329,2371 @@ namespace yy { } yylhs.value.as < std::unique_ptr > > > () = std::move(newNewList); } -#line 3286 "seclang-parser.cc" +#line 3333 "seclang-parser.cc" break; - case 155: // variables_pre_process: variables_may_be_quoted -#line 1815 "seclang-parser.yy" + case 155: +#line 1830 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 3294 "seclang-parser.cc" +#line 3341 "seclang-parser.cc" break; - case 156: // variables_pre_process: "QUOTATION_MARK" variables_may_be_quoted "QUOTATION_MARK" -#line 1819 "seclang-parser.yy" + case 156: +#line 1834 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 3302 "seclang-parser.cc" +#line 3349 "seclang-parser.cc" break; - case 157: // variables_may_be_quoted: variables_may_be_quoted PIPE var -#line 1826 "seclang-parser.yy" + case 157: +#line 1841 "seclang-parser.yy" { yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); } -#line 3311 "seclang-parser.cc" +#line 3358 "seclang-parser.cc" break; - case 158: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_EXCLUSION var -#line 1831 "seclang-parser.yy" + case 158: +#line 1846 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[3].value.as < std::unique_ptr > > > ()); } -#line 3321 "seclang-parser.cc" +#line 3368 "seclang-parser.cc" break; - case 159: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_COUNT var -#line 1837 "seclang-parser.yy" + case 159: +#line 1852 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[3].value.as < std::unique_ptr > > > ()); } -#line 3331 "seclang-parser.cc" +#line 3378 "seclang-parser.cc" break; - case 160: // variables_may_be_quoted: var -#line 1843 "seclang-parser.yy" + case 160: +#line 1858 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3341 "seclang-parser.cc" +#line 3388 "seclang-parser.cc" break; - case 161: // variables_may_be_quoted: VAR_EXCLUSION var -#line 1849 "seclang-parser.yy" + case 161: +#line 1864 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3352 "seclang-parser.cc" +#line 3399 "seclang-parser.cc" break; - case 162: // variables_may_be_quoted: VAR_COUNT var -#line 1856 "seclang-parser.yy" + case 162: +#line 1871 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3363 "seclang-parser.cc" +#line 3410 "seclang-parser.cc" break; - case 163: // var: VARIABLE_ARGS "Dictionary element" -#line 1866 "seclang-parser.yy" + case 163: +#line 1881 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3371 "seclang-parser.cc" +#line 3418 "seclang-parser.cc" break; - case 164: // var: VARIABLE_ARGS "Dictionary element, selected by regexp" -#line 1870 "seclang-parser.yy" + case 164: +#line 1885 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3379 "seclang-parser.cc" +#line 3426 "seclang-parser.cc" break; - case 165: // var: VARIABLE_ARGS -#line 1874 "seclang-parser.yy" + case 165: +#line 1889 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_NoDictElement()); } -#line 3387 "seclang-parser.cc" +#line 3434 "seclang-parser.cc" break; - case 166: // var: VARIABLE_ARGS_POST "Dictionary element" -#line 1878 "seclang-parser.yy" + case 166: +#line 1893 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3395 "seclang-parser.cc" +#line 3442 "seclang-parser.cc" break; - case 167: // var: VARIABLE_ARGS_POST "Dictionary element, selected by regexp" -#line 1882 "seclang-parser.yy" + case 167: +#line 1897 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3403 "seclang-parser.cc" +#line 3450 "seclang-parser.cc" break; - case 168: // var: VARIABLE_ARGS_POST -#line 1886 "seclang-parser.yy" + case 168: +#line 1901 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_NoDictElement()); } -#line 3411 "seclang-parser.cc" +#line 3458 "seclang-parser.cc" break; - case 169: // var: VARIABLE_ARGS_GET "Dictionary element" -#line 1890 "seclang-parser.yy" + case 169: +#line 1905 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3419 "seclang-parser.cc" +#line 3466 "seclang-parser.cc" break; - case 170: // var: VARIABLE_ARGS_GET "Dictionary element, selected by regexp" -#line 1894 "seclang-parser.yy" + case 170: +#line 1909 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3427 "seclang-parser.cc" +#line 3474 "seclang-parser.cc" break; - case 171: // var: VARIABLE_ARGS_GET -#line 1898 "seclang-parser.yy" + case 171: +#line 1913 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_NoDictElement()); } -#line 3435 "seclang-parser.cc" +#line 3482 "seclang-parser.cc" break; - case 172: // var: VARIABLE_FILES_SIZES "Dictionary element" -#line 1902 "seclang-parser.yy" + case 172: +#line 1917 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3443 "seclang-parser.cc" +#line 3490 "seclang-parser.cc" break; - case 173: // var: VARIABLE_FILES_SIZES "Dictionary element, selected by regexp" -#line 1906 "seclang-parser.yy" + case 173: +#line 1921 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3451 "seclang-parser.cc" +#line 3498 "seclang-parser.cc" break; - case 174: // var: VARIABLE_FILES_SIZES -#line 1910 "seclang-parser.yy" + case 174: +#line 1925 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_NoDictElement()); } -#line 3459 "seclang-parser.cc" +#line 3506 "seclang-parser.cc" break; - case 175: // var: VARIABLE_FILES_NAMES "Dictionary element" -#line 1914 "seclang-parser.yy" + case 175: +#line 1929 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3467 "seclang-parser.cc" +#line 3514 "seclang-parser.cc" break; - case 176: // var: VARIABLE_FILES_NAMES "Dictionary element, selected by regexp" -#line 1918 "seclang-parser.yy" + case 176: +#line 1933 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3475 "seclang-parser.cc" +#line 3522 "seclang-parser.cc" break; - case 177: // var: VARIABLE_FILES_NAMES -#line 1922 "seclang-parser.yy" + case 177: +#line 1937 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_NoDictElement()); } -#line 3483 "seclang-parser.cc" +#line 3530 "seclang-parser.cc" break; - case 178: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element" -#line 1926 "seclang-parser.yy" + case 178: +#line 1941 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3491 "seclang-parser.cc" +#line 3538 "seclang-parser.cc" break; - case 179: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element, selected by regexp" -#line 1930 "seclang-parser.yy" + case 179: +#line 1945 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3499 "seclang-parser.cc" +#line 3546 "seclang-parser.cc" break; - case 180: // var: VARIABLE_FILES_TMP_CONTENT -#line 1934 "seclang-parser.yy" + case 180: +#line 1949 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_NoDictElement()); } -#line 3507 "seclang-parser.cc" +#line 3554 "seclang-parser.cc" break; - case 181: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element" -#line 1938 "seclang-parser.yy" + case 181: +#line 1953 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3515 "seclang-parser.cc" +#line 3562 "seclang-parser.cc" break; - case 182: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element, selected by regexp" -#line 1942 "seclang-parser.yy" + case 182: +#line 1957 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3523 "seclang-parser.cc" +#line 3570 "seclang-parser.cc" break; - case 183: // var: VARIABLE_MULTIPART_FILENAME -#line 1946 "seclang-parser.yy" + case 183: +#line 1961 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_NoDictElement()); } -#line 3531 "seclang-parser.cc" +#line 3578 "seclang-parser.cc" break; - case 184: // var: VARIABLE_MULTIPART_NAME "Dictionary element" -#line 1950 "seclang-parser.yy" + case 184: +#line 1965 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3539 "seclang-parser.cc" +#line 3586 "seclang-parser.cc" break; - case 185: // var: VARIABLE_MULTIPART_NAME "Dictionary element, selected by regexp" -#line 1954 "seclang-parser.yy" + case 185: +#line 1969 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3547 "seclang-parser.cc" +#line 3594 "seclang-parser.cc" break; - case 186: // var: VARIABLE_MULTIPART_NAME -#line 1958 "seclang-parser.yy" + case 186: +#line 1973 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_NoDictElement()); } -#line 3555 "seclang-parser.cc" +#line 3602 "seclang-parser.cc" break; - case 187: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element" -#line 1962 "seclang-parser.yy" + case 187: +#line 1977 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3563 "seclang-parser.cc" +#line 3610 "seclang-parser.cc" break; - case 188: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element, selected by regexp" -#line 1966 "seclang-parser.yy" + case 188: +#line 1981 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3571 "seclang-parser.cc" +#line 3618 "seclang-parser.cc" break; - case 189: // var: VARIABLE_MATCHED_VARS_NAMES -#line 1970 "seclang-parser.yy" + case 189: +#line 1985 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_NoDictElement()); } -#line 3579 "seclang-parser.cc" +#line 3626 "seclang-parser.cc" break; - case 190: // var: VARIABLE_MATCHED_VARS "Dictionary element" -#line 1974 "seclang-parser.yy" + case 190: +#line 1989 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3587 "seclang-parser.cc" +#line 3634 "seclang-parser.cc" break; - case 191: // var: VARIABLE_MATCHED_VARS "Dictionary element, selected by regexp" -#line 1978 "seclang-parser.yy" + case 191: +#line 1993 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3595 "seclang-parser.cc" +#line 3642 "seclang-parser.cc" break; - case 192: // var: VARIABLE_MATCHED_VARS -#line 1982 "seclang-parser.yy" + case 192: +#line 1997 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_NoDictElement()); } -#line 3603 "seclang-parser.cc" +#line 3650 "seclang-parser.cc" break; - case 193: // var: VARIABLE_FILES "Dictionary element" -#line 1986 "seclang-parser.yy" + case 193: +#line 2001 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3611 "seclang-parser.cc" +#line 3658 "seclang-parser.cc" break; - case 194: // var: VARIABLE_FILES "Dictionary element, selected by regexp" -#line 1990 "seclang-parser.yy" + case 194: +#line 2005 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3619 "seclang-parser.cc" +#line 3666 "seclang-parser.cc" break; - case 195: // var: VARIABLE_FILES -#line 1994 "seclang-parser.yy" + case 195: +#line 2009 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_NoDictElement()); } -#line 3627 "seclang-parser.cc" +#line 3674 "seclang-parser.cc" break; - case 196: // var: VARIABLE_REQUEST_COOKIES "Dictionary element" -#line 1998 "seclang-parser.yy" + case 196: +#line 2013 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3635 "seclang-parser.cc" +#line 3682 "seclang-parser.cc" break; - case 197: // var: VARIABLE_REQUEST_COOKIES "Dictionary element, selected by regexp" -#line 2002 "seclang-parser.yy" + case 197: +#line 2017 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3643 "seclang-parser.cc" +#line 3690 "seclang-parser.cc" break; - case 198: // var: VARIABLE_REQUEST_COOKIES -#line 2006 "seclang-parser.yy" + case 198: +#line 2021 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_NoDictElement()); } -#line 3651 "seclang-parser.cc" +#line 3698 "seclang-parser.cc" break; - case 199: // var: VARIABLE_REQUEST_HEADERS "Dictionary element" -#line 2010 "seclang-parser.yy" + case 199: +#line 2025 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3659 "seclang-parser.cc" +#line 3706 "seclang-parser.cc" break; - case 200: // var: VARIABLE_REQUEST_HEADERS "Dictionary element, selected by regexp" -#line 2014 "seclang-parser.yy" + case 200: +#line 2029 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3667 "seclang-parser.cc" +#line 3714 "seclang-parser.cc" break; - case 201: // var: VARIABLE_REQUEST_HEADERS -#line 2018 "seclang-parser.yy" + case 201: +#line 2033 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_NoDictElement()); } -#line 3675 "seclang-parser.cc" +#line 3722 "seclang-parser.cc" break; - case 202: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element" -#line 2022 "seclang-parser.yy" + case 202: +#line 2037 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3683 "seclang-parser.cc" +#line 3730 "seclang-parser.cc" break; - case 203: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element, selected by regexp" -#line 2026 "seclang-parser.yy" + case 203: +#line 2041 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3691 "seclang-parser.cc" +#line 3738 "seclang-parser.cc" break; - case 204: // var: VARIABLE_RESPONSE_HEADERS -#line 2030 "seclang-parser.yy" + case 204: +#line 2045 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_NoDictElement()); } -#line 3699 "seclang-parser.cc" +#line 3746 "seclang-parser.cc" break; - case 205: // var: VARIABLE_GEO "Dictionary element" -#line 2034 "seclang-parser.yy" + case 205: +#line 2049 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3707 "seclang-parser.cc" +#line 3754 "seclang-parser.cc" break; - case 206: // var: VARIABLE_GEO "Dictionary element, selected by regexp" -#line 2038 "seclang-parser.yy" + case 206: +#line 2053 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3715 "seclang-parser.cc" +#line 3762 "seclang-parser.cc" break; - case 207: // var: VARIABLE_GEO -#line 2042 "seclang-parser.yy" + case 207: +#line 2057 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_NoDictElement()); } -#line 3723 "seclang-parser.cc" +#line 3770 "seclang-parser.cc" break; - case 208: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element" -#line 2046 "seclang-parser.yy" + case 208: +#line 2061 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3731 "seclang-parser.cc" +#line 3778 "seclang-parser.cc" break; - case 209: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element, selected by regexp" -#line 2050 "seclang-parser.yy" + case 209: +#line 2065 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3739 "seclang-parser.cc" +#line 3786 "seclang-parser.cc" break; - case 210: // var: VARIABLE_REQUEST_COOKIES_NAMES -#line 2054 "seclang-parser.yy" + case 210: +#line 2069 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_NoDictElement()); } -#line 3747 "seclang-parser.cc" +#line 3794 "seclang-parser.cc" break; - case 211: // var: VARIABLE_RULE "Dictionary element" -#line 2058 "seclang-parser.yy" + case 211: +#line 2073 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3755 "seclang-parser.cc" +#line 3802 "seclang-parser.cc" break; - case 212: // var: VARIABLE_RULE "Dictionary element, selected by regexp" -#line 2062 "seclang-parser.yy" + case 212: +#line 2077 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3763 "seclang-parser.cc" +#line 3810 "seclang-parser.cc" break; - case 213: // var: VARIABLE_RULE -#line 2066 "seclang-parser.yy" + case 213: +#line 2081 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_NoDictElement()); } -#line 3771 "seclang-parser.cc" +#line 3818 "seclang-parser.cc" break; - case 214: // var: "RUN_TIME_VAR_ENV" "Dictionary element" -#line 2070 "seclang-parser.yy" + case 214: +#line 2085 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3779 "seclang-parser.cc" +#line 3826 "seclang-parser.cc" break; - case 215: // var: "RUN_TIME_VAR_ENV" "Dictionary element, selected by regexp" -#line 2074 "seclang-parser.yy" + case 215: +#line 2089 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3787 "seclang-parser.cc" +#line 3834 "seclang-parser.cc" break; - case 216: // var: "RUN_TIME_VAR_ENV" -#line 2078 "seclang-parser.yy" + case 216: +#line 2093 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV")); } -#line 3795 "seclang-parser.cc" +#line 3842 "seclang-parser.cc" break; - case 217: // var: "RUN_TIME_VAR_XML" "Dictionary element" -#line 2082 "seclang-parser.yy" + case 217: +#line 2097 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } -#line 3803 "seclang-parser.cc" +#line 3850 "seclang-parser.cc" break; - case 218: // var: "RUN_TIME_VAR_XML" "Dictionary element, selected by regexp" -#line 2086 "seclang-parser.yy" + case 218: +#line 2101 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } -#line 3811 "seclang-parser.cc" +#line 3858 "seclang-parser.cc" break; - case 219: // var: "RUN_TIME_VAR_XML" -#line 2090 "seclang-parser.yy" + case 219: +#line 2105 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_NoDictElement()); } -#line 3819 "seclang-parser.cc" +#line 3866 "seclang-parser.cc" break; - case 220: // var: "FILES_TMPNAMES" "Dictionary element" -#line 2094 "seclang-parser.yy" + case 220: +#line 2109 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3827 "seclang-parser.cc" +#line 3874 "seclang-parser.cc" break; - case 221: // var: "FILES_TMPNAMES" "Dictionary element, selected by regexp" -#line 2098 "seclang-parser.yy" + case 221: +#line 2113 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3835 "seclang-parser.cc" +#line 3882 "seclang-parser.cc" break; - case 222: // var: "FILES_TMPNAMES" -#line 2102 "seclang-parser.yy" + case 222: +#line 2117 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_NoDictElement()); } -#line 3843 "seclang-parser.cc" +#line 3890 "seclang-parser.cc" break; - case 223: // var: "RESOURCE" run_time_string -#line 2106 "seclang-parser.yy" + case 223: +#line 2121 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3851 "seclang-parser.cc" +#line 3898 "seclang-parser.cc" break; - case 224: // var: "RESOURCE" "Dictionary element" -#line 2110 "seclang-parser.yy" + case 224: +#line 2125 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3859 "seclang-parser.cc" +#line 3906 "seclang-parser.cc" break; - case 225: // var: "RESOURCE" "Dictionary element, selected by regexp" -#line 2114 "seclang-parser.yy" + case 225: +#line 2129 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3867 "seclang-parser.cc" +#line 3914 "seclang-parser.cc" break; - case 226: // var: "RESOURCE" -#line 2118 "seclang-parser.yy" + case 226: +#line 2133 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_NoDictElement()); } -#line 3875 "seclang-parser.cc" +#line 3922 "seclang-parser.cc" break; - case 227: // var: "VARIABLE_IP" run_time_string -#line 2122 "seclang-parser.yy" + case 227: +#line 2137 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3883 "seclang-parser.cc" +#line 3930 "seclang-parser.cc" break; - case 228: // var: "VARIABLE_IP" "Dictionary element" -#line 2126 "seclang-parser.yy" + case 228: +#line 2141 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3891 "seclang-parser.cc" +#line 3938 "seclang-parser.cc" break; - case 229: // var: "VARIABLE_IP" "Dictionary element, selected by regexp" -#line 2130 "seclang-parser.yy" + case 229: +#line 2145 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3899 "seclang-parser.cc" +#line 3946 "seclang-parser.cc" break; - case 230: // var: "VARIABLE_IP" -#line 2134 "seclang-parser.yy" + case 230: +#line 2149 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_NoDictElement()); } -#line 3907 "seclang-parser.cc" +#line 3954 "seclang-parser.cc" break; - case 231: // var: "VARIABLE_GLOBAL" run_time_string -#line 2138 "seclang-parser.yy" + case 231: +#line 2153 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3915 "seclang-parser.cc" +#line 3962 "seclang-parser.cc" break; - case 232: // var: "VARIABLE_GLOBAL" "Dictionary element" -#line 2142 "seclang-parser.yy" + case 232: +#line 2157 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3923 "seclang-parser.cc" +#line 3970 "seclang-parser.cc" break; - case 233: // var: "VARIABLE_GLOBAL" "Dictionary element, selected by regexp" -#line 2146 "seclang-parser.yy" + case 233: +#line 2161 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3931 "seclang-parser.cc" +#line 3978 "seclang-parser.cc" break; - case 234: // var: "VARIABLE_GLOBAL" -#line 2150 "seclang-parser.yy" + case 234: +#line 2165 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_NoDictElement()); } -#line 3939 "seclang-parser.cc" +#line 3986 "seclang-parser.cc" break; - case 235: // var: "VARIABLE_USER" run_time_string -#line 2154 "seclang-parser.yy" + case 235: +#line 2169 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3947 "seclang-parser.cc" +#line 3994 "seclang-parser.cc" break; - case 236: // var: "VARIABLE_USER" "Dictionary element" -#line 2158 "seclang-parser.yy" + case 236: +#line 2173 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3955 "seclang-parser.cc" +#line 4002 "seclang-parser.cc" break; - case 237: // var: "VARIABLE_USER" "Dictionary element, selected by regexp" -#line 2162 "seclang-parser.yy" + case 237: +#line 2177 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3963 "seclang-parser.cc" +#line 4010 "seclang-parser.cc" break; - case 238: // var: "VARIABLE_USER" -#line 2166 "seclang-parser.yy" + case 238: +#line 2181 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_NoDictElement()); } -#line 3971 "seclang-parser.cc" +#line 4018 "seclang-parser.cc" break; - case 239: // var: "VARIABLE_TX" run_time_string -#line 2170 "seclang-parser.yy" + case 239: +#line 2185 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3979 "seclang-parser.cc" +#line 4026 "seclang-parser.cc" break; - case 240: // var: "VARIABLE_TX" "Dictionary element" -#line 2174 "seclang-parser.yy" + case 240: +#line 2189 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3987 "seclang-parser.cc" +#line 4034 "seclang-parser.cc" break; - case 241: // var: "VARIABLE_TX" "Dictionary element, selected by regexp" -#line 2178 "seclang-parser.yy" + case 241: +#line 2193 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3995 "seclang-parser.cc" +#line 4042 "seclang-parser.cc" break; - case 242: // var: "VARIABLE_TX" -#line 2182 "seclang-parser.yy" + case 242: +#line 2197 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_NoDictElement()); } -#line 4003 "seclang-parser.cc" +#line 4050 "seclang-parser.cc" break; - case 243: // var: "VARIABLE_SESSION" run_time_string -#line 2186 "seclang-parser.yy" + case 243: +#line 2201 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 4011 "seclang-parser.cc" +#line 4058 "seclang-parser.cc" break; - case 244: // var: "VARIABLE_SESSION" "Dictionary element" -#line 2190 "seclang-parser.yy" + case 244: +#line 2205 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4019 "seclang-parser.cc" +#line 4066 "seclang-parser.cc" break; - case 245: // var: "VARIABLE_SESSION" "Dictionary element, selected by regexp" -#line 2194 "seclang-parser.yy" + case 245: +#line 2209 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4027 "seclang-parser.cc" +#line 4074 "seclang-parser.cc" break; - case 246: // var: "VARIABLE_SESSION" -#line 2198 "seclang-parser.yy" + case 246: +#line 2213 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_NoDictElement()); } -#line 4035 "seclang-parser.cc" +#line 4082 "seclang-parser.cc" break; - case 247: // var: "Variable ARGS_NAMES" "Dictionary element" -#line 2202 "seclang-parser.yy" + case 247: +#line 2217 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4043 "seclang-parser.cc" +#line 4090 "seclang-parser.cc" break; - case 248: // var: "Variable ARGS_NAMES" "Dictionary element, selected by regexp" -#line 2206 "seclang-parser.yy" + case 248: +#line 2221 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4051 "seclang-parser.cc" +#line 4098 "seclang-parser.cc" break; - case 249: // var: "Variable ARGS_NAMES" -#line 2210 "seclang-parser.yy" + case 249: +#line 2225 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_NoDictElement()); } -#line 4059 "seclang-parser.cc" +#line 4106 "seclang-parser.cc" break; - case 250: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element" -#line 2214 "seclang-parser.yy" + case 250: +#line 2229 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4067 "seclang-parser.cc" +#line 4114 "seclang-parser.cc" break; - case 251: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element, selected by regexp" -#line 2218 "seclang-parser.yy" + case 251: +#line 2233 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4075 "seclang-parser.cc" +#line 4122 "seclang-parser.cc" break; - case 252: // var: VARIABLE_ARGS_GET_NAMES -#line 2222 "seclang-parser.yy" + case 252: +#line 2237 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_NoDictElement()); } -#line 4083 "seclang-parser.cc" +#line 4130 "seclang-parser.cc" break; - case 253: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element" -#line 2227 "seclang-parser.yy" + case 253: +#line 2242 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4091 "seclang-parser.cc" +#line 4138 "seclang-parser.cc" break; - case 254: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element, selected by regexp" -#line 2231 "seclang-parser.yy" + case 254: +#line 2246 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4099 "seclang-parser.cc" +#line 4146 "seclang-parser.cc" break; - case 255: // var: VARIABLE_ARGS_POST_NAMES -#line 2235 "seclang-parser.yy" + case 255: +#line 2250 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_NoDictElement()); } -#line 4107 "seclang-parser.cc" +#line 4154 "seclang-parser.cc" break; - case 256: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element" -#line 2240 "seclang-parser.yy" + case 256: +#line 2255 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4115 "seclang-parser.cc" +#line 4162 "seclang-parser.cc" break; - case 257: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2244 "seclang-parser.yy" + case 257: +#line 2259 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4123 "seclang-parser.cc" +#line 4170 "seclang-parser.cc" break; - case 258: // var: VARIABLE_REQUEST_HEADERS_NAMES -#line 2248 "seclang-parser.yy" + case 258: +#line 2263 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_NoDictElement()); } -#line 4131 "seclang-parser.cc" +#line 4178 "seclang-parser.cc" break; - case 259: // var: VARIABLE_RESPONSE_CONTENT_TYPE -#line 2253 "seclang-parser.yy" + case 259: +#line 2268 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentType()); } -#line 4139 "seclang-parser.cc" +#line 4186 "seclang-parser.cc" break; - case 260: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element" -#line 2258 "seclang-parser.yy" + case 260: +#line 2273 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4147 "seclang-parser.cc" +#line 4194 "seclang-parser.cc" break; - case 261: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2262 "seclang-parser.yy" + case 261: +#line 2277 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4155 "seclang-parser.cc" +#line 4202 "seclang-parser.cc" break; - case 262: // var: VARIABLE_RESPONSE_HEADERS_NAMES -#line 2266 "seclang-parser.yy" + case 262: +#line 2281 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_NoDictElement()); } -#line 4163 "seclang-parser.cc" +#line 4210 "seclang-parser.cc" break; - case 263: // var: VARIABLE_ARGS_COMBINED_SIZE -#line 2270 "seclang-parser.yy" + case 263: +#line 2285 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsCombinedSize()); } -#line 4171 "seclang-parser.cc" +#line 4218 "seclang-parser.cc" break; - case 264: // var: "AUTH_TYPE" -#line 2274 "seclang-parser.yy" + case 264: +#line 2289 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::AuthType()); } -#line 4179 "seclang-parser.cc" +#line 4226 "seclang-parser.cc" break; - case 265: // var: "FILES_COMBINED_SIZE" -#line 2278 "seclang-parser.yy" + case 265: +#line 2293 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesCombinedSize()); } -#line 4187 "seclang-parser.cc" +#line 4234 "seclang-parser.cc" break; - case 266: // var: "FULL_REQUEST" -#line 2282 "seclang-parser.yy" + case 266: +#line 2297 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequest()); } -#line 4195 "seclang-parser.cc" +#line 4242 "seclang-parser.cc" break; - case 267: // var: "FULL_REQUEST_LENGTH" -#line 2286 "seclang-parser.yy" + case 267: +#line 2301 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequestLength()); } -#line 4203 "seclang-parser.cc" +#line 4250 "seclang-parser.cc" break; - case 268: // var: "INBOUND_DATA_ERROR" -#line 2290 "seclang-parser.yy" + case 268: +#line 2305 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::InboundDataError()); } -#line 4211 "seclang-parser.cc" +#line 4258 "seclang-parser.cc" break; - case 269: // var: "MATCHED_VAR" -#line 2294 "seclang-parser.yy" + case 269: +#line 2309 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVar()); } -#line 4219 "seclang-parser.cc" +#line 4266 "seclang-parser.cc" break; - case 270: // var: "MATCHED_VAR_NAME" -#line 2298 "seclang-parser.yy" + case 270: +#line 2313 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarName()); } -#line 4227 "seclang-parser.cc" +#line 4274 "seclang-parser.cc" break; - case 271: // var: VARIABLE_MULTIPART_BOUNDARY_QUOTED -#line 2302 "seclang-parser.yy" + case 271: +#line 2317 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryQuoted()); } -#line 4235 "seclang-parser.cc" +#line 4282 "seclang-parser.cc" break; - case 272: // var: VARIABLE_MULTIPART_BOUNDARY_WHITESPACE -#line 2306 "seclang-parser.yy" + case 272: +#line 2321 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryWhiteSpace()); } -#line 4243 "seclang-parser.cc" +#line 4290 "seclang-parser.cc" break; - case 273: // var: "MULTIPART_CRLF_LF_LINES" -#line 2310 "seclang-parser.yy" + case 273: +#line 2325 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartCrlfLFLines()); } -#line 4251 "seclang-parser.cc" +#line 4298 "seclang-parser.cc" break; - case 274: // var: "MULTIPART_DATA_AFTER" -#line 2314 "seclang-parser.yy" + case 274: +#line 2329 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateAfter()); } -#line 4259 "seclang-parser.cc" +#line 4306 "seclang-parser.cc" break; - case 275: // var: VARIABLE_MULTIPART_DATA_BEFORE -#line 2318 "seclang-parser.yy" + case 275: +#line 2333 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateBefore()); } -#line 4267 "seclang-parser.cc" +#line 4314 "seclang-parser.cc" break; - case 276: // var: "MULTIPART_FILE_LIMIT_EXCEEDED" -#line 2322 "seclang-parser.yy" + case 276: +#line 2337 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartFileLimitExceeded()); } -#line 4275 "seclang-parser.cc" +#line 4322 "seclang-parser.cc" break; - case 277: // var: "MULTIPART_HEADER_FOLDING" -#line 2326 "seclang-parser.yy" + case 277: +#line 2341 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartHeaderFolding()); } -#line 4283 "seclang-parser.cc" +#line 4330 "seclang-parser.cc" break; - case 278: // var: "MULTIPART_INVALID_HEADER_FOLDING" -#line 2330 "seclang-parser.yy" + case 278: +#line 2345 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidHeaderFolding()); } -#line 4291 "seclang-parser.cc" +#line 4338 "seclang-parser.cc" break; - case 279: // var: VARIABLE_MULTIPART_INVALID_PART -#line 2334 "seclang-parser.yy" + case 279: +#line 2349 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidPart()); } -#line 4299 "seclang-parser.cc" +#line 4346 "seclang-parser.cc" break; - case 280: // var: "MULTIPART_INVALID_QUOTING" -#line 2338 "seclang-parser.yy" + case 280: +#line 2353 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidQuoting()); } -#line 4307 "seclang-parser.cc" +#line 4354 "seclang-parser.cc" break; - case 281: // var: VARIABLE_MULTIPART_LF_LINE -#line 2342 "seclang-parser.yy" + case 281: +#line 2357 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartLFLine()); } -#line 4315 "seclang-parser.cc" +#line 4362 "seclang-parser.cc" break; - case 282: // var: VARIABLE_MULTIPART_MISSING_SEMICOLON -#line 2346 "seclang-parser.yy" + case 282: +#line 2361 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4323 "seclang-parser.cc" +#line 4370 "seclang-parser.cc" break; - case 283: // var: VARIABLE_MULTIPART_SEMICOLON_MISSING -#line 2350 "seclang-parser.yy" + case 283: +#line 2365 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4331 "seclang-parser.cc" +#line 4378 "seclang-parser.cc" break; - case 284: // var: "MULTIPART_STRICT_ERROR" -#line 2354 "seclang-parser.yy" + case 284: +#line 2369 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartStrictError()); } -#line 4339 "seclang-parser.cc" +#line 4386 "seclang-parser.cc" break; - case 285: // var: "MULTIPART_UNMATCHED_BOUNDARY" -#line 2358 "seclang-parser.yy" + case 285: +#line 2373 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartUnmatchedBoundary()); } -#line 4347 "seclang-parser.cc" +#line 4394 "seclang-parser.cc" break; - case 286: // var: "OUTBOUND_DATA_ERROR" -#line 2362 "seclang-parser.yy" + case 286: +#line 2377 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::OutboundDataError()); } -#line 4355 "seclang-parser.cc" +#line 4402 "seclang-parser.cc" break; - case 287: // var: "PATH_INFO" -#line 2366 "seclang-parser.yy" + case 287: +#line 2381 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::PathInfo()); } -#line 4363 "seclang-parser.cc" +#line 4410 "seclang-parser.cc" break; - case 288: // var: "QUERY_STRING" -#line 2370 "seclang-parser.yy" + case 288: +#line 2385 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::QueryString()); } -#line 4371 "seclang-parser.cc" +#line 4418 "seclang-parser.cc" break; - case 289: // var: "REMOTE_ADDR" -#line 2374 "seclang-parser.yy" + case 289: +#line 2389 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteAddr()); } -#line 4379 "seclang-parser.cc" +#line 4426 "seclang-parser.cc" break; - case 290: // var: "REMOTE_HOST" -#line 2378 "seclang-parser.yy" + case 290: +#line 2393 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteHost()); } -#line 4387 "seclang-parser.cc" +#line 4434 "seclang-parser.cc" break; - case 291: // var: "REMOTE_PORT" -#line 2382 "seclang-parser.yy" + case 291: +#line 2397 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemotePort()); } -#line 4395 "seclang-parser.cc" +#line 4442 "seclang-parser.cc" break; - case 292: // var: "REQBODY_ERROR" -#line 2386 "seclang-parser.yy" + case 292: +#line 2401 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyError()); } -#line 4403 "seclang-parser.cc" +#line 4450 "seclang-parser.cc" break; - case 293: // var: "REQBODY_ERROR_MSG" -#line 2390 "seclang-parser.yy" + case 293: +#line 2405 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyErrorMsg()); } -#line 4411 "seclang-parser.cc" +#line 4458 "seclang-parser.cc" break; - case 294: // var: "REQBODY_PROCESSOR" -#line 2394 "seclang-parser.yy" + case 294: +#line 2409 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessor()); } -#line 4419 "seclang-parser.cc" +#line 4466 "seclang-parser.cc" break; - case 295: // var: "REQBODY_PROCESSOR_ERROR" -#line 2398 "seclang-parser.yy" + case 295: +#line 2413 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorError()); } -#line 4427 "seclang-parser.cc" +#line 4474 "seclang-parser.cc" break; - case 296: // var: "REQBODY_PROCESSOR_ERROR_MSG" -#line 2402 "seclang-parser.yy" + case 296: +#line 2417 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorErrorMsg()); } -#line 4435 "seclang-parser.cc" +#line 4482 "seclang-parser.cc" break; - case 297: // var: "REQUEST_BASENAME" -#line 2406 "seclang-parser.yy" + case 297: +#line 2421 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBasename()); } -#line 4443 "seclang-parser.cc" +#line 4490 "seclang-parser.cc" break; - case 298: // var: "REQUEST_BODY" -#line 2410 "seclang-parser.yy" + case 298: +#line 2425 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBody()); } -#line 4451 "seclang-parser.cc" +#line 4498 "seclang-parser.cc" break; - case 299: // var: "REQUEST_BODY_LENGTH" -#line 2414 "seclang-parser.yy" + case 299: +#line 2429 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBodyLength()); } -#line 4459 "seclang-parser.cc" +#line 4506 "seclang-parser.cc" break; - case 300: // var: "REQUEST_FILENAME" -#line 2418 "seclang-parser.yy" + case 300: +#line 2433 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestFilename()); } -#line 4467 "seclang-parser.cc" +#line 4514 "seclang-parser.cc" break; - case 301: // var: "REQUEST_LINE" -#line 2422 "seclang-parser.yy" + case 301: +#line 2437 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestLine()); } -#line 4475 "seclang-parser.cc" +#line 4522 "seclang-parser.cc" break; - case 302: // var: "REQUEST_METHOD" -#line 2426 "seclang-parser.yy" + case 302: +#line 2441 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestMethod()); } -#line 4483 "seclang-parser.cc" +#line 4530 "seclang-parser.cc" break; - case 303: // var: "REQUEST_PROTOCOL" -#line 2430 "seclang-parser.yy" + case 303: +#line 2445 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestProtocol()); } -#line 4491 "seclang-parser.cc" +#line 4538 "seclang-parser.cc" break; - case 304: // var: "REQUEST_URI" -#line 2434 "seclang-parser.yy" + case 304: +#line 2449 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURI()); } -#line 4499 "seclang-parser.cc" +#line 4546 "seclang-parser.cc" break; - case 305: // var: "REQUEST_URI_RAW" -#line 2438 "seclang-parser.yy" + case 305: +#line 2453 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURIRaw()); } -#line 4507 "seclang-parser.cc" +#line 4554 "seclang-parser.cc" break; - case 306: // var: "RESPONSE_BODY" -#line 2442 "seclang-parser.yy" + case 306: +#line 2457 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseBody()); } -#line 4515 "seclang-parser.cc" +#line 4562 "seclang-parser.cc" break; - case 307: // var: "RESPONSE_CONTENT_LENGTH" -#line 2446 "seclang-parser.yy" + case 307: +#line 2461 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentLength()); } -#line 4523 "seclang-parser.cc" +#line 4570 "seclang-parser.cc" break; - case 308: // var: "RESPONSE_PROTOCOL" -#line 2450 "seclang-parser.yy" + case 308: +#line 2465 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseProtocol()); } -#line 4531 "seclang-parser.cc" +#line 4578 "seclang-parser.cc" break; - case 309: // var: "RESPONSE_STATUS" -#line 2454 "seclang-parser.yy" + case 309: +#line 2469 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseStatus()); } -#line 4539 "seclang-parser.cc" +#line 4586 "seclang-parser.cc" break; - case 310: // var: "SERVER_ADDR" -#line 2458 "seclang-parser.yy" + case 310: +#line 2473 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerAddr()); } -#line 4547 "seclang-parser.cc" +#line 4594 "seclang-parser.cc" break; - case 311: // var: "SERVER_NAME" -#line 2462 "seclang-parser.yy" + case 311: +#line 2477 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerName()); } -#line 4555 "seclang-parser.cc" +#line 4602 "seclang-parser.cc" break; - case 312: // var: "SERVER_PORT" -#line 2466 "seclang-parser.yy" + case 312: +#line 2481 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerPort()); } -#line 4563 "seclang-parser.cc" +#line 4610 "seclang-parser.cc" break; - case 313: // var: "SESSIONID" -#line 2470 "seclang-parser.yy" + case 313: +#line 2485 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::SessionID()); } -#line 4571 "seclang-parser.cc" +#line 4618 "seclang-parser.cc" break; - case 314: // var: "UNIQUE_ID" -#line 2474 "seclang-parser.yy" + case 314: +#line 2489 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UniqueID()); } -#line 4579 "seclang-parser.cc" +#line 4626 "seclang-parser.cc" break; - case 315: // var: "URLENCODED_ERROR" -#line 2478 "seclang-parser.yy" + case 315: +#line 2493 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UrlEncodedError()); } -#line 4587 "seclang-parser.cc" +#line 4634 "seclang-parser.cc" break; - case 316: // var: "USERID" -#line 2482 "seclang-parser.yy" + case 316: +#line 2497 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UserID()); } -#line 4595 "seclang-parser.cc" +#line 4642 "seclang-parser.cc" break; - case 317: // var: "VARIABLE_STATUS" -#line 2486 "seclang-parser.yy" + case 317: +#line 2501 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4603 "seclang-parser.cc" +#line 4650 "seclang-parser.cc" break; - case 318: // var: "VARIABLE_STATUS_LINE" -#line 2490 "seclang-parser.yy" + case 318: +#line 2505 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4611 "seclang-parser.cc" +#line 4658 "seclang-parser.cc" break; - case 319: // var: "WEBAPPID" -#line 2494 "seclang-parser.yy" + case 319: +#line 2509 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::WebAppId()); } -#line 4619 "seclang-parser.cc" +#line 4666 "seclang-parser.cc" break; - case 320: // var: "RUN_TIME_VAR_DUR" -#line 2498 "seclang-parser.yy" + case 320: +#line 2513 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Duration(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4630 "seclang-parser.cc" +#line 4677 "seclang-parser.cc" break; - case 321: // var: "RUN_TIME_VAR_BLD" -#line 2506 "seclang-parser.yy" + case 321: +#line 2521 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new ModsecBuild(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4641 "seclang-parser.cc" +#line 4688 "seclang-parser.cc" break; - case 322: // var: "RUN_TIME_VAR_HSV" -#line 2513 "seclang-parser.yy" + case 322: +#line 2528 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new HighestSeverity(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4652 "seclang-parser.cc" +#line 4699 "seclang-parser.cc" break; - case 323: // var: "RUN_TIME_VAR_REMOTE_USER" -#line 2520 "seclang-parser.yy" + case 323: +#line 2535 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new RemoteUser(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4663 "seclang-parser.cc" +#line 4710 "seclang-parser.cc" break; - case 324: // var: "RUN_TIME_VAR_TIME" -#line 2527 "seclang-parser.yy" + case 324: +#line 2542 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Time(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4674 "seclang-parser.cc" +#line 4721 "seclang-parser.cc" break; - case 325: // var: "RUN_TIME_VAR_TIME_DAY" -#line 2534 "seclang-parser.yy" + case 325: +#line 2549 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4685 "seclang-parser.cc" +#line 4732 "seclang-parser.cc" break; - case 326: // var: "RUN_TIME_VAR_TIME_EPOCH" -#line 2541 "seclang-parser.yy" + case 326: +#line 2556 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeEpoch(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4696 "seclang-parser.cc" +#line 4743 "seclang-parser.cc" break; - case 327: // var: "RUN_TIME_VAR_TIME_HOUR" -#line 2548 "seclang-parser.yy" + case 327: +#line 2563 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeHour(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4707 "seclang-parser.cc" +#line 4754 "seclang-parser.cc" break; - case 328: // var: "RUN_TIME_VAR_TIME_MIN" -#line 2555 "seclang-parser.yy" + case 328: +#line 2570 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMin(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4718 "seclang-parser.cc" +#line 4765 "seclang-parser.cc" break; - case 329: // var: "RUN_TIME_VAR_TIME_MON" -#line 2562 "seclang-parser.yy" + case 329: +#line 2577 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMon(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4729 "seclang-parser.cc" +#line 4776 "seclang-parser.cc" break; - case 330: // var: "RUN_TIME_VAR_TIME_SEC" -#line 2569 "seclang-parser.yy" + case 330: +#line 2584 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeSec(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4740 "seclang-parser.cc" +#line 4787 "seclang-parser.cc" break; - case 331: // var: "RUN_TIME_VAR_TIME_WDAY" -#line 2576 "seclang-parser.yy" + case 331: +#line 2591 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeWDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4751 "seclang-parser.cc" +#line 4798 "seclang-parser.cc" break; - case 332: // var: "RUN_TIME_VAR_TIME_YEAR" -#line 2583 "seclang-parser.yy" + case 332: +#line 2598 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeYear(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4762 "seclang-parser.cc" +#line 4809 "seclang-parser.cc" break; - case 333: // act: "Accuracy" -#line 2593 "seclang-parser.yy" + case 333: +#line 2608 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as < std::string > ())); } -#line 4770 "seclang-parser.cc" +#line 4817 "seclang-parser.cc" break; - case 334: // act: "Allow" -#line 2597 "seclang-parser.yy" + case 334: +#line 2612 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as < std::string > ())); } -#line 4778 "seclang-parser.cc" +#line 4825 "seclang-parser.cc" break; - case 335: // act: "Append" -#line 2601 "seclang-parser.yy" + case 335: +#line 2616 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Append", yystack_[1].location); } -#line 4786 "seclang-parser.cc" +#line 4833 "seclang-parser.cc" break; - case 336: // act: "AuditLog" -#line 2605 "seclang-parser.yy" + case 336: +#line 2620 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::AuditLog(yystack_[0].value.as < std::string > ())); } -#line 4794 "seclang-parser.cc" +#line 4841 "seclang-parser.cc" break; - case 337: // act: "Block" -#line 2609 "seclang-parser.yy" + case 337: +#line 2624 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Block(yystack_[0].value.as < std::string > ())); } -#line 4802 "seclang-parser.cc" +#line 4849 "seclang-parser.cc" break; - case 338: // act: "Capture" -#line 2613 "seclang-parser.yy" + case 338: +#line 2628 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Capture(yystack_[0].value.as < std::string > ())); } -#line 4810 "seclang-parser.cc" +#line 4857 "seclang-parser.cc" break; - case 339: // act: "Chain" -#line 2617 "seclang-parser.yy" + case 339: +#line 2632 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Chain(yystack_[0].value.as < std::string > ())); } -#line 4818 "seclang-parser.cc" +#line 4865 "seclang-parser.cc" break; - case 340: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_ON" -#line 2621 "seclang-parser.yy" + case 340: +#line 2636 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4827 "seclang-parser.cc" +#line 4874 "seclang-parser.cc" break; - case 341: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_OFF" -#line 2626 "seclang-parser.yy" + case 341: +#line 2641 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4836 "seclang-parser.cc" +#line 4883 "seclang-parser.cc" break; - case 342: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_RELEVANT_ONLY" -#line 2631 "seclang-parser.yy" + case 342: +#line 2646 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4845 "seclang-parser.cc" +#line 4892 "seclang-parser.cc" break; - case 343: // act: "ACTION_CTL_AUDIT_LOG_PARTS" -#line 2636 "seclang-parser.yy" + case 343: +#line 2651 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as < std::string > ())); } -#line 4853 "seclang-parser.cc" +#line 4900 "seclang-parser.cc" break; - case 344: // act: "ACTION_CTL_BDY_JSON" -#line 2640 "seclang-parser.yy" + case 344: +#line 2655 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as < std::string > ())); } -#line 4861 "seclang-parser.cc" +#line 4908 "seclang-parser.cc" break; - case 345: // act: "ACTION_CTL_BDY_XML" -#line 2644 "seclang-parser.yy" + case 345: +#line 2659 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as < std::string > ())); } -#line 4869 "seclang-parser.cc" +#line 4916 "seclang-parser.cc" break; - case 346: // act: "ACTION_CTL_BDY_URLENCODED" -#line 2648 "seclang-parser.yy" + case 346: +#line 2663 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as < std::string > ())); } -#line 4877 "seclang-parser.cc" +#line 4924 "seclang-parser.cc" break; - case 347: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_ON" -#line 2652 "seclang-parser.yy" + case 347: +#line 2667 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4886 "seclang-parser.cc" +#line 4933 "seclang-parser.cc" break; - case 348: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_OFF" -#line 2657 "seclang-parser.yy" + case 348: +#line 2672 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4895 "seclang-parser.cc" +#line 4942 "seclang-parser.cc" break; - case 349: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_ON" -#line 2662 "seclang-parser.yy" + case 349: +#line 2677 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "true")); } -#line 4903 "seclang-parser.cc" +#line 4950 "seclang-parser.cc" break; - case 350: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_OFF" -#line 2666 "seclang-parser.yy" + case 350: +#line 2681 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "false")); } -#line 4911 "seclang-parser.cc" +#line 4958 "seclang-parser.cc" break; - case 351: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_ON" -#line 2670 "seclang-parser.yy" + case 351: +#line 2685 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); } -#line 4919 "seclang-parser.cc" +#line 4966 "seclang-parser.cc" break; - case 352: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_OFF" -#line 2674 "seclang-parser.yy" + case 352: +#line 2689 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); } -#line 4927 "seclang-parser.cc" +#line 4974 "seclang-parser.cc" break; - case 353: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_DETC" -#line 2678 "seclang-parser.yy" + case 353: +#line 2693 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); } -#line 4935 "seclang-parser.cc" +#line 4982 "seclang-parser.cc" break; - case 354: // act: "ACTION_CTL_RULE_REMOVE_BY_ID" -#line 2682 "seclang-parser.yy" + case 354: +#line 2697 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as < std::string > ())); } -#line 4943 "seclang-parser.cc" +#line 4990 "seclang-parser.cc" break; - case 355: // act: "ACTION_CTL_RULE_REMOVE_BY_TAG" -#line 2686 "seclang-parser.yy" + case 355: +#line 2701 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as < std::string > ())); } -#line 4951 "seclang-parser.cc" +#line 4998 "seclang-parser.cc" break; - case 356: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" -#line 2690 "seclang-parser.yy" + case 356: +#line 2705 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as < std::string > ())); } -#line 4959 "seclang-parser.cc" +#line 5006 "seclang-parser.cc" break; - case 357: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" -#line 2694 "seclang-parser.yy" + case 357: +#line 2709 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as < std::string > ())); } -#line 4967 "seclang-parser.cc" +#line 5014 "seclang-parser.cc" break; - case 358: // act: "Deny" -#line 2698 "seclang-parser.yy" + case 358: +#line 2713 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Deny(yystack_[0].value.as < std::string > ())); } -#line 4975 "seclang-parser.cc" +#line 5022 "seclang-parser.cc" break; - case 359: // act: "DeprecateVar" -#line 2702 "seclang-parser.yy" + case 359: +#line 2717 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); } -#line 4983 "seclang-parser.cc" +#line 5030 "seclang-parser.cc" break; - case 360: // act: "Drop" -#line 2706 "seclang-parser.yy" + case 360: +#line 2721 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Drop(yystack_[0].value.as < std::string > ())); } -#line 4991 "seclang-parser.cc" +#line 5038 "seclang-parser.cc" break; - case 361: // act: "Exec" -#line 2710 "seclang-parser.yy" + case 361: +#line 2725 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Exec(yystack_[0].value.as < std::string > ())); } -#line 4999 "seclang-parser.cc" +#line 5046 "seclang-parser.cc" break; - case 362: // act: "ExpireVar" -#line 2714 "seclang-parser.yy" + case 362: +#line 2729 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("ExpireVar", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[0].value.as < std::string > ())); } -#line 5008 "seclang-parser.cc" +#line 5055 "seclang-parser.cc" break; - case 363: // act: "Id" -#line 2719 "seclang-parser.yy" + case 363: +#line 2734 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as < std::string > ())); } -#line 5016 "seclang-parser.cc" +#line 5063 "seclang-parser.cc" break; - case 364: // act: "InitCol" run_time_string -#line 2723 "seclang-parser.yy" + case 364: +#line 2738 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5024 "seclang-parser.cc" +#line 5071 "seclang-parser.cc" break; - case 365: // act: "LogData" run_time_string -#line 2727 "seclang-parser.yy" + case 365: +#line 2742 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5032 "seclang-parser.cc" +#line 5079 "seclang-parser.cc" break; - case 366: // act: "Log" -#line 2731 "seclang-parser.yy" + case 366: +#line 2746 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Log(yystack_[0].value.as < std::string > ())); } -#line 5040 "seclang-parser.cc" +#line 5087 "seclang-parser.cc" break; - case 367: // act: "Maturity" -#line 2735 "seclang-parser.yy" + case 367: +#line 2750 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as < std::string > ())); } -#line 5048 "seclang-parser.cc" +#line 5095 "seclang-parser.cc" break; - case 368: // act: "Msg" run_time_string -#line 2739 "seclang-parser.yy" + case 368: +#line 2754 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5056 "seclang-parser.cc" +#line 5103 "seclang-parser.cc" break; - case 369: // act: "MultiMatch" -#line 2743 "seclang-parser.yy" + case 369: +#line 2758 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::MultiMatch(yystack_[0].value.as < std::string > ())); } -#line 5064 "seclang-parser.cc" +#line 5111 "seclang-parser.cc" break; - case 370: // act: "NoAuditLog" -#line 2747 "seclang-parser.yy" + case 370: +#line 2762 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoAuditLog(yystack_[0].value.as < std::string > ())); } -#line 5072 "seclang-parser.cc" +#line 5119 "seclang-parser.cc" break; - case 371: // act: "NoLog" -#line 2751 "seclang-parser.yy" + case 371: +#line 2766 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoLog(yystack_[0].value.as < std::string > ())); } -#line 5080 "seclang-parser.cc" +#line 5127 "seclang-parser.cc" break; - case 372: // act: "Pass" -#line 2755 "seclang-parser.yy" + case 372: +#line 2770 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Pass(yystack_[0].value.as < std::string > ())); } -#line 5088 "seclang-parser.cc" +#line 5135 "seclang-parser.cc" break; - case 373: // act: "Pause" -#line 2759 "seclang-parser.yy" + case 373: +#line 2774 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); } -#line 5096 "seclang-parser.cc" +#line 5143 "seclang-parser.cc" break; - case 374: // act: "Phase" -#line 2763 "seclang-parser.yy" + case 374: +#line 2778 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Phase(yystack_[0].value.as < std::string > ())); } -#line 5104 "seclang-parser.cc" +#line 5151 "seclang-parser.cc" break; - case 375: // act: "Prepend" -#line 2767 "seclang-parser.yy" + case 375: +#line 2782 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); } -#line 5112 "seclang-parser.cc" +#line 5159 "seclang-parser.cc" break; - case 376: // act: "Proxy" -#line 2771 "seclang-parser.yy" + case 376: +#line 2786 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); } -#line 5120 "seclang-parser.cc" +#line 5167 "seclang-parser.cc" break; - case 377: // act: "Redirect" run_time_string -#line 2775 "seclang-parser.yy" + case 377: +#line 2790 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5128 "seclang-parser.cc" +#line 5175 "seclang-parser.cc" break; - case 378: // act: "Rev" -#line 2779 "seclang-parser.yy" + case 378: +#line 2794 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Rev(yystack_[0].value.as < std::string > ())); } -#line 5136 "seclang-parser.cc" +#line 5183 "seclang-parser.cc" break; - case 379: // act: "SanitiseArg" -#line 2783 "seclang-parser.yy" + case 379: +#line 2798 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); } -#line 5144 "seclang-parser.cc" +#line 5191 "seclang-parser.cc" break; - case 380: // act: "SanitiseMatched" -#line 2787 "seclang-parser.yy" + case 380: +#line 2802 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); } -#line 5152 "seclang-parser.cc" +#line 5199 "seclang-parser.cc" break; - case 381: // act: "SanitiseMatchedBytes" -#line 2791 "seclang-parser.yy" + case 381: +#line 2806 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); } -#line 5160 "seclang-parser.cc" +#line 5207 "seclang-parser.cc" break; - case 382: // act: "SanitiseRequestHeader" -#line 2795 "seclang-parser.yy" + case 382: +#line 2810 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); } -#line 5168 "seclang-parser.cc" +#line 5215 "seclang-parser.cc" break; - case 383: // act: "SanitiseResponseHeader" -#line 2799 "seclang-parser.yy" + case 383: +#line 2814 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); } -#line 5176 "seclang-parser.cc" +#line 5223 "seclang-parser.cc" break; - case 384: // act: "SetEnv" run_time_string -#line 2803 "seclang-parser.yy" + case 384: +#line 2818 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetENV(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5184 "seclang-parser.cc" +#line 5231 "seclang-parser.cc" break; - case 385: // act: "SetRsc" run_time_string -#line 2807 "seclang-parser.yy" + case 385: +#line 2822 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5192 "seclang-parser.cc" +#line 5239 "seclang-parser.cc" break; - case 386: // act: "SetSid" run_time_string -#line 2811 "seclang-parser.yy" + case 386: +#line 2826 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5200 "seclang-parser.cc" +#line 5247 "seclang-parser.cc" break; - case 387: // act: "SetUID" run_time_string -#line 2815 "seclang-parser.yy" + case 387: +#line 2830 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5208 "seclang-parser.cc" +#line 5255 "seclang-parser.cc" break; - case 388: // act: "SetVar" setvar_action -#line 2819 "seclang-parser.yy" + case 388: +#line 2834 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); } -#line 5216 "seclang-parser.cc" +#line 5263 "seclang-parser.cc" break; - case 389: // act: "Severity" -#line 2823 "seclang-parser.yy" + case 389: +#line 2838 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Severity(yystack_[0].value.as < std::string > ())); } -#line 5224 "seclang-parser.cc" +#line 5271 "seclang-parser.cc" break; - case 390: // act: "Skip" -#line 2827 "seclang-parser.yy" + case 390: +#line 2842 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Skip(yystack_[0].value.as < std::string > ())); } -#line 5232 "seclang-parser.cc" +#line 5279 "seclang-parser.cc" break; - case 391: // act: "SkipAfter" -#line 2831 "seclang-parser.yy" + case 391: +#line 2846 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as < std::string > ())); } -#line 5240 "seclang-parser.cc" +#line 5287 "seclang-parser.cc" break; - case 392: // act: "Status" -#line 2835 "seclang-parser.yy" + case 392: +#line 2850 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as < std::string > ())); } -#line 5248 "seclang-parser.cc" +#line 5295 "seclang-parser.cc" break; - case 393: // act: "Tag" run_time_string -#line 2839 "seclang-parser.yy" + case 393: +#line 2854 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5256 "seclang-parser.cc" +#line 5303 "seclang-parser.cc" break; - case 394: // act: "Ver" -#line 2843 "seclang-parser.yy" + case 394: +#line 2858 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Ver(yystack_[0].value.as < std::string > ())); } -#line 5264 "seclang-parser.cc" +#line 5311 "seclang-parser.cc" break; - case 395: // act: "xmlns" -#line 2847 "seclang-parser.yy" + case 395: +#line 2862 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as < std::string > ())); } -#line 5272 "seclang-parser.cc" +#line 5319 "seclang-parser.cc" break; - case 396: // act: "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" -#line 2851 "seclang-parser.yy" + case 396: +#line 2866 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityZero7bit(yystack_[0].value.as < std::string > ())); } -#line 5280 "seclang-parser.cc" +#line 5327 "seclang-parser.cc" break; - case 397: // act: "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" -#line 2855 "seclang-parser.yy" + case 397: +#line 2870 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityOdd7bit(yystack_[0].value.as < std::string > ())); } -#line 5288 "seclang-parser.cc" +#line 5335 "seclang-parser.cc" break; - case 398: // act: "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" -#line 2859 "seclang-parser.yy" + case 398: +#line 2874 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityEven7bit(yystack_[0].value.as < std::string > ())); } -#line 5296 "seclang-parser.cc" +#line 5343 "seclang-parser.cc" break; - case 399: // act: "ACTION_TRANSFORMATION_SQL_HEX_DECODE" -#line 2863 "seclang-parser.yy" + case 399: +#line 2878 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::SqlHexDecode(yystack_[0].value.as < std::string > ())); } -#line 5304 "seclang-parser.cc" +#line 5351 "seclang-parser.cc" break; - case 400: // act: "ACTION_TRANSFORMATION_BASE_64_ENCODE" -#line 2867 "seclang-parser.yy" + case 400: +#line 2882 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Encode(yystack_[0].value.as < std::string > ())); } -#line 5312 "seclang-parser.cc" +#line 5359 "seclang-parser.cc" break; - case 401: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE" -#line 2871 "seclang-parser.yy" + case 401: +#line 2886 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Decode(yystack_[0].value.as < std::string > ())); } -#line 5320 "seclang-parser.cc" +#line 5367 "seclang-parser.cc" break; - case 402: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" -#line 2875 "seclang-parser.yy" + case 402: +#line 2890 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64DecodeExt(yystack_[0].value.as < std::string > ())); } -#line 5328 "seclang-parser.cc" +#line 5375 "seclang-parser.cc" break; - case 403: // act: "ACTION_TRANSFORMATION_CMD_LINE" -#line 2879 "seclang-parser.yy" + case 403: +#line 2894 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CmdLine(yystack_[0].value.as < std::string > ())); } -#line 5336 "seclang-parser.cc" +#line 5383 "seclang-parser.cc" break; - case 404: // act: "ACTION_TRANSFORMATION_SHA1" -#line 2883 "seclang-parser.yy" + case 404: +#line 2898 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Sha1(yystack_[0].value.as < std::string > ())); } -#line 5344 "seclang-parser.cc" +#line 5391 "seclang-parser.cc" break; - case 405: // act: "ACTION_TRANSFORMATION_MD5" -#line 2887 "seclang-parser.yy" + case 405: +#line 2902 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Md5(yystack_[0].value.as < std::string > ())); } -#line 5352 "seclang-parser.cc" +#line 5399 "seclang-parser.cc" break; - case 406: // act: "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" -#line 2891 "seclang-parser.yy" + case 406: +#line 2906 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::EscapeSeqDecode(yystack_[0].value.as < std::string > ())); } -#line 5360 "seclang-parser.cc" +#line 5407 "seclang-parser.cc" break; - case 407: // act: "ACTION_TRANSFORMATION_HEX_ENCODE" -#line 2895 "seclang-parser.yy" + case 407: +#line 2910 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexEncode(yystack_[0].value.as < std::string > ())); } -#line 5368 "seclang-parser.cc" +#line 5415 "seclang-parser.cc" break; - case 408: // act: "ACTION_TRANSFORMATION_HEX_DECODE" -#line 2899 "seclang-parser.yy" + case 408: +#line 2914 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexDecode(yystack_[0].value.as < std::string > ())); } -#line 5376 "seclang-parser.cc" +#line 5423 "seclang-parser.cc" break; - case 409: // act: "ACTION_TRANSFORMATION_LOWERCASE" -#line 2903 "seclang-parser.yy" + case 409: +#line 2918 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::LowerCase(yystack_[0].value.as < std::string > ())); } -#line 5384 "seclang-parser.cc" +#line 5431 "seclang-parser.cc" + break; + + case 410: +#line 2922 "seclang-parser.yy" + { + ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::PhpArgsNames(yystack_[0].value.as < std::string > ())); + } +#line 5439 "seclang-parser.cc" break; - case 410: // act: "ACTION_TRANSFORMATION_UPPERCASE" -#line 2907 "seclang-parser.yy" + case 411: +#line 2926 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UpperCase(yystack_[0].value.as < std::string > ())); } -#line 5392 "seclang-parser.cc" +#line 5447 "seclang-parser.cc" break; - case 411: // act: "ACTION_TRANSFORMATION_URL_DECODE_UNI" -#line 2911 "seclang-parser.yy" + case 412: +#line 2930 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecodeUni(yystack_[0].value.as < std::string > ())); } -#line 5400 "seclang-parser.cc" +#line 5455 "seclang-parser.cc" break; - case 412: // act: "ACTION_TRANSFORMATION_URL_DECODE" -#line 2915 "seclang-parser.yy" + case 413: +#line 2934 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecode(yystack_[0].value.as < std::string > ())); } -#line 5408 "seclang-parser.cc" +#line 5463 "seclang-parser.cc" break; - case 413: // act: "ACTION_TRANSFORMATION_URL_ENCODE" -#line 2919 "seclang-parser.yy" + case 414: +#line 2938 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlEncode(yystack_[0].value.as < std::string > ())); } -#line 5416 "seclang-parser.cc" +#line 5471 "seclang-parser.cc" break; - case 414: // act: "ACTION_TRANSFORMATION_NONE" -#line 2923 "seclang-parser.yy" + case 415: +#line 2942 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::None(yystack_[0].value.as < std::string > ())); } -#line 5424 "seclang-parser.cc" +#line 5479 "seclang-parser.cc" break; - case 415: // act: "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" -#line 2927 "seclang-parser.yy" + case 416: +#line 2946 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CompressWhitespace(yystack_[0].value.as < std::string > ())); } -#line 5432 "seclang-parser.cc" +#line 5487 "seclang-parser.cc" break; - case 416: // act: "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" -#line 2931 "seclang-parser.yy" + case 417: +#line 2950 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveWhitespace(yystack_[0].value.as < std::string > ())); } -#line 5440 "seclang-parser.cc" +#line 5495 "seclang-parser.cc" break; - case 417: // act: "ACTION_TRANSFORMATION_REPLACE_NULLS" -#line 2935 "seclang-parser.yy" + case 418: +#line 2954 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceNulls(yystack_[0].value.as < std::string > ())); } -#line 5448 "seclang-parser.cc" +#line 5503 "seclang-parser.cc" break; - case 418: // act: "ACTION_TRANSFORMATION_REMOVE_NULLS" -#line 2939 "seclang-parser.yy" + case 419: +#line 2958 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveNulls(yystack_[0].value.as < std::string > ())); } -#line 5456 "seclang-parser.cc" +#line 5511 "seclang-parser.cc" break; - case 419: // act: "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" -#line 2943 "seclang-parser.yy" + case 420: +#line 2962 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HtmlEntityDecode(yystack_[0].value.as < std::string > ())); } -#line 5464 "seclang-parser.cc" +#line 5519 "seclang-parser.cc" break; - case 420: // act: "ACTION_TRANSFORMATION_JS_DECODE" -#line 2947 "seclang-parser.yy" + case 421: +#line 2966 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::JsDecode(yystack_[0].value.as < std::string > ())); } -#line 5472 "seclang-parser.cc" +#line 5527 "seclang-parser.cc" break; - case 421: // act: "ACTION_TRANSFORMATION_CSS_DECODE" -#line 2951 "seclang-parser.yy" + case 422: +#line 2970 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CssDecode(yystack_[0].value.as < std::string > ())); } -#line 5480 "seclang-parser.cc" +#line 5535 "seclang-parser.cc" break; - case 422: // act: "ACTION_TRANSFORMATION_TRIM" -#line 2955 "seclang-parser.yy" + case 423: +#line 2974 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Trim(yystack_[0].value.as < std::string > ())); } -#line 5488 "seclang-parser.cc" +#line 5543 "seclang-parser.cc" break; - case 423: // act: "ACTION_TRANSFORMATION_TRIM_LEFT" -#line 2959 "seclang-parser.yy" + case 424: +#line 2978 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimLeft(yystack_[0].value.as < std::string > ())); } -#line 5496 "seclang-parser.cc" +#line 5551 "seclang-parser.cc" break; - case 424: // act: "ACTION_TRANSFORMATION_TRIM_RIGHT" -#line 2963 "seclang-parser.yy" + case 425: +#line 2982 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimRight(yystack_[0].value.as < std::string > ())); } -#line 5504 "seclang-parser.cc" +#line 5559 "seclang-parser.cc" break; - case 425: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" -#line 2967 "seclang-parser.yy" + case 426: +#line 2986 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePathWin(yystack_[0].value.as < std::string > ())); } -#line 5512 "seclang-parser.cc" +#line 5567 "seclang-parser.cc" break; - case 426: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH" -#line 2971 "seclang-parser.yy" + case 427: +#line 2990 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePath(yystack_[0].value.as < std::string > ())); } -#line 5520 "seclang-parser.cc" +#line 5575 "seclang-parser.cc" break; - case 427: // act: "ACTION_TRANSFORMATION_LENGTH" -#line 2975 "seclang-parser.yy" + case 428: +#line 2994 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Length(yystack_[0].value.as < std::string > ())); } -#line 5528 "seclang-parser.cc" +#line 5583 "seclang-parser.cc" break; - case 428: // act: "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" -#line 2979 "seclang-parser.yy" + case 429: +#line 2998 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Utf8ToUnicode(yystack_[0].value.as < std::string > ())); } -#line 5536 "seclang-parser.cc" +#line 5591 "seclang-parser.cc" break; - case 429: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" -#line 2983 "seclang-parser.yy" + case 430: +#line 3002 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveCommentsChar(yystack_[0].value.as < std::string > ())); } -#line 5544 "seclang-parser.cc" +#line 5599 "seclang-parser.cc" break; - case 430: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS" -#line 2987 "seclang-parser.yy" + case 431: +#line 3006 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveComments(yystack_[0].value.as < std::string > ())); } -#line 5552 "seclang-parser.cc" +#line 5607 "seclang-parser.cc" break; - case 431: // act: "ACTION_TRANSFORMATION_REPLACE_COMMENTS" -#line 2991 "seclang-parser.yy" + case 432: +#line 3010 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceComments(yystack_[0].value.as < std::string > ())); } -#line 5560 "seclang-parser.cc" +#line 5615 "seclang-parser.cc" break; - case 432: // setvar_action: "NOT" var -#line 2998 "seclang-parser.yy" + case 433: +#line 3017 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5568 "seclang-parser.cc" +#line 5623 "seclang-parser.cc" break; - case 433: // setvar_action: var -#line 3002 "seclang-parser.yy" + case 434: +#line 3021 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5576 "seclang-parser.cc" +#line 5631 "seclang-parser.cc" break; - case 434: // setvar_action: var SETVAR_OPERATION_EQUALS run_time_string -#line 3006 "seclang-parser.yy" + case 435: +#line 3025 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5584 "seclang-parser.cc" +#line 5639 "seclang-parser.cc" break; - case 435: // setvar_action: var SETVAR_OPERATION_EQUALS_PLUS run_time_string -#line 3010 "seclang-parser.yy" + case 436: +#line 3029 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5592 "seclang-parser.cc" +#line 5647 "seclang-parser.cc" break; - case 436: // setvar_action: var SETVAR_OPERATION_EQUALS_MINUS run_time_string -#line 3014 "seclang-parser.yy" + case 437: +#line 3033 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5600 "seclang-parser.cc" +#line 5655 "seclang-parser.cc" break; - case 437: // run_time_string: run_time_string "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3021 "seclang-parser.yy" + case 438: +#line 3040 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5609 "seclang-parser.cc" +#line 5664 "seclang-parser.cc" break; - case 438: // run_time_string: run_time_string var -#line 3026 "seclang-parser.yy" + case 439: +#line 3045 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5618 "seclang-parser.cc" +#line 5673 "seclang-parser.cc" break; - case 439: // run_time_string: "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3031 "seclang-parser.yy" + case 440: +#line 3050 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5628 "seclang-parser.cc" +#line 5683 "seclang-parser.cc" break; - case 440: // run_time_string: var -#line 3037 "seclang-parser.yy" + case 441: +#line 3056 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5638 "seclang-parser.cc" +#line 5693 "seclang-parser.cc" break; -#line 5642 "seclang-parser.cc" +#line 5697 "seclang-parser.cc" default: break; @@ -5655,6 +5710,7 @@ namespace yy { YY_SYMBOL_PRINT ("-> $$ =", yylhs); yypop_ (yylen); yylen = 0; + YY_STACK_PRINT (); // Shift the result of the reduction. yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); @@ -5670,9 +5726,7 @@ namespace yy { if (!yyerrstatus_) { ++yynerrs_; - context yyctx (*this, yyla); - std::string msg = yysyntax_error_ (yyctx); - error (yyla.location, YY_MOVE (msg)); + error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla)); } @@ -5683,7 +5737,7 @@ namespace yy { error, discard it. */ // Return failure if at end of input. - if (yyla.kind () == symbol_kind::S_YYEOF) + if (yyla.type_get () == yyeof_) YYABORT; else if (!yyla.empty ()) { @@ -5709,7 +5763,6 @@ namespace yy { this YYERROR. */ yypop_ (yylen); yylen = 0; - YY_STACK_PRINT (); goto yyerrlab1; @@ -5718,33 +5771,31 @@ namespace yy { `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus_ = 3; // Each real token shifted decrements this. - // Pop stack until we find a state that shifts the error token. - for (;;) - { - yyn = yypact_[+yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - yyn += symbol_kind::S_YYerror; - if (0 <= yyn && yyn <= yylast_ - && yycheck_[yyn] == symbol_kind::S_YYerror) - { - yyn = yytable_[yyn]; - if (0 < yyn) - break; - } - } - - // Pop the current state because it cannot handle the error token. - if (yystack_.size () == 1) - YYABORT; - - yyerror_range[1].location = yystack_[0].location; - yy_destroy_ ("Error: popping", yystack_[0]); - yypop_ (); - YY_STACK_PRINT (); - } { stack_symbol_type error_token; + for (;;) + { + yyn = yypact_[+yystack_[0].state]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yy_error_token_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + // Pop the current state because it cannot handle the error token. + if (yystack_.size () == 1) + YYABORT; + + yyerror_range[1].location = yystack_[0].location; + yy_destroy_ ("Error: popping", yystack_[0]); + yypop_ (); + YY_STACK_PRINT (); + } yyerror_range[2].location = yyla.location; YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); @@ -5782,7 +5833,6 @@ namespace yy { /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); - YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); @@ -5816,144 +5866,71 @@ namespace yy { error (yyexc.location, yyexc.what ()); } - /* Return YYSTR after stripping away unnecessary quotes and - backslashes, so that it's suitable for yyerror. The heuristic is - that double-quoting is unnecessary unless the string contains an - apostrophe, a comma, or backslash (other than backslash-backslash). - YYSTR is taken from yytname. */ + // Generate an error message. std::string - seclang_parser::yytnamerr_ (const char *yystr) + seclang_parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const { - if (*yystr == '"') + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + std::ptrdiff_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yyla) is + if this state is a consistent state with a default action. + Thus, detecting the absence of a lookahead is sufficient to + determine that there is no unexpected or expected token to + report. In that case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is + a consistent state with a default action. There might have + been a previous inconsistent state, consistent state with a + non-default action, or user semantic action that manipulated + yyla. (However, yyla is currently not documented for users.) + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (!yyla.empty ()) { - std::string yyr; - char const *yyp = yystr; + symbol_number_type yytoken = yyla.type_get (); + yyarg[yycount++] = yytname_[yytoken]; - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - yyr += *yyp; - break; - - case '"': - return yyr; - } - do_not_strip_quotes: ; - } - - return yystr; - } - - std::string - seclang_parser::symbol_name (symbol_kind_type yysymbol) - { - return yytnamerr_ (yytname_[yysymbol]); - } - - - - // seclang_parser::context. - seclang_parser::context::context (const seclang_parser& yyparser, const symbol_type& yyla) - : yyparser_ (yyparser) - , yyla_ (yyla) - {} - - int - seclang_parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const - { - // Actual number of expected tokens - int yycount = 0; - - int yyn = yypact_[+yyparser_.yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - // Stay within bounds of both yycheck and yytname. - int yychecklim = yylast_ - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - for (int yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror - && !yy_table_value_is_error_ (yytable_[yyx + yyn])) - { - if (!yyarg) - ++yycount; - else if (yycount == yyargn) - return 0; - else - yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx); - } - } - - if (yyarg && yycount == 0 && 0 < yyargn) - yyarg[0] = symbol_kind::S_YYEMPTY; - return yycount; - } - - - - int - seclang_parser::yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const - { - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yyla) is - if this state is a consistent state with a default action. - Thus, detecting the absence of a lookahead is sufficient to - determine that there is no unexpected or expected token to - report. In that case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is - a consistent state with a default action. There might have - been a previous inconsistent state, consistent state with a - non-default action, or user semantic action that manipulated - yyla. (However, yyla is currently not documented for users.) - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - - if (!yyctx.lookahead ().empty ()) - { - if (yyarg) - yyarg[0] = yyctx.token (); - int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); - return yyn + 1; - } - return 0; - } - - // Generate an error message. - std::string - seclang_parser::yysyntax_error_ (const context& yyctx) const - { - // Its maximum. - enum { YYARGS_MAX = 5 }; - // Arguments of yyformat. - symbol_kind_type yyarg[YYARGS_MAX]; - int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); + int yyn = yypact_[+yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + // Stay within bounds of both yycheck and yytname. + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } char const* yyformat = YY_NULLPTR; switch (yycount) @@ -5978,7 +5955,7 @@ namespace yy { for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { - yyres += symbol_name (yyarg[yyi++]); + yyres += yytnamerr_ (yyarg[yyi++]); ++yyp; } else @@ -5987,66 +5964,66 @@ namespace yy { } - const short seclang_parser::yypact_ninf_ = -422; + const short seclang_parser::yypact_ninf_ = -423; const signed char seclang_parser::yytable_ninf_ = -1; const short seclang_parser::yypact_[] = { - 2504, -422, -250, -422, -86, -422, -154, -422, -422, -422, - -422, -422, -274, -422, -422, -422, -422, -422, -286, -422, - -422, -422, -152, -147, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -145, -422, - -422, -146, -422, -141, -422, -136, -131, -422, -260, 2850, - 2850, -422, -422, -422, -422, -129, -299, -422, -422, -422, - 1148, 1148, 1148, 2850, -268, -127, -422, -422, -422, -125, - -422, -422, -422, -422, -422, -422, -422, -422, -422, 1148, - 2850, 2664, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, 2122, -256, -422, -422, -422, -422, - -422, -422, -422, -266, -422, -422, -422, -422, -123, -121, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - 2216, -422, 2216, -422, 2216, -422, -422, -422, -422, -422, - -422, -422, -422, 2216, -422, -422, -422, -422, -422, -422, - 2216, 2216, 2216, 2216, -422, -422, -422, -422, 2216, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, 3032, -422, 5, - -422, -422, -422, -422, -422, -422, 2546, 2546, -155, -153, - -151, -149, -144, -142, -139, -137, -135, -132, -130, -128, - -126, -124, -122, -120, -422, -118, -116, -114, -112, -422, - -422, -110, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -108, -422, -422, - -422, -422, -422, 50, -422, -422, -422, -106, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - 457, 546, 635, 968, 1057, -104, -102, 1480, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, 6, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, 1660, -422, -422, -422, -422, 2546, - -49, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 4, 3032, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, 2320, -422, -422, -422, -422, 2320, -422, - -422, 2320, -422, -422, 2320, -422, -422, 2320, -422, -422, - 2320, -422, -422, -422, -422, 9, 1571, 1990, 2216, 2216, - 2216, -422, -422, 2216, 2216, 2216, -422, 2216, 2216, 2216, - 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, - 2216, 2216, 2216, -422, 2216, 2216, 2216, 2216, -422, -422, - 2216, 2216, 2216, 2216, 2216, 2850, -422, 2320, -422, 2216, - 2216, 2216, -422, -422, -422, -422, -422, 2546, 2546, -422, - -422, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, -422, 2320, 2320, 2320, -422, -422 + 2508, -423, -251, -423, -86, -423, -157, -423, -423, -423, + -423, -423, -275, -423, -423, -423, -423, -423, -287, -423, + -423, -423, -154, -152, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -147, -423, + -423, -148, -423, -143, -423, -144, -132, -423, -261, 2856, + 2856, -423, -423, -423, -423, -130, -300, -423, -423, -423, + 1150, 1150, 1150, 2856, -269, -128, -423, -423, -423, -126, + -423, -423, -423, -423, -423, -423, -423, -423, -423, 1150, + 2856, 2669, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, 2126, -257, -423, -423, -423, -423, + -423, -423, -423, -267, -423, -423, -423, -423, -124, -122, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + 2220, -423, 2220, -423, 2220, -423, -423, -423, -423, -423, + -423, -423, -423, 2220, -423, -423, -423, -423, -423, -423, + 2220, 2220, 2220, 2220, -423, -423, -423, -423, 2220, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, 3039, -423, + 5, -423, -423, -423, -423, -423, -423, 2551, 2551, -156, + -153, -151, -149, -146, -142, -139, -137, -135, -131, -129, + -127, -125, -123, -121, -119, -423, -117, -115, -113, -111, + -423, -423, -109, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -107, -423, + -423, -423, -423, -423, 50, -423, -423, -423, -105, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, 458, 547, 636, 970, 1059, -103, -101, 1483, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, 6, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, 1663, -423, -423, -423, -423, + 2551, -49, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, 4, 3039, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, 2325, -423, -423, -423, -423, 2325, + -423, -423, 2325, -423, -423, 2325, -423, -423, 2325, -423, + -423, 2325, -423, -423, -423, -423, 9, 1574, 1994, 2220, + 2220, 2220, -423, -423, 2220, 2220, 2220, -423, 2220, 2220, + 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, + 2220, 2220, 2220, 2220, -423, 2220, 2220, 2220, 2220, -423, + -423, 2220, 2220, 2220, 2220, 2220, 2856, -423, 2325, -423, + 2220, 2220, 2220, -423, -423, -423, -423, -423, 2551, 2551, + -423, -423, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, -423, 2325, 2325, 2325, -423, -423 }; const short @@ -6069,108 +6046,108 @@ namespace yy { 0, 366, 0, 367, 0, 369, 370, 371, 372, 373, 374, 375, 376, 0, 378, 379, 380, 381, 382, 383, 0, 0, 0, 0, 389, 390, 391, 392, 0, 400, - 401, 402, 403, 415, 421, 406, 407, 408, 419, 420, - 427, 409, 405, 414, 426, 425, 398, 397, 396, 430, - 429, 418, 416, 431, 417, 404, 399, 422, 423, 424, - 410, 413, 412, 411, 428, 394, 395, 0, 77, 30, - 32, 79, 109, 108, 137, 138, 0, 0, 165, 168, - 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, - 201, 204, 207, 210, 263, 252, 213, 249, 255, 264, - 265, 222, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 293, 292, - 296, 295, 294, 297, 299, 298, 300, 258, 301, 302, - 303, 305, 304, 226, 306, 307, 259, 262, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 319, 317, 318, - 230, 234, 242, 246, 238, 216, 219, 0, 321, 320, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 121, 155, 160, 122, 123, 124, 22, 21, 23, - 28, 27, 143, 144, 0, 154, 78, 1, 3, 0, - 433, 388, 353, 352, 351, 341, 340, 342, 348, 347, - 350, 349, 439, 440, 364, 365, 368, 377, 384, 385, - 386, 387, 393, 0, 0, 162, 161, 163, 164, 166, - 167, 169, 170, 172, 173, 175, 176, 178, 179, 181, - 182, 184, 185, 187, 188, 190, 191, 193, 194, 196, - 197, 199, 200, 202, 203, 205, 206, 208, 209, 250, - 251, 211, 212, 247, 248, 253, 254, 220, 221, 256, - 257, 224, 225, 223, 260, 261, 228, 229, 227, 232, - 233, 231, 240, 241, 239, 244, 245, 243, 236, 237, - 235, 214, 215, 217, 218, 0, 0, 0, 0, 0, - 0, 38, 39, 0, 0, 0, 73, 0, 0, 0, + 401, 402, 403, 416, 422, 406, 407, 408, 420, 421, + 428, 409, 410, 405, 415, 427, 426, 398, 397, 396, + 431, 430, 419, 417, 432, 418, 404, 399, 423, 424, + 425, 411, 414, 413, 412, 429, 394, 395, 0, 77, + 30, 32, 79, 109, 108, 137, 138, 0, 0, 165, + 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, + 198, 201, 204, 207, 210, 263, 252, 213, 249, 255, + 264, 265, 222, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 293, + 292, 296, 295, 294, 297, 299, 298, 300, 258, 301, + 302, 303, 305, 304, 226, 306, 307, 259, 262, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 319, 317, + 318, 230, 234, 242, 246, 238, 216, 219, 0, 321, + 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 121, 155, 160, 122, 123, 124, 22, 21, + 23, 28, 27, 143, 144, 0, 154, 78, 1, 3, + 0, 434, 388, 353, 352, 351, 341, 340, 342, 348, + 347, 350, 349, 440, 441, 364, 365, 368, 377, 384, + 385, 386, 387, 393, 0, 0, 162, 161, 163, 164, + 166, 167, 169, 170, 172, 173, 175, 176, 178, 179, + 181, 182, 184, 185, 187, 188, 190, 191, 193, 194, + 196, 197, 199, 200, 202, 203, 205, 206, 208, 209, + 250, 251, 211, 212, 247, 248, 253, 254, 220, 221, + 256, 257, 224, 225, 223, 260, 261, 228, 229, 227, + 232, 233, 231, 240, 241, 239, 244, 245, 243, 236, + 237, 235, 214, 215, 217, 218, 0, 0, 0, 0, + 0, 0, 38, 39, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 40, 41, - 0, 0, 0, 0, 0, 76, 33, 35, 432, 0, - 0, 0, 437, 438, 29, 31, 156, 0, 0, 157, - 34, 36, 72, 56, 55, 57, 58, 43, 59, 52, - 60, 42, 61, 62, 63, 64, 65, 66, 67, 53, - 68, 69, 70, 71, 44, 45, 46, 47, 48, 49, - 50, 51, 54, 75, 434, 435, 436, 159, 158 + 0, 0, 0, 0, 37, 0, 0, 0, 0, 40, + 41, 0, 0, 0, 0, 0, 76, 33, 35, 433, + 0, 0, 0, 438, 439, 29, 31, 156, 0, 0, + 157, 34, 36, 72, 56, 55, 57, 58, 43, 59, + 52, 60, 42, 61, 62, 63, 64, 65, 66, 67, + 53, 68, 69, 70, 71, 44, 45, 46, 47, 48, + 49, 50, 51, 54, 75, 435, 436, 437, 159, 158 }; const short seclang_parser::yypgoto_[] = { - -422, -422, -71, -422, -46, -193, -422, -421, -422, -422, - -56, -285, -60, -340, -422, -133 + -423, -423, -71, -423, -46, -194, -423, -422, -423, -423, + -56, -286, -60, -341, -423, -133 }; const short seclang_parser::yydefgoto_[] = { - -1, 81, 82, 83, 208, 209, 475, 476, 84, 334, - 321, 322, 353, 210, 341, 354 + -1, 81, 82, 83, 209, 210, 476, 477, 84, 335, + 322, 323, 354, 211, 342, 355 }; const short seclang_parser::yytable_[] = { - 323, 323, 323, 214, 211, 324, 325, 364, 364, 355, - 338, 356, 436, 215, 363, 436, 490, 326, 94, 323, - 357, 95, 435, 335, 485, 96, 0, 358, 359, 360, - 361, 91, 92, 0, 336, 362, 93, 327, 328, 345, - 346, 0, 329, 111, 347, 112, 113, 342, 0, 343, - 344, 479, 480, 481, 340, 85, 86, 87, 88, 0, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 413, 89, 90, 97, 98, 0, 365, 366, 99, 100, - 101, 102, 103, 104, 105, 106, 0, 418, 421, 424, - 427, 430, 107, 108, 109, 110, 212, 213, 330, 331, - 332, 333, 348, 349, 350, 351, 367, 368, 369, 370, - 371, 372, 373, 374, 0, 0, 0, 375, 376, 377, - 378, 477, 379, 380, 381, 382, 383, 384, 0, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 414, 415, 431, 432, 433, - 434, 0, 0, 0, 0, 0, 0, 323, 0, 0, + 324, 324, 324, 215, 212, 325, 326, 365, 365, 356, + 339, 357, 437, 216, 364, 437, 491, 327, 94, 324, + 358, 95, 436, 336, 486, 96, 0, 359, 360, 361, + 362, 91, 92, 0, 337, 363, 93, 328, 329, 346, + 347, 0, 330, 111, 348, 112, 113, 343, 0, 344, + 345, 480, 481, 482, 341, 85, 86, 87, 88, 0, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 89, + 90, 414, 97, 98, 99, 100, 0, 366, 367, 101, + 102, 103, 104, 105, 106, 107, 108, 0, 419, 422, + 425, 428, 431, 0, 109, 110, 213, 214, 331, 332, + 333, 334, 349, 350, 351, 352, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 0, 0, + 378, 379, 478, 380, 381, 382, 383, 384, 385, 0, + 0, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 415, 416, 432, + 433, 434, 435, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 0, 491, 492, 493, 494, 0, 0, - 495, 496, 497, 0, 498, 499, 500, 501, 502, 503, + 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 0, 492, 493, 494, 495, 0, + 0, 496, 497, 498, 0, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 484, 514, 515, 516, 517, 486, 0, 518, 519, 520, - 521, 522, 0, 0, 0, 0, 524, 525, 526, 0, - 0, 0, 0, 483, 0, 0, 0, 0, 483, 0, - 0, 483, 0, 0, 483, 0, 0, 483, 0, 0, - 483, 0, 0, 0, 0, 352, 489, 308, 309, 310, + 514, 485, 515, 516, 517, 518, 487, 0, 519, 520, + 521, 522, 523, 0, 0, 0, 0, 525, 526, 527, + 0, 0, 0, 0, 484, 0, 0, 0, 0, 484, + 0, 0, 484, 0, 0, 484, 0, 0, 484, 0, + 0, 484, 0, 0, 0, 0, 353, 490, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 411, 412, 0, 0, 0, 0, 0, 0, 0, + 321, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 527, 528, 523, - 0, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 0, 483, 483, 483, 218, 219, 220, + 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 528, 529, + 524, 0, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 0, 484, 484, 484, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, @@ -6179,7 +6156,7 @@ namespace yy { 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 218, 219, 220, 221, + 301, 302, 303, 304, 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, @@ -6188,7 +6165,7 @@ namespace yy { 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 218, 219, 220, 221, 222, + 302, 303, 304, 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, @@ -6197,31 +6174,40 @@ namespace yy { 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 0, 0, 0, 0, 0, 0, + 303, 304, 305, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 0, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 416, 417, + 0, 0, 0, 0, 353, 0, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 0, + 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 353, 0, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 0, 420, + 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 0, 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 352, 0, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 422, 423, 218, 219, + 0, 0, 353, 0, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 0, 423, 424, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, @@ -6230,82 +6216,74 @@ namespace yy { 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 352, 0, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 0, 425, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 353, 0, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 0, 426, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 0, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 428, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 353, 0, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 0, 429, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 487, - 488, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 0, 0, 0, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 0, 0, 0, 0, 0, 308, 309, 310, + 0, 0, 0, 0, 0, 0, 0, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 488, 489, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 0, 0, 0, 0, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 0, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 0, 0, 0, 0, 0, + 0, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6313,155 +6291,155 @@ namespace yy { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 352, 0, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 0, 0, 0, 0, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 0, 0, 0, 0, 339, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 352, 0, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, + 0, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 0, 0, 0, 0, 0, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 0, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 0, 0, 0, 0, 340, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 0, + 353, 0, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 482, 4, 308, 309, 310, + 0, 0, 0, 0, 0, 0, 353, 0, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 0, 0, 0, 337, 0, 0, 0, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 4, 483, 0, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 0, 0, 0, 338, + 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 0, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 114, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, - 0, 0, 0, 0, 0, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 114, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, + 0, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 207, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206 + 0, 0, 0, 208, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207 }; const short seclang_parser::yycheck_[] = { - 60, 61, 62, 302, 50, 61, 62, 3, 3, 142, - 81, 144, 6, 312, 207, 6, 437, 63, 304, 79, - 153, 307, 307, 79, 364, 311, -1, 160, 161, 162, - 163, 305, 306, -1, 80, 168, 310, 305, 306, 305, - 306, -1, 310, 303, 310, 305, 306, 303, -1, 305, - 306, 100, 101, 102, 114, 305, 306, 143, 144, -1, + 60, 61, 62, 303, 50, 61, 62, 3, 3, 142, + 81, 144, 6, 313, 208, 6, 438, 63, 305, 79, + 153, 308, 308, 79, 365, 312, -1, 160, 161, 162, + 163, 306, 307, -1, 80, 168, 311, 306, 307, 306, + 307, -1, 311, 304, 311, 306, 307, 304, -1, 306, + 307, 100, 101, 102, 114, 306, 307, 143, 144, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6470,90 +6448,39 @@ namespace yy { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - 283, 305, 306, 305, 306, -1, 216, 217, 305, 306, - 305, 306, 308, 309, 305, 306, -1, 300, 301, 302, - 303, 304, 308, 309, 305, 306, 305, 306, 305, 306, - 305, 306, 305, 306, 305, 306, 341, 342, 341, 342, - 341, 342, 341, 342, -1, -1, -1, 341, 342, 341, - 342, 334, 341, 342, 341, 342, 341, 342, -1, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, -1, -1, -1, -1, -1, -1, 307, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 306, + 307, 284, 306, 307, 306, 307, -1, 217, 218, 306, + 307, 309, 310, 306, 307, 309, 310, -1, 301, 302, + 303, 304, 305, -1, 306, 307, 306, 307, 306, 307, + 306, 307, 306, 307, 306, 307, 342, 343, -1, 342, + 343, 342, 343, 342, 343, -1, 342, 343, -1, -1, + 342, 343, 335, 342, 343, 342, 343, 342, 343, -1, + -1, 342, 343, 342, 343, 342, 343, 342, 343, 342, + 343, 342, 343, 342, 343, 342, 343, 342, 343, 342, + 343, 342, 343, 342, 343, 342, 343, 342, 343, 342, + 343, 342, 343, -1, -1, -1, -1, -1, 308, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 354, 355, 356, 357, 358, 359, - 360, 361, 362, -1, 437, 438, 439, 440, -1, -1, - 443, 444, 445, -1, 447, 448, 449, 450, 451, 452, + 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, 438, 439, 440, 441, -1, + -1, 444, 445, 446, -1, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 326, 464, 465, 466, 467, 326, -1, 470, 471, 472, - 473, 474, -1, -1, -1, -1, 479, 480, 481, -1, - -1, -1, -1, 413, -1, -1, -1, -1, 418, -1, - -1, 421, -1, -1, 424, -1, -1, 427, -1, -1, - 430, -1, -1, -1, -1, 325, 436, 327, 328, 329, + 463, 327, 465, 466, 467, 468, 327, -1, 471, 472, + 473, 474, 475, -1, -1, -1, -1, 480, 481, 482, + -1, -1, -1, -1, 414, -1, -1, -1, -1, 419, + -1, -1, 422, -1, -1, 425, -1, -1, 428, -1, + -1, 431, -1, -1, -1, -1, 326, 437, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + 340, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 477, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 487, 488, 475, - -1, 491, 492, 493, 494, 495, 496, 497, 498, 499, + -1, -1, -1, -1, -1, -1, -1, -1, 478, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 488, 489, + 476, -1, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, -1, 524, 525, 526, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 325, -1, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, -1, 341, 342, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 325, -1, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, -1, 341, 342, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 325, -1, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, -1, 341, 342, 10, 11, + 520, 521, 522, 523, -1, 525, 526, 527, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -6571,40 +6498,40 @@ namespace yy { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, 94, 95, 96, 97, 98, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 325, -1, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, -1, 341, - 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, -1, + 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 325, -1, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, -1, 342, + 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 8, 9, + -1, -1, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, -1, 342, 343, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6613,16 +6540,16 @@ namespace yy { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6632,53 +6559,95 @@ namespace yy { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - -1, -1, -1, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, -1, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, -1, -1, -1, -1, -1, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 325, -1, 327, 328, 329, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - -1, -1, -1, -1, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, -1, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, -1, -1, -1, -1, 103, 10, 11, 12, 13, + 340, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, -1, -1, -1, -1, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, -1, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, -1, -1, -1, -1, -1, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, -1, -1, -1, -1, -1, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, -1, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, @@ -6687,8 +6656,7 @@ namespace yy { 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 325, -1, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 94, 95, 96, 97, 98, -1, -1, -1, -1, 103, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6698,108 +6666,119 @@ namespace yy { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 0, -1, -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 325, -1, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 325, 142, 327, 328, 329, + -1, -1, -1, -1, -1, -1, 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - -1, -1, -1, -1, 0, -1, -1, -1, 4, 5, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 340, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 142, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, -1, -1, -1, 0, + -1, -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 142, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 142, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 99, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, -1, - -1, -1, -1, -1, -1, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 99, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 326, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236 + -1, -1, -1, 327, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237 }; const short seclang_parser::yystos_[] = { - 0, 0, 4, 5, 142, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 344, 345, 346, 351, 305, 306, 143, 144, 305, - 306, 305, 306, 310, 304, 307, 311, 305, 306, 305, - 306, 305, 306, 308, 309, 305, 306, 308, 309, 305, - 306, 303, 305, 306, 99, 145, 146, 147, 148, 149, + 0, 0, 4, 5, 142, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 345, 346, 347, 352, 306, 307, 143, 144, 306, + 307, 306, 307, 311, 305, 308, 312, 306, 307, 306, + 307, 306, 307, 309, 310, 306, 307, 309, 310, 306, + 307, 304, 306, 307, 99, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, @@ -6808,77 +6787,60 @@ namespace yy { 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 326, 347, 348, - 356, 347, 305, 306, 302, 312, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 326, 327, 328, + 230, 231, 232, 233, 234, 235, 236, 237, 327, 348, + 349, 357, 348, 306, 307, 303, 313, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 353, 354, 355, 353, 353, 347, 305, 306, 310, - 305, 306, 305, 306, 352, 353, 347, 0, 345, 103, - 355, 357, 303, 305, 306, 305, 306, 310, 305, 306, - 305, 306, 325, 355, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 348, 3, 355, 355, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 358, 341, 342, 341, 342, 358, 341, - 342, 358, 341, 342, 358, 341, 342, 358, 341, 342, - 358, 341, 342, 341, 342, 354, 6, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 349, 350, 358, 355, 100, - 101, 102, 325, 355, 326, 356, 326, 8, 9, 355, - 350, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 347, 358, 358, 358, 355, 355 + 339, 340, 354, 355, 356, 354, 354, 348, 306, 307, + 311, 306, 307, 306, 307, 353, 354, 348, 0, 346, + 103, 356, 358, 304, 306, 307, 306, 307, 311, 306, + 307, 306, 307, 326, 356, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 349, 3, 356, 356, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 359, 342, 343, 342, 343, 359, + 342, 343, 359, 342, 343, 359, 342, 343, 359, 342, + 343, 359, 342, 343, 342, 343, 355, 6, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 350, 351, 359, 356, + 100, 101, 102, 326, 356, 327, 357, 327, 8, 9, + 356, 351, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 348, 359, 359, 359, 356, 356 }; const short seclang_parser::yyr1_[] = { - 0, 343, 344, 344, 344, 345, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 347, - 347, 348, 348, 349, 349, 349, 349, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 0, 344, 345, 345, 345, 346, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 348, + 348, 349, 349, 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 352, 353, 353, 354, 354, 354, - 354, 354, 354, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 351, 351, 351, 351, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 353, 354, 354, 355, 355, 355, 355, 355, 355, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, @@ -6889,8 +6851,25 @@ namespace yy { 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 357, 357, 357, 357, 357, 358, 358, 358, - 358 + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 358, 358, 358, 358, 358, 359, 359, + 359, 359 }; const signed char @@ -6939,18 +6918,18 @@ namespace yy { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 1, 3, 3, 3, 2, 2, 1, - 1 + 1, 1, 1, 2, 1, 3, 3, 3, 2, 2, + 1, 1 }; -#if YYDEBUG || 1 + // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. + // First, the terminals, then, starting at \a yyntokens_, nonterminals. const char* const seclang_parser::yytname_[] = { - "\"end of file\"", "error", "\"invalid token\"", "\",\"", + "\"end of file\"", "error", "$undefined", "\",\"", "\"CONFIG_CONTENT_INJECTION\"", "\"CONGIG_DIR_RESPONSE_BODY_MP_CLEAR\"", "PIPE", "NEW_LINE", "VAR_COUNT", "VAR_EXCLUSION", "VARIABLE_ARGS", "VARIABLE_ARGS_POST", "VARIABLE_ARGS_GET", "VARIABLE_FILES_SIZES", @@ -7038,8 +7017,9 @@ namespace yy { "\"ACTION_TRANSFORMATION_HTML_ENTITY_DECODE\"", "\"ACTION_TRANSFORMATION_JS_DECODE\"", "\"ACTION_TRANSFORMATION_LENGTH\"", - "\"ACTION_TRANSFORMATION_LOWERCASE\"", "\"ACTION_TRANSFORMATION_MD5\"", - "\"ACTION_TRANSFORMATION_NONE\"", + "\"ACTION_TRANSFORMATION_LOWERCASE\"", + "\"ACTION_TRANSFORMATION_PHP_ARGS_NAMES\"", + "\"ACTION_TRANSFORMATION_MD5\"", "\"ACTION_TRANSFORMATION_NONE\"", "\"ACTION_TRANSFORMATION_NORMALISE_PATH\"", "\"ACTION_TRANSFORMATION_NORMALISE_PATH_WIN\"", "\"ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT\"", @@ -7124,62 +7104,61 @@ namespace yy { "variables_may_be_quoted", "var", "act", "setvar_action", "run_time_string", YY_NULLPTR }; -#endif - #if YYDEBUG const short seclang_parser::yyrline_[] = { - 0, 710, 710, 714, 715, 718, 723, 729, 735, 739, - 743, 749, 755, 761, 767, 772, 777, 783, 790, 794, - 798, 804, 808, 812, 817, 822, 827, 832, 836, 843, - 847, 854, 860, 870, 879, 889, 898, 911, 915, 919, - 923, 927, 931, 935, 939, 943, 947, 952, 956, 960, - 964, 968, 972, 977, 982, 986, 990, 994, 998, 1002, - 1006, 1010, 1014, 1018, 1022, 1026, 1030, 1034, 1038, 1042, - 1046, 1050, 1054, 1058, 1072, 1073, 1103, 1122, 1141, 1169, - 1226, 1233, 1237, 1241, 1245, 1249, 1253, 1257, 1261, 1270, - 1274, 1279, 1282, 1287, 1292, 1297, 1302, 1305, 1310, 1313, - 1318, 1323, 1326, 1331, 1336, 1341, 1346, 1351, 1356, 1361, - 1364, 1369, 1374, 1379, 1384, 1387, 1392, 1397, 1402, 1415, - 1428, 1441, 1454, 1467, 1493, 1521, 1533, 1553, 1580, 1586, - 1591, 1596, 1605, 1610, 1614, 1618, 1622, 1626, 1630, 1634, - 1639, 1644, 1656, 1662, 1666, 1670, 1681, 1690, 1691, 1698, - 1703, 1708, 1762, 1769, 1777, 1814, 1818, 1825, 1830, 1836, - 1842, 1848, 1855, 1865, 1869, 1873, 1877, 1881, 1885, 1889, - 1893, 1897, 1901, 1905, 1909, 1913, 1917, 1921, 1925, 1929, - 1933, 1937, 1941, 1945, 1949, 1953, 1957, 1961, 1965, 1969, - 1973, 1977, 1981, 1985, 1989, 1993, 1997, 2001, 2005, 2009, - 2013, 2017, 2021, 2025, 2029, 2033, 2037, 2041, 2045, 2049, - 2053, 2057, 2061, 2065, 2069, 2073, 2077, 2081, 2085, 2089, - 2093, 2097, 2101, 2105, 2109, 2113, 2117, 2121, 2125, 2129, - 2133, 2137, 2141, 2145, 2149, 2153, 2157, 2161, 2165, 2169, - 2173, 2177, 2181, 2185, 2189, 2193, 2197, 2201, 2205, 2209, - 2213, 2217, 2221, 2226, 2230, 2234, 2239, 2243, 2247, 2252, - 2257, 2261, 2265, 2269, 2273, 2277, 2281, 2285, 2289, 2293, - 2297, 2301, 2305, 2309, 2313, 2317, 2321, 2325, 2329, 2333, - 2337, 2341, 2345, 2349, 2353, 2357, 2361, 2365, 2369, 2373, - 2377, 2381, 2385, 2389, 2393, 2397, 2401, 2405, 2409, 2413, - 2417, 2421, 2425, 2429, 2433, 2437, 2441, 2445, 2449, 2453, - 2457, 2461, 2465, 2469, 2473, 2477, 2481, 2485, 2489, 2493, - 2497, 2505, 2512, 2519, 2526, 2533, 2540, 2547, 2554, 2561, - 2568, 2575, 2582, 2592, 2596, 2600, 2604, 2608, 2612, 2616, - 2620, 2625, 2630, 2635, 2639, 2643, 2647, 2651, 2656, 2661, - 2665, 2669, 2673, 2677, 2681, 2685, 2689, 2693, 2697, 2701, - 2705, 2709, 2713, 2718, 2722, 2726, 2730, 2734, 2738, 2742, - 2746, 2750, 2754, 2758, 2762, 2766, 2770, 2774, 2778, 2782, - 2786, 2790, 2794, 2798, 2802, 2806, 2810, 2814, 2818, 2822, - 2826, 2830, 2834, 2838, 2842, 2846, 2850, 2854, 2858, 2862, - 2866, 2870, 2874, 2878, 2882, 2886, 2890, 2894, 2898, 2902, - 2906, 2910, 2914, 2918, 2922, 2926, 2930, 2934, 2938, 2942, - 2946, 2950, 2954, 2958, 2962, 2966, 2970, 2974, 2978, 2982, - 2986, 2990, 2997, 3001, 3005, 3009, 3013, 3020, 3025, 3030, - 3036 + 0, 714, 714, 718, 719, 722, 727, 733, 739, 743, + 747, 753, 759, 765, 771, 776, 781, 787, 794, 798, + 802, 808, 812, 816, 821, 826, 831, 836, 840, 847, + 851, 858, 864, 874, 883, 893, 902, 915, 919, 923, + 927, 931, 935, 939, 943, 947, 951, 956, 960, 964, + 968, 972, 976, 981, 986, 990, 994, 998, 1002, 1006, + 1010, 1014, 1018, 1022, 1026, 1030, 1034, 1038, 1042, 1046, + 1050, 1054, 1058, 1062, 1076, 1077, 1109, 1128, 1149, 1179, + 1241, 1248, 1252, 1256, 1260, 1264, 1268, 1272, 1276, 1285, + 1289, 1294, 1297, 1302, 1307, 1312, 1317, 1320, 1325, 1328, + 1333, 1338, 1341, 1346, 1351, 1356, 1361, 1366, 1371, 1376, + 1379, 1384, 1389, 1394, 1399, 1402, 1407, 1412, 1417, 1430, + 1443, 1456, 1469, 1482, 1508, 1536, 1548, 1568, 1595, 1601, + 1606, 1611, 1620, 1625, 1629, 1633, 1637, 1641, 1645, 1649, + 1654, 1659, 1671, 1677, 1681, 1685, 1696, 1705, 1706, 1713, + 1718, 1723, 1777, 1784, 1792, 1829, 1833, 1840, 1845, 1851, + 1857, 1863, 1870, 1880, 1884, 1888, 1892, 1896, 1900, 1904, + 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, + 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, + 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020, 2024, + 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, + 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2100, 2104, + 2108, 2112, 2116, 2120, 2124, 2128, 2132, 2136, 2140, 2144, + 2148, 2152, 2156, 2160, 2164, 2168, 2172, 2176, 2180, 2184, + 2188, 2192, 2196, 2200, 2204, 2208, 2212, 2216, 2220, 2224, + 2228, 2232, 2236, 2241, 2245, 2249, 2254, 2258, 2262, 2267, + 2272, 2276, 2280, 2284, 2288, 2292, 2296, 2300, 2304, 2308, + 2312, 2316, 2320, 2324, 2328, 2332, 2336, 2340, 2344, 2348, + 2352, 2356, 2360, 2364, 2368, 2372, 2376, 2380, 2384, 2388, + 2392, 2396, 2400, 2404, 2408, 2412, 2416, 2420, 2424, 2428, + 2432, 2436, 2440, 2444, 2448, 2452, 2456, 2460, 2464, 2468, + 2472, 2476, 2480, 2484, 2488, 2492, 2496, 2500, 2504, 2508, + 2512, 2520, 2527, 2534, 2541, 2548, 2555, 2562, 2569, 2576, + 2583, 2590, 2597, 2607, 2611, 2615, 2619, 2623, 2627, 2631, + 2635, 2640, 2645, 2650, 2654, 2658, 2662, 2666, 2671, 2676, + 2680, 2684, 2688, 2692, 2696, 2700, 2704, 2708, 2712, 2716, + 2720, 2724, 2728, 2733, 2737, 2741, 2745, 2749, 2753, 2757, + 2761, 2765, 2769, 2773, 2777, 2781, 2785, 2789, 2793, 2797, + 2801, 2805, 2809, 2813, 2817, 2821, 2825, 2829, 2833, 2837, + 2841, 2845, 2849, 2853, 2857, 2861, 2865, 2869, 2873, 2877, + 2881, 2885, 2889, 2893, 2897, 2901, 2905, 2909, 2913, 2917, + 2921, 2925, 2929, 2933, 2937, 2941, 2945, 2949, 2953, 2957, + 2961, 2965, 2969, 2973, 2977, 2981, 2985, 2989, 2993, 2997, + 3001, 3005, 3009, 3016, 3020, 3024, 3028, 3032, 3039, 3044, + 3049, 3055 }; + // Print the state stack on the debug stream. void - seclang_parser::yy_stack_print_ () const + seclang_parser::yystack_print_ () { *yycdebug_ << "Stack now"; for (stack_type::const_iterator @@ -7190,8 +7169,9 @@ namespace yy { *yycdebug_ << '\n'; } + // Report on the debug stream that the rule \a yyrule is going to be reduced. void - seclang_parser::yy_reduce_print_ (int yyrule) const + seclang_parser::yy_reduce_print_ (int yyrule) { int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; @@ -7207,9 +7187,9 @@ namespace yy { } // yy -#line 7211 "seclang-parser.cc" +#line 7191 "seclang-parser.cc" -#line 3043 "seclang-parser.yy" +#line 3062 "seclang-parser.yy" void yy::seclang_parser::error (const location_type& l, const std::string& m) { diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index cc0ecc82cc..1ce0c974cd 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton interface for Bison LALR(1) parsers in C++ @@ -38,9 +38,8 @@ // C++ LALR(1) parser skeleton written by Akim Demaille. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. #ifndef YY_YY_SECLANG_PARSER_HH_INCLUDED # define YY_YY_SECLANG_PARSER_HH_INCLUDED @@ -56,7 +55,9 @@ class Driver; } } -#include "modsecurity/rule_unconditional.h" +#include "src/rule_unconditional.h" +#include "src/rule_with_operator.h" +#include "src/rule_with_actions.h" #include "src/rule_script.h" #include "src/actions/accuracy.h" @@ -116,6 +117,7 @@ class Driver; #include "src/actions/transformations/none.h" #include "src/actions/transformations/url_decode.h" #include "src/actions/transformations/lower_case.h" +#include "src/actions/transformations/php_args_names.h" #include "src/actions/transformations/upper_case.h" #include "src/actions/transformations/hex_decode.h" #include "src/actions/transformations/url_encode.h" @@ -350,7 +352,7 @@ using namespace modsecurity::operators; a = std::move(c); -#line 354 "seclang-parser.hh" +#line 356 "seclang-parser.hh" # include # include // std::abort @@ -484,7 +486,7 @@ using namespace modsecurity::operators; #endif namespace yy { -#line 488 "seclang-parser.hh" +#line 490 "seclang-parser.hh" @@ -520,13 +522,6 @@ namespace yy { new (yyas_ ()) T (YY_MOVE (t)); } -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - semantic_type (const self_type&) = delete; - /// Non copyable. - self_type& operator= (const self_type&) = delete; -#endif - /// Destruction, allowed only if empty. ~semantic_type () YY_NOEXCEPT { @@ -670,12 +665,9 @@ namespace yy { } private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. - semantic_type (const self_type&); - /// Non copyable. + /// Prohibit blind copies. self_type& operator= (const self_type&); -#endif + semantic_type (const self_type&); /// Accessor to raw memory as \a T. template @@ -764,6 +756,7 @@ namespace yy { // "ACTION_TRANSFORMATION_JS_DECODE" // "ACTION_TRANSFORMATION_LENGTH" // "ACTION_TRANSFORMATION_LOWERCASE" + // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" // "ACTION_TRANSFORMATION_MD5" // "ACTION_TRANSFORMATION_NONE" // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -961,745 +954,372 @@ namespace yy { location_type location; }; - /// Token kinds. + /// Tokens. struct token { - enum token_kind_type - { - TOK_YYEMPTY = -2, - TOK_END = 0, // "end of file" - TOK_YYerror = 256, // error - TOK_YYUNDEF = 257, // "invalid token" - TOK_COMMA = 258, // "," - TOK_CONFIG_CONTENT_INJECTION = 259, // "CONFIG_CONTENT_INJECTION" - TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR = 260, // "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" - TOK_PIPE = 261, // PIPE - TOK_NEW_LINE = 262, // NEW_LINE - TOK_VAR_COUNT = 263, // VAR_COUNT - TOK_VAR_EXCLUSION = 264, // VAR_EXCLUSION - TOK_VARIABLE_ARGS = 265, // VARIABLE_ARGS - TOK_VARIABLE_ARGS_POST = 266, // VARIABLE_ARGS_POST - TOK_VARIABLE_ARGS_GET = 267, // VARIABLE_ARGS_GET - TOK_VARIABLE_FILES_SIZES = 268, // VARIABLE_FILES_SIZES - TOK_VARIABLE_FILES_NAMES = 269, // VARIABLE_FILES_NAMES - TOK_VARIABLE_FILES_TMP_CONTENT = 270, // VARIABLE_FILES_TMP_CONTENT - TOK_VARIABLE_MULTIPART_FILENAME = 271, // VARIABLE_MULTIPART_FILENAME - TOK_VARIABLE_MULTIPART_NAME = 272, // VARIABLE_MULTIPART_NAME - TOK_VARIABLE_MATCHED_VARS_NAMES = 273, // VARIABLE_MATCHED_VARS_NAMES - TOK_VARIABLE_MATCHED_VARS = 274, // VARIABLE_MATCHED_VARS - TOK_VARIABLE_FILES = 275, // VARIABLE_FILES - TOK_VARIABLE_REQUEST_COOKIES = 276, // VARIABLE_REQUEST_COOKIES - TOK_VARIABLE_REQUEST_HEADERS = 277, // VARIABLE_REQUEST_HEADERS - TOK_VARIABLE_RESPONSE_HEADERS = 278, // VARIABLE_RESPONSE_HEADERS - TOK_VARIABLE_GEO = 279, // VARIABLE_GEO - TOK_VARIABLE_REQUEST_COOKIES_NAMES = 280, // VARIABLE_REQUEST_COOKIES_NAMES - TOK_VARIABLE_ARGS_COMBINED_SIZE = 281, // VARIABLE_ARGS_COMBINED_SIZE - TOK_VARIABLE_ARGS_GET_NAMES = 282, // VARIABLE_ARGS_GET_NAMES - TOK_VARIABLE_RULE = 283, // VARIABLE_RULE - TOK_VARIABLE_ARGS_NAMES = 284, // "Variable ARGS_NAMES" - TOK_VARIABLE_ARGS_POST_NAMES = 285, // VARIABLE_ARGS_POST_NAMES - TOK_VARIABLE_AUTH_TYPE = 286, // "AUTH_TYPE" - TOK_VARIABLE_FILES_COMBINED_SIZE = 287, // "FILES_COMBINED_SIZE" - TOK_VARIABLE_FILES_TMP_NAMES = 288, // "FILES_TMPNAMES" - TOK_VARIABLE_FULL_REQUEST = 289, // "FULL_REQUEST" - TOK_VARIABLE_FULL_REQUEST_LENGTH = 290, // "FULL_REQUEST_LENGTH" - TOK_VARIABLE_INBOUND_DATA_ERROR = 291, // "INBOUND_DATA_ERROR" - TOK_VARIABLE_MATCHED_VAR = 292, // "MATCHED_VAR" - TOK_VARIABLE_MATCHED_VAR_NAME = 293, // "MATCHED_VAR_NAME" - TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED = 294, // VARIABLE_MULTIPART_BOUNDARY_QUOTED - TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE = 295, // VARIABLE_MULTIPART_BOUNDARY_WHITESPACE - TOK_VARIABLE_MULTIPART_CRLF_LF_LINES = 296, // "MULTIPART_CRLF_LF_LINES" - TOK_VARIABLE_MULTIPART_DATA_AFTER = 297, // "MULTIPART_DATA_AFTER" - TOK_VARIABLE_MULTIPART_DATA_BEFORE = 298, // VARIABLE_MULTIPART_DATA_BEFORE - TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED = 299, // "MULTIPART_FILE_LIMIT_EXCEEDED" - TOK_VARIABLE_MULTIPART_HEADER_FOLDING = 300, // "MULTIPART_HEADER_FOLDING" - TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING = 301, // "MULTIPART_INVALID_HEADER_FOLDING" - TOK_VARIABLE_MULTIPART_INVALID_PART = 302, // VARIABLE_MULTIPART_INVALID_PART - TOK_VARIABLE_MULTIPART_INVALID_QUOTING = 303, // "MULTIPART_INVALID_QUOTING" - TOK_VARIABLE_MULTIPART_LF_LINE = 304, // VARIABLE_MULTIPART_LF_LINE - TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON = 305, // VARIABLE_MULTIPART_MISSING_SEMICOLON - TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING = 306, // VARIABLE_MULTIPART_SEMICOLON_MISSING - TOK_VARIABLE_MULTIPART_STRICT_ERROR = 307, // "MULTIPART_STRICT_ERROR" - TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY = 308, // "MULTIPART_UNMATCHED_BOUNDARY" - TOK_VARIABLE_OUTBOUND_DATA_ERROR = 309, // "OUTBOUND_DATA_ERROR" - TOK_VARIABLE_PATH_INFO = 310, // "PATH_INFO" - TOK_VARIABLE_QUERY_STRING = 311, // "QUERY_STRING" - TOK_VARIABLE_REMOTE_ADDR = 312, // "REMOTE_ADDR" - TOK_VARIABLE_REMOTE_HOST = 313, // "REMOTE_HOST" - TOK_VARIABLE_REMOTE_PORT = 314, // "REMOTE_PORT" - TOK_VARIABLE_REQBODY_ERROR_MSG = 315, // "REQBODY_ERROR_MSG" - TOK_VARIABLE_REQBODY_ERROR = 316, // "REQBODY_ERROR" - TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG = 317, // "REQBODY_PROCESSOR_ERROR_MSG" - TOK_VARIABLE_REQBODY_PROCESSOR_ERROR = 318, // "REQBODY_PROCESSOR_ERROR" - TOK_VARIABLE_REQBODY_PROCESSOR = 319, // "REQBODY_PROCESSOR" - TOK_VARIABLE_REQUEST_BASENAME = 320, // "REQUEST_BASENAME" - TOK_VARIABLE_REQUEST_BODY_LENGTH = 321, // "REQUEST_BODY_LENGTH" - TOK_VARIABLE_REQUEST_BODY = 322, // "REQUEST_BODY" - TOK_VARIABLE_REQUEST_FILE_NAME = 323, // "REQUEST_FILENAME" - TOK_VARIABLE_REQUEST_HEADERS_NAMES = 324, // VARIABLE_REQUEST_HEADERS_NAMES - TOK_VARIABLE_REQUEST_LINE = 325, // "REQUEST_LINE" - TOK_VARIABLE_REQUEST_METHOD = 326, // "REQUEST_METHOD" - TOK_VARIABLE_REQUEST_PROTOCOL = 327, // "REQUEST_PROTOCOL" - TOK_VARIABLE_REQUEST_URI_RAW = 328, // "REQUEST_URI_RAW" - TOK_VARIABLE_REQUEST_URI = 329, // "REQUEST_URI" - TOK_VARIABLE_RESOURCE = 330, // "RESOURCE" - TOK_VARIABLE_RESPONSE_BODY = 331, // "RESPONSE_BODY" - TOK_VARIABLE_RESPONSE_CONTENT_LENGTH = 332, // "RESPONSE_CONTENT_LENGTH" - TOK_VARIABLE_RESPONSE_CONTENT_TYPE = 333, // VARIABLE_RESPONSE_CONTENT_TYPE - TOK_VARIABLE_RESPONSE_HEADERS_NAMES = 334, // VARIABLE_RESPONSE_HEADERS_NAMES - TOK_VARIABLE_RESPONSE_PROTOCOL = 335, // "RESPONSE_PROTOCOL" - TOK_VARIABLE_RESPONSE_STATUS = 336, // "RESPONSE_STATUS" - TOK_VARIABLE_SERVER_ADDR = 337, // "SERVER_ADDR" - TOK_VARIABLE_SERVER_NAME = 338, // "SERVER_NAME" - TOK_VARIABLE_SERVER_PORT = 339, // "SERVER_PORT" - TOK_VARIABLE_SESSION_ID = 340, // "SESSIONID" - TOK_VARIABLE_UNIQUE_ID = 341, // "UNIQUE_ID" - TOK_VARIABLE_URL_ENCODED_ERROR = 342, // "URLENCODED_ERROR" - TOK_VARIABLE_USER_ID = 343, // "USERID" - TOK_VARIABLE_WEB_APP_ID = 344, // "WEBAPPID" - TOK_VARIABLE_STATUS = 345, // "VARIABLE_STATUS" - TOK_VARIABLE_STATUS_LINE = 346, // "VARIABLE_STATUS_LINE" - TOK_VARIABLE_IP = 347, // "VARIABLE_IP" - TOK_VARIABLE_GLOBAL = 348, // "VARIABLE_GLOBAL" - TOK_VARIABLE_TX = 349, // "VARIABLE_TX" - TOK_VARIABLE_SESSION = 350, // "VARIABLE_SESSION" - TOK_VARIABLE_USER = 351, // "VARIABLE_USER" - TOK_RUN_TIME_VAR_ENV = 352, // "RUN_TIME_VAR_ENV" - TOK_RUN_TIME_VAR_XML = 353, // "RUN_TIME_VAR_XML" - TOK_ACTION_SETVAR = 354, // "SetVar" - TOK_SETVAR_OPERATION_EQUALS = 355, // SETVAR_OPERATION_EQUALS - TOK_SETVAR_OPERATION_EQUALS_PLUS = 356, // SETVAR_OPERATION_EQUALS_PLUS - TOK_SETVAR_OPERATION_EQUALS_MINUS = 357, // SETVAR_OPERATION_EQUALS_MINUS - TOK_NOT = 358, // "NOT" - TOK_OPERATOR_BEGINS_WITH = 359, // "OPERATOR_BEGINS_WITH" - TOK_OPERATOR_CONTAINS = 360, // "OPERATOR_CONTAINS" - TOK_OPERATOR_CONTAINS_WORD = 361, // "OPERATOR_CONTAINS_WORD" - TOK_OPERATOR_DETECT_SQLI = 362, // "OPERATOR_DETECT_SQLI" - TOK_OPERATOR_DETECT_XSS = 363, // "OPERATOR_DETECT_XSS" - TOK_OPERATOR_ENDS_WITH = 364, // "OPERATOR_ENDS_WITH" - TOK_OPERATOR_EQ = 365, // "OPERATOR_EQ" - TOK_OPERATOR_FUZZY_HASH = 366, // "OPERATOR_FUZZY_HASH" - TOK_OPERATOR_GEOLOOKUP = 367, // "OPERATOR_GEOLOOKUP" - TOK_OPERATOR_GE = 368, // "OPERATOR_GE" - TOK_OPERATOR_GSB_LOOKUP = 369, // "OPERATOR_GSB_LOOKUP" - TOK_OPERATOR_GT = 370, // "OPERATOR_GT" - TOK_OPERATOR_INSPECT_FILE = 371, // "OPERATOR_INSPECT_FILE" - TOK_OPERATOR_IP_MATCH_FROM_FILE = 372, // "OPERATOR_IP_MATCH_FROM_FILE" - TOK_OPERATOR_IP_MATCH = 373, // "OPERATOR_IP_MATCH" - TOK_OPERATOR_LE = 374, // "OPERATOR_LE" - TOK_OPERATOR_LT = 375, // "OPERATOR_LT" - TOK_OPERATOR_PM_FROM_FILE = 376, // "OPERATOR_PM_FROM_FILE" - TOK_OPERATOR_PM = 377, // "OPERATOR_PM" - TOK_OPERATOR_RBL = 378, // "OPERATOR_RBL" - TOK_OPERATOR_RSUB = 379, // "OPERATOR_RSUB" - TOK_OPERATOR_RX_CONTENT_ONLY = 380, // "Operator RX (content only)" - TOK_OPERATOR_RX = 381, // "OPERATOR_RX" - TOK_OPERATOR_RX_GLOBAL = 382, // "OPERATOR_RX_GLOBAL" - TOK_OPERATOR_STR_EQ = 383, // "OPERATOR_STR_EQ" - TOK_OPERATOR_STR_MATCH = 384, // "OPERATOR_STR_MATCH" - TOK_OPERATOR_UNCONDITIONAL_MATCH = 385, // "OPERATOR_UNCONDITIONAL_MATCH" - TOK_OPERATOR_VALIDATE_BYTE_RANGE = 386, // "OPERATOR_VALIDATE_BYTE_RANGE" - TOK_OPERATOR_VALIDATE_DTD = 387, // "OPERATOR_VALIDATE_DTD" - TOK_OPERATOR_VALIDATE_HASH = 388, // "OPERATOR_VALIDATE_HASH" - TOK_OPERATOR_VALIDATE_SCHEMA = 389, // "OPERATOR_VALIDATE_SCHEMA" - TOK_OPERATOR_VALIDATE_URL_ENCODING = 390, // "OPERATOR_VALIDATE_URL_ENCODING" - TOK_OPERATOR_VALIDATE_UTF8_ENCODING = 391, // "OPERATOR_VALIDATE_UTF8_ENCODING" - TOK_OPERATOR_VERIFY_CC = 392, // "OPERATOR_VERIFY_CC" - TOK_OPERATOR_VERIFY_CPF = 393, // "OPERATOR_VERIFY_CPF" - TOK_OPERATOR_VERIFY_SSN = 394, // "OPERATOR_VERIFY_SSN" - TOK_OPERATOR_VERIFY_SVNR = 395, // "OPERATOR_VERIFY_SVNR" - TOK_OPERATOR_WITHIN = 396, // "OPERATOR_WITHIN" - TOK_CONFIG_DIR_AUDIT_LOG_FMT = 397, // CONFIG_DIR_AUDIT_LOG_FMT - TOK_JSON = 398, // JSON - TOK_NATIVE = 399, // NATIVE - TOK_ACTION_CTL_RULE_ENGINE = 400, // "ACTION_CTL_RULE_ENGINE" - TOK_ACTION_ACCURACY = 401, // "Accuracy" - TOK_ACTION_ALLOW = 402, // "Allow" - TOK_ACTION_APPEND = 403, // "Append" - TOK_ACTION_AUDIT_LOG = 404, // "AuditLog" - TOK_ACTION_BLOCK = 405, // "Block" - TOK_ACTION_CAPTURE = 406, // "Capture" - TOK_ACTION_CHAIN = 407, // "Chain" - TOK_ACTION_CTL_AUDIT_ENGINE = 408, // "ACTION_CTL_AUDIT_ENGINE" - TOK_ACTION_CTL_AUDIT_LOG_PARTS = 409, // "ACTION_CTL_AUDIT_LOG_PARTS" - TOK_ACTION_CTL_BDY_JSON = 410, // "ACTION_CTL_BDY_JSON" - TOK_ACTION_CTL_BDY_XML = 411, // "ACTION_CTL_BDY_XML" - TOK_ACTION_CTL_BDY_URLENCODED = 412, // "ACTION_CTL_BDY_URLENCODED" - TOK_ACTION_CTL_FORCE_REQ_BODY_VAR = 413, // "ACTION_CTL_FORCE_REQ_BODY_VAR" - TOK_ACTION_CTL_REQUEST_BODY_ACCESS = 414, // "ACTION_CTL_REQUEST_BODY_ACCESS" - TOK_ACTION_CTL_RULE_REMOVE_BY_ID = 415, // "ACTION_CTL_RULE_REMOVE_BY_ID" - TOK_ACTION_CTL_RULE_REMOVE_BY_TAG = 416, // "ACTION_CTL_RULE_REMOVE_BY_TAG" - TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID = 417, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG = 418, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - TOK_ACTION_DENY = 419, // "Deny" - TOK_ACTION_DEPRECATE_VAR = 420, // "DeprecateVar" - TOK_ACTION_DROP = 421, // "Drop" - TOK_ACTION_EXEC = 422, // "Exec" - TOK_ACTION_EXPIRE_VAR = 423, // "ExpireVar" - TOK_ACTION_ID = 424, // "Id" - TOK_ACTION_INITCOL = 425, // "InitCol" - TOK_ACTION_LOG = 426, // "Log" - TOK_ACTION_LOG_DATA = 427, // "LogData" - TOK_ACTION_MATURITY = 428, // "Maturity" - TOK_ACTION_MSG = 429, // "Msg" - TOK_ACTION_MULTI_MATCH = 430, // "MultiMatch" - TOK_ACTION_NO_AUDIT_LOG = 431, // "NoAuditLog" - TOK_ACTION_NO_LOG = 432, // "NoLog" - TOK_ACTION_PASS = 433, // "Pass" - TOK_ACTION_PAUSE = 434, // "Pause" - TOK_ACTION_PHASE = 435, // "Phase" - TOK_ACTION_PREPEND = 436, // "Prepend" - TOK_ACTION_PROXY = 437, // "Proxy" - TOK_ACTION_REDIRECT = 438, // "Redirect" - TOK_ACTION_REV = 439, // "Rev" - TOK_ACTION_SANITISE_ARG = 440, // "SanitiseArg" - TOK_ACTION_SANITISE_MATCHED = 441, // "SanitiseMatched" - TOK_ACTION_SANITISE_MATCHED_BYTES = 442, // "SanitiseMatchedBytes" - TOK_ACTION_SANITISE_REQUEST_HEADER = 443, // "SanitiseRequestHeader" - TOK_ACTION_SANITISE_RESPONSE_HEADER = 444, // "SanitiseResponseHeader" - TOK_ACTION_SETENV = 445, // "SetEnv" - TOK_ACTION_SETRSC = 446, // "SetRsc" - TOK_ACTION_SETSID = 447, // "SetSid" - TOK_ACTION_SETUID = 448, // "SetUID" - TOK_ACTION_SEVERITY = 449, // "Severity" - TOK_ACTION_SKIP = 450, // "Skip" - TOK_ACTION_SKIP_AFTER = 451, // "SkipAfter" - TOK_ACTION_STATUS = 452, // "Status" - TOK_ACTION_TAG = 453, // "Tag" - TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE = 454, // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - TOK_ACTION_TRANSFORMATION_BASE_64_DECODE = 455, // "ACTION_TRANSFORMATION_BASE_64_DECODE" - TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT = 456, // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - TOK_ACTION_TRANSFORMATION_CMD_LINE = 457, // "ACTION_TRANSFORMATION_CMD_LINE" - TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE = 458, // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - TOK_ACTION_TRANSFORMATION_CSS_DECODE = 459, // "ACTION_TRANSFORMATION_CSS_DECODE" - TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE = 460, // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - TOK_ACTION_TRANSFORMATION_HEX_ENCODE = 461, // "ACTION_TRANSFORMATION_HEX_ENCODE" - TOK_ACTION_TRANSFORMATION_HEX_DECODE = 462, // "ACTION_TRANSFORMATION_HEX_DECODE" - TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE = 463, // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - TOK_ACTION_TRANSFORMATION_JS_DECODE = 464, // "ACTION_TRANSFORMATION_JS_DECODE" - TOK_ACTION_TRANSFORMATION_LENGTH = 465, // "ACTION_TRANSFORMATION_LENGTH" - TOK_ACTION_TRANSFORMATION_LOWERCASE = 466, // "ACTION_TRANSFORMATION_LOWERCASE" - TOK_ACTION_TRANSFORMATION_MD5 = 467, // "ACTION_TRANSFORMATION_MD5" - TOK_ACTION_TRANSFORMATION_NONE = 468, // "ACTION_TRANSFORMATION_NONE" - TOK_ACTION_TRANSFORMATION_NORMALISE_PATH = 469, // "ACTION_TRANSFORMATION_NORMALISE_PATH" - TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 470, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 471, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 472, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 473, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 474, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 475, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - TOK_ACTION_TRANSFORMATION_REMOVE_NULLS = 476, // "ACTION_TRANSFORMATION_REMOVE_NULLS" - TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 477, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 478, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - TOK_ACTION_TRANSFORMATION_REPLACE_NULLS = 479, // "ACTION_TRANSFORMATION_REPLACE_NULLS" - TOK_ACTION_TRANSFORMATION_SHA1 = 480, // "ACTION_TRANSFORMATION_SHA1" - TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 481, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - TOK_ACTION_TRANSFORMATION_TRIM = 482, // "ACTION_TRANSFORMATION_TRIM" - TOK_ACTION_TRANSFORMATION_TRIM_LEFT = 483, // "ACTION_TRANSFORMATION_TRIM_LEFT" - TOK_ACTION_TRANSFORMATION_TRIM_RIGHT = 484, // "ACTION_TRANSFORMATION_TRIM_RIGHT" - TOK_ACTION_TRANSFORMATION_UPPERCASE = 485, // "ACTION_TRANSFORMATION_UPPERCASE" - TOK_ACTION_TRANSFORMATION_URL_ENCODE = 486, // "ACTION_TRANSFORMATION_URL_ENCODE" - TOK_ACTION_TRANSFORMATION_URL_DECODE = 487, // "ACTION_TRANSFORMATION_URL_DECODE" - TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI = 488, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 489, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - TOK_ACTION_VER = 490, // "Ver" - TOK_ACTION_XMLNS = 491, // "xmlns" - TOK_CONFIG_COMPONENT_SIG = 492, // "CONFIG_COMPONENT_SIG" - TOK_CONFIG_CONN_ENGINE = 493, // "CONFIG_CONN_ENGINE" - TOK_CONFIG_SEC_ARGUMENT_SEPARATOR = 494, // "CONFIG_SEC_ARGUMENT_SEPARATOR" - TOK_CONFIG_SEC_WEB_APP_ID = 495, // "CONFIG_SEC_WEB_APP_ID" - TOK_CONFIG_SEC_SERVER_SIG = 496, // "CONFIG_SEC_SERVER_SIG" - TOK_CONFIG_DIR_AUDIT_DIR = 497, // "CONFIG_DIR_AUDIT_DIR" - TOK_CONFIG_DIR_AUDIT_DIR_MOD = 498, // "CONFIG_DIR_AUDIT_DIR_MOD" - TOK_CONFIG_DIR_AUDIT_ENG = 499, // "CONFIG_DIR_AUDIT_ENG" - TOK_CONFIG_DIR_AUDIT_FLE_MOD = 500, // "CONFIG_DIR_AUDIT_FLE_MOD" - TOK_CONFIG_DIR_AUDIT_LOG = 501, // "CONFIG_DIR_AUDIT_LOG" - TOK_CONFIG_DIR_AUDIT_LOG2 = 502, // "CONFIG_DIR_AUDIT_LOG2" - TOK_CONFIG_DIR_AUDIT_LOG_P = 503, // "CONFIG_DIR_AUDIT_LOG_P" - TOK_CONFIG_DIR_AUDIT_STS = 504, // "CONFIG_DIR_AUDIT_STS" - TOK_CONFIG_DIR_AUDIT_TPE = 505, // "CONFIG_DIR_AUDIT_TPE" - TOK_CONFIG_DIR_DEBUG_LOG = 506, // "CONFIG_DIR_DEBUG_LOG" - TOK_CONFIG_DIR_DEBUG_LVL = 507, // "CONFIG_DIR_DEBUG_LVL" - TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS = 508, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 509, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - TOK_CONFIG_SEC_HASH_ENGINE = 510, // "CONFIG_SEC_HASH_ENGINE" - TOK_CONFIG_SEC_HASH_KEY = 511, // "CONFIG_SEC_HASH_KEY" - TOK_CONFIG_SEC_HASH_PARAM = 512, // "CONFIG_SEC_HASH_PARAM" - TOK_CONFIG_SEC_HASH_METHOD_RX = 513, // "CONFIG_SEC_HASH_METHOD_RX" - TOK_CONFIG_SEC_HASH_METHOD_PM = 514, // "CONFIG_SEC_HASH_METHOD_PM" - TOK_CONFIG_SEC_CHROOT_DIR = 515, // "CONFIG_SEC_CHROOT_DIR" - TOK_CONFIG_DIR_GEO_DB = 516, // "CONFIG_DIR_GEO_DB" - TOK_CONFIG_DIR_GSB_DB = 517, // "CONFIG_DIR_GSB_DB" - TOK_CONFIG_SEC_GUARDIAN_LOG = 518, // "CONFIG_SEC_GUARDIAN_LOG" - TOK_CONFIG_DIR_PCRE_MATCH_LIMIT = 519, // "CONFIG_DIR_PCRE_MATCH_LIMIT" - TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 520, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - TOK_CONFIG_SEC_CONN_R_STATE_LIMIT = 521, // "CONFIG_SEC_CONN_R_STATE_LIMIT" - TOK_CONFIG_SEC_CONN_W_STATE_LIMIT = 522, // "CONFIG_SEC_CONN_W_STATE_LIMIT" - TOK_CONFIG_SEC_SENSOR_ID = 523, // "CONFIG_SEC_SENSOR_ID" - TOK_CONFIG_DIR_ARGS_LIMIT = 524, // "CONFIG_DIR_ARGS_LIMIT" - TOK_CONFIG_DIR_REQ_BODY = 525, // "CONFIG_DIR_REQ_BODY" - TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 526, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - TOK_CONFIG_DIR_REQ_BODY_LIMIT = 527, // "CONFIG_DIR_REQ_BODY_LIMIT" - TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 528, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 529, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - TOK_CONFIG_DIR_RES_BODY = 530, // "CONFIG_DIR_RES_BODY" - TOK_CONFIG_DIR_RES_BODY_LIMIT = 531, // "CONFIG_DIR_RES_BODY_LIMIT" - TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 532, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - TOK_CONFIG_SEC_RULE_INHERITANCE = 533, // "CONFIG_SEC_RULE_INHERITANCE" - TOK_CONFIG_SEC_RULE_PERF_TIME = 534, // "CONFIG_SEC_RULE_PERF_TIME" - TOK_CONFIG_DIR_RULE_ENG = 535, // "CONFIG_DIR_RULE_ENG" - TOK_CONFIG_DIR_SEC_ACTION = 536, // "CONFIG_DIR_SEC_ACTION" - TOK_CONFIG_DIR_SEC_DEFAULT_ACTION = 537, // "CONFIG_DIR_SEC_DEFAULT_ACTION" - TOK_CONFIG_DIR_SEC_MARKER = 538, // "CONFIG_DIR_SEC_MARKER" - TOK_CONFIG_DIR_UNICODE_MAP_FILE = 539, // "CONFIG_DIR_UNICODE_MAP_FILE" - TOK_CONFIG_DIR_UNICODE_CODE_PAGE = 540, // "CONFIG_DIR_UNICODE_CODE_PAGE" - TOK_CONFIG_SEC_COLLECTION_TIMEOUT = 541, // "CONFIG_SEC_COLLECTION_TIMEOUT" - TOK_CONFIG_SEC_HTTP_BLKEY = 542, // "CONFIG_SEC_HTTP_BLKEY" - TOK_CONFIG_SEC_INTERCEPT_ON_ERROR = 543, // "CONFIG_SEC_INTERCEPT_ON_ERROR" - TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 544, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - TOK_CONFIG_SEC_RULE_REMOVE_BY_ID = 545, // "CONFIG_SEC_RULE_REMOVE_BY_ID" - TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG = 546, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG = 547, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 548, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 549, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 550, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 551, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - TOK_CONFIG_UPDLOAD_KEEP_FILES = 552, // "CONFIG_UPDLOAD_KEEP_FILES" - TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES = 553, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - TOK_CONFIG_UPLOAD_DIR = 554, // "CONFIG_UPLOAD_DIR" - TOK_CONFIG_UPLOAD_FILE_LIMIT = 555, // "CONFIG_UPLOAD_FILE_LIMIT" - TOK_CONFIG_UPLOAD_FILE_MODE = 556, // "CONFIG_UPLOAD_FILE_MODE" - TOK_CONFIG_VALUE_ABORT = 557, // "CONFIG_VALUE_ABORT" - TOK_CONFIG_VALUE_DETC = 558, // "CONFIG_VALUE_DETC" - TOK_CONFIG_VALUE_HTTPS = 559, // "CONFIG_VALUE_HTTPS" - TOK_CONFIG_VALUE_OFF = 560, // "CONFIG_VALUE_OFF" - TOK_CONFIG_VALUE_ON = 561, // "CONFIG_VALUE_ON" - TOK_CONFIG_VALUE_PARALLEL = 562, // "CONFIG_VALUE_PARALLEL" - TOK_CONFIG_VALUE_PROCESS_PARTIAL = 563, // "CONFIG_VALUE_PROCESS_PARTIAL" - TOK_CONFIG_VALUE_REJECT = 564, // "CONFIG_VALUE_REJECT" - TOK_CONFIG_VALUE_RELEVANT_ONLY = 565, // "CONFIG_VALUE_RELEVANT_ONLY" - TOK_CONFIG_VALUE_SERIAL = 566, // "CONFIG_VALUE_SERIAL" - TOK_CONFIG_VALUE_WARN = 567, // "CONFIG_VALUE_WARN" - TOK_CONFIG_XML_EXTERNAL_ENTITY = 568, // "CONFIG_XML_EXTERNAL_ENTITY" - TOK_CONGIG_DIR_RESPONSE_BODY_MP = 569, // "CONGIG_DIR_RESPONSE_BODY_MP" - TOK_CONGIG_DIR_SEC_ARG_SEP = 570, // "CONGIG_DIR_SEC_ARG_SEP" - TOK_CONGIG_DIR_SEC_COOKIE_FORMAT = 571, // "CONGIG_DIR_SEC_COOKIE_FORMAT" - TOK_CONFIG_SEC_COOKIEV0_SEPARATOR = 572, // "CONFIG_SEC_COOKIEV0_SEPARATOR" - TOK_CONGIG_DIR_SEC_DATA_DIR = 573, // "CONGIG_DIR_SEC_DATA_DIR" - TOK_CONGIG_DIR_SEC_STATUS_ENGINE = 574, // "CONGIG_DIR_SEC_STATUS_ENGINE" - TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 575, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 576, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - TOK_CONGIG_DIR_SEC_TMP_DIR = 577, // "CONGIG_DIR_SEC_TMP_DIR" - TOK_DIRECTIVE = 578, // "DIRECTIVE" - TOK_DIRECTIVE_SECRULESCRIPT = 579, // "DIRECTIVE_SECRULESCRIPT" - TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION = 580, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - TOK_QUOTATION_MARK = 581, // "QUOTATION_MARK" - TOK_RUN_TIME_VAR_BLD = 582, // "RUN_TIME_VAR_BLD" - TOK_RUN_TIME_VAR_DUR = 583, // "RUN_TIME_VAR_DUR" - TOK_RUN_TIME_VAR_HSV = 584, // "RUN_TIME_VAR_HSV" - TOK_RUN_TIME_VAR_REMOTE_USER = 585, // "RUN_TIME_VAR_REMOTE_USER" - TOK_RUN_TIME_VAR_TIME = 586, // "RUN_TIME_VAR_TIME" - TOK_RUN_TIME_VAR_TIME_DAY = 587, // "RUN_TIME_VAR_TIME_DAY" - TOK_RUN_TIME_VAR_TIME_EPOCH = 588, // "RUN_TIME_VAR_TIME_EPOCH" - TOK_RUN_TIME_VAR_TIME_HOUR = 589, // "RUN_TIME_VAR_TIME_HOUR" - TOK_RUN_TIME_VAR_TIME_MIN = 590, // "RUN_TIME_VAR_TIME_MIN" - TOK_RUN_TIME_VAR_TIME_MON = 591, // "RUN_TIME_VAR_TIME_MON" - TOK_RUN_TIME_VAR_TIME_SEC = 592, // "RUN_TIME_VAR_TIME_SEC" - TOK_RUN_TIME_VAR_TIME_WDAY = 593, // "RUN_TIME_VAR_TIME_WDAY" - TOK_RUN_TIME_VAR_TIME_YEAR = 594, // "RUN_TIME_VAR_TIME_YEAR" - TOK_VARIABLE = 595, // "VARIABLE" - TOK_DICT_ELEMENT = 596, // "Dictionary element" - TOK_DICT_ELEMENT_REGEXP = 597 // "Dictionary element, selected by regexp" + enum yytokentype + { + TOK_END = 0, + TOK_COMMA = 258, + TOK_CONFIG_CONTENT_INJECTION = 259, + TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR = 260, + TOK_PIPE = 261, + TOK_NEW_LINE = 262, + TOK_VAR_COUNT = 263, + TOK_VAR_EXCLUSION = 264, + TOK_VARIABLE_ARGS = 265, + TOK_VARIABLE_ARGS_POST = 266, + TOK_VARIABLE_ARGS_GET = 267, + TOK_VARIABLE_FILES_SIZES = 268, + TOK_VARIABLE_FILES_NAMES = 269, + TOK_VARIABLE_FILES_TMP_CONTENT = 270, + TOK_VARIABLE_MULTIPART_FILENAME = 271, + TOK_VARIABLE_MULTIPART_NAME = 272, + TOK_VARIABLE_MATCHED_VARS_NAMES = 273, + TOK_VARIABLE_MATCHED_VARS = 274, + TOK_VARIABLE_FILES = 275, + TOK_VARIABLE_REQUEST_COOKIES = 276, + TOK_VARIABLE_REQUEST_HEADERS = 277, + TOK_VARIABLE_RESPONSE_HEADERS = 278, + TOK_VARIABLE_GEO = 279, + TOK_VARIABLE_REQUEST_COOKIES_NAMES = 280, + TOK_VARIABLE_ARGS_COMBINED_SIZE = 281, + TOK_VARIABLE_ARGS_GET_NAMES = 282, + TOK_VARIABLE_RULE = 283, + TOK_VARIABLE_ARGS_NAMES = 284, + TOK_VARIABLE_ARGS_POST_NAMES = 285, + TOK_VARIABLE_AUTH_TYPE = 286, + TOK_VARIABLE_FILES_COMBINED_SIZE = 287, + TOK_VARIABLE_FILES_TMP_NAMES = 288, + TOK_VARIABLE_FULL_REQUEST = 289, + TOK_VARIABLE_FULL_REQUEST_LENGTH = 290, + TOK_VARIABLE_INBOUND_DATA_ERROR = 291, + TOK_VARIABLE_MATCHED_VAR = 292, + TOK_VARIABLE_MATCHED_VAR_NAME = 293, + TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED = 294, + TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE = 295, + TOK_VARIABLE_MULTIPART_CRLF_LF_LINES = 296, + TOK_VARIABLE_MULTIPART_DATA_AFTER = 297, + TOK_VARIABLE_MULTIPART_DATA_BEFORE = 298, + TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED = 299, + TOK_VARIABLE_MULTIPART_HEADER_FOLDING = 300, + TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING = 301, + TOK_VARIABLE_MULTIPART_INVALID_PART = 302, + TOK_VARIABLE_MULTIPART_INVALID_QUOTING = 303, + TOK_VARIABLE_MULTIPART_LF_LINE = 304, + TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON = 305, + TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING = 306, + TOK_VARIABLE_MULTIPART_STRICT_ERROR = 307, + TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY = 308, + TOK_VARIABLE_OUTBOUND_DATA_ERROR = 309, + TOK_VARIABLE_PATH_INFO = 310, + TOK_VARIABLE_QUERY_STRING = 311, + TOK_VARIABLE_REMOTE_ADDR = 312, + TOK_VARIABLE_REMOTE_HOST = 313, + TOK_VARIABLE_REMOTE_PORT = 314, + TOK_VARIABLE_REQBODY_ERROR_MSG = 315, + TOK_VARIABLE_REQBODY_ERROR = 316, + TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG = 317, + TOK_VARIABLE_REQBODY_PROCESSOR_ERROR = 318, + TOK_VARIABLE_REQBODY_PROCESSOR = 319, + TOK_VARIABLE_REQUEST_BASENAME = 320, + TOK_VARIABLE_REQUEST_BODY_LENGTH = 321, + TOK_VARIABLE_REQUEST_BODY = 322, + TOK_VARIABLE_REQUEST_FILE_NAME = 323, + TOK_VARIABLE_REQUEST_HEADERS_NAMES = 324, + TOK_VARIABLE_REQUEST_LINE = 325, + TOK_VARIABLE_REQUEST_METHOD = 326, + TOK_VARIABLE_REQUEST_PROTOCOL = 327, + TOK_VARIABLE_REQUEST_URI_RAW = 328, + TOK_VARIABLE_REQUEST_URI = 329, + TOK_VARIABLE_RESOURCE = 330, + TOK_VARIABLE_RESPONSE_BODY = 331, + TOK_VARIABLE_RESPONSE_CONTENT_LENGTH = 332, + TOK_VARIABLE_RESPONSE_CONTENT_TYPE = 333, + TOK_VARIABLE_RESPONSE_HEADERS_NAMES = 334, + TOK_VARIABLE_RESPONSE_PROTOCOL = 335, + TOK_VARIABLE_RESPONSE_STATUS = 336, + TOK_VARIABLE_SERVER_ADDR = 337, + TOK_VARIABLE_SERVER_NAME = 338, + TOK_VARIABLE_SERVER_PORT = 339, + TOK_VARIABLE_SESSION_ID = 340, + TOK_VARIABLE_UNIQUE_ID = 341, + TOK_VARIABLE_URL_ENCODED_ERROR = 342, + TOK_VARIABLE_USER_ID = 343, + TOK_VARIABLE_WEB_APP_ID = 344, + TOK_VARIABLE_STATUS = 345, + TOK_VARIABLE_STATUS_LINE = 346, + TOK_VARIABLE_IP = 347, + TOK_VARIABLE_GLOBAL = 348, + TOK_VARIABLE_TX = 349, + TOK_VARIABLE_SESSION = 350, + TOK_VARIABLE_USER = 351, + TOK_RUN_TIME_VAR_ENV = 352, + TOK_RUN_TIME_VAR_XML = 353, + TOK_ACTION_SETVAR = 354, + TOK_SETVAR_OPERATION_EQUALS = 355, + TOK_SETVAR_OPERATION_EQUALS_PLUS = 356, + TOK_SETVAR_OPERATION_EQUALS_MINUS = 357, + TOK_NOT = 358, + TOK_OPERATOR_BEGINS_WITH = 359, + TOK_OPERATOR_CONTAINS = 360, + TOK_OPERATOR_CONTAINS_WORD = 361, + TOK_OPERATOR_DETECT_SQLI = 362, + TOK_OPERATOR_DETECT_XSS = 363, + TOK_OPERATOR_ENDS_WITH = 364, + TOK_OPERATOR_EQ = 365, + TOK_OPERATOR_FUZZY_HASH = 366, + TOK_OPERATOR_GEOLOOKUP = 367, + TOK_OPERATOR_GE = 368, + TOK_OPERATOR_GSB_LOOKUP = 369, + TOK_OPERATOR_GT = 370, + TOK_OPERATOR_INSPECT_FILE = 371, + TOK_OPERATOR_IP_MATCH_FROM_FILE = 372, + TOK_OPERATOR_IP_MATCH = 373, + TOK_OPERATOR_LE = 374, + TOK_OPERATOR_LT = 375, + TOK_OPERATOR_PM_FROM_FILE = 376, + TOK_OPERATOR_PM = 377, + TOK_OPERATOR_RBL = 378, + TOK_OPERATOR_RSUB = 379, + TOK_OPERATOR_RX_CONTENT_ONLY = 380, + TOK_OPERATOR_RX = 381, + TOK_OPERATOR_RX_GLOBAL = 382, + TOK_OPERATOR_STR_EQ = 383, + TOK_OPERATOR_STR_MATCH = 384, + TOK_OPERATOR_UNCONDITIONAL_MATCH = 385, + TOK_OPERATOR_VALIDATE_BYTE_RANGE = 386, + TOK_OPERATOR_VALIDATE_DTD = 387, + TOK_OPERATOR_VALIDATE_HASH = 388, + TOK_OPERATOR_VALIDATE_SCHEMA = 389, + TOK_OPERATOR_VALIDATE_URL_ENCODING = 390, + TOK_OPERATOR_VALIDATE_UTF8_ENCODING = 391, + TOK_OPERATOR_VERIFY_CC = 392, + TOK_OPERATOR_VERIFY_CPF = 393, + TOK_OPERATOR_VERIFY_SSN = 394, + TOK_OPERATOR_VERIFY_SVNR = 395, + TOK_OPERATOR_WITHIN = 396, + TOK_CONFIG_DIR_AUDIT_LOG_FMT = 397, + TOK_JSON = 398, + TOK_NATIVE = 399, + TOK_ACTION_CTL_RULE_ENGINE = 400, + TOK_ACTION_ACCURACY = 401, + TOK_ACTION_ALLOW = 402, + TOK_ACTION_APPEND = 403, + TOK_ACTION_AUDIT_LOG = 404, + TOK_ACTION_BLOCK = 405, + TOK_ACTION_CAPTURE = 406, + TOK_ACTION_CHAIN = 407, + TOK_ACTION_CTL_AUDIT_ENGINE = 408, + TOK_ACTION_CTL_AUDIT_LOG_PARTS = 409, + TOK_ACTION_CTL_BDY_JSON = 410, + TOK_ACTION_CTL_BDY_XML = 411, + TOK_ACTION_CTL_BDY_URLENCODED = 412, + TOK_ACTION_CTL_FORCE_REQ_BODY_VAR = 413, + TOK_ACTION_CTL_REQUEST_BODY_ACCESS = 414, + TOK_ACTION_CTL_RULE_REMOVE_BY_ID = 415, + TOK_ACTION_CTL_RULE_REMOVE_BY_TAG = 416, + TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID = 417, + TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG = 418, + TOK_ACTION_DENY = 419, + TOK_ACTION_DEPRECATE_VAR = 420, + TOK_ACTION_DROP = 421, + TOK_ACTION_EXEC = 422, + TOK_ACTION_EXPIRE_VAR = 423, + TOK_ACTION_ID = 424, + TOK_ACTION_INITCOL = 425, + TOK_ACTION_LOG = 426, + TOK_ACTION_LOG_DATA = 427, + TOK_ACTION_MATURITY = 428, + TOK_ACTION_MSG = 429, + TOK_ACTION_MULTI_MATCH = 430, + TOK_ACTION_NO_AUDIT_LOG = 431, + TOK_ACTION_NO_LOG = 432, + TOK_ACTION_PASS = 433, + TOK_ACTION_PAUSE = 434, + TOK_ACTION_PHASE = 435, + TOK_ACTION_PREPEND = 436, + TOK_ACTION_PROXY = 437, + TOK_ACTION_REDIRECT = 438, + TOK_ACTION_REV = 439, + TOK_ACTION_SANITISE_ARG = 440, + TOK_ACTION_SANITISE_MATCHED = 441, + TOK_ACTION_SANITISE_MATCHED_BYTES = 442, + TOK_ACTION_SANITISE_REQUEST_HEADER = 443, + TOK_ACTION_SANITISE_RESPONSE_HEADER = 444, + TOK_ACTION_SETENV = 445, + TOK_ACTION_SETRSC = 446, + TOK_ACTION_SETSID = 447, + TOK_ACTION_SETUID = 448, + TOK_ACTION_SEVERITY = 449, + TOK_ACTION_SKIP = 450, + TOK_ACTION_SKIP_AFTER = 451, + TOK_ACTION_STATUS = 452, + TOK_ACTION_TAG = 453, + TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE = 454, + TOK_ACTION_TRANSFORMATION_BASE_64_DECODE = 455, + TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT = 456, + TOK_ACTION_TRANSFORMATION_CMD_LINE = 457, + TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE = 458, + TOK_ACTION_TRANSFORMATION_CSS_DECODE = 459, + TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE = 460, + TOK_ACTION_TRANSFORMATION_HEX_ENCODE = 461, + TOK_ACTION_TRANSFORMATION_HEX_DECODE = 462, + TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE = 463, + TOK_ACTION_TRANSFORMATION_JS_DECODE = 464, + TOK_ACTION_TRANSFORMATION_LENGTH = 465, + TOK_ACTION_TRANSFORMATION_LOWERCASE = 466, + TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES = 467, + TOK_ACTION_TRANSFORMATION_MD5 = 468, + TOK_ACTION_TRANSFORMATION_NONE = 469, + TOK_ACTION_TRANSFORMATION_NORMALISE_PATH = 470, + TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 471, + TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 472, + TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 473, + TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 474, + TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 475, + TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 476, + TOK_ACTION_TRANSFORMATION_REMOVE_NULLS = 477, + TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 478, + TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 479, + TOK_ACTION_TRANSFORMATION_REPLACE_NULLS = 480, + TOK_ACTION_TRANSFORMATION_SHA1 = 481, + TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 482, + TOK_ACTION_TRANSFORMATION_TRIM = 483, + TOK_ACTION_TRANSFORMATION_TRIM_LEFT = 484, + TOK_ACTION_TRANSFORMATION_TRIM_RIGHT = 485, + TOK_ACTION_TRANSFORMATION_UPPERCASE = 486, + TOK_ACTION_TRANSFORMATION_URL_ENCODE = 487, + TOK_ACTION_TRANSFORMATION_URL_DECODE = 488, + TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI = 489, + TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 490, + TOK_ACTION_VER = 491, + TOK_ACTION_XMLNS = 492, + TOK_CONFIG_COMPONENT_SIG = 493, + TOK_CONFIG_CONN_ENGINE = 494, + TOK_CONFIG_SEC_ARGUMENT_SEPARATOR = 495, + TOK_CONFIG_SEC_WEB_APP_ID = 496, + TOK_CONFIG_SEC_SERVER_SIG = 497, + TOK_CONFIG_DIR_AUDIT_DIR = 498, + TOK_CONFIG_DIR_AUDIT_DIR_MOD = 499, + TOK_CONFIG_DIR_AUDIT_ENG = 500, + TOK_CONFIG_DIR_AUDIT_FLE_MOD = 501, + TOK_CONFIG_DIR_AUDIT_LOG = 502, + TOK_CONFIG_DIR_AUDIT_LOG2 = 503, + TOK_CONFIG_DIR_AUDIT_LOG_P = 504, + TOK_CONFIG_DIR_AUDIT_STS = 505, + TOK_CONFIG_DIR_AUDIT_TPE = 506, + TOK_CONFIG_DIR_DEBUG_LOG = 507, + TOK_CONFIG_DIR_DEBUG_LVL = 508, + TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS = 509, + TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 510, + TOK_CONFIG_SEC_HASH_ENGINE = 511, + TOK_CONFIG_SEC_HASH_KEY = 512, + TOK_CONFIG_SEC_HASH_PARAM = 513, + TOK_CONFIG_SEC_HASH_METHOD_RX = 514, + TOK_CONFIG_SEC_HASH_METHOD_PM = 515, + TOK_CONFIG_SEC_CHROOT_DIR = 516, + TOK_CONFIG_DIR_GEO_DB = 517, + TOK_CONFIG_DIR_GSB_DB = 518, + TOK_CONFIG_SEC_GUARDIAN_LOG = 519, + TOK_CONFIG_DIR_PCRE_MATCH_LIMIT = 520, + TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 521, + TOK_CONFIG_SEC_CONN_R_STATE_LIMIT = 522, + TOK_CONFIG_SEC_CONN_W_STATE_LIMIT = 523, + TOK_CONFIG_SEC_SENSOR_ID = 524, + TOK_CONFIG_DIR_ARGS_LIMIT = 525, + TOK_CONFIG_DIR_REQ_BODY = 526, + TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 527, + TOK_CONFIG_DIR_REQ_BODY_LIMIT = 528, + TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 529, + TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 530, + TOK_CONFIG_DIR_RES_BODY = 531, + TOK_CONFIG_DIR_RES_BODY_LIMIT = 532, + TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 533, + TOK_CONFIG_SEC_RULE_INHERITANCE = 534, + TOK_CONFIG_SEC_RULE_PERF_TIME = 535, + TOK_CONFIG_DIR_RULE_ENG = 536, + TOK_CONFIG_DIR_SEC_ACTION = 537, + TOK_CONFIG_DIR_SEC_DEFAULT_ACTION = 538, + TOK_CONFIG_DIR_SEC_MARKER = 539, + TOK_CONFIG_DIR_UNICODE_MAP_FILE = 540, + TOK_CONFIG_DIR_UNICODE_CODE_PAGE = 541, + TOK_CONFIG_SEC_COLLECTION_TIMEOUT = 542, + TOK_CONFIG_SEC_HTTP_BLKEY = 543, + TOK_CONFIG_SEC_INTERCEPT_ON_ERROR = 544, + TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 545, + TOK_CONFIG_SEC_RULE_REMOVE_BY_ID = 546, + TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG = 547, + TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG = 548, + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 549, + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 550, + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 551, + TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 552, + TOK_CONFIG_UPDLOAD_KEEP_FILES = 553, + TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES = 554, + TOK_CONFIG_UPLOAD_DIR = 555, + TOK_CONFIG_UPLOAD_FILE_LIMIT = 556, + TOK_CONFIG_UPLOAD_FILE_MODE = 557, + TOK_CONFIG_VALUE_ABORT = 558, + TOK_CONFIG_VALUE_DETC = 559, + TOK_CONFIG_VALUE_HTTPS = 560, + TOK_CONFIG_VALUE_OFF = 561, + TOK_CONFIG_VALUE_ON = 562, + TOK_CONFIG_VALUE_PARALLEL = 563, + TOK_CONFIG_VALUE_PROCESS_PARTIAL = 564, + TOK_CONFIG_VALUE_REJECT = 565, + TOK_CONFIG_VALUE_RELEVANT_ONLY = 566, + TOK_CONFIG_VALUE_SERIAL = 567, + TOK_CONFIG_VALUE_WARN = 568, + TOK_CONFIG_XML_EXTERNAL_ENTITY = 569, + TOK_CONGIG_DIR_RESPONSE_BODY_MP = 570, + TOK_CONGIG_DIR_SEC_ARG_SEP = 571, + TOK_CONGIG_DIR_SEC_COOKIE_FORMAT = 572, + TOK_CONFIG_SEC_COOKIEV0_SEPARATOR = 573, + TOK_CONGIG_DIR_SEC_DATA_DIR = 574, + TOK_CONGIG_DIR_SEC_STATUS_ENGINE = 575, + TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 576, + TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 577, + TOK_CONGIG_DIR_SEC_TMP_DIR = 578, + TOK_DIRECTIVE = 579, + TOK_DIRECTIVE_SECRULESCRIPT = 580, + TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION = 581, + TOK_QUOTATION_MARK = 582, + TOK_RUN_TIME_VAR_BLD = 583, + TOK_RUN_TIME_VAR_DUR = 584, + TOK_RUN_TIME_VAR_HSV = 585, + TOK_RUN_TIME_VAR_REMOTE_USER = 586, + TOK_RUN_TIME_VAR_TIME = 587, + TOK_RUN_TIME_VAR_TIME_DAY = 588, + TOK_RUN_TIME_VAR_TIME_EPOCH = 589, + TOK_RUN_TIME_VAR_TIME_HOUR = 590, + TOK_RUN_TIME_VAR_TIME_MIN = 591, + TOK_RUN_TIME_VAR_TIME_MON = 592, + TOK_RUN_TIME_VAR_TIME_SEC = 593, + TOK_RUN_TIME_VAR_TIME_WDAY = 594, + TOK_RUN_TIME_VAR_TIME_YEAR = 595, + TOK_VARIABLE = 596, + TOK_DICT_ELEMENT = 597, + TOK_DICT_ELEMENT_REGEXP = 598 }; - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type yytokentype; }; - /// Token kind, as returned by yylex. - typedef token::yytokentype token_kind_type; - - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type token_type; + /// (External) token type, as returned by yylex. + typedef token::yytokentype token_type; - /// Symbol kinds. - struct symbol_kind - { - enum symbol_kind_type - { - YYNTOKENS = 343, ///< Number of tokens. - S_YYEMPTY = -2, - S_YYEOF = 0, // "end of file" - S_YYerror = 1, // error - S_YYUNDEF = 2, // "invalid token" - S_COMMA = 3, // "," - S_CONFIG_CONTENT_INJECTION = 4, // "CONFIG_CONTENT_INJECTION" - S_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR = 5, // "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" - S_PIPE = 6, // PIPE - S_NEW_LINE = 7, // NEW_LINE - S_VAR_COUNT = 8, // VAR_COUNT - S_VAR_EXCLUSION = 9, // VAR_EXCLUSION - S_VARIABLE_ARGS = 10, // VARIABLE_ARGS - S_VARIABLE_ARGS_POST = 11, // VARIABLE_ARGS_POST - S_VARIABLE_ARGS_GET = 12, // VARIABLE_ARGS_GET - S_VARIABLE_FILES_SIZES = 13, // VARIABLE_FILES_SIZES - S_VARIABLE_FILES_NAMES = 14, // VARIABLE_FILES_NAMES - S_VARIABLE_FILES_TMP_CONTENT = 15, // VARIABLE_FILES_TMP_CONTENT - S_VARIABLE_MULTIPART_FILENAME = 16, // VARIABLE_MULTIPART_FILENAME - S_VARIABLE_MULTIPART_NAME = 17, // VARIABLE_MULTIPART_NAME - S_VARIABLE_MATCHED_VARS_NAMES = 18, // VARIABLE_MATCHED_VARS_NAMES - S_VARIABLE_MATCHED_VARS = 19, // VARIABLE_MATCHED_VARS - S_VARIABLE_FILES = 20, // VARIABLE_FILES - S_VARIABLE_REQUEST_COOKIES = 21, // VARIABLE_REQUEST_COOKIES - S_VARIABLE_REQUEST_HEADERS = 22, // VARIABLE_REQUEST_HEADERS - S_VARIABLE_RESPONSE_HEADERS = 23, // VARIABLE_RESPONSE_HEADERS - S_VARIABLE_GEO = 24, // VARIABLE_GEO - S_VARIABLE_REQUEST_COOKIES_NAMES = 25, // VARIABLE_REQUEST_COOKIES_NAMES - S_VARIABLE_ARGS_COMBINED_SIZE = 26, // VARIABLE_ARGS_COMBINED_SIZE - S_VARIABLE_ARGS_GET_NAMES = 27, // VARIABLE_ARGS_GET_NAMES - S_VARIABLE_RULE = 28, // VARIABLE_RULE - S_VARIABLE_ARGS_NAMES = 29, // "Variable ARGS_NAMES" - S_VARIABLE_ARGS_POST_NAMES = 30, // VARIABLE_ARGS_POST_NAMES - S_VARIABLE_AUTH_TYPE = 31, // "AUTH_TYPE" - S_VARIABLE_FILES_COMBINED_SIZE = 32, // "FILES_COMBINED_SIZE" - S_VARIABLE_FILES_TMP_NAMES = 33, // "FILES_TMPNAMES" - S_VARIABLE_FULL_REQUEST = 34, // "FULL_REQUEST" - S_VARIABLE_FULL_REQUEST_LENGTH = 35, // "FULL_REQUEST_LENGTH" - S_VARIABLE_INBOUND_DATA_ERROR = 36, // "INBOUND_DATA_ERROR" - S_VARIABLE_MATCHED_VAR = 37, // "MATCHED_VAR" - S_VARIABLE_MATCHED_VAR_NAME = 38, // "MATCHED_VAR_NAME" - S_VARIABLE_MULTIPART_BOUNDARY_QUOTED = 39, // VARIABLE_MULTIPART_BOUNDARY_QUOTED - S_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE = 40, // VARIABLE_MULTIPART_BOUNDARY_WHITESPACE - S_VARIABLE_MULTIPART_CRLF_LF_LINES = 41, // "MULTIPART_CRLF_LF_LINES" - S_VARIABLE_MULTIPART_DATA_AFTER = 42, // "MULTIPART_DATA_AFTER" - S_VARIABLE_MULTIPART_DATA_BEFORE = 43, // VARIABLE_MULTIPART_DATA_BEFORE - S_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED = 44, // "MULTIPART_FILE_LIMIT_EXCEEDED" - S_VARIABLE_MULTIPART_HEADER_FOLDING = 45, // "MULTIPART_HEADER_FOLDING" - S_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING = 46, // "MULTIPART_INVALID_HEADER_FOLDING" - S_VARIABLE_MULTIPART_INVALID_PART = 47, // VARIABLE_MULTIPART_INVALID_PART - S_VARIABLE_MULTIPART_INVALID_QUOTING = 48, // "MULTIPART_INVALID_QUOTING" - S_VARIABLE_MULTIPART_LF_LINE = 49, // VARIABLE_MULTIPART_LF_LINE - S_VARIABLE_MULTIPART_MISSING_SEMICOLON = 50, // VARIABLE_MULTIPART_MISSING_SEMICOLON - S_VARIABLE_MULTIPART_SEMICOLON_MISSING = 51, // VARIABLE_MULTIPART_SEMICOLON_MISSING - S_VARIABLE_MULTIPART_STRICT_ERROR = 52, // "MULTIPART_STRICT_ERROR" - S_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY = 53, // "MULTIPART_UNMATCHED_BOUNDARY" - S_VARIABLE_OUTBOUND_DATA_ERROR = 54, // "OUTBOUND_DATA_ERROR" - S_VARIABLE_PATH_INFO = 55, // "PATH_INFO" - S_VARIABLE_QUERY_STRING = 56, // "QUERY_STRING" - S_VARIABLE_REMOTE_ADDR = 57, // "REMOTE_ADDR" - S_VARIABLE_REMOTE_HOST = 58, // "REMOTE_HOST" - S_VARIABLE_REMOTE_PORT = 59, // "REMOTE_PORT" - S_VARIABLE_REQBODY_ERROR_MSG = 60, // "REQBODY_ERROR_MSG" - S_VARIABLE_REQBODY_ERROR = 61, // "REQBODY_ERROR" - S_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG = 62, // "REQBODY_PROCESSOR_ERROR_MSG" - S_VARIABLE_REQBODY_PROCESSOR_ERROR = 63, // "REQBODY_PROCESSOR_ERROR" - S_VARIABLE_REQBODY_PROCESSOR = 64, // "REQBODY_PROCESSOR" - S_VARIABLE_REQUEST_BASENAME = 65, // "REQUEST_BASENAME" - S_VARIABLE_REQUEST_BODY_LENGTH = 66, // "REQUEST_BODY_LENGTH" - S_VARIABLE_REQUEST_BODY = 67, // "REQUEST_BODY" - S_VARIABLE_REQUEST_FILE_NAME = 68, // "REQUEST_FILENAME" - S_VARIABLE_REQUEST_HEADERS_NAMES = 69, // VARIABLE_REQUEST_HEADERS_NAMES - S_VARIABLE_REQUEST_LINE = 70, // "REQUEST_LINE" - S_VARIABLE_REQUEST_METHOD = 71, // "REQUEST_METHOD" - S_VARIABLE_REQUEST_PROTOCOL = 72, // "REQUEST_PROTOCOL" - S_VARIABLE_REQUEST_URI_RAW = 73, // "REQUEST_URI_RAW" - S_VARIABLE_REQUEST_URI = 74, // "REQUEST_URI" - S_VARIABLE_RESOURCE = 75, // "RESOURCE" - S_VARIABLE_RESPONSE_BODY = 76, // "RESPONSE_BODY" - S_VARIABLE_RESPONSE_CONTENT_LENGTH = 77, // "RESPONSE_CONTENT_LENGTH" - S_VARIABLE_RESPONSE_CONTENT_TYPE = 78, // VARIABLE_RESPONSE_CONTENT_TYPE - S_VARIABLE_RESPONSE_HEADERS_NAMES = 79, // VARIABLE_RESPONSE_HEADERS_NAMES - S_VARIABLE_RESPONSE_PROTOCOL = 80, // "RESPONSE_PROTOCOL" - S_VARIABLE_RESPONSE_STATUS = 81, // "RESPONSE_STATUS" - S_VARIABLE_SERVER_ADDR = 82, // "SERVER_ADDR" - S_VARIABLE_SERVER_NAME = 83, // "SERVER_NAME" - S_VARIABLE_SERVER_PORT = 84, // "SERVER_PORT" - S_VARIABLE_SESSION_ID = 85, // "SESSIONID" - S_VARIABLE_UNIQUE_ID = 86, // "UNIQUE_ID" - S_VARIABLE_URL_ENCODED_ERROR = 87, // "URLENCODED_ERROR" - S_VARIABLE_USER_ID = 88, // "USERID" - S_VARIABLE_WEB_APP_ID = 89, // "WEBAPPID" - S_VARIABLE_STATUS = 90, // "VARIABLE_STATUS" - S_VARIABLE_STATUS_LINE = 91, // "VARIABLE_STATUS_LINE" - S_VARIABLE_IP = 92, // "VARIABLE_IP" - S_VARIABLE_GLOBAL = 93, // "VARIABLE_GLOBAL" - S_VARIABLE_TX = 94, // "VARIABLE_TX" - S_VARIABLE_SESSION = 95, // "VARIABLE_SESSION" - S_VARIABLE_USER = 96, // "VARIABLE_USER" - S_RUN_TIME_VAR_ENV = 97, // "RUN_TIME_VAR_ENV" - S_RUN_TIME_VAR_XML = 98, // "RUN_TIME_VAR_XML" - S_ACTION_SETVAR = 99, // "SetVar" - S_SETVAR_OPERATION_EQUALS = 100, // SETVAR_OPERATION_EQUALS - S_SETVAR_OPERATION_EQUALS_PLUS = 101, // SETVAR_OPERATION_EQUALS_PLUS - S_SETVAR_OPERATION_EQUALS_MINUS = 102, // SETVAR_OPERATION_EQUALS_MINUS - S_NOT = 103, // "NOT" - S_OPERATOR_BEGINS_WITH = 104, // "OPERATOR_BEGINS_WITH" - S_OPERATOR_CONTAINS = 105, // "OPERATOR_CONTAINS" - S_OPERATOR_CONTAINS_WORD = 106, // "OPERATOR_CONTAINS_WORD" - S_OPERATOR_DETECT_SQLI = 107, // "OPERATOR_DETECT_SQLI" - S_OPERATOR_DETECT_XSS = 108, // "OPERATOR_DETECT_XSS" - S_OPERATOR_ENDS_WITH = 109, // "OPERATOR_ENDS_WITH" - S_OPERATOR_EQ = 110, // "OPERATOR_EQ" - S_OPERATOR_FUZZY_HASH = 111, // "OPERATOR_FUZZY_HASH" - S_OPERATOR_GEOLOOKUP = 112, // "OPERATOR_GEOLOOKUP" - S_OPERATOR_GE = 113, // "OPERATOR_GE" - S_OPERATOR_GSB_LOOKUP = 114, // "OPERATOR_GSB_LOOKUP" - S_OPERATOR_GT = 115, // "OPERATOR_GT" - S_OPERATOR_INSPECT_FILE = 116, // "OPERATOR_INSPECT_FILE" - S_OPERATOR_IP_MATCH_FROM_FILE = 117, // "OPERATOR_IP_MATCH_FROM_FILE" - S_OPERATOR_IP_MATCH = 118, // "OPERATOR_IP_MATCH" - S_OPERATOR_LE = 119, // "OPERATOR_LE" - S_OPERATOR_LT = 120, // "OPERATOR_LT" - S_OPERATOR_PM_FROM_FILE = 121, // "OPERATOR_PM_FROM_FILE" - S_OPERATOR_PM = 122, // "OPERATOR_PM" - S_OPERATOR_RBL = 123, // "OPERATOR_RBL" - S_OPERATOR_RSUB = 124, // "OPERATOR_RSUB" - S_OPERATOR_RX_CONTENT_ONLY = 125, // "Operator RX (content only)" - S_OPERATOR_RX = 126, // "OPERATOR_RX" - S_OPERATOR_RX_GLOBAL = 127, // "OPERATOR_RX_GLOBAL" - S_OPERATOR_STR_EQ = 128, // "OPERATOR_STR_EQ" - S_OPERATOR_STR_MATCH = 129, // "OPERATOR_STR_MATCH" - S_OPERATOR_UNCONDITIONAL_MATCH = 130, // "OPERATOR_UNCONDITIONAL_MATCH" - S_OPERATOR_VALIDATE_BYTE_RANGE = 131, // "OPERATOR_VALIDATE_BYTE_RANGE" - S_OPERATOR_VALIDATE_DTD = 132, // "OPERATOR_VALIDATE_DTD" - S_OPERATOR_VALIDATE_HASH = 133, // "OPERATOR_VALIDATE_HASH" - S_OPERATOR_VALIDATE_SCHEMA = 134, // "OPERATOR_VALIDATE_SCHEMA" - S_OPERATOR_VALIDATE_URL_ENCODING = 135, // "OPERATOR_VALIDATE_URL_ENCODING" - S_OPERATOR_VALIDATE_UTF8_ENCODING = 136, // "OPERATOR_VALIDATE_UTF8_ENCODING" - S_OPERATOR_VERIFY_CC = 137, // "OPERATOR_VERIFY_CC" - S_OPERATOR_VERIFY_CPF = 138, // "OPERATOR_VERIFY_CPF" - S_OPERATOR_VERIFY_SSN = 139, // "OPERATOR_VERIFY_SSN" - S_OPERATOR_VERIFY_SVNR = 140, // "OPERATOR_VERIFY_SVNR" - S_OPERATOR_WITHIN = 141, // "OPERATOR_WITHIN" - S_CONFIG_DIR_AUDIT_LOG_FMT = 142, // CONFIG_DIR_AUDIT_LOG_FMT - S_JSON = 143, // JSON - S_NATIVE = 144, // NATIVE - S_ACTION_CTL_RULE_ENGINE = 145, // "ACTION_CTL_RULE_ENGINE" - S_ACTION_ACCURACY = 146, // "Accuracy" - S_ACTION_ALLOW = 147, // "Allow" - S_ACTION_APPEND = 148, // "Append" - S_ACTION_AUDIT_LOG = 149, // "AuditLog" - S_ACTION_BLOCK = 150, // "Block" - S_ACTION_CAPTURE = 151, // "Capture" - S_ACTION_CHAIN = 152, // "Chain" - S_ACTION_CTL_AUDIT_ENGINE = 153, // "ACTION_CTL_AUDIT_ENGINE" - S_ACTION_CTL_AUDIT_LOG_PARTS = 154, // "ACTION_CTL_AUDIT_LOG_PARTS" - S_ACTION_CTL_BDY_JSON = 155, // "ACTION_CTL_BDY_JSON" - S_ACTION_CTL_BDY_XML = 156, // "ACTION_CTL_BDY_XML" - S_ACTION_CTL_BDY_URLENCODED = 157, // "ACTION_CTL_BDY_URLENCODED" - S_ACTION_CTL_FORCE_REQ_BODY_VAR = 158, // "ACTION_CTL_FORCE_REQ_BODY_VAR" - S_ACTION_CTL_REQUEST_BODY_ACCESS = 159, // "ACTION_CTL_REQUEST_BODY_ACCESS" - S_ACTION_CTL_RULE_REMOVE_BY_ID = 160, // "ACTION_CTL_RULE_REMOVE_BY_ID" - S_ACTION_CTL_RULE_REMOVE_BY_TAG = 161, // "ACTION_CTL_RULE_REMOVE_BY_TAG" - S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID = 162, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG = 163, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - S_ACTION_DENY = 164, // "Deny" - S_ACTION_DEPRECATE_VAR = 165, // "DeprecateVar" - S_ACTION_DROP = 166, // "Drop" - S_ACTION_EXEC = 167, // "Exec" - S_ACTION_EXPIRE_VAR = 168, // "ExpireVar" - S_ACTION_ID = 169, // "Id" - S_ACTION_INITCOL = 170, // "InitCol" - S_ACTION_LOG = 171, // "Log" - S_ACTION_LOG_DATA = 172, // "LogData" - S_ACTION_MATURITY = 173, // "Maturity" - S_ACTION_MSG = 174, // "Msg" - S_ACTION_MULTI_MATCH = 175, // "MultiMatch" - S_ACTION_NO_AUDIT_LOG = 176, // "NoAuditLog" - S_ACTION_NO_LOG = 177, // "NoLog" - S_ACTION_PASS = 178, // "Pass" - S_ACTION_PAUSE = 179, // "Pause" - S_ACTION_PHASE = 180, // "Phase" - S_ACTION_PREPEND = 181, // "Prepend" - S_ACTION_PROXY = 182, // "Proxy" - S_ACTION_REDIRECT = 183, // "Redirect" - S_ACTION_REV = 184, // "Rev" - S_ACTION_SANITISE_ARG = 185, // "SanitiseArg" - S_ACTION_SANITISE_MATCHED = 186, // "SanitiseMatched" - S_ACTION_SANITISE_MATCHED_BYTES = 187, // "SanitiseMatchedBytes" - S_ACTION_SANITISE_REQUEST_HEADER = 188, // "SanitiseRequestHeader" - S_ACTION_SANITISE_RESPONSE_HEADER = 189, // "SanitiseResponseHeader" - S_ACTION_SETENV = 190, // "SetEnv" - S_ACTION_SETRSC = 191, // "SetRsc" - S_ACTION_SETSID = 192, // "SetSid" - S_ACTION_SETUID = 193, // "SetUID" - S_ACTION_SEVERITY = 194, // "Severity" - S_ACTION_SKIP = 195, // "Skip" - S_ACTION_SKIP_AFTER = 196, // "SkipAfter" - S_ACTION_STATUS = 197, // "Status" - S_ACTION_TAG = 198, // "Tag" - S_ACTION_TRANSFORMATION_BASE_64_ENCODE = 199, // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - S_ACTION_TRANSFORMATION_BASE_64_DECODE = 200, // "ACTION_TRANSFORMATION_BASE_64_DECODE" - S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT = 201, // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - S_ACTION_TRANSFORMATION_CMD_LINE = 202, // "ACTION_TRANSFORMATION_CMD_LINE" - S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE = 203, // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - S_ACTION_TRANSFORMATION_CSS_DECODE = 204, // "ACTION_TRANSFORMATION_CSS_DECODE" - S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE = 205, // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - S_ACTION_TRANSFORMATION_HEX_ENCODE = 206, // "ACTION_TRANSFORMATION_HEX_ENCODE" - S_ACTION_TRANSFORMATION_HEX_DECODE = 207, // "ACTION_TRANSFORMATION_HEX_DECODE" - S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE = 208, // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - S_ACTION_TRANSFORMATION_JS_DECODE = 209, // "ACTION_TRANSFORMATION_JS_DECODE" - S_ACTION_TRANSFORMATION_LENGTH = 210, // "ACTION_TRANSFORMATION_LENGTH" - S_ACTION_TRANSFORMATION_LOWERCASE = 211, // "ACTION_TRANSFORMATION_LOWERCASE" - S_ACTION_TRANSFORMATION_MD5 = 212, // "ACTION_TRANSFORMATION_MD5" - S_ACTION_TRANSFORMATION_NONE = 213, // "ACTION_TRANSFORMATION_NONE" - S_ACTION_TRANSFORMATION_NORMALISE_PATH = 214, // "ACTION_TRANSFORMATION_NORMALISE_PATH" - S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 215, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 216, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 217, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 218, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - S_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 219, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 220, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - S_ACTION_TRANSFORMATION_REMOVE_NULLS = 221, // "ACTION_TRANSFORMATION_REMOVE_NULLS" - S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 222, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - S_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 223, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - S_ACTION_TRANSFORMATION_REPLACE_NULLS = 224, // "ACTION_TRANSFORMATION_REPLACE_NULLS" - S_ACTION_TRANSFORMATION_SHA1 = 225, // "ACTION_TRANSFORMATION_SHA1" - S_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 226, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - S_ACTION_TRANSFORMATION_TRIM = 227, // "ACTION_TRANSFORMATION_TRIM" - S_ACTION_TRANSFORMATION_TRIM_LEFT = 228, // "ACTION_TRANSFORMATION_TRIM_LEFT" - S_ACTION_TRANSFORMATION_TRIM_RIGHT = 229, // "ACTION_TRANSFORMATION_TRIM_RIGHT" - S_ACTION_TRANSFORMATION_UPPERCASE = 230, // "ACTION_TRANSFORMATION_UPPERCASE" - S_ACTION_TRANSFORMATION_URL_ENCODE = 231, // "ACTION_TRANSFORMATION_URL_ENCODE" - S_ACTION_TRANSFORMATION_URL_DECODE = 232, // "ACTION_TRANSFORMATION_URL_DECODE" - S_ACTION_TRANSFORMATION_URL_DECODE_UNI = 233, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 234, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - S_ACTION_VER = 235, // "Ver" - S_ACTION_XMLNS = 236, // "xmlns" - S_CONFIG_COMPONENT_SIG = 237, // "CONFIG_COMPONENT_SIG" - S_CONFIG_CONN_ENGINE = 238, // "CONFIG_CONN_ENGINE" - S_CONFIG_SEC_ARGUMENT_SEPARATOR = 239, // "CONFIG_SEC_ARGUMENT_SEPARATOR" - S_CONFIG_SEC_WEB_APP_ID = 240, // "CONFIG_SEC_WEB_APP_ID" - S_CONFIG_SEC_SERVER_SIG = 241, // "CONFIG_SEC_SERVER_SIG" - S_CONFIG_DIR_AUDIT_DIR = 242, // "CONFIG_DIR_AUDIT_DIR" - S_CONFIG_DIR_AUDIT_DIR_MOD = 243, // "CONFIG_DIR_AUDIT_DIR_MOD" - S_CONFIG_DIR_AUDIT_ENG = 244, // "CONFIG_DIR_AUDIT_ENG" - S_CONFIG_DIR_AUDIT_FLE_MOD = 245, // "CONFIG_DIR_AUDIT_FLE_MOD" - S_CONFIG_DIR_AUDIT_LOG = 246, // "CONFIG_DIR_AUDIT_LOG" - S_CONFIG_DIR_AUDIT_LOG2 = 247, // "CONFIG_DIR_AUDIT_LOG2" - S_CONFIG_DIR_AUDIT_LOG_P = 248, // "CONFIG_DIR_AUDIT_LOG_P" - S_CONFIG_DIR_AUDIT_STS = 249, // "CONFIG_DIR_AUDIT_STS" - S_CONFIG_DIR_AUDIT_TPE = 250, // "CONFIG_DIR_AUDIT_TPE" - S_CONFIG_DIR_DEBUG_LOG = 251, // "CONFIG_DIR_DEBUG_LOG" - S_CONFIG_DIR_DEBUG_LVL = 252, // "CONFIG_DIR_DEBUG_LVL" - S_CONFIG_SEC_CACHE_TRANSFORMATIONS = 253, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 254, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - S_CONFIG_SEC_HASH_ENGINE = 255, // "CONFIG_SEC_HASH_ENGINE" - S_CONFIG_SEC_HASH_KEY = 256, // "CONFIG_SEC_HASH_KEY" - S_CONFIG_SEC_HASH_PARAM = 257, // "CONFIG_SEC_HASH_PARAM" - S_CONFIG_SEC_HASH_METHOD_RX = 258, // "CONFIG_SEC_HASH_METHOD_RX" - S_CONFIG_SEC_HASH_METHOD_PM = 259, // "CONFIG_SEC_HASH_METHOD_PM" - S_CONFIG_SEC_CHROOT_DIR = 260, // "CONFIG_SEC_CHROOT_DIR" - S_CONFIG_DIR_GEO_DB = 261, // "CONFIG_DIR_GEO_DB" - S_CONFIG_DIR_GSB_DB = 262, // "CONFIG_DIR_GSB_DB" - S_CONFIG_SEC_GUARDIAN_LOG = 263, // "CONFIG_SEC_GUARDIAN_LOG" - S_CONFIG_DIR_PCRE_MATCH_LIMIT = 264, // "CONFIG_DIR_PCRE_MATCH_LIMIT" - S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 265, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - S_CONFIG_SEC_CONN_R_STATE_LIMIT = 266, // "CONFIG_SEC_CONN_R_STATE_LIMIT" - S_CONFIG_SEC_CONN_W_STATE_LIMIT = 267, // "CONFIG_SEC_CONN_W_STATE_LIMIT" - S_CONFIG_SEC_SENSOR_ID = 268, // "CONFIG_SEC_SENSOR_ID" - S_CONFIG_DIR_ARGS_LIMIT = 269, // "CONFIG_DIR_ARGS_LIMIT" - S_CONFIG_DIR_REQ_BODY = 270, // "CONFIG_DIR_REQ_BODY" - S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 271, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - S_CONFIG_DIR_REQ_BODY_LIMIT = 272, // "CONFIG_DIR_REQ_BODY_LIMIT" - S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 273, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 274, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - S_CONFIG_DIR_RES_BODY = 275, // "CONFIG_DIR_RES_BODY" - S_CONFIG_DIR_RES_BODY_LIMIT = 276, // "CONFIG_DIR_RES_BODY_LIMIT" - S_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 277, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - S_CONFIG_SEC_RULE_INHERITANCE = 278, // "CONFIG_SEC_RULE_INHERITANCE" - S_CONFIG_SEC_RULE_PERF_TIME = 279, // "CONFIG_SEC_RULE_PERF_TIME" - S_CONFIG_DIR_RULE_ENG = 280, // "CONFIG_DIR_RULE_ENG" - S_CONFIG_DIR_SEC_ACTION = 281, // "CONFIG_DIR_SEC_ACTION" - S_CONFIG_DIR_SEC_DEFAULT_ACTION = 282, // "CONFIG_DIR_SEC_DEFAULT_ACTION" - S_CONFIG_DIR_SEC_MARKER = 283, // "CONFIG_DIR_SEC_MARKER" - S_CONFIG_DIR_UNICODE_MAP_FILE = 284, // "CONFIG_DIR_UNICODE_MAP_FILE" - S_CONFIG_DIR_UNICODE_CODE_PAGE = 285, // "CONFIG_DIR_UNICODE_CODE_PAGE" - S_CONFIG_SEC_COLLECTION_TIMEOUT = 286, // "CONFIG_SEC_COLLECTION_TIMEOUT" - S_CONFIG_SEC_HTTP_BLKEY = 287, // "CONFIG_SEC_HTTP_BLKEY" - S_CONFIG_SEC_INTERCEPT_ON_ERROR = 288, // "CONFIG_SEC_INTERCEPT_ON_ERROR" - S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 289, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - S_CONFIG_SEC_RULE_REMOVE_BY_ID = 290, // "CONFIG_SEC_RULE_REMOVE_BY_ID" - S_CONFIG_SEC_RULE_REMOVE_BY_MSG = 291, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - S_CONFIG_SEC_RULE_REMOVE_BY_TAG = 292, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 293, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 294, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 295, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 296, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - S_CONFIG_UPDLOAD_KEEP_FILES = 297, // "CONFIG_UPDLOAD_KEEP_FILES" - S_CONFIG_UPDLOAD_SAVE_TMP_FILES = 298, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - S_CONFIG_UPLOAD_DIR = 299, // "CONFIG_UPLOAD_DIR" - S_CONFIG_UPLOAD_FILE_LIMIT = 300, // "CONFIG_UPLOAD_FILE_LIMIT" - S_CONFIG_UPLOAD_FILE_MODE = 301, // "CONFIG_UPLOAD_FILE_MODE" - S_CONFIG_VALUE_ABORT = 302, // "CONFIG_VALUE_ABORT" - S_CONFIG_VALUE_DETC = 303, // "CONFIG_VALUE_DETC" - S_CONFIG_VALUE_HTTPS = 304, // "CONFIG_VALUE_HTTPS" - S_CONFIG_VALUE_OFF = 305, // "CONFIG_VALUE_OFF" - S_CONFIG_VALUE_ON = 306, // "CONFIG_VALUE_ON" - S_CONFIG_VALUE_PARALLEL = 307, // "CONFIG_VALUE_PARALLEL" - S_CONFIG_VALUE_PROCESS_PARTIAL = 308, // "CONFIG_VALUE_PROCESS_PARTIAL" - S_CONFIG_VALUE_REJECT = 309, // "CONFIG_VALUE_REJECT" - S_CONFIG_VALUE_RELEVANT_ONLY = 310, // "CONFIG_VALUE_RELEVANT_ONLY" - S_CONFIG_VALUE_SERIAL = 311, // "CONFIG_VALUE_SERIAL" - S_CONFIG_VALUE_WARN = 312, // "CONFIG_VALUE_WARN" - S_CONFIG_XML_EXTERNAL_ENTITY = 313, // "CONFIG_XML_EXTERNAL_ENTITY" - S_CONGIG_DIR_RESPONSE_BODY_MP = 314, // "CONGIG_DIR_RESPONSE_BODY_MP" - S_CONGIG_DIR_SEC_ARG_SEP = 315, // "CONGIG_DIR_SEC_ARG_SEP" - S_CONGIG_DIR_SEC_COOKIE_FORMAT = 316, // "CONGIG_DIR_SEC_COOKIE_FORMAT" - S_CONFIG_SEC_COOKIEV0_SEPARATOR = 317, // "CONFIG_SEC_COOKIEV0_SEPARATOR" - S_CONGIG_DIR_SEC_DATA_DIR = 318, // "CONGIG_DIR_SEC_DATA_DIR" - S_CONGIG_DIR_SEC_STATUS_ENGINE = 319, // "CONGIG_DIR_SEC_STATUS_ENGINE" - S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 320, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 321, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - S_CONGIG_DIR_SEC_TMP_DIR = 322, // "CONGIG_DIR_SEC_TMP_DIR" - S_DIRECTIVE = 323, // "DIRECTIVE" - S_DIRECTIVE_SECRULESCRIPT = 324, // "DIRECTIVE_SECRULESCRIPT" - S_FREE_TEXT_QUOTE_MACRO_EXPANSION = 325, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - S_QUOTATION_MARK = 326, // "QUOTATION_MARK" - S_RUN_TIME_VAR_BLD = 327, // "RUN_TIME_VAR_BLD" - S_RUN_TIME_VAR_DUR = 328, // "RUN_TIME_VAR_DUR" - S_RUN_TIME_VAR_HSV = 329, // "RUN_TIME_VAR_HSV" - S_RUN_TIME_VAR_REMOTE_USER = 330, // "RUN_TIME_VAR_REMOTE_USER" - S_RUN_TIME_VAR_TIME = 331, // "RUN_TIME_VAR_TIME" - S_RUN_TIME_VAR_TIME_DAY = 332, // "RUN_TIME_VAR_TIME_DAY" - S_RUN_TIME_VAR_TIME_EPOCH = 333, // "RUN_TIME_VAR_TIME_EPOCH" - S_RUN_TIME_VAR_TIME_HOUR = 334, // "RUN_TIME_VAR_TIME_HOUR" - S_RUN_TIME_VAR_TIME_MIN = 335, // "RUN_TIME_VAR_TIME_MIN" - S_RUN_TIME_VAR_TIME_MON = 336, // "RUN_TIME_VAR_TIME_MON" - S_RUN_TIME_VAR_TIME_SEC = 337, // "RUN_TIME_VAR_TIME_SEC" - S_RUN_TIME_VAR_TIME_WDAY = 338, // "RUN_TIME_VAR_TIME_WDAY" - S_RUN_TIME_VAR_TIME_YEAR = 339, // "RUN_TIME_VAR_TIME_YEAR" - S_VARIABLE = 340, // "VARIABLE" - S_DICT_ELEMENT = 341, // "Dictionary element" - S_DICT_ELEMENT_REGEXP = 342, // "Dictionary element, selected by regexp" - S_YYACCEPT = 343, // $accept - S_input = 344, // input - S_line = 345, // line - S_audit_log = 346, // audit_log - S_actions = 347, // actions - S_actions_may_quoted = 348, // actions_may_quoted - S_op = 349, // op - S_op_before_init = 350, // op_before_init - S_expression = 351, // expression - S_variables = 352, // variables - S_variables_pre_process = 353, // variables_pre_process - S_variables_may_be_quoted = 354, // variables_may_be_quoted - S_var = 355, // var - S_act = 356, // act - S_setvar_action = 357, // setvar_action - S_run_time_string = 358 // run_time_string - }; - }; + /// Symbol type: an internal symbol number. + typedef int symbol_number_type; - /// (Internal) symbol kind. - typedef symbol_kind::symbol_kind_type symbol_kind_type; + /// The symbol type number to denote an empty symbol. + enum { empty_symbol = -2 }; - /// The number of tokens. - static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; + /// Internal symbol number for tokens (subsumed by symbol_number_type). + typedef short token_number_type; /// A complete symbol. /// - /// Expects its Base type to provide access to the symbol kind - /// via kind (). + /// Expects its Base type to provide access to the symbol type + /// via type_get (). /// /// Provide access to semantic value and location. template @@ -1716,247 +1336,7 @@ namespace yy { #if 201103L <= YY_CPLUSPLUS /// Move constructor. - basic_symbol (basic_symbol&& that) - : Base (std::move (that)) - , value () - , location (std::move (that.location)) - { - switch (this->kind ()) - { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" - value.move< std::string > (std::move (that.value)); - break; - - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_run_time_string: // run_time_string - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_var: // var - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted - value.move< std::unique_ptr > > > (std::move (that.value)); - break; - - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted - value.move< std::unique_ptr > > > (std::move (that.value)); - break; - - default: - break; - } - - } + basic_symbol (basic_symbol&& that); #endif /// Copy constructor. @@ -2076,244 +1456,245 @@ namespace yy { void clear () { // User destructor. - symbol_kind_type yykind = this->kind (); + symbol_number_type yytype = this->type_get (); basic_symbol& yysym = *this; (void) yysym; - switch (yykind) + switch (yytype) { default: break; } - // Value type destructor. -switch (yykind) + // Type destructor. +switch (yytype) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.template destroy< std::string > (); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_var: // var + case 356: // var value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.template destroy< std::unique_ptr > > > (); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.template destroy< std::unique_ptr > > > (); break; @@ -2324,15 +1705,6 @@ switch (yykind) Base::clear (); } - /// The user-facing name of this symbol. - std::string name () const YY_NOEXCEPT - { - return seclang_parser::symbol_name (this->kind ()); - } - - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - /// Whether empty. bool empty () const YY_NOEXCEPT; @@ -2353,51 +1725,46 @@ switch (yykind) }; /// Type access provider for token (enum) based symbols. - struct by_kind + struct by_type { /// Default constructor. - by_kind (); + by_type (); #if 201103L <= YY_CPLUSPLUS /// Move constructor. - by_kind (by_kind&& that); + by_type (by_type&& that); #endif /// Copy constructor. - by_kind (const by_kind& that); + by_type (const by_type& that); - /// The symbol kind as needed by the constructor. - typedef token_kind_type kind_type; + /// The symbol type as needed by the constructor. + typedef token_type kind_type; /// Constructor from (external) token numbers. - by_kind (kind_type t); + by_type (kind_type t); /// Record that this symbol is empty. void clear (); - /// Steal the symbol kind from \a that. - void move (by_kind& that); + /// Steal the symbol type from \a that. + void move (by_type& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + symbol_number_type type_get () const YY_NOEXCEPT; - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - - /// The symbol kind. - /// \a S_YYEMPTY when empty. - symbol_kind_type kind_; + /// The symbol type. + /// \a empty_symbol when empty. + /// An int, not token_number_type, to be able to store empty_symbol. + int type; }; - /// Backward compatibility for a private implementation detail (Bison 3.6). - typedef by_kind by_type; - /// "External" symbols: returned by the scanner. - struct symbol_type : basic_symbol + struct symbol_type : basic_symbol { /// Superclass. - typedef basic_symbol super_type; + typedef basic_symbol super_type; /// Empty symbol. symbol_type () {} @@ -2407,26 +1774,26 @@ switch (yykind) symbol_type (int tok, location_type l) : super_type(token_type (tok), std::move (l)) { - YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); + YY_ASSERT (tok == token::TOK_END || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); } #else symbol_type (int tok, const location_type& l) : super_type(token_type (tok), l) { - YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); + YY_ASSERT (tok == token::TOK_END || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); } #endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, std::string v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { - YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); + YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); } #else symbol_type (int tok, const std::string& v, const location_type& l) : super_type(token_type (tok), v, l) { - YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); + YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); } #endif }; @@ -2435,13 +1802,6 @@ switch (yykind) seclang_parser (modsecurity::Parser::Driver& driver_yyarg); virtual ~seclang_parser (); -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - seclang_parser (const seclang_parser&) = delete; - /// Non copyable. - seclang_parser& operator= (const seclang_parser&) = delete; -#endif - /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); @@ -2472,10 +1832,6 @@ switch (yykind) /// Report a syntax error. void error (const syntax_error& err); - /// The user-facing name of the symbol whose (internal) number is - /// YYSYMBOL. No bounds checking. - static std::string symbol_name (symbol_kind_type yysymbol); - // Implementation of make_symbol for each symbol type. #if 201103L <= YY_CPLUSPLUS static @@ -2492,36 +1848,6 @@ switch (yykind) return symbol_type (token::TOK_END, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_YYerror (location_type l) - { - return symbol_type (token::TOK_YYerror, std::move (l)); - } -#else - static - symbol_type - make_YYerror (const location_type& l) - { - return symbol_type (token::TOK_YYerror, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_YYUNDEF (location_type l) - { - return symbol_type (token::TOK_YYUNDEF, std::move (l)); - } -#else - static - symbol_type - make_YYUNDEF (const location_type& l) - { - return symbol_type (token::TOK_YYUNDEF, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -5657,6 +4983,21 @@ switch (yykind) return symbol_type (token::TOK_ACTION_TRANSFORMATION_LOWERCASE, v, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES (std::string v, location_type l) + { + return symbol_type (token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES (const std::string& v, const location_type& l) + { + return symbol_type (token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -7624,43 +6965,20 @@ switch (yykind) #endif - class context - { - public: - context (const seclang_parser& yyparser, const symbol_type& yyla); - const symbol_type& lookahead () const { return yyla_; } - symbol_kind_type token () const { return yyla_.kind (); } - const location_type& location () const { return yyla_.location; } - - /// Put in YYARG at most YYARGN of the expected tokens, and return the - /// number of tokens stored in YYARG. If YYARG is null, return the - /// number of expected tokens (guaranteed to be less than YYNTOKENS). - int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; - - private: - const seclang_parser& yyparser_; - const symbol_type& yyla_; - }; - private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. + /// This class is not copyable. seclang_parser (const seclang_parser&); - /// Non copyable. seclang_parser& operator= (const seclang_parser&); -#endif - /// Stored state numbers (used for stacks). typedef short state_type; - /// The arguments of the error message. - int yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const; - /// Generate an error message. - /// \param yyctx the context in which the error occurred. - virtual std::string yysyntax_error_ (const context& yyctx) const; + /// \param yystate the state where the error occurred. + /// \param yyla the lookahead token. + virtual std::string yysyntax_error_ (state_type yystate, + const symbol_type& yyla) const; + /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack @@ -7677,17 +6995,10 @@ switch (yykind) static const short yypact_ninf_; static const signed char yytable_ninf_; - /// Convert a scanner token kind \a t to a symbol kind. - /// In theory \a t should be a token_kind_type, but character literals + /// Convert a scanner token number \a t to a symbol number. + /// In theory \a t should be a token_type, but character literals /// are valid, yet not members of the token_type enum. - static symbol_kind_type yytranslate_ (int t); - - /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_ (const char *yystr); - - /// For a symbol, its name in clear. - static const char* const yytname_[]; - + static token_number_type yytranslate_ (int t); // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -7723,20 +7034,26 @@ switch (yykind) static const signed char yyr2_[]; + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; #if YYDEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_ (int r) const; + virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. - virtual void yy_stack_print_ () const; + virtual void yystack_print_ (); /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; - /// \brief Display a symbol kind, value and location. + /// \brief Display a symbol type, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template @@ -7757,7 +7074,7 @@ switch (yykind) /// Default constructor. by_state () YY_NOEXCEPT; - /// The symbol kind as needed by the constructor. + /// The symbol type as needed by the constructor. typedef state_type kind_type; /// Constructor. @@ -7769,12 +7086,12 @@ switch (yykind) /// Record that this symbol is empty. void clear () YY_NOEXCEPT; - /// Steal the symbol kind from \a that. + /// Steal the symbol type from \a that. void move (by_state& that); - /// The symbol kind (corresponding to \a state). - /// \a symbol_kind::S_YYEMPTY when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + /// The (internal) type number (corresponding to \a state). + /// \a empty_symbol when empty. + symbol_number_type type_get () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. @@ -7813,8 +7130,8 @@ switch (yykind) { public: // Hide our reversed order. - typedef typename S::iterator iterator; - typedef typename S::const_iterator const_iterator; + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; @@ -7822,13 +7139,6 @@ switch (yykind) : seq_ (n) {} -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - stack (const stack&) = delete; - /// Non copyable. - stack& operator= (const stack&) = delete; -#endif - /// Random access. /// /// Index 0 returns the topmost element. @@ -7879,18 +7189,24 @@ switch (yykind) return index_type (seq_.size ()); } + std::ptrdiff_t + ssize () const YY_NOEXCEPT + { + return std::ptrdiff_t (size ()); + } + /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { - return seq_.begin (); + return seq_.rbegin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { - return seq_.end (); + return seq_.rend (); } /// Present a slice of the top of a stack. @@ -7914,12 +7230,8 @@ switch (yykind) }; private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. stack (const stack&); - /// Non copyable. stack& operator= (const stack&); -#endif /// The wrapped container. S seq_; }; @@ -7949,28 +7261,33 @@ switch (yykind) /// Pop \a n symbols from the stack. void yypop_ (int n = 1); + /// Some specific tokens. + static const token_number_type yy_error_token_ = 1; + static const token_number_type yy_undef_token_ = 2; + /// Constants. enum { - yylast_ = 3268, ///< Last index in yytable_. + yyeof_ = 0, + yylast_ = 3276, ///< Last index in yytable_. yynnts_ = 16, ///< Number of nonterminal symbols. - yyfinal_ = 337 ///< Termination state number. + yyfinal_ = 338, ///< Termination state number. + yyntokens_ = 344 ///< Number of tokens. }; // User arguments. modsecurity::Parser::Driver& driver; - }; inline - seclang_parser::symbol_kind_type + seclang_parser::token_number_type seclang_parser::yytranslate_ (int t) { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. static - const short + const token_number_type translate_table[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -8032,254 +7349,500 @@ switch (yykind) 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342 + 335, 336, 337, 338, 339, 340, 341, 342, 343 }; - // Last valid token kind. - const int code_max = 597; + const int user_token_number_max_ = 598; if (t <= 0) - return symbol_kind::S_YYEOF; - else if (t <= code_max) - return YY_CAST (symbol_kind_type, translate_table[t]); + return yyeof_; + else if (t <= user_token_number_max_) + return translate_table[t]; else - return symbol_kind::S_YYUNDEF; + return yy_undef_token_; } // basic_symbol. +#if 201103L <= YY_CPLUSPLUS + template + seclang_parser::basic_symbol::basic_symbol (basic_symbol&& that) + : Base (std::move (that)) + , value () + , location (std::move (that.location)) + { + switch (this->type_get ()) + { + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" + value.move< std::string > (std::move (that.value)); + break; + + case 350: // op + case 351: // op_before_init + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 359: // run_time_string + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 356: // var + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 357: // act + case 358: // setvar_action + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted + value.move< std::unique_ptr > > > (std::move (that.value)); + break; + + case 348: // actions + case 349: // actions_may_quoted + value.move< std::unique_ptr > > > (std::move (that.value)); + break; + + default: + break; + } + + } +#endif + template seclang_parser::basic_symbol::basic_symbol (const basic_symbol& that) : Base (that) , value () , location (that.location) { - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.copy< std::string > (YY_MOVE (that.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.copy< std::unique_ptr > > > (YY_MOVE (that.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.copy< std::unique_ptr > > > (YY_MOVE (that.value)); break; @@ -8291,18 +7854,11 @@ switch (yykind) - template - seclang_parser::symbol_kind_type - seclang_parser::basic_symbol::type_get () const YY_NOEXCEPT - { - return this->kind (); - } - template bool seclang_parser::basic_symbol::empty () const YY_NOEXCEPT { - return this->kind () == symbol_kind::S_YYEMPTY; + return Base::type_get () == empty_symbol; } template @@ -8310,234 +7866,235 @@ switch (yykind) seclang_parser::basic_symbol::move (basic_symbol& s) { super_type::move (s); - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.move< std::string > (YY_MOVE (s.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.move< std::unique_ptr > > > (YY_MOVE (s.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.move< std::unique_ptr > > > (YY_MOVE (s.value)); break; @@ -8548,62 +8105,56 @@ switch (yykind) location = YY_MOVE (s.location); } - // by_kind. + // by_type. inline - seclang_parser::by_kind::by_kind () - : kind_ (symbol_kind::S_YYEMPTY) + seclang_parser::by_type::by_type () + : type (empty_symbol) {} #if 201103L <= YY_CPLUSPLUS inline - seclang_parser::by_kind::by_kind (by_kind&& that) - : kind_ (that.kind_) + seclang_parser::by_type::by_type (by_type&& that) + : type (that.type) { that.clear (); } #endif inline - seclang_parser::by_kind::by_kind (const by_kind& that) - : kind_ (that.kind_) + seclang_parser::by_type::by_type (const by_type& that) + : type (that.type) {} inline - seclang_parser::by_kind::by_kind (token_kind_type t) - : kind_ (yytranslate_ (t)) + seclang_parser::by_type::by_type (token_type t) + : type (yytranslate_ (t)) {} inline void - seclang_parser::by_kind::clear () + seclang_parser::by_type::clear () { - kind_ = symbol_kind::S_YYEMPTY; + type = empty_symbol; } inline void - seclang_parser::by_kind::move (by_kind& that) + seclang_parser::by_type::move (by_type& that) { - kind_ = that.kind_; + type = that.type; that.clear (); } inline - seclang_parser::symbol_kind_type - seclang_parser::by_kind::kind () const YY_NOEXCEPT + int + seclang_parser::by_type::type_get () const YY_NOEXCEPT { - return kind_; - } - - inline - seclang_parser::symbol_kind_type - seclang_parser::by_kind::type_get () const YY_NOEXCEPT - { - return this->kind (); + return type; } } // yy -#line 8607 "seclang-parser.hh" +#line 8157 "seclang-parser.hh" + diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index fdb2bb1113..a63a1f63e1 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -17,7 +17,9 @@ class Driver; } } -#include "modsecurity/rule_unconditional.h" +#include "src/rule_unconditional.h" +#include "src/rule_with_operator.h" +#include "src/rule_with_actions.h" #include "src/rule_script.h" #include "src/actions/accuracy.h" @@ -77,6 +79,7 @@ class Driver; #include "src/actions/transformations/none.h" #include "src/actions/transformations/url_decode.h" #include "src/actions/transformations/lower_case.h" +#include "src/actions/transformations/php_args_names.h" #include "src/actions/transformations/upper_case.h" #include "src/actions/transformations/hex_decode.h" #include "src/actions/transformations/url_encode.h" @@ -546,6 +549,7 @@ using namespace modsecurity::operators; ACTION_TRANSFORMATION_JS_DECODE "ACTION_TRANSFORMATION_JS_DECODE" ACTION_TRANSFORMATION_LENGTH "ACTION_TRANSFORMATION_LENGTH" ACTION_TRANSFORMATION_LOWERCASE "ACTION_TRANSFORMATION_LOWERCASE" + ACTION_TRANSFORMATION_PHP_ARGS_NAMES "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" ACTION_TRANSFORMATION_MD5 "ACTION_TRANSFORMATION_MD5" ACTION_TRANSFORMATION_NONE "ACTION_TRANSFORMATION_NONE" ACTION_TRANSFORMATION_NORMALISE_PATH "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -1073,10 +1077,12 @@ expression: | DIRECTIVE variables op actions { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *$4.get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -1122,10 +1128,12 @@ expression: | CONFIG_DIR_SEC_ACTION actions { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *$2.get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -1142,10 +1150,12 @@ expression: { std::string err; std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *$2.get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -1185,8 +1195,8 @@ expression: definedPhase = phase->m_phase; secRuleDefinedPhase = phase->m_secRulesPhase; delete phase; - } else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind || - a->action_kind == actions::Action::RunTimeBeforeMatchAttemptKind) { + } else if (a->m_actionKind == actions::Action::RunTimeOnlyIfMatchKind || + a->m_actionKind == actions::Action::RunTimeBeforeMatchAttemptKind) { actions::transformations::None *none = dynamic_cast(a); if (none != NULL) { driver.error(@0, "The transformation none is not suitable to be part of the SecDefaultActions"); @@ -1207,7 +1217,7 @@ expression: YYERROR; } - if (!driver.m_defaultActions[definedPhase].empty()) { + if (!driver.m_rulesSetPhases[definedPhase]->m_defaultActions.empty()) { std::stringstream ss; ss << "SecDefaultActions can only be placed once per phase and configuration context. Phase "; ss << secRuleDefinedPhase; @@ -1217,8 +1227,13 @@ expression: } for (actions::Action *a : checkedActions) { - driver.m_defaultActions[definedPhase].push_back( - std::unique_ptr(a)); + if (dynamic_cast(a)) { + driver.m_rulesSetPhases[definedPhase]->m_defaultTransformations.push_back( + std::shared_ptr( + dynamic_cast(a))); + } else { + driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back(std::unique_ptr(a)); + } } delete actions; @@ -2903,6 +2918,10 @@ act: { ACTION_CONTAINER($$, new actions::transformations::LowerCase($1)); } + | ACTION_TRANSFORMATION_PHP_ARGS_NAMES + { + ACTION_CONTAINER($$, new actions::transformations::PhpArgsNames($1)); + } | ACTION_TRANSFORMATION_UPPERCASE { ACTION_CONTAINER($$, new actions::transformations::UpperCase($1)); diff --git a/src/parser/seclang-scanner.cc b/src/parser/seclang-scanner.cc index 74418c522b..4ca393766f 100644 --- a/src/parser/seclang-scanner.cc +++ b/src/parser/seclang-scanner.cc @@ -1,5 +1,5 @@ -#line 2 "seclang-scanner.cc" +#line 3 "seclang-scanner.cc" #define YY_INT_ALIGNED short int @@ -433,8 +433,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 540 -#define YY_END_OF_BUFFER 541 +#define YY_NUM_RULES 541 +#define YY_END_OF_BUFFER 542 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -442,440 +442,441 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3927] = +static const flex_int16_t yy_accept[3938] = { 0, - 0, 0, 0, 0, 271, 271, 279, 279, 0, 0, + 0, 0, 0, 0, 272, 272, 280, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 283, 283, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 541, 533, 527, 264, 268, 269, - 267, 270, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 287, 287, 540, 287, 287, - - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 125, 271, 277, 279, - 281, 275, 274, 276, 273, 279, 272, 491, 491, 490, - 491, 491, 491, 120, 119, 118, 127, 127, 127, 134, - 126, 127, 129, 129, 129, 128, 134, 129, 132, 132, - 132, 131, 134, 130, 132, 532, 532, 532, 540, 493, - 492, 442, 445, 540, 445, 442, 442, 442, 431, 431, - 431, 434, 436, 431, 435, 431, 425, 431, 501, 501, - 501, 500, 505, 501, 503, 503, 503, 502, 505, 503, - 117, 117, 109, 117, 114, 108, 117, 117, 117, 117, - - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 112, 117, 111, 540, 510, 540, - 506, 519, 540, 283, 284, 540, 497, 497, 496, 499, - 497, 495, 495, 494, 499, 495, 149, 534, 535, 536, - 136, 135, 136, 136, 136, 136, 136, 136, 140, 139, - 144, 145, 145, 144, 142, 141, 139, 147, 148, 148, - 146, 147, 527, 264, 0, 267, 267, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, - 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, - 0, 0, 0, 0, 121, 0, 124, 271, 277, 279, - 281, 278, 279, 280, 281, 282, 527, 0, 0, 0, + 0, 0, 0, 0, 542, 534, 528, 265, 269, 270, + 268, 271, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 288, 288, 541, 288, 288, + + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 126, 272, 278, 280, + 282, 276, 275, 277, 274, 280, 273, 492, 492, 491, + 492, 492, 492, 121, 120, 119, 128, 128, 128, 135, + 127, 128, 130, 130, 130, 129, 135, 130, 133, 133, + 133, 132, 135, 131, 133, 533, 533, 533, 541, 494, + 493, 443, 446, 541, 446, 443, 443, 443, 432, 432, + 432, 435, 437, 432, 436, 432, 426, 432, 502, 502, + 502, 501, 506, 502, 504, 504, 504, 503, 506, 504, + 118, 118, 110, 118, 115, 109, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 113, 118, 112, 541, 511, 541, + 507, 520, 541, 284, 285, 541, 498, 498, 497, 500, + 498, 496, 496, 495, 500, 496, 150, 535, 536, 537, + 137, 136, 137, 137, 137, 137, 137, 137, 141, 140, + 145, 146, 146, 145, 143, 142, 140, 148, 149, 149, + 147, 148, 528, 265, 0, 268, 268, 268, 0, 0, + 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 0, 0, 122, 0, 125, 272, 278, 280, + 282, 279, 280, 281, 282, 283, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 127, 0, 127, 127, 127, - 0, 133, 121, 127, 127, 129, 0, 0, 129, 129, - 129, 0, 129, 121, 129, 132, 0, 0, 132, 132, - 132, 0, 132, 121, 132, 532, 532, 532, 0, 530, - 532, 442, 0, 442, 0, 442, 442, 0, 442, 442, - 431, 0, 0, 430, 431, 431, 431, 0, 431, 504, - - 431, 431, 0, 430, 0, 431, 423, 424, 431, 431, - 501, 0, 0, 501, 501, 501, 0, 501, 121, 501, - 503, 0, 503, 503, 0, 503, 0, 0, 121, 503, - 503, 0, 109, 0, 108, 0, 110, 114, 115, 0, - 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, + 0, 134, 122, 128, 128, 130, 0, 0, 130, 130, + 130, 0, 130, 122, 130, 133, 0, 0, 133, 133, + 133, 0, 133, 122, 133, 533, 533, 533, 0, 531, + 533, 443, 0, 443, 0, 443, 443, 0, 443, 443, + 432, 0, 0, 431, 432, 432, 432, 0, 432, 505, + + 432, 432, 0, 431, 0, 432, 424, 425, 432, 432, + 502, 0, 0, 502, 502, 502, 0, 502, 122, 502, + 504, 0, 504, 504, 0, 504, 0, 0, 122, 504, + 504, 0, 110, 0, 109, 0, 111, 115, 116, 0, + 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 106, 0, 0, 112, 0, 113, 111, - 111, 0, 510, 0, 519, 0, 510, 508, 518, 0, - 506, 519, 0, 0, 526, 0, 509, 0, 283, 284, - - 0, 284, 0, 0, 497, 0, 497, 0, 498, 497, - 495, 0, 0, 495, 0, 495, 534, 535, 536, 0, - 0, 0, 0, 0, 0, 137, 138, 144, 0, 0, - 144, 0, 144, 143, 147, 0, 0, 147, 0, 147, - 267, 0, 0, 0, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 528, 529, 0, 0, - 0, 393, 0, 0, 383, 0, 0, 0, 418, 0, + 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 107, 0, 0, 113, 0, 114, 112, + 112, 0, 511, 0, 520, 0, 511, 509, 519, 0, + 507, 520, 0, 0, 527, 0, 510, 0, 284, 285, + + 0, 285, 0, 0, 498, 0, 498, 0, 499, 498, + 496, 0, 0, 496, 0, 496, 535, 536, 537, 0, + 0, 0, 0, 0, 0, 138, 139, 145, 0, 0, + 145, 0, 145, 144, 148, 0, 0, 148, 0, 148, + 268, 0, 0, 0, 0, 0, 0, 0, 216, 0, + 0, 0, 0, 0, 0, 0, 529, 530, 0, 0, + 0, 394, 0, 0, 384, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 391, 121, - 122, 123, 0, 0, 0, 0, 463, 0, 464, 0, - - 465, 0, 0, 468, 469, 471, 0, 0, 473, 0, - 0, 0, 0, 0, 0, 464, 0, 0, 0, 127, - 0, 0, 121, 122, 0, 129, 0, 0, 121, 122, - 0, 132, 0, 0, 121, 122, 530, 531, 442, 0, - 442, 0, 437, 0, 437, 0, 442, 0, 431, 0, - 0, 431, 0, 430, 0, 431, 431, 431, 431, 431, - 0, 0, 0, 0, 431, 431, 431, 0, 501, 0, - 0, 121, 122, 0, 503, 0, 0, 121, 121, 122, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 422, 0, 0, 0, 0, 392, 122, + 123, 124, 0, 0, 0, 0, 464, 0, 465, 0, + + 466, 0, 0, 469, 470, 472, 0, 0, 474, 0, + 0, 0, 0, 0, 0, 465, 0, 0, 0, 128, + 0, 0, 122, 123, 0, 130, 0, 0, 122, 123, + 0, 133, 0, 0, 122, 123, 531, 532, 443, 0, + 443, 0, 438, 0, 438, 0, 443, 0, 432, 0, + 0, 432, 0, 431, 0, 432, 432, 432, 432, 432, + 0, 0, 0, 0, 432, 432, 432, 0, 502, 0, + 0, 122, 123, 0, 504, 0, 0, 122, 122, 123, + 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 107, 508, 518, 514, 517, 0, 521, - 0, 0, 526, 0, 0, 509, 507, 516, 0, 0, - 285, 0, 0, 497, 0, 0, 0, 495, 0, 0, - 0, 0, 0, 0, 0, 144, 0, 0, 0, 147, - 0, 0, 267, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 107, 108, 509, 519, 515, 518, 0, 522, + 0, 0, 527, 0, 0, 510, 508, 517, 0, 0, + 286, 0, 0, 498, 0, 0, 0, 496, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 148, + 0, 0, 268, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, - 529, 359, 0, 0, 394, 0, 0, 384, 0, 0, + 530, 360, 0, 0, 395, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 387, 0, 0, 0, 406, 0, 0, 416, - 0, 0, 392, 122, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 470, 472, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 127, 0, 122, 129, - 0, 122, 132, 0, 122, 531, 442, 0, 0, 0, - 0, 442, 0, 0, 438, 443, 439, 438, 443, 439, - 431, 0, 431, 431, 431, 0, 431, 0, 0, 0, - 0, 431, 0, 430, 0, 431, 431, 426, 432, 427, - - 426, 432, 427, 0, 0, 431, 431, 501, 0, 122, - 503, 0, 122, 122, 0, 0, 0, 0, 0, 0, + 0, 0, 388, 0, 0, 0, 407, 0, 0, 417, + 0, 0, 393, 123, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 471, 473, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 128, 0, 123, 130, + 0, 123, 133, 0, 123, 532, 443, 0, 0, 0, + 0, 443, 0, 0, 439, 444, 440, 439, 444, 440, + 432, 0, 432, 432, 432, 0, 432, 0, 0, 0, + 0, 432, 0, 431, 0, 432, 432, 427, 433, 428, + + 427, 433, 428, 0, 0, 432, 432, 502, 0, 123, + 504, 0, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 49, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 107, 514, 517, 513, - 521, 0, 524, 0, 0, 520, 0, 0, 507, 516, - 512, 515, 285, 0, 286, 497, 0, 495, 0, 0, + 0, 0, 0, 0, 63, 0, 0, 108, 515, 518, + 514, 522, 0, 525, 0, 0, 521, 0, 0, 508, + 517, 513, 516, 286, 0, 287, 498, 0, 496, 0, - 0, 0, 0, 144, 0, 147, 0, 267, 267, 212, - 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 145, 0, 148, 0, 268, 268, + 213, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, - 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, - 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, + 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, + 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 440, 440, 440, 0, 0, - 428, 428, 0, 0, 0, 431, 431, 0, 428, 0, - 431, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 14, 0, - 0, 16, 0, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 441, 441, 441, 0, + 0, 429, 429, 0, 0, 0, 432, 432, 0, 429, + 0, 432, 0, 0, 0, 0, 0, 0, 0, 26, + 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 14, + 0, 0, 16, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, - 524, 0, 525, 520, 0, 522, 0, 512, 515, 511, + 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 514, 525, 0, 526, 521, 0, 523, 0, 513, - 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 267, 267, 0, 0, 0, 169, 0, 0, - 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 516, 512, 287, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 268, 268, 0, 0, 0, 170, + 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, - 0, 0, 0, 376, 0, 0, 409, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 0, 377, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 444, 441, 444, 441, - 433, 429, 433, 429, 0, 428, 0, 0, 0, 431, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 41, 0, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 445, 442, + 445, 442, 434, 430, 434, 430, 0, 429, 0, 0, + 0, 432, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 41, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, - 0, 74, 0, 92, 0, 0, 0, 0, 0, 0, - 0, 0, 525, 522, 0, 523, 511, 0, 0, 0, + 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, + 0, 0, 0, 0, 74, 0, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 526, 523, 0, 524, 512, - 267, 267, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 41, 0, - 41, 41, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 15, 0, 52, 0, 54, 22, 55, 56, - 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 41, 0, 41, 41, 0, 0, 0, 0, 0, + 0, 0, 50, 0, 0, 15, 0, 52, 0, 54, + 22, 55, 56, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, - 523, 0, 0, 267, 267, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 0, 0, 65, 524, 0, 0, 268, 268, 0, + 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 420, 0, 0, - 399, 0, 0, 402, 403, 404, 0, 0, 0, 0, - 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, - - 0, 0, 0, 0, 0, 40, 41, 40, 0, 41, - 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, + 0, 0, 362, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 267, 267, 0, 0, 0, 0, 537, 0, - 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, + 0, 421, 0, 0, 400, 0, 0, 403, 404, 405, + 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 27, 0, 0, 0, 0, 0, 0, 40, + 41, 40, 0, 41, 0, 0, 103, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, + 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64, 0, 268, 268, 0, + 0, 0, 0, 538, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, - 0, 0, 363, 295, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 0, 0, 0, 354, 0, 0, 401, - 407, 405, 355, 0, 0, 0, 461, 0, 0, 462, - 0, 0, 0, 0, 466, 0, 474, 476, 0, 0, - 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 40, 0, 0, 0, 0, 0, 0, 50, 0, - - 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 363, 0, 0, 364, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 267, 267, 265, - 0, 265, 217, 0, 0, 0, 0, 0, 0, 0, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 355, 0, 0, 402, 408, 406, 356, 0, 0, + 0, 462, 0, 0, 463, 0, 0, 0, 0, 467, + 0, 475, 477, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, + 0, 0, 0, 0, 40, 0, 40, 0, 0, 0, + + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, - - 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 268, 268, 266, 0, 266, 218, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, - 0, 0, 0, 0, 0, 0, 479, 0, 488, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 485, 486, - 0, 0, 0, 0, 0, 0, 25, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 48, 0, 48, 10, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, + 0, 0, 0, 0, 0, 292, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, - 0, 0, 0, 267, 0, 265, 265, 265, 265, 265, - 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, - - 367, 365, 0, 0, 0, 0, 0, 301, 0, 0, + 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, + 0, 0, 480, 0, 489, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 486, 487, 0, 0, 0, 0, + 0, 0, 25, 0, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 48, 0, 48, + 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 325, 326, 327, 398, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, - 0, 0, 351, 352, 353, 414, 0, 0, 477, 0, - 0, 450, 447, 0, 0, 470, 0, 0, 0, 0, - 0, 0, 0, 487, 0, 0, 456, 0, 453, 0, - 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 44, 44, 0, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, + 268, 0, 266, 266, 266, 266, 266, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 91, 0, 78, 77, - 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 80, 83, 81, 0, 267, 267, - 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 366, 0, - 0, 298, 0, 0, 373, 0, 395, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 293, 0, 0, 368, 366, 0, + 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, + 327, 328, 399, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 344, 0, 0, 0, 0, 0, 352, + 353, 354, 415, 0, 0, 478, 0, 0, 451, 448, + 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, + 488, 0, 0, 457, 0, 454, 0, 0, 0, 0, + 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 44, 0, 0, 48, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 0, 0, 335, 0, 0, 0, 339, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 92, 0, 78, 77, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 449, 478, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 455, 0, 0, 0, 0, 24, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 44, 44, 0, 44, 0, 44, 44, 0, 0, 47, + 0, 95, 81, 84, 82, 0, 268, 268, 0, 0, + 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 369, 367, 0, 0, 299, + 0, 0, 374, 0, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, + 0, 0, 336, 0, 0, 0, 340, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 450, 479, + 0, 0, 0, 482, 0, 0, 0, 0, 0, 456, + 0, 0, 0, 0, 24, 0, 0, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 44, 44, + + 0, 44, 0, 44, 44, 0, 0, 47, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, - 266, 266, 266, 266, 213, 0, 0, 0, 0, 0, - 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, - 0, 174, 0, 0, 0, 0, 0, 0, 241, 0, - 0, 0, 190, 0, 0, 0, 0, 189, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, - 0, 0, 0, 153, 153, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 267, 267, + 267, 267, 267, 214, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 344, 0, 0, 0, 0, 0, 0, 460, - 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, - 24, 25, 26, 0, 0, 0, 0, 0, 0, 103, - 44, 43, 44, 44, 43, 0, 0, 44, 43, 0, - 0, 44, 43, 44, 44, 45, 47, 48, 0, 0, - - 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, + 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, + 175, 0, 0, 0, 0, 0, 0, 242, 0, 0, + + 0, 191, 0, 0, 0, 0, 190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, + 0, 0, 154, 154, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, - 218, 0, 0, 161, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 248, 0, 0, 263, 263, 0, 0, 0, 0, 0, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 345, 0, 0, 0, 0, 0, 0, 461, 0, + 0, 0, 483, 0, 0, 0, 0, 0, 0, 24, + 25, 26, 0, 0, 0, 0, 0, 0, 104, 44, + 43, 44, 44, 43, 0, 0, 44, 43, 0, 0, + + 44, 43, 44, 44, 45, 47, 48, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 219, 0, 0, 162, 0, 164, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, + 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 264, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 289, 0, 0, 389, 0, 0, 0, 0, + 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 290, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 43, 0, 44, 44, 43, 0, 43, 0, 0, 43, 0, 0, 45, 43, 45, 45, 43, 0, 44, 43, 44, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 60, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 60, 0, 60, 0, 60, 0, 0, 71, 70, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 69, 82, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 0, 173, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, - 0, 0, 0, 0, 0, 245, 244, 0, 0, 0, + 0, 0, 0, 80, 0, 0, 0, 88, 69, 83, + 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 176, 0, 0, 0, 0, 0, 246, 245, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 153, 0, 0, 0, 0, 291, + 294, 0, 391, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, + 0, 0, 0, 0, 0, 0, 0, 378, 0, 380, + 0, 343, 0, 0, 0, 351, 0, 0, 0, 0, + 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 0, 0, 42, 44, 42, 0, 44, 42, + 0, 0, 42, 44, 0, 42, 0, 42, 45, 45, + 42, 45, 26, 0, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, + 0, 0, 97, 97, 0, 67, 0, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 240, 0, 0, 0, 0, 0, 0, 0, 0, 260, + 0, 178, 178, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 0, 290, 293, - 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, - - 0, 0, 0, 0, 0, 0, 377, 0, 379, 0, - 342, 0, 0, 0, 350, 0, 0, 0, 0, 0, - 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 0, 42, 44, 42, 0, 44, 42, 0, - 0, 42, 44, 0, 42, 0, 42, 45, 45, 42, - 45, 26, 0, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, - 0, 96, 96, 0, 67, 0, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - - 177, 177, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, - 0, 0, 0, 152, 0, 0, 294, 0, 0, 0, - 397, 0, 0, 300, 0, 0, 0, 0, 0, 0, + 210, 0, 0, 0, 153, 0, 0, 295, 0, 0, + 0, 398, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 333, 0, 378, 0, 336, 380, 0, 341, 0, 381, - 0, 356, 0, 466, 0, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 42, 42, - 0, 42, 0, 44, 0, 42, 45, 43, 45, 45, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, 68, 66, 100, 0, - 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, + 0, 334, 0, 379, 0, 337, 381, 0, 342, 0, + 382, 0, 357, 0, 467, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 42, + + 42, 0, 42, 0, 44, 0, 42, 45, 43, 45, + 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60, 0, 0, 0, 0, 0, 0, 68, 66, 101, + 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 254, 0, 0, 0, 236, 0, 0, 0, - 232, 232, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 328, 332, 0, 0, 0, 0, 382, 0, 349, 0, + 0, 0, 0, 255, 0, 0, 0, 237, 0, 0, + 0, 233, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, + 0, 329, 333, 0, 0, 0, 0, 383, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 43, 45, 45, 43, 45, - 0, 0, 0, 0, 0, 0, 60, 0, 72, 0, - 76, 0, 0, 0, 0, 0, 101, 0, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 0, 247, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, + 0, 0, 0, 0, 0, 43, 43, 45, 45, 43, + 45, 0, 0, 0, 0, 0, 0, 60, 0, 72, + 0, 76, 0, 0, 0, 0, 0, 102, 0, 0, + 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 177, 0, 248, 0, 0, 0, 540, + 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 206, 0, 288, 0, 370, 0, 299, 371, 0, 0, - 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, + 0, 207, 0, 289, 0, 371, 0, 300, 372, 0, + 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 43, 0, 0, 0, 0, 0, 60, - 0, 89, 95, 95, 0, 86, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 249, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 193, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 211, 0, 296, 297, 372, - 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 322, 0, 334, 0, 0, 0, - - 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 155, 0, 165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, - 0, 0, 0, 0, 0, 0, 194, 194, 0, 196, - 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 223, 0, 0, 0, 305, 0, 0, 0, 0, + 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, + 60, 0, 90, 96, 96, 0, 87, 0, 181, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, + 0, 0, 250, 180, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 194, 194, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 297, 298, + 373, 0, 0, 0, 0, 309, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 323, 0, 335, 0, 0, + 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 448, 0, 0, 0, 454, 0, 0, 29, - 0, 0, 0, 36, 0, 0, 19, 0, 0, 85, - - 99, 0, 0, 162, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 183, 0, 0, 188, + 0, 0, 0, 0, 0, 156, 0, 166, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, + 0, 0, 0, 0, 0, 0, 0, 195, 195, 0, + 197, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 211, 224, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 306, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 385, 337, - 0, 346, 0, 451, 0, 0, 457, 0, 0, 0, - 0, 37, 0, 20, 0, 160, 226, 226, 0, 160, - 156, 0, 0, 0, 262, 0, 250, 0, 229, 0, - 0, 0, 0, 0, 0, 0, 187, 0, 0, 195, - 197, 0, 0, 0, 0, 151, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, - 0, 320, 0, 0, 386, 338, 0, 347, 452, 0, - 458, 0, 34, 0, 0, 21, 0, 0, 0, 157, - 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 151, 0, 0, 207, - 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, - 331, 345, 348, 0, 0, 0, 0, 159, 0, 0, - 237, 0, 0, 0, 228, 0, 0, 261, 0, 0, + 0, 0, 0, 449, 0, 0, 0, 455, 0, 0, + + 29, 0, 0, 0, 36, 0, 0, 19, 0, 0, + 86, 100, 0, 0, 163, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, + 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 193, 0, 0, 0, 307, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, + 338, 0, 347, 0, 452, 0, 0, 458, 0, 0, + 0, 0, 37, 0, 20, 0, 161, 227, 227, 0, + 161, 157, 0, 0, 0, 263, 0, 251, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, + + 196, 198, 0, 0, 0, 0, 152, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, + 0, 0, 321, 0, 0, 387, 339, 0, 348, 453, + 0, 459, 0, 34, 0, 0, 21, 0, 0, 0, + 158, 0, 0, 252, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, + 208, 0, 0, 305, 0, 0, 0, 0, 0, 0, + 0, 332, 346, 349, 0, 0, 0, 0, 160, 0, + 0, 238, 0, 0, 0, 229, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 150, 0, 0, 0, - 0, 0, 182, 0, 0, 224, 224, 0, 205, 0, - 203, 0, 0, 0, 255, 0, 302, 0, 0, 0, - 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 150, 0, 0, 0, 0, 186, 0, 0, 0, 201, - 0, 199, 0, 256, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 0, 171, 171, 0, - 0, 0, 0, 0, 0, 204, 202, 0, 0, 0, - 0, 0, 316, 317, 0, 330, 0, 0, 0, 0, - 39, 0, 257, 178, 0, 184, 0, 200, 198, 0, - - 0, 0, 321, 0, 0, 0, 31, 172, 181, 225, - 303, 307, 0, 33, 30, 0, 0, 0, 0, 0, - 312, 0, 0, 0, 32, 0 + 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 159, 151, 0, 0, + 0, 0, 0, 183, 0, 0, 225, 225, 0, 206, + 0, 204, 0, 0, 0, 256, 0, 303, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 151, 0, 0, 0, 0, 187, 0, 0, 0, + 202, 0, 200, 0, 257, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 172, 172, + 0, 0, 0, 0, 0, 0, 205, 203, 0, 0, + 0, 0, 0, 317, 318, 0, 331, 0, 0, 0, + + 0, 39, 0, 258, 179, 0, 185, 0, 201, 199, + 0, 0, 0, 322, 0, 0, 0, 31, 173, 182, + 226, 304, 308, 0, 33, 30, 0, 0, 0, 0, + 0, 313, 0, 0, 0, 32, 0 } ; static const YY_CHAR yy_ec[256] = @@ -923,960 +924,962 @@ static const YY_CHAR yy_meta[88] = 15, 15, 15, 15, 17, 18, 1 } ; -static const flex_int16_t yy_base[4212] = +static const flex_int16_t yy_base[4223] = { 0, 0, 80, 161, 0, 4, 8, 14, 247, 21, 87, 101, 254, 25, 40, 53, 261, 265, 275, 284, 290, - 94, 304,11906,11905,11902,11853, 324, 347, 365, 383, + 94, 304,12084,12083,12082,12081, 324, 347, 365, 383, 413, 434, 314, 448, 335, 397, 505, 0, 457, 464, 591, 597, 603, 609, 419, 425, 271, 298, 102, 612, - 11854,11851,11825,11819,11818,11815,11789,11783, 614, 622, - 0, 0,11756,11753, 428, 611, 646, 668, 0, 0, - 57, 79, 620, 627,11774,14170, 673,14170,14170,14170, - 308,14170, 4, 25, 59, 52, 71, 72, 96, 279, - 315, 97, 220, 271, 8,14170, 443,14170, 655, 269, + 12080,12079,12077,12076,12023,11940,11938,11922, 614, 622, + 0, 0,11892,11891, 428, 611, 646, 668, 0, 0, + 57, 79, 620, 627,11917,14180, 673,14180,14180,14180, + 308,14180, 4, 25, 59, 52, 71, 72, 96, 279, + 315, 97, 220, 271, 8,14180, 443,14180, 655, 269, 312, 578, 673, 330, 429, 681, 327, 358, 368, 686, - 679, 699, 707, 421, 422, 38,11758, 133, 765, 771, - 783,14170,14170,14170,14170, 789,14170,14170, 631,14170, - 815, 76, 764,14170,14170,14170, 278, 798, 348, 417, - 11710, 801, 372, 829, 752,11707, 540, 814, 855, 895, - 883,11636, 546,11553, 904, 830, 901,14170, 913,14170, - 14170, 918,11484,11478,11477, 924, 957, 964, 934, 980, - 991,11474, 601, 1012,11430, 1024, 725, 1042, 770, 1054, - 831,11424, 625, 1063, 645, 978, 802, 867, 663, 1072, - 14170, 1081,14170,11477, 484, 475, 1047, 719, 764, 874, + 679, 699, 707, 421, 422, 38,11858, 133, 765, 771, + 783,14180,14180,14180,14180, 789,14180,14180, 631,14180, + 815, 76, 764,14180,14180,14180, 278, 798, 348, 417, + 11810, 801, 372, 829, 752,11807, 540, 814, 855, 895, + 883,11781, 546,11775, 904, 830, 901,14180, 913,14180, + 14180, 918,11774,11771,11745, 924, 957, 964, 934, 980, + 991,11739, 601, 1012,11738, 1024, 725, 1042, 770, 1054, + 831,11735, 625, 1063, 645, 978, 802, 867, 663, 1072, + 14180, 1081,14180,11781, 484, 475, 1047, 719, 764, 874, 717, 940, 752, 1056, 800, 953, 1064, 818, 1059, 917, - 821, 885, 405, 1139,14170,11474, 1143, 1147, 476, 309, - 1153, 1159, 410, 1011, 490, 493, 1096, 1114,11394, 911, - 1122, 1124, 1129,11388, 943, 1158,14170, 0, 0, 0, - 14170,14170, 990, 1017, 1053, 1062, 1105, 1118,14170, 120, - 1162,11387, 1113, 1168,14170,14170, 282, 1178,11384, 1116, - 11359, 1199, 1200,14170, 495, 0, 1187,11347, 1135, 1140, - 1144, 1149, 1180, 1172, 1168, 1184,14170, 1173, 1178, 1184, - 1199, 1182, 636,11406, 1229, 620, 1196, 1187, 1190, 1187, + 821, 885, 405, 1139,14180,11775, 1143, 1147, 476, 309, + 1153, 1159, 410, 1011, 490, 493, 1096, 1114,11720, 911, + 1122, 1124, 1129,11717, 943, 1158,14180, 0, 0, 0, + 14180,14180, 990, 1017, 1053, 1062, 1105, 1118,14180, 120, + 1162,11646, 1113, 1168,14180,14180, 282, 1178,11563, 1116, + 11494, 1199, 1200,14180, 495, 0, 1187,11482, 1135, 1140, + 1144, 1149, 1180, 1172, 1168, 1184,14180, 1173, 1178, 1184, + 1199, 1182, 636,11541, 1229, 620, 1196, 1187, 1190, 1187, 1198, 1200, 1198, 1199, 1213, 1221, 297, 1205, 1225, 1220, 1213, 1214, 1234, 1230, 1232, 1236, 1245, 1237, 735, 1243, - 1246, 1254, 1261, 1252, 641,11403,11313, 642, 1321, 1327, - 1333,14170, 1293,14170, 1304,14170, 1294, 1279, 1270, 1283, + 1246, 1254, 1261, 1252, 641,11538,11412, 642, 1321, 1327, + 1333,14180, 1293,14180, 1304,14180, 1294, 1279, 1270, 1283, 1297, 1268, 1304, 1311, 1298, 1302, 1317, 1302, 1314, 1328, - 1321, 1329, 1354, 1321, 1339, 920,11335, 670, 1395, 1405, - 1400,14170, 1409, 1410, 1406, 1416,11334,11331, 998, 1423, - 1431, 1417, 1429, 1435, 1440, 1439,11323,11317, 1391, 1454, - 1467, 1448, 1468, 1474, 1484, 1498, 1504,14170, 1510, 933, - 1514, 1525,11316, 1518,11363, 1541, 1561, 346, 1578, 1584, - 1585,11224,11018, 1609, 1527, 1624, 1642, 1500, 1648,14170, - - 1673, 1677, 1615, 1707, 842, 1708,14170,14170, 1733, 1739, - 1488,11012,11011, 1005, 1722, 1549, 1633, 1684, 1745, 1701, - 1568,11008, 1172, 1751, 1671, 1599, 1664, 1605, 1764, 1767, - 1734, 1780,14170,11018, 949, 816,14170, 1784,14170,11012, + 1321, 1329, 1354, 1321, 1339, 920,11434, 670, 1395, 1405, + 1400,14180, 1409, 1410, 1406, 1416,11433,11430, 998, 1423, + 1431, 1417, 1429, 1435, 1440, 1439,11404,11398, 1391, 1454, + 1467, 1448, 1468, 1474, 1484, 1498, 1504,14180, 1510, 933, + 1514, 1525,11397, 1518,11444, 1541, 1561, 346, 1578, 1584, + 1585,11369,11363, 1609, 1527, 1624, 1642, 1500, 1648,14180, + + 1673, 1677, 1615, 1707, 842, 1708,14180,14180, 1733, 1739, + 1488,11362,11359, 1005, 1722, 1549, 1633, 1684, 1745, 1701, + 1568,11351, 1172, 1751, 1671, 1599, 1664, 1605, 1764, 1767, + 1734, 1780,14180,11399, 949, 816,14180, 1784,14180,11398, 1463, 1335, 1402, 1444, 1474, 1477, 1503, 1529, 1581, 1753, - 1658, 1746,10986, 1734, 1739, 1728, 1761, 1758, 1774, 1771, - 14170, 1761, 1780, 1778, 1780, 1771, 1767, 1779, 1791, 1829, - 1792, 1782, 1806, 1533,11008, 1879,14170,10929,14170, 1883, - 1907, 1911, 1567, 701, 1917, 1075, 1691, 1560, 1847,10923, + 1658, 1746,11370, 1734, 1739, 1728, 1761, 1758, 1774, 1771, + 14180, 1761, 1780, 1778, 1780, 1771, 1767, 1779, 1791, 1829, + 1792, 1782, 1806, 1533,11387, 1879,14180,11381,14180, 1883, + 1907, 1911, 1567, 701, 1917, 1075, 1691, 1560, 1847,11380, 1923, 1930, 1861, 898, 1755, 1100, 1889, 1035, 1936, 1851, - 1110, 1937, 1942,10922, 1860,10865, 1293, 1888,14170, 1941, - 1943,10839,10833, 1428, 1945, 1947, 0, 0, 0, 1829, - 1030, 1882, 1899, 1476, 1921,14170,14170, 1956,10832,10829, - 1955, 1948, 1968,14170, 1979,10821,10815, 1996, 1978, 2008, - 10810, 1919, 1940, 1946, 1936, 1954, 1955, 1975,14170, 1985, + 1110, 1937, 1942,11377, 1860,11234, 1293, 1888,14180, 1941, + 1943,11028,11022, 1428, 1945, 1947, 0, 0, 0, 1829, + 1030, 1882, 1899, 1476, 1921,14180,14180, 1956,11021,11018, + 1955, 1948, 1968,14180, 1979,10974,10968, 1996, 1978, 2008, + 10963, 1919, 1940, 1946, 1936, 1954, 1955, 1975,14180, 1985, 1984, 1984, 1986, 2035, 1983, 1982, 1967, 2026, 1980, 1992, - 2001, 1633, 1998, 1992, 1669, 2007, 2005, 2003,14170, 2018, + 2001, 1633, 1998, 1992, 1669, 2007, 2005, 2003,14180, 2018, 2003, 2009, 2031, 2026, 2022, 2030, 2067, 2059, 2047, 2041, - 2046, 2057, 2073,14170, 2068, 2084, 2072, 2091, 2109, 2036, - 2123,14170, 2087, 2085, 2080, 2097,14170, 2078, 2093, 2107, + 2046, 2057, 2073,14180, 2068, 2084, 2072, 2091, 2109, 2036, + 2123,14180, 2087, 2085, 2080, 2097,14180, 2078, 2093, 2107, - 14170, 2092, 2099,14170,14170, 2108, 2103, 2098, 2114, 2105, + 14180, 2092, 2099,14180,14180, 2108, 2103, 2098, 2114, 2105, 2121, 2113, 2108, 2110, 2111, 2118, 2131, 2123, 2114, 2164, - 10783,10686, 2185, 2196,10682, 2168,10618,10596, 2200, 2207, - 10578, 2208,10532,10556, 2217, 2224, 2198, 2211, 2233, 2186, - 2253, 856, 2273,10523, 2215, 2178, 2293,10444, 2237,10410, - 10437, 2316, 2307, 2339, 2193, 2360, 2393, 2408, 2426, 2446, - 10473, 2288, 2295, 2383, 2461, 2486, 2495,10377, 2260,10309, - 10331, 2425, 2447, 2184, 2327,10302,10327, 2457, 2281, 2476, - 14170, 2194, 2214, 2226, 2260, 2274, 2265, 2294,10281, 2293, - 2305, 2320, 2312, 2330, 2327, 2515, 2319, 2337, 2355,10245, - - 2364, 2368, 2435,14170, 2436, 2440, 2443, 2449, 2462, 2482, - 10177, 2483, 2510, 2490, 2480, 2478, 2498, 2520, 2497, 2516, - 2499, 2525, 2521, 2519, 2536, 2533, 2533, 2524, 2555,10087, - 10069, 2534, 2402, 2419, 2472, 2504, 2482, 2602, 2608, 2579, - 2609,10076, 2580, 2615, 1372, 2616, 2622, 2623, 9752, 2630, - 2634, 2636, 2555, 2372, 9244, 9271, 9270, 2635, 9241, 9268, - 2587, 2581, 2585, 2596, 9267, 2641, 9238, 9265, 9264, 2645, - 9235, 9262, 92, 2599, 2599, 2620, 2609, 2608,14170, 2609, - 2621, 2630, 2633, 2615, 2649, 2645, 2640, 2666, 2674, 2624, - 2649, 2651, 2671, 2681, 2642, 2675, 2674, 2671, 2689,14170, - - 2721, 2710, 9260, 2680,14170, 2683, 9259,14170, 2704, 2701, - 2688, 2703, 2711, 2712, 2708, 9258, 2699, 2705, 2711, 2722, - 2710, 2717, 2502, 2730, 2727, 2719, 9257, 2720, 2728, 2758, - 2727, 2741,14170, 2775, 2739, 2737, 2753, 2742, 2736, 2753, - 2754, 2756, 2772, 2757,14170, 2775, 2766, 2774, 2765, 2772, - 2773, 2775, 2779, 2776, 2776, 2783, 1723, 2816, 2842, 2227, - 2822, 2846, 2845, 2851, 2857, 2861, 2875, 947, 2168, 2850, - 9296, 2908, 42, 2858, 9256, 916, 9255,14170, 9293,14170, - 2874, 2859, 2915, 2940, 2941, 1309, 2961, 2888, 2931, 9250, - 2973, 3004, 3003, 3029, 2228, 3038, 3063, 3042, 2259, 3062, - - 14170, 9249,14170, 989, 2442, 3095, 3096, 2817, 2928, 3077, - 2861, 2924, 2994, 2907, 2822, 2838, 2852, 2889, 2913, 2933, - 2943, 3073,14170, 2957, 2967,14170, 9231, 2959, 3119, 3135, - 3005, 3024, 3041,14170, 3055, 3089, 3098,14170, 3101, 3112, - 3113, 3095, 3117, 9246, 3116, 3123, 3119, 3130, 3131, 3140, - 3124, 3146, 3122, 3130, 3146, 3139, 3134, 3151, 3131, 3143, - 3153, 3144, 3136, 9233, 3158, 3142, 3176, 3161, 3161, 3165, - 3163, 3179, 3187,14170, 9243, 3175, 2890, 2892, 3124, 2981, - 3091, 3231, 3110, 3237, 3238, 3125, 3251, 9251, 3223, 3252, - 3224, 3258, 3259, 3264, 3265, 2967, 3236, 3019, 3265, 3196, - - 3197, 3223, 3251, 3267, 3263, 3271, 3270, 9181, 9128,14170, - 3236, 3235,14170, 3253, 3253, 3247, 3242, 3245, 3266, 3248, - 3264, 3268, 3270, 3256, 3263, 3259, 3278, 3262, 3273, 3289, - 3309, 3292, 3293, 3294, 3297, 3299, 3305, 3308, 3307, 3322, - 3310, 3318, 3316, 3327, 3318, 3319,14170, 3357, 3313, 3325, - 3349, 3317, 3325, 3325, 3352, 3362, 3366, 3354, 3353, 3366, - 9148, 3371, 3374, 3360, 3362, 3367,14170, 3364, 3368, 3365, - 3409, 3382, 3387,14170, 3387, 3377, 3378, 3391, 3415, 3417, - 3400, 3400, 3411, 3412, 3424, 3410, 3416,14170, 3420, 3419, - 3436, 3424, 3435, 3434, 3434, 3443, 3432, 3435, 3448, 3434, - - 9109, 9136, 9105, 9125, 8945, 3506, 3484, 1508, 8861, 8791, - 3510, 3485, 3488, 3028, 1344, 3531, 3540, 3508, 3593, 3557, - 3597, 3522, 3611, 8815, 8776, 3459, 8724, 3498, 8767, 3514, - 3511,14170, 3506,14170, 3505, 3516, 3584, 3533, 3528, 8761, - 3575, 3650, 3575, 3571, 3584, 3581, 3586,14170,14170, 8698, - 3583,14170, 3593, 8604, 0, 3591, 3579, 3599, 3599, 3602, - 3589, 3600, 3661, 3630, 3629, 3654, 3648, 3645, 3658, 3662, - 3661, 3656, 3664, 3663, 3666,14170, 3667, 3660, 3665, 3660, - 3665, 8594, 3670, 3666, 3675, 3677, 8565, 18, 8494, 3414, - 3525, 3578, 3529, 3585, 3639, 3640, 3739, 3711, 3740, 3720, - - 3746, 3658, 8395, 8417, 8388, 3692, 3701, 3705, 8364, 8335, - 8345, 8270, 8242, 8249, 3704, 3714, 3719,14170, 3720, 3707, - 14170, 3713, 3719, 3708, 3721, 3723, 3718, 3722, 3719, 3722, - 3726, 3737, 3718, 3739, 3740, 3731, 3732, 3727, 3738, 3733, - 3755, 3764, 3771, 3763, 3758, 3764, 3776, 3763, 3761, 3764, - 3780, 3782, 3784, 3774, 3789, 3786,14170, 3777, 3788, 3793, - 3780, 3771, 3782,14170, 3813, 3793, 3841, 3782, 3827, 3830, - 8254, 3834, 3822, 3823, 3819, 8147, 3815, 3821, 3839, 3824, - 8133, 3831, 8131, 3845, 3831, 3833, 3841, 3844, 3847, 3847, - 8018, 3838,14170, 3845, 3835, 3839, 3858, 3852, 3874, 3879, - - 3873, 3874, 3887, 3888, 3879, 3891,14170, 3874, 3892, 3896, - 3873, 3885, 3881, 3887, 3899, 3903, 3917, 2883, 1689, 8053, - 3918, 3961, 1818, 8052, 3954, 1837, 3979, 1749, 2985, 4005, - 3924, 3904, 3945,14170, 3894, 3935, 3943, 3930, 3938, 3946, - 3963, 3957, 0, 4023, 3947,14170, 3959, 3983, 3976, 4000, - 3982, 4021, 4005, 4010, 8054, 3995, 7977, 7970, 7958, 7832, - 7825, 3995, 4062, 3996, 7809, 7811, 4008, 4000, 4014, 4004, - 4016, 4020, 4031, 4035, 4020, 4042,14170, 4062, 4045, 4047, - 4069,14170, 4066, 4060, 4055, 4069, 4061, 4056, 966, 7778, - 2285, 0, 3938, 3987, 4050, 4051, 4056, 3941, 4074, 4065, - - 7738, 7737, 4075, 4066, 4110, 4071, 4068, 4066, 4072, 4076, - 4070, 4087, 4079, 4090, 4081, 4108, 4105, 4107, 4115, 4114, - 4104, 4125, 4113, 4114, 4126, 4129, 4130, 4115, 4130, 4123, - 4117, 4134, 4128, 4167, 4131, 4145, 4130, 4151, 4157, 4168, - 4160, 4176, 4165, 4158, 4171, 4167, 4176, 4171, 4175, 4178, - 4178, 4194, 4187, 4185, 4182,14170, 7686, 7682, 7678, 4199, - 4184, 4202, 4201, 4188, 4224, 7676, 7640, 4217, 4223, 4230, - 4254, 4221, 4212, 4223, 4218, 4228, 4229, 4244, 4247, 4248, - 4242, 4250, 4251, 4252, 4235, 4248, 4245, 4258, 4279, 4270, - 4273, 4267, 4280, 4283, 4292, 4291, 4286, 4276, 4295,14170, - - 4280, 4289, 4292, 4282, 4315, 4345, 4359, 4282, 4302, 4306, - 4306,14170, 4309, 4317, 4316, 4335, 4325, 4334, 4378, 2871, - 7632, 4379, 4351, 7636, 7544, 4332, 4339, 4350, 4363, 4402, - 4359, 4371,14170, 4362,14170, 4378,14170,14170,14170,14170, - 7559, 4359, 4383, 4428, 7509, 4386, 4396, 4405, 4408, 4411, - 4412, 4412, 4412, 4422, 4428, 4420, 4408, 4429, 4432, 4413, - 4433, 4430, 4437, 4441, 4442, 4431, 7366, 3511, 7409, 0, - 4394, 4442, 4380, 7338, 1989, 4434, 4435, 4506,14170, 4450, - 4437, 4442, 4452, 4459, 4449, 4450, 4479, 4472, 4473, 4483, - 4471, 4476, 4486, 4484, 4482, 4483, 4484, 4485, 4486, 4493, - - 4489, 4499, 4500, 4505, 4495, 4505, 4491, 4510, 4507, 4494, - 4506, 4511, 4512, 4522, 4533, 4539, 4527, 4526, 4527, 4527, - 4534, 4531, 4528, 4547, 4548, 4540, 4537, 4556, 4578, 4554, - 4540, 4556,14170, 4549, 4550, 4538, 4551, 4547, 4550, 4577, - 4560, 4562, 4573, 7344, 4579, 4580, 4595, 4585, 4586, 4583, - 4598, 4641, 4617, 7324, 4601, 4606, 4593,14170, 4608, 4604, - 14170, 4614, 4600,14170,14170,14170, 4595, 4605, 4620, 4627, - 14170, 4619, 4629, 4620, 4633, 4636, 4648, 4639, 4638, 4640, - 4657, 4658, 4659, 4657, 4662, 4653, 4669, 4677, 4657, 4671, - 4675, 4674, 4679, 4695, 2584, 7318, 4702, 4688,14170, 4686, - - 4704, 4705, 4706, 4707, 4699, 7064, 4771, 7050, 4732, 7086, - 4699, 0,14170, 7062, 4716, 4711, 4773, 4714, 4722, 4727, - 4737, 4732, 7053, 4760,14170, 7052, 4753, 4791, 4770, 4771, - 4771, 4776, 4773, 4778, 4779, 4775, 4792,14170, 4796, 4791, - 4800, 4813, 4802, 4805, 4804, 4804, 4811, 4798, 4799, 4796, - 4826, 4738, 6966, 6805, 6803, 4809, 4815, 0, 4743, 4813, - 4818,14170, 4820, 4832, 4832, 4830, 4845, 4830, 4846, 4845, - 4855, 4852, 4843, 4859, 4848, 4852, 4848, 4864, 4859, 4860, - 4871, 4866, 4857, 4863, 4867, 4875, 4882, 4478, 4868, 4872, - 4872, 4883, 4896, 4896, 4887, 4893, 4889, 4904, 4903, 4898, - - 4914, 4912, 4644, 4917, 4918, 4933, 4915, 4920, 4917,14170, - 4914, 4910, 4961,14170, 4936, 4936, 4937, 4932, 4938, 4953, - 4961, 4962, 4955, 6674, 4964,14170, 4964, 4971, 4957, 4959, - 4973, 4961, 4962, 4980, 4967, 4974, 4979, 4976, 4982, 4970, - 4975,14170, 5016, 4990, 4984, 4980,14170, 4985, 4992,14170, - 14170,14170,14170, 4998, 6666, 4994, 4994, 5008, 5010,14170, - 5023, 5017, 5018, 5027, 5019, 5026,14170,14170, 5030, 5066, - 14170, 5035, 5029, 5030, 5037, 5031, 5035, 5044, 5078, 5073, - 5037, 5052, 5071, 5057, 5069, 5075, 5085, 5069, 5077, 5149, - 6696, 5111, 5112, 6672, 6649, 5113, 5097, 5100,14170, 5102, - - 5121, 5111, 5116, 5108, 5116,14170, 5118, 5140, 5137, 5195, - 6631, 5138, 5130,14170, 5126, 5142, 5142, 5148, 5149, 5145, - 5150, 5146, 5175, 5145, 5174, 5174, 5182, 5181, 5195, 5202, - 5203, 5190, 5203, 5193, 5209, 5210, 5201, 2413, 6424, 5275, - 6252, 5279,14170, 5203, 6300, 5214, 5223, 5235, 5249, 5250, - 5257, 5250, 5251, 5247, 5255, 5261, 5246, 5258, 5253, 6207, - 5187, 5262, 5269, 5269, 5251, 5252, 5261, 5267,14170, 5269, - 5278, 5275, 5265, 5191, 5279, 5269, 5289, 5306, 5303, 5308, - 5308, 5300, 5307, 5316, 5316, 5312, 5308, 5309, 5303, 5353, - 5305, 5314, 5320, 5322, 5327, 5329, 5316, 5321, 5335, 5360, - - 14170, 5323, 5329, 5327, 5334, 5355, 5364, 5349, 5347, 5350, - 5353, 5360, 5399, 5375, 5364, 5364, 5366, 5367, 5370, 5371, - 5376, 5374, 5390, 5394, 5411, 5423, 5411, 5406, 5412, 5419, - 5417, 5419, 5433, 5424, 5423, 5426, 5440, 5427, 5444,14170, - 6048, 5445, 5449, 5443, 5450, 5984,14170, 5965,14170, 5449, - 5448, 5459, 5450, 5442, 5448, 5468, 5471, 5461,14170,14170, - 5458, 5471, 1035, 1169, 5467, 5470, 5501, 5502, 5512, 5493, - 5494, 5489, 5490, 5501, 5492, 5506, 5501, 5514, 5503, 5238, - 14170, 5519, 5529, 5537,14170,14170, 5513, 5502, 5501, 5507, - 5515, 5520, 5515, 5525, 5515, 5538, 5597, 5576, 5535, 5536, - - 5571, 5566, 5563, 5565, 5580, 0, 5592, 5593, 5574, 5594, - 5586, 5605, 5608, 5594,14170, 5610, 5611, 5612, 5613, 5615, - 5603, 5609, 5620, 5624, 5620, 5615, 5634,14170, 5620, 5646, - 5647, 5648, 5645, 5901, 5899, 5683, 1957, 3059, 5697, 5693, - 5647,14170, 5653, 5648, 5655, 5666, 5753, 5662, 5659, 5663, - 5663, 5670, 5666, 5681, 5674, 5671, 5672, 5408, 5720, 5690, - 5693, 5682, 5683, 5695, 5694, 5694, 5702, 5693, 5703, 5770, - 0, 5722, 5721, 5719, 5736, 5725, 5722, 5728, 5727, 5734, - 5732, 0, 5746, 5747, 5753, 5736, 0, 5814, 5748, 5764, - 5752, 5762, 5770, 5587, 5765, 5783, 5777,14170, 5793, 5781, - - 5392, 5817, 5783, 5790, 5786, 5803, 5808, 5791, 5807, 5797, - 5795, 5813, 5808, 5815, 5807, 5819, 5817, 5826, 5823, 5815, - 5810, 5824,14170,14170,14170,14170, 5817, 5832, 5839, 5821, - 5836, 5845, 5847, 5847, 5853, 5842, 5735, 5860, 5851, 5865, - 5852, 5867,14170,14170,14170,14170, 5864, 5852,14170, 5855, - 5756,14170,14170, 5871, 5864,14170, 5867, 5862, 5879, 5865, - 5877, 5874, 5881,14170, 1446, 1625,14170, 2438,14170, 5874, - 5879, 5893, 5702, 5551, 5714, 5547, 5918,14170, 5883, 5896, - 5899, 5890, 5906, 5909, 5905, 5903, 5910, 250, 5979, 5538, - 5473, 5350, 5935, 5346, 5941, 5915, 5920, 5924, 5917, 5923, - - 5919, 5925,14170, 5938, 5921, 5927, 5990, 5935, 5945, 5968, - 5975, 5960, 5961, 5976, 5984, 5981, 5990, 5989, 5977, 5990, - 5977, 5980, 0, 5984, 5985, 5995,14170, 6003,14170,14170, - 5983,14170, 5993, 5994, 5997, 5282, 5997, 6000, 6002, 5995, - 6006, 6017, 6015,14170,14170, 6011,14170, 6030, 5247, 6073, - 5134, 6077, 6009, 6043,14170, 6051, 6037, 6092, 5725, 6044, - 6050, 6053, 6050, 6046, 6043, 6051, 5983, 6057, 6054, 6069, - 6055, 6058, 6068, 6067, 6080, 0, 6120, 6135, 6081, 6068, - 6086, 6086, 6105, 6096, 6115, 6117,14170, 6150, 6108, 5172, - 6112, 6121, 6123, 6113, 6124, 6121, 6122, 6127, 6113, 6129, - - 0, 6121, 6127, 6123, 6138, 5171, 6129, 6126, 6171, 6139, - 6129, 6199, 6146, 6146, 6148, 6152, 6162,14170,14170, 6172, - 6165, 5084, 6162, 5078, 6196, 6168,14170, 6163, 6173, 6166, - 6175, 6187, 6167, 5030, 6171, 6178, 6179, 6179, 6185, 6198, - 14170, 6182, 6196, 6188, 5026, 6194, 6190, 6201,14170, 6194, - 6196, 6203, 6197, 6203, 6229, 6215, 6216, 6220, 6222, 6237, - 14170,14170, 6236, 6242, 6239,14170, 6237, 6241, 6242, 5043, - 2570,14170, 6247, 6247, 4964, 4768, 4715, 6271, 4753, 6272, - 6273, 6236, 6248, 6242, 6238, 6245, 6248, 6243,14170, 6242, - 4649, 6319, 6307, 6293, 6330, 6339, 6350, 4640, 4407, 4316, - - 6299, 4337, 6301, 6315, 6268, 4323, 6284, 6294, 6302, 6293, - 6296, 6309, 6314, 6308,14170, 6325, 6324, 6337, 6335, 6326, - 6342, 6330, 6334, 6335, 6334, 6334, 6338, 6344, 6345, 6353, - 6349, 6360, 6361, 6360, 6365, 6367, 6372, 6373, 4152, 6373, - 4015, 6374, 6366, 6381, 6376, 6382, 6391, 6382, 6385, 3938, - 6433,14170, 3887, 6437,14170, 6392, 6395, 6406, 6411, 0, - 0, 6446, 6401, 6408, 6407, 6408, 6415, 6414, 6414, 6425, - 6461, 6414, 6426,14170, 6436, 6420, 6436, 6441, 6429, 3931, - 0, 0, 6424, 6440, 6439, 6450, 6454, 6454,14170, 6465, - 6510, 6452,14170, 6458, 6452, 6447, 6472,14170, 6466, 6474, - - 6486, 6518, 6490, 6491, 6482, 6493, 6483,14170, 6486, 6496, - 6531, 6500, 6499, 0, 6546, 1544, 6495, 3777, 6498, 6517, - 6523, 6509, 6511, 6520, 6525, 6531,14170, 6523, 6538, 6528, - 6537, 6543, 6541, 6543, 6547, 6537, 6532, 6547, 6544, 6545, - 6556, 3772, 3771, 6539, 6560, 6551, 6561, 6567, 6551, 6569, - 6575, 6582,14170, 6579, 6582, 6573, 6569, 6574, 6578,14170, - 6586, 6586, 6581,14170, 6587, 6588, 6598, 6592, 6591, 6602, - 6626, 6627,14170, 6596, 6612, 6609, 6613, 6614, 6617,14170, - 3699, 6640, 6674, 6680, 3600, 6661, 6662, 6681, 6637, 6699, - 6700, 6715, 652, 6731, 6740, 3628, 6642, 6658, 6651, 6648, - - 6664,14170, 6686, 6688, 6676, 6690, 6687, 6689, 6689, 6700, - 6705, 6709, 6719, 6715, 6711, 6725, 6728, 6729, 6722,14170, - 6738, 6734, 6739, 6740, 6727, 6746, 6745, 6731, 6733, 6752, - 6746, 6758, 6747,14170, 6746, 6761, 6751, 6769, 6767, 6776, - 14170, 6783, 6772,14170, 3627, 0, 6773, 6782, 6777, 6771, - 6787, 6777, 6791, 6782, 0, 0, 6790, 6793, 6781, 6802, - 6802, 6786, 6806,14170, 3594, 6804, 6795, 6806, 6662, 6868, - 14170, 6803, 6793, 0, 6874, 6817, 6813, 6846, 6846, 6811, - 6840, 6837, 6823, 6884, 6848, 6852, 6837, 6857, 6838, 6861, - 6865, 6858, 0, 0, 6859, 6856, 6863, 1551, 3534, 1922, - - 6868, 6855, 5946, 6858, 3519, 6891, 6877, 6879, 6867, 6874, - 6896, 6885, 6899, 3514, 3456, 6890, 6901, 6895, 6899, 6900, - 6924, 6910, 6911, 6896, 6912, 6906, 6902, 6910, 6919, 6908, - 6915, 6910,14170, 6915, 6910, 6924, 6921, 6937, 6924, 6931, - 6930, 6938, 6940, 6953, 6958, 6957, 6948, 6950, 6961, 6951, - 6987, 6965, 6954, 6954, 6950, 3401, 6975, 7022, 6997, 749, - 7034, 7040, 7055, 7059, 3403, 3305, 7020, 7036, 7044, 7046, - 5393, 7080, 942, 7103, 7112, 7118, 7124, 6998, 7133, 7137, - 7002, 3288, 3223, 6980,14170, 7006, 7000, 7023, 7026, 7044, - 7057, 7069, 7080, 3179, 7100, 7104,14170, 7113,14170, 7115, - - 14170, 7116, 7110, 7120,14170, 7122, 7113, 7126, 7125, 7126, - 7126, 7117, 7129, 7120, 7126, 7129,14170,14170,14170, 7141, - 7129, 7141,14170, 7139, 7145, 7158, 7148, 7147, 7171,14170, - 7155, 3126, 7163, 7163, 7174, 7160, 7161, 7014, 7165,14170, - 7172, 7171, 7174, 7084, 7217,14170,14170, 7172, 7182, 0, - 7192, 7193, 7184, 7190, 7187, 7202, 7192, 7094, 7216, 0, - 7245, 7190, 7205, 7207, 7260, 7224, 7212, 7235, 7228, 3121, - 7228, 7240, 7233, 3061, 2033, 3073, 7232, 7238,14170, 7085, - 7229,14170, 7235, 7236, 7227, 7236, 7242, 7253, 7258, 7248, - 7261, 7265, 7258, 7253, 7270, 7267, 7270,14170, 7270, 7269, - - 7289, 7275, 7276, 7281, 7292, 7286, 7316, 7296, 7317, 7290, - 14170, 7285, 7287, 7293,14170, 7292, 3006, 7306, 7317, 7305, - 14170, 7307, 7323, 7326, 7316, 7329, 3008, 7315, 7317, 7340, - 14170, 7315, 7341, 1445, 7376, 2956, 7367, 7382, 7344, 7401, - 7405, 7413, 7424, 2981, 7375, 7380, 2631, 7436, 7407, 7442, - 7454,14170, 2977, 7395, 7397, 7405, 2909, 7412, 2893, 7411, - 2863, 7415, 7408, 7429, 7420,14170, 7430, 7418, 7426, 7442, - 7432, 7426, 7429, 7434,14170, 7435, 7437, 7456, 7439,14170, - 7459, 7441, 7460, 7451, 7447, 7496, 7471, 7469, 7465,14170, - 7474, 7485, 7478, 7486, 7484, 7533, 7502, 7524,14170, 7505, - - 0, 7526, 0, 7538, 7493, 7492, 2829, 7507, 7514, 7507, - 7519, 7527, 7531, 7526, 7527, 7535, 7578, 7545, 7532, 7551, - 2733, 7545, 7548, 7538, 7571, 7543, 7549, 7554, 7560,14170, - 7567, 7573, 7576, 2900, 7568, 7563,14170, 7581, 7571, 7585, - 14170, 7579, 7590,14170, 7578, 7591, 7592, 7594, 7587, 7592, - 2615, 7598, 7598, 7598, 7595, 2606, 7600, 7592, 7604, 7594, - 14170, 7606,14170, 7600,14170,14170, 7601,14170, 2473, 7634, - 7625,14170, 7632,14170, 7625, 7639, 7643, 7633, 7629, 7646, - 7636,14170, 7633, 7651, 7651, 7637, 7647, 7639, 7714, 7688, - 5562, 7689, 7725, 7726, 7710, 7745, 7746, 2828, 7757, 7761, - - 7687, 7714, 7718, 7734, 7734, 2460, 7742, 7738, 7748,14170, - 7735, 7741, 7753, 7755, 7752, 7753,14170,14170, 7761, 7762, - 7747, 7747, 7688, 7763, 7765,14170, 7826, 7757, 7769, 7779, - 7766, 7762, 7782, 7788, 7789, 7844, 7794, 7854, 7821, 2432, - 7810, 7840, 0, 7815, 7826, 7849, 7847, 7848, 7857, 7848, - 7849, 7858, 7875, 7718, 7866, 7867,14170, 7860, 7871, 7872, - 0, 7841, 7859, 7865, 7876, 7845, 7861, 7846, 7864, 7878, - 7887, 7867, 7671, 7874, 7877, 7877, 7872, 2351, 7878, 7893, - 7895, 7897, 7906, 2329,14170, 2298, 7898, 7909, 7911, 7902, - 14170, 2289, 7898, 7918, 7928, 7919,14170, 7916,14170, 7917, - - 7930, 7929, 7926, 7932, 7934, 7934, 7944, 2300, 7934, 7947, - 7936, 7948, 7952, 7947, 8011, 7973, 8012, 7984, 8027, 8031, - 7950, 7972, 7985, 7979, 7989, 2292,14170, 7970,14170, 8004, - 14170, 8002, 8000, 8001, 8009, 8016,14170, 8007, 8072, 8052, - 8020, 8069, 8080, 8008, 8025, 8011, 8011, 8071, 8080, 8085, - 8082, 8082, 8118, 8083,14170, 8081, 8144, 8095, 0, 8100, - 8083, 8090, 8084, 8105, 8113, 8114, 8137,14170, 8062, 8076, - 8080, 8129, 8124, 8175, 8132, 8130, 8146, 8181, 8182, 8192, - 14170, 8142,14170, 8158,14170, 8157,14170, 7707, 2234, 8154, - 8163, 8154, 7824, 8164, 8159, 8187, 8159, 8165, 8174, 8194, - - 8181, 8195, 8197, 8195, 8196, 8205, 8186, 8211, 8206, 8206, - 14170, 8201, 8207, 8209, 8204, 8210, 8174, 8217, 8217, 8221, - 2234, 8218, 8224, 8279, 8229, 8231, 8247, 2216, 8230,14170, - 8255,14170,14170,14170, 8258,14170, 8242, 8276, 8302, 8309, - 8308, 8256, 8271, 8291, 8281, 8284, 8295, 8292,14170, 8289, - 8307,14170, 8347, 8318, 8319, 8304, 8309, 8381, 8321, 8308, - 8311, 8325, 0, 8385, 8386, 8390, 8344, 8345, 8394, 8359, - 8352, 8361, 2189, 8404, 8411, 8422, 8356,14170,14170,14170, - 8376, 8385, 8377, 8379,14170, 8400, 8412, 8421, 8427, 8408, - 8425, 2019, 8413, 1998,14170, 8414,14170, 8428, 8429, 8421, - - 8420, 8424,14170, 2050, 8431, 8425, 3018, 8433, 8427, 8469, - 8428, 8436, 8477, 0, 1830, 8464, 8466, 8481, 8483, 1759, - 8483, 8471, 8405, 8507, 8529, 8555,14170, 8485, 8488, 8492, - 8412, 8503, 8489, 8502, 8413, 8512, 8508, 8511,14170, 8514, - 8583, 8535, 8521, 8522, 8589, 8517, 1709, 8470, 0, 1652, - 8474, 0, 8518, 8528, 3980, 8551, 8558, 8553, 8608, 8617, - 8630,14170, 8546, 8579, 8574,14170, 8612, 1579, 8624, 8628, - 8612, 8616, 8619, 8620, 8619, 8633, 8618, 8618, 8619, 8632, - 8635, 8636,14170, 1374, 8635, 3289,14170, 3975, 8636, 8671, - 8633, 8665, 8666, 0, 0, 8684,14170, 8669, 8683,14170, - - 14170, 8717, 8728, 8657, 8697, 8518, 8685, 8756, 8519, 0, - 8681, 8718, 8686, 8688, 8698, 8683, 8765, 8689, 8698,14170, - 8791, 8708, 8724, 1313, 1065, 8732, 8758, 7520, 1008, 8128, - 8722, 8741, 8759, 8818, 8759, 8766, 8771,14170, 8772, 8780, - 8786, 8771, 8774, 8787, 8788, 8780, 8785, 8786, 7987, 8391, - 8796,14170, 8801,14170, 989, 3995,14170, 5244, 8820, 914, - 8804, 0, 8802,14170, 8812, 8860, 8882, 0, 0, 0, - 14170, 8813, 8864, 8819, 8879, 8875, 0, 0, 8888, 0, - 8848, 8843, 8849, 8865, 8869, 8870, 8904, 8860, 8877,14170, - 14170, 8879, 8880, 8866, 8885, 879, 8617, 876, 8878, 8869, - - 8872, 8882, 8883, 8885, 8885, 8904, 8915,14170, 8912, 8919, - 8904,14170, 8903, 8907,14170,14170, 8918, 8598,14170, 5561, - 14170, 8909,14170, 8913, 8920,14170, 830, 8912, 0, 8964, - 0, 8957, 0, 743, 8916, 8933, 8929, 8935, 8930, 8934, - 8949, 8987, 8728, 8758, 8953, 8957, 8988, 8951, 8958,14170, - 8964, 8969,14170, 8973, 8970, 8961, 8966, 8966, 8963, 8969, - 670,14170,14170, 8976, 8971, 8986, 8990,14170, 8974, 602, - 0, 9001, 447, 9010,14170, 8977, 8983,14170, 8986, 8987, - 8994, 8997, 8868, 9011, 9048, 9058, 9064, 9066, 9002, 9007, - 9028, 9024, 9040,14170, 436, 9039, 9035, 9039, 9045, 9038, - - 9051, 461, 367, 9046, 9082,14170, 330, 9078, 366, 9047, - 9044, 9050,14170, 9041, 9048, 0, 9091, 9052, 9093, 0, - 9116, 0, 9122, 9123,14170, 9064,14170, 9066, 9078, 9079, - 14170, 9081, 9087, 9101, 9084, 9102, 9097, 0, 315, 9137, - 9090, 9093, 9097, 9095, 9144,14170, 9115, 262, 254, 9150, - 0, 9151, 0,14170, 9132, 9130, 9122, 9124, 9132, 9122, - 9134, 9130, 9125, 9127, 9134, 0, 0, 143, 9178, 0, - 9137, 9199, 9182, 9208, 9155,14170,14170, 138, 109, 9155, - 9154, 9166,14170,14170, 9156,14170, 9177, 9170, 9195, 9196, - 0, 43,14170, 9225, 9251, 9260, 9193,14170,14170, 9225, - - 9227, 9228,14170, 6, 9219, 9229,14170,14170, 9274,14170, - 14170,14170, 9263,14170,14170, 9259, 9260, 9272, 9269, 9262, - 14170, 9274, 9274, 9276,14170,14170, 9338, 9356, 9374, 9392, - 9410, 9428, 9446, 9464, 9482, 9500, 9518, 9536, 9554, 9572, - 9590, 9608, 9626, 9644, 9662, 9680, 9698, 9716, 9734, 9752, - 9770, 9788, 9806, 9824, 9842, 9860, 9878, 9896, 9914, 9932, - 9950, 9968, 9986,10004,10022,10040,10058,10076,10094,10112, - 10130,10148,10166,10184,10202,10220,10238,10256,10274,10292, - 10310,10328,10346,10364,10382,10399,10417,10435,10453,10471, - 10489,10506,10524,10542,10560,10578,10596,10614,10632,10650, - - 10668,10686,10704,10722,10740,10758,10776,10794,10812,10830, - 10848,10866,10884,10902,10920,10937,10955,10973,10991,11009, - 11027,11045,11063,11080,11098,11116,11134,11152,11170,11188, - 11206,11224,11242,11260,11278,11296,11314,11332,11350,11368, - 11386,11404,11421,11439,11457,11475,11493,11511,11529,11546, - 11564,11582,11600,11618,11636,11654,11672,11690,11708,11726, - 11744,11762,11780,11798,11816,11834,11852,11869,11887,11905, - 11923,11941,11959,11977,11995,12013,12031,12049,12060,12074, - 12092,12100,12116,12133,12137,12153,12171,12181,12197,12215, - 12233,12251,12268,12284,12302,12320,12338,12356,12374,12391, - - 12407,12425,12434,12450,12468,12486,12504,12521,12529,12544, - 12560,12577,12595,12613,12631,12649,12667,12685,12703,12721, - 12739,12757,12767,12775,12790,12805,12816,12824,12832,12848, - 12864,12880,12897,12915,12933,12951,12969,12987,13005,13023, - 13041,13059,13077,13095,13113,13131,13149,13167,13180,13188, - 13196,13204,13215,13231,13247,13255,13263,13279,13297,13315, - 13333,13351,13369,13387,13405,13423,13441,13459,13477,13493, - 13509,13527,13545,13555,13571,13587,13600,13618,13635,13652, - 13669,13680,13696,13713,13730,13742,13758,13776,13793,13811, - 13828,13846,13863,13879,13896,13906,13922,13939,13957,13974, - - 13992,14010,14027,14044,14062,14074,14090,14107,14124,14135, - 14151 + 10936,10885, 2185, 2196,10879, 2168,10850,10875, 2200, 2207, + 10849, 2208,10815,10842, 2217, 2224, 2198, 2211, 2233, 2186, + 2253, 856, 2273,10878, 2215, 2178, 2293,10831, 2237,10797, + 10824, 2316, 2307, 2339, 2193, 2360, 2393, 2408, 2426, 2446, + 10860, 2288, 2295, 2383, 2461, 2486, 2495,10696, 2260,10664, + 10656, 2425, 2447, 2184, 2327,10578,10588, 2457, 2281, 2476, + 14180, 2194, 2214, 2226, 2260, 2274, 2265, 2294,10599, 2293, + 2305, 2320, 2312, 2330, 2327, 2515, 2319, 2337, 2355,10595, + + 2364, 2368, 2435,14180, 2436, 2440, 2443, 2449, 2462, 2482, + 10523, 2483, 2510, 2490, 2480, 2478, 2498, 2520, 2497, 2516, + 2499, 2525, 2521, 2519, 2537, 2532, 2533, 2524, 2556,10483, + 10477, 2533, 2402, 2419, 2472, 2504, 2482, 2605, 2609, 2576, + 2613,10501, 2580, 2617, 1372, 2621, 2631, 2633,10498, 2637, + 2641, 2643, 2544, 2372,10359,10347,10341, 2642,10312,10337, + 2577, 2568, 2576, 2579,10262, 2644,10198,10158,10068, 2650, + 10022,10032, 92, 2597, 2605, 2625, 2612, 2612,14180, 2612, + 2624, 2632, 2635, 2617, 2637, 2645, 2643, 2668, 2650, 2633, + 2649, 2654, 2679, 2677, 2650, 2676, 2688, 2681, 2694,14180, + + 2724, 2715, 9707, 2683,14180, 2685, 9286,14180, 2704, 2701, + 2686, 2700, 2704, 2702, 2699, 9285, 2691, 2699, 2709, 2721, + 2706, 2714, 2502, 2725, 2729, 2719, 9284, 2720, 2731, 2761, + 2730, 2744,14180, 2778, 2742, 2736, 2755, 2742, 2736, 2751, + 2752, 2749, 2766, 2753,14180, 2770, 2763, 2773, 2761, 2771, + 2772, 2774, 2778, 2773, 2772, 2785, 1723, 2825, 2844, 2227, + 2840, 2853, 2816, 2841, 2857, 2863, 2873, 947, 2168, 2835, + 9323, 2904, 42, 2859, 9283, 916, 9282,14180, 9320,14180, + 2874, 2861, 2922, 2937, 2960, 1309, 2991, 2882, 2925, 9319, + 2981, 3014, 3023, 3032, 2228, 3058, 3067, 3076, 2259, 3083, + + 14180, 9318,14180, 989, 2442, 3092, 3115, 2574, 2889, 2943, + 2817, 2907, 3002, 2923, 2839, 2839, 2851, 2858, 2872, 2905, + 2913, 3070,14180, 2934, 2941,14180, 9307, 2929, 3131, 3140, + 2954, 2996, 2988,14180, 3014, 3022, 3038,14180, 3074, 3076, + 3078, 3059, 3071, 9317, 3093, 3101, 3099, 3129, 3130, 3139, + 3126, 3149, 3124, 3130, 3147, 3139, 3134, 3151, 3131, 3143, + 3153, 3144, 3136, 9303, 3146, 3143, 3146, 3158, 3162, 3153, + 3160, 3154, 3163, 3170,14180, 9314, 3175, 2971, 2990, 3121, + 3049, 3130, 3233, 3234, 3239, 3240, 3246, 3248, 9322, 3252, + 3254, 3258, 3260, 3264, 3266, 3270, 2822, 3035, 2847, 3267, + + 3199, 3213, 3231, 2888, 3269, 3268, 3273, 3271, 9263, 9244, + 14180, 3234, 3236,14180, 3253, 3254, 3248, 3242, 3243, 3263, + 3245, 3262, 3267, 3270, 3256, 3263, 3259, 3280, 3262, 3268, + 3288, 3307, 3293, 3293, 3295, 3298, 3299, 3306, 3308, 3308, + 3320, 3308, 3318, 3316, 3327, 3318, 3319,14180, 3357, 3313, + 3325, 3348, 3319, 3327, 3323, 3349, 3363, 3366, 3356, 3353, + 3366, 9264, 3372, 3374, 3360, 3362, 3367,14180, 3364, 3368, + 3365, 3409, 3382, 3387,14180, 3389, 3379, 3380, 3402, 3418, + 3417, 3401, 3400, 3412, 3414, 3425, 3411, 3418,14180, 3420, + 3419, 3436, 3424, 3435, 3434, 3434, 3443, 3434, 3437, 3450, + + 3442, 9236, 9212, 9183, 9210, 9180, 3503, 3485, 1508, 9207, + 9130, 3518, 3496, 3484, 3495, 1344, 3536, 3590, 3506, 3605, + 3537, 3623, 3516, 3554, 9154, 9125, 3465, 9117, 3498, 8905, + 3506, 3507,14180, 3510,14180, 3527, 3540, 3563, 3555, 3546, + 8879, 3564, 3634, 3556, 3553, 3570, 3578, 3597,14180,14180, + 8796, 3595,14180, 3608, 8798, 0, 3605, 3593, 3615, 3616, + 3617, 3617, 3627, 3662, 3632, 3620, 3635, 3632, 3629, 3643, + 3659, 3665, 3650, 3660, 3664, 3669,14180, 3671, 3664, 3669, + 3678, 3665, 3669, 8768, 3674, 3670, 3679, 3681, 8714, 18, + 8603, 3414, 3562, 3717, 3574, 3582, 3743, 3728, 3744, 3750, + + 3751, 3752, 3757, 3690, 8544, 8550, 8452, 3718, 3713, 3718, + 8479, 8411, 8378, 8293, 8275, 8155, 3716, 3726, 3731,14180, + 3732, 3719,14180, 3725, 3731, 3720, 3733, 3735, 3729, 3734, + 3731, 3734, 3738, 3749, 3730, 3751, 3752, 3743, 3744, 3739, + 3752, 3757, 3781, 3776, 3784, 3775, 3770, 3776, 3788, 3775, + 3773, 3776, 3792, 3794, 3796, 3785, 3801, 3798,14180, 3789, + 3800, 3805, 3792, 3783, 3794,14180, 3826, 3805, 3005, 3791, + 3812, 3838, 8149, 3842, 3833, 3834, 3830, 8148, 3825, 3831, + 3849, 3834, 8142, 3840, 8093, 3854, 3840, 3843, 3850, 3855, + 3857, 3857, 8046, 3848,14180, 3855, 3844, 3848, 3860, 3852, + + 3876, 3888, 3883, 3884, 3898, 3899, 3890, 3902,14180, 3885, + 3902, 3906, 3883, 3895, 3890, 3896, 3908, 3913, 3927, 3000, + 1689, 8069, 3928, 3971, 1818, 8062, 3961, 1837, 3975, 1749, + 3930, 4005, 3970, 3914, 3948,14180, 3929, 3956, 3963, 3950, + 3954, 3961, 3974, 3969, 0, 4033, 3957,14180, 3969, 3985, + 3971, 3999, 3991, 4015, 4008, 4010, 8026, 3997, 8005, 7988, + 7981, 7837, 7832, 4000, 4073, 4001, 7825, 7767, 4013, 4005, + 4019, 4010, 4024, 4016, 4038, 4042, 4026, 4029,14180, 4052, + 4036, 4041, 4050, 4075,14180, 4072, 4067, 4060, 4075, 4068, + 4063, 966, 7728, 2285, 0, 3947, 3948, 4114, 3953, 3990, + + 3209, 4085, 4076, 7717, 7695, 4087, 4078, 4062, 4082, 4079, + 4076, 4082, 4085, 4079, 4096, 4087, 4098, 4094, 4110, 4107, + 4105, 4113, 4112, 4111, 4132, 4120, 4121, 4134, 4139, 4137, + 4123, 4141, 4135, 4129, 4146, 4138, 4166, 4143, 4160, 4147, + 4169, 4164, 4187, 4174, 4189, 4175, 4168, 4181, 4175, 4184, + 4181, 4186, 4190, 4190, 4205, 4198, 4195, 4192,14180, 7654, + 7613, 7536, 4209, 4196, 4217, 4218, 4206, 4230, 7419, 7406, + 4222, 4224, 4242, 4263, 4228, 4216, 4230, 4226, 4234, 4239, + 4257, 4261, 4262, 4255, 4261, 4263, 4265, 4254, 4264, 4261, + 4262, 4282, 4276, 4278, 4274, 4288, 4291, 4298, 4298, 4293, + + 4283, 4301,14180, 4288, 4298, 4305, 4296, 4330, 4346, 4361, + 4294, 4315, 4323, 4332,14180, 4332, 4340, 4325, 4345, 4332, + 4338, 4407, 2881, 7399, 4418, 4354, 7398, 7373, 4334, 4343, + 4354, 4386, 4416, 4353, 4392,14180, 4379,14180, 4396,14180, + 14180,14180,14180, 7362, 4389, 4410, 4427, 7237, 4414, 4426, + 4430, 4430, 4433, 4434, 4424, 4424, 4432, 4438, 4432, 4421, + 4440, 4443, 4446, 4426, 4446, 4443, 4450, 4451, 4452, 4442, + 7092, 2914, 7135, 0, 4063, 4453, 3563, 7059, 1989, 4446, + 4448, 4182,14180, 4469, 4456, 4459, 4479, 4482, 4469, 4471, + 4489, 4479, 4481, 4491, 4479, 4486, 4497, 4494, 4492, 4493, + + 4494, 4492, 4493, 4500, 4496, 4506, 4508, 4513, 4504, 4515, + 4508, 4526, 4524, 4521, 4529, 4531, 4533, 4543, 4544, 4547, + 4535, 4534, 4535, 4537, 4545, 4541, 4538, 4557, 4558, 4547, + 4544, 4563, 4585, 4561, 4547, 4564,14180, 4557, 4561, 4556, + 4580, 4578, 4581, 4597, 4581, 4583, 4585, 7064, 4591, 4589, + 4604, 4594, 4596, 4593, 4609, 4652, 4367, 7058, 4611, 4615, + 4602,14180, 4614, 4610,14180, 4617, 4603,14180,14180,14180, + 4597, 4605, 4634, 4636,14180, 4634, 4647, 4638, 4642, 4642, + 4654, 4644, 4646, 4649, 4665, 4666, 4665, 4663, 4668, 4657, + 4673, 4678, 4688, 4680, 4689, 4690, 4692, 4708, 3031, 7086, + + 4713, 4698,14180, 4696, 4712, 4713, 4714, 4715, 4707, 7055, + 4752, 7049, 3001, 7078, 4705, 0,14180, 7032, 4723, 4713, + 4773, 4715, 4723, 4728, 4743, 4754, 7008, 4771,14180, 7007, + 4734, 4801, 4770, 4748, 4738, 4761, 4758, 4767, 4768, 4766, + 4783,14180, 4787, 4797, 4803, 4788, 4810, 4804, 4815, 4814, + 4814, 4821, 4808, 4810, 4805, 3505, 4374, 6667, 6673, 6643, + 4807, 4813, 0, 4867, 4812, 4817,14180, 4818, 4824, 4825, + 4825, 4841, 4842, 4858, 4857, 4864, 4858, 4849, 4864, 4854, + 4859, 4855, 4871, 4866, 4867, 4878, 4873, 4856, 4862, 4865, + 4873, 4880, 4924, 4867, 4870, 4869, 4875, 4894, 4910, 4901, + + 4907, 4903, 4919, 4915, 4906, 4921, 4918, 4956, 4925, 4927, + 4930, 4926, 4932, 4929,14180, 4925, 4921, 4958,14180, 4940, + 4938, 4939, 4945, 4945, 4952, 4973, 4974, 4967, 6621, 4973, + 14180, 4970, 4976, 4962, 4964, 4978, 4966, 4970, 4991, 4974, + 4981, 4986, 4984, 4989, 4977, 4978,14180, 5023, 4995, 4987, + 4983,14180, 4999, 5007,14180,14180,14180,14180, 5026, 6620, + 5012, 5010, 5023, 5017,14180, 5029, 5022, 5024, 5035, 5027, + 5034,14180,14180, 5038, 5074,14180, 5043, 5037, 5038, 5043, + 5037, 5041, 5053, 5084, 3606, 5050, 5050, 5082, 5063, 5070, + 5077, 5091, 5076, 5085, 5155, 6481, 4603, 5119, 6450, 6329, + + 5120, 5099, 5101,14180, 5104, 5112, 5125, 5118, 5108, 5118, + 14180, 5120, 5142, 5140, 5201, 6309, 5143, 5135,14180, 5131, + 5147, 5147, 5152, 5154, 5150, 5155, 5142, 5181, 5153, 5177, + 5180, 5185, 5186, 5187, 5203, 5209, 5209, 5196, 5209, 5199, + 5215, 5216, 5207, 2413, 6270, 5281, 6179, 5285,14180, 5208, + 6183, 5217, 5229, 5241, 5255, 5256, 5263, 5257, 5258, 5254, + 5261, 5267, 5252, 5264, 5259, 6104, 5192, 5268, 5275, 5275, + 5257, 5258, 5267, 5273,14180, 5275, 5284, 5281, 5271, 5344, + 5294, 5296, 5316, 5315, 5313, 5318, 5318, 5311, 5318, 5327, + 5325, 5321, 5317, 5318, 5312, 5362, 5314, 5323, 5329, 5331, + + 5336, 5338, 5325, 5330, 5346, 4377,14180, 5335, 5344, 5343, + 5346, 5366, 5370, 5355, 5354, 5358, 5361, 5368, 5407, 5383, + 5372, 5371, 5374, 5376, 5379, 5381, 5388, 5386, 5414, 5408, + 5417, 5429, 5418, 5414, 5420, 5427, 5425, 5427, 5440, 5432, + 5432, 5435, 5450, 5439, 5456,14180, 6011, 5460, 5458, 5452, + 5460, 5990,14180, 5989,14180, 5459, 5457, 5469, 5460, 5451, + 5457, 5478, 5479, 5466,14180,14180, 5467, 5479, 1035, 1169, + 5475, 5478, 5136, 5509, 5510, 5496, 5501, 5497, 5500, 5512, + 5499, 5513, 5508, 5521, 5509, 5183,14180, 5526, 5527, 5543, + 14180,14180, 5520, 5509, 5509, 5515, 5523, 5528, 5520, 5531, + + 5520, 5527, 5586, 5649, 5529, 5539, 5559, 5575, 5557, 5558, + 5583, 0, 5583, 5591, 5573, 5592, 5581, 5597, 5598, 5584, + 14180, 5600, 5601, 5602, 5603, 5616, 5609, 5628, 5634, 5637, + 5641, 5636, 5631, 5650,14180, 5634, 5651, 5653, 5654, 5651, + 5738, 5679, 5689, 1957, 5692, 5695, 5698, 5661,14180, 5665, + 5651, 5664, 5676, 5754, 5675, 5672, 5677, 5673, 5681, 5677, + 5694, 5686, 5685, 5686, 5410, 5722, 5704, 5707, 5693, 5694, + 5700, 5700, 5700, 5726, 5716, 5727, 5590, 0, 5740, 5737, + 5735, 5749, 5738, 5735, 5734, 5733, 5740, 5737, 0, 5752, + 5754, 5761, 5744, 0, 5818, 5750, 5767, 5753, 5785, 5798, + + 5416, 5790, 5800, 5793,14180, 5806, 5794, 5822, 5823, 5798, + 5797, 5793, 5809, 5814, 5798, 5812, 5803, 5801, 5821, 5814, + 5819, 5813, 5822, 5820, 5829, 5833, 5823, 5828, 5842,14180, + 14180,14180,14180, 5839, 5856, 5855, 5836, 5851, 5858, 5860, + 5862, 5860, 5849, 5670, 5866, 5857, 5871, 5858, 5873,14180, + 14180,14180,14180, 5870, 5860,14180, 5861, 5716,14180,14180, + 5875, 5870,14180, 5870, 5865, 5882, 5874, 5886, 5892, 5899, + 14180, 1446, 1625,14180, 2438,14180, 5895, 5898, 5909, 5584, + 5525, 5934, 5515, 5935,14180, 5899, 5912, 5913, 5906, 5922, + 5916, 5911, 5909, 5916, 250, 5959, 5393, 5356, 5266, 5947, + + 5261, 5948, 5926, 5934, 5935, 5927, 5931, 5930, 5936,14180, + 5954, 5938, 5944, 6000, 5959, 5954, 5971, 5966, 5966, 5966, + 5982, 5993, 5992, 6000, 5998, 5987, 6000, 5990, 5995, 0, + 5999, 6000, 6008,14180, 6013,14180,14180, 5993,14180, 6003, + 6004, 6007, 5288, 6007, 6010, 6011, 6013, 6007, 6015, 6020, + 6020,14180,14180, 6015,14180, 6034, 5253, 6086, 5204, 6094, + 6015, 6053,14180, 6065, 6043, 6099, 5638, 6053, 6063, 6072, + 6070, 6059, 6055, 6062, 5994, 6069, 6065, 6081, 6067, 6069, + 6079, 6078, 6087, 0, 6122, 6150, 6090, 6076, 6099, 6100, + 6106, 6103, 6121, 6125,14180, 6159, 6118, 5249, 6123, 6132, + + 6135, 6125, 6136, 6133, 6134, 6139, 6125, 6142, 0, 6134, + 6140, 6135, 6149, 5248, 6140, 6137, 6183, 6151, 6143, 6211, + 6161, 6160, 6161, 6161, 6177,14180,14180, 6180, 6175, 5146, + 6173, 5141, 6206, 6181,14180, 6175, 6185, 6178, 6187, 6199, + 6179, 5127, 6184, 6192, 6194, 6190, 6196, 6210,14180, 6194, + 6209, 6201, 4970, 6207, 6204, 6215,14180, 6206, 6207, 6212, + 6207, 6218, 6237, 6225, 6227, 6233, 6234, 6249,14180,14180, + 6248, 6254, 6251,14180, 6249, 6254, 6256, 4682, 3131,14180, + 6261, 6258, 4629, 4395, 4349, 6282, 4388, 6283, 6285, 6248, + 6261, 6255, 6251, 6259, 6262, 6255,14180, 6253, 4377, 6336, + + 6304, 6316, 6342, 6348, 6357, 4373, 4375, 4294, 6310, 4262, + 6311, 6313, 6274, 4060, 6275, 6312, 6320, 6316, 6325, 6337, + 6341, 6333,14180, 6344, 6341, 6349, 6347, 6335, 6351, 6338, + 6341, 6342, 6341, 6341, 6347, 6351, 6352, 6359, 6356, 6367, + 6378, 6374, 6386, 6388, 6396, 6399, 4040, 6399, 3980, 6397, + 6398, 6385, 6400, 6393, 6395, 6404, 6395, 6397, 3894, 6441, + 14180, 3785, 6449,14180, 6403, 6401, 6409, 6418, 0, 0, + 6466, 6408, 6415, 6421, 6424, 6432, 6432, 6433, 6444, 6481, + 6432, 6448,14180, 6458, 6440, 6456, 6461, 6448, 3724, 0, + 0, 6443, 6457, 6458, 6469, 6471, 6467,14180, 6463, 6523, + + 6468,14180, 6475, 6467, 6471, 6496,14180, 6483, 6491, 6503, + 6536, 6505, 6512, 6501, 6512, 6502,14180, 6503, 6513, 6563, + 6508, 6516, 0, 6579, 1544, 6515, 3668, 6510, 6525, 6532, + 6518, 6519, 6530, 6543, 6554,14180, 6546, 6560, 6548, 6557, + 6565, 6563, 6565, 6570, 6560, 6554, 6569, 6566, 6567, 6576, + 3667, 3663, 6559, 6578, 6569, 6577, 6582, 6566, 6581, 6583, + 6591,14180, 6588, 6590, 6583, 6587, 6597, 6601,14180, 6608, + 6606, 6601,14180, 6609, 6610, 6620, 6615, 6614, 6624, 6648, + 6649,14180, 6618, 6632, 6629, 6631, 6632, 6633,14180, 3702, + 6655, 6692, 6696, 3575, 6659, 6660, 6698, 6652, 6717, 6721, + + 6729, 652, 6733, 6752, 3559, 6657, 6690, 6678, 6687, 6693, + 14180, 6716, 6717, 6706, 6712, 6712, 6711, 6712, 6718, 6723, + 6724, 6732, 6728, 6723, 6736, 6739, 6740, 6734,14180, 6752, + 6748, 6757, 6758, 6745, 6765, 6767, 6756, 6757, 6776, 6772, + 6780, 6765, 6772,14180, 6768, 6783, 6770, 6787, 6785, 6791, + 14180, 6796, 6785,14180, 3546, 0, 6786, 6796, 6789, 6783, + 6802, 6790, 6806, 6798, 0, 0, 6809, 6812, 6801, 6823, + 6825, 6812, 6832,14180, 3530, 6829, 6822, 6833, 6551, 6868, + 14180, 6829, 6820, 0, 6873, 6845, 6838, 6878, 6862, 6829, + 6854, 6852, 6833, 6892, 6856, 6867, 6853, 6870, 6852, 6876, + + 6880, 6879, 0, 0, 6880, 6875, 6883, 1551, 3474, 1922, + 6888, 6875, 6908, 6878, 3461, 6913, 6893, 6902, 6890, 6895, + 6913, 6902, 6915, 3457, 3376, 6909, 6919, 6915, 6919, 6920, + 6946, 6927, 6928, 6912, 6929, 6923, 6920, 6927, 6940, 6927, + 6935, 6930,14180, 6935, 6930, 6940, 6943, 6960, 6946, 6951, + 6951, 6958, 6958, 6971, 6974, 6976, 6966, 6970, 6981, 6971, + 7004, 6982, 6970, 6971, 6967, 3395, 6994, 7050, 7020, 749, + 7051, 7066, 7081, 7082, 3403, 3305, 7035, 7047, 7062, 7070, + 3002, 7113, 942, 7119, 7128, 7139, 7148, 7019, 7154, 7160, + 7013, 3290, 3284, 7004,14180, 7041, 7035, 7052, 7059, 7078, + + 7099, 7115, 7106, 3237, 7125, 7124,14180, 7138,14180, 7138, + 14180, 7139, 7134, 7144,14180, 7146, 7139, 7154, 7150, 7152, + 7153, 7143, 7155,14180, 7145, 7151, 7154,14180,14180,14180, + 7165, 7155, 7165,14180, 7163, 7167, 7182, 7165, 7167, 7193, + 14180, 7179, 3236, 7186, 7186, 7198, 7184, 7185, 7064, 7189, + 14180, 7197, 7196, 7199, 7100, 7243,14180,14180, 7196, 7207, + 0, 7218, 7218, 7209, 7215, 7211, 7233, 7215, 7264, 7246, + 0, 7281, 7220, 7225, 7227, 7288, 7241, 7236, 7260, 7253, + 3224, 7254, 7265, 7258, 3168, 2033, 3124, 7258, 7266,14180, + 7023, 7258,14180, 7265, 7266, 7256, 7264, 7271, 7280, 7285, + + 7276, 7289, 7295, 7287, 7283, 7293, 7290, 7292,14180, 7296, + 7295, 7314, 7302, 7302, 7307, 7318, 7311, 7339, 7323, 7344, + 7321,14180, 7315, 7317, 7323,14180, 7322, 3020, 7336, 7345, + 7333,14180, 7337, 7351, 7354, 7342, 7355, 3037, 7339, 7340, + 7361,14180, 7340, 7369, 1445, 7417, 3005, 7396, 7391, 7380, + 7429, 7438, 7447, 7458, 3023, 7409, 7418, 2846, 7476, 7399, + 7477, 7495,14180, 2969, 7395, 7395, 7422, 2951, 7435, 2946, + 7436, 2871, 7445, 7446, 7462, 7450,14180, 7461, 7447, 7454, + 7475, 7466, 7459, 7460, 7464,14180, 7466, 7468, 7488, 7470, + 14180, 7492, 7475, 7493, 7483, 7480, 7437, 7501, 7498, 7493, + + 14180, 7503, 7512, 7504, 7514, 7511, 7560, 7530, 7446,14180, + 7533, 0, 7467, 0, 7552, 7520, 7519, 2865, 7531, 7539, + 7530, 7532, 7540, 7555, 7551, 7552, 7559, 7603, 7559, 7557, + 7576, 2862, 7570, 7573, 7563, 7597, 7568, 7574, 7579, 7580, + 14180, 7578, 7596, 7597, 2614, 7583, 7580,14180, 7605, 7596, + 7610,14180, 7603, 7614,14180, 7602, 7615, 7616, 7618, 7611, + 7616, 2614, 7622, 7622, 7621, 7620, 2559, 7625, 7617, 7629, + 7619,14180, 7631,14180, 7625,14180,14180, 7626,14180, 2473, + 7671, 7631,14180, 7645,14180, 7639, 7655, 7666, 7657, 7653, + 7670, 7660,14180, 7657, 7675, 7675, 7661, 7671, 7663, 7711, + + 7712, 5015, 7741, 7745, 7749, 7715, 7774, 7775, 5127, 7805, + 7806, 7659, 7710, 7717, 7729, 7719, 2460, 7728, 7724, 7734, + 14180, 7721, 7750, 7762, 7766, 7762, 7766,14180,14180, 7776, + 7781, 7766, 7766, 7717, 7784, 7788,14180, 7834, 7779, 7791, + 7796, 7785, 7788, 7801, 7803, 7801, 7856, 7806, 7867, 7824, + 2432, 7822, 7859, 0, 7828, 7836, 7861, 7858, 7861, 7868, + 7859, 7860, 7869, 7889, 7757, 7868, 7869,14180, 7872, 7883, + 7884, 0, 7847, 7871, 7877, 7888, 7921, 7877, 7934, 7888, + 7899, 7905, 7885, 7831, 7892, 7895, 7895, 7896, 2351, 7902, + 7917, 7919, 7913, 7921, 2329,14180, 2298, 7913, 7924, 7925, + + 7916,14180, 2289, 7912, 7932, 7933, 7925,14180, 7929,14180, + 7929, 7943, 7942, 7939, 7949, 7960, 7955, 7962, 2300, 7952, + 7965, 7954, 7966, 7976, 7971, 8008, 8000, 8037, 8002, 8038, + 8049, 7968, 7988, 7995, 7989, 7999, 2292,14180, 7979,14180, + 8010,14180, 8013, 8011, 8019, 8030, 8035,14180, 8026, 8088, + 8070, 8038, 8085, 8096, 8024, 8043, 8088, 8088, 8089, 8099, + 8104, 8100, 8100, 8134, 8101,14180, 8099, 8160, 8113, 0, + 8118, 8101, 8120, 8114, 8127, 8153, 8150, 8155,14180, 8077, + 8079, 8083, 8149, 8144, 8084, 8149, 8147, 8162, 8095, 8197, + 8208,14180, 8158,14180, 8174,14180, 8173,14180, 8075, 2234, + + 8170, 8179, 8170, 8221, 8180, 8175, 8206, 8192, 8201, 8198, + 8216, 8203, 8219, 8217, 8213, 8214, 8223, 8204, 8229, 8224, + 8224,14180, 8219, 8225, 8227, 8222, 8228, 8189, 8234, 8235, + 8238, 2234, 8239, 8242, 8295, 8266, 8269, 8275, 2216, 8253, + 14180, 8276,14180,14180,14180, 8280,14180, 8264, 8294, 8323, + 8199, 8325, 8274, 8287, 8288, 8291, 8319, 8329, 8327,14180, + 8323, 8329,14180, 8363, 8340, 8341, 8326, 8331, 8375, 8344, + 8342, 8342, 8343, 0, 8333, 8403, 8407, 8362, 8365, 8411, + 8376, 8369, 8378, 2189, 8421, 8427, 8436, 8381,14180,14180, + 14180, 8391, 8398, 8392, 8393,14180, 8392, 8425, 8436, 8442, + + 8423, 8440, 2019, 8428, 1998,14180, 8429,14180, 8443, 8444, + 8436, 8435, 8439,14180, 2050, 8446, 8440, 5073, 8448, 8442, + 8484, 8443, 8451, 8492, 0, 1830, 8479, 8481, 8496, 8498, + 1759, 8498, 8486, 8422, 8522, 8544, 8570,14180, 8500, 8503, + 8507, 8426, 8518, 8504, 8517, 8428, 8527, 8523, 8526,14180, + 8529, 8598, 8550, 8536, 8537, 8604, 8532, 1709, 8485, 0, + 1652, 8486, 0, 8533, 8543, 7718, 8566, 8573, 8568, 8623, + 8632, 8645,14180, 8561, 8594, 8589,14180, 8627, 1579, 8639, + 8643, 8627, 8631, 8634, 8635, 8634, 8648, 8633, 8633, 8634, + 8647, 8650, 8651,14180, 1374, 8650, 5423,14180, 5755, 8651, + + 8686, 8648, 8680, 8681, 0, 0, 8699,14180, 8684, 8698, + 14180,14180, 8732, 8743, 8672, 8712, 8492, 8700, 8771, 8533, + 0, 8696, 8733, 8701, 8703, 8713, 8698, 8780, 8704, 8713, + 14180, 8806, 8723, 8739, 1313, 1065, 8747, 8773, 8482, 1008, + 8632, 8737, 8756, 8774, 8833, 8774, 8781, 8786,14180, 8787, + 8795, 8801, 8786, 8789, 8802, 8803, 8795, 8800, 8801, 8305, + 8613, 8811,14180, 8816,14180, 989, 5769,14180, 6713, 8835, + 914, 8819, 0, 8817,14180, 8827, 8875, 8897, 0, 0, + 0,14180, 8828, 8879, 8834, 8894, 8890, 0, 0, 8903, + 0, 8863, 8858, 8864, 8880, 8884, 8885, 8919, 8875, 8892, + + 14180,14180, 8894, 8895, 8881, 8900, 879, 8925, 876, 8895, + 8886, 8898, 8898, 8899, 8911, 8909, 8921, 8931,14180, 8928, + 8935, 8920,14180, 8919, 8923,14180,14180, 8934, 8859,14180, + 7093,14180, 8925,14180, 8929, 8939,14180, 830, 8928, 0, + 8979, 0, 8947, 0, 743, 8931, 8946, 8943, 8951, 8947, + 8960, 8966, 9007, 8743, 8773, 8973, 8974, 9007, 8971, 8980, + 14180, 8986, 8987,14180, 8990, 8987, 8977, 8982, 8982, 8980, + 8986, 670,14180,14180, 8993, 8986, 9001, 9006,14180, 8991, + 602, 0, 9021, 447, 9029,14180, 8992, 8997,14180, 9000, + 9001, 9007, 9003, 8883, 9026, 9070, 9078, 9077, 9086, 9017, + + 9021, 9033, 9032, 9055,14180, 436, 9055, 9051, 9057, 9063, + 9055, 9068, 461, 367, 9063, 9099,14180, 330, 9095, 366, + 9064, 9061, 9067,14180, 9057, 9064, 0, 9108, 9069, 9110, + 0, 9135, 0, 9136, 9142,14180, 9078,14180, 9077, 9094, + 9094,14180, 9087, 9101, 9115, 9099, 9121, 9114, 0, 315, + 9154, 9107, 9110, 9114, 9112, 9161,14180, 9132, 262, 254, + 9170, 0, 9182, 0,14180, 9138, 9136, 9126, 9134, 9142, + 9132, 9148, 9144, 9139, 9143, 9149, 0, 0, 143, 9198, + 0, 9150, 9207, 9199, 9216, 9186,14180,14180, 138, 109, + 9190, 9189, 9183,14180,14180, 9189,14180, 9211, 9202, 9206, + + 9207, 0, 43,14180, 9235, 9261, 9270, 9202,14180,14180, + 9235, 9237, 9239,14180, 6, 9235, 9265,14180,14180, 9289, + 14180,14180,14180, 9263,14180,14180, 9259, 9260, 9272, 9269, + 9272,14180, 9284, 9284, 9286,14180,14180, 9348, 9366, 9384, + 9402, 9420, 9438, 9456, 9474, 9492, 9510, 9528, 9546, 9564, + 9582, 9600, 9618, 9636, 9654, 9672, 9690, 9708, 9726, 9744, + 9762, 9780, 9798, 9816, 9834, 9852, 9870, 9888, 9906, 9924, + 9942, 9960, 9978, 9996,10014,10032,10050,10068,10086,10104, + 10122,10140,10158,10176,10194,10212,10230,10248,10266,10284, + 10302,10320,10338,10356,10374,10392,10409,10427,10445,10463, + + 10481,10499,10516,10534,10552,10570,10588,10606,10624,10642, + 10660,10678,10696,10714,10732,10750,10768,10786,10804,10822, + 10840,10858,10876,10894,10912,10930,10947,10965,10983,11001, + 11019,11037,11055,11073,11090,11108,11126,11144,11162,11180, + 11198,11216,11234,11252,11270,11288,11306,11324,11342,11360, + 11378,11396,11414,11431,11449,11467,11485,11503,11521,11539, + 11556,11574,11592,11610,11628,11646,11664,11682,11700,11718, + 11736,11754,11772,11790,11808,11826,11844,11862,11879,11897, + 11915,11933,11951,11969,11987,12005,12023,12041,12059,12070, + 12084,12102,12110,12126,12143,12147,12163,12181,12191,12207, + + 12225,12243,12261,12278,12294,12312,12330,12348,12366,12384, + 12401,12417,12435,12444,12460,12478,12496,12514,12531,12539, + 12554,12570,12587,12605,12623,12641,12659,12677,12695,12713, + 12731,12749,12767,12777,12785,12800,12815,12826,12834,12842, + 12858,12874,12890,12907,12925,12943,12961,12979,12997,13015, + 13033,13051,13069,13087,13105,13123,13141,13159,13177,13190, + 13198,13206,13214,13225,13241,13257,13265,13273,13289,13307, + 13325,13343,13361,13379,13397,13415,13433,13451,13469,13487, + 13503,13519,13537,13555,13565,13581,13597,13610,13628,13645, + 13662,13679,13690,13706,13723,13740,13752,13768,13786,13803, + + 13821,13838,13856,13873,13889,13906,13916,13932,13949,13967, + 13984,14002,14020,14037,14054,14072,14084,14100,14117,14134, + 14145,14161 } ; -static const flex_int16_t yy_def[4212] = +static const flex_int16_t yy_def[4223] = { 0, - 3927, 3927, 3926, 3, 3928, 3928, 3, 3, 3929, 3929, - 3929, 3929, 3930, 3930, 3931, 3931, 3932, 3932, 3933, 3933, - 3934, 3934, 3928, 3928, 3928, 3928, 3935, 3935, 3936, 3936, - 3936, 3936, 3937, 3937, 3938, 3938, 3926, 37, 37, 37, - 3928, 3928, 3928, 3928, 3928, 3928, 3939, 3939, 3940, 3940, - 3941, 3941, 3942, 3942, 3943, 3943, 3944, 3944, 3945, 3945, - 3928, 3928, 3946, 3946, 3947, 3947, 3945, 3945, 3928, 3928, - 3948, 3948, 3949, 3949, 3926, 3926, 3926, 3926, 3926, 3926, - 3950, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 131, 3926, 3926, 3926, 3951, 3951, 3951, 3926, - 3926, 3951, 3952, 3952, 3952, 3926, 3953, 3952, 3954, 3954, - 3954, 3926, 3955, 3926, 3954, 3956, 3956, 3926, 3956, 3926, - 3926, 3957, 3926, 3926, 3926, 3957, 3958, 3957, 3959, 3959, - 3959, 3926, 3960, 3959, 3926, 3961, 3926, 3959, 3962, 3962, - 3962, 3926, 3963, 3962, 3964, 3964, 3964, 3926, 3926, 3964, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3965, 3965, 3926, 3926, - 3965, 3966, 3966, 3926, 3967, 3966, 3926, 3968, 3969, 3970, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3971, 3926, 3972, 3971, 3926, 3926, 3926, 3973, 3926, 3974, - 3926, 3973, 3926, 3926, 3926, 3975, 3975, 3975, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3976, 3926, 3976, 3976, 3976, - 3926, 3926, 3976, 3976, 3976, 3977, 3926, 3978, 3977, 3977, - 3977, 3926, 3977, 3977, 3977, 3979, 3926, 3980, 3979, 3979, - 3979, 3926, 3979, 3979, 3979, 3981, 3981, 3926, 3981, 3926, - 3981, 3982, 3926, 3982, 3926, 3983, 3984, 3985, 3984, 3982, - 3986, 3926, 3987, 3986, 3986, 3986, 3986, 3926, 3986, 3926, - - 3988, 3989, 3990, 3989, 3991, 3989, 3926, 3926, 3986, 3986, - 3992, 3926, 3993, 3992, 3992, 3992, 3926, 3992, 3992, 3992, - 3994, 3926, 3994, 3994, 3926, 3994, 3926, 3926, 3994, 3994, - 3994, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3995, 3926, 3995, 3926, 3926, 3995, - 3996, 3926, 3997, 3996, 3926, 3996, 3998, 3999, 4000, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4001, 3926, 4002, - 4001, 3926, 4001, 3926, 4003, 3926, 4004, 4003, 3926, 4003, - 4005, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4006, - 3926, 3926, 4006, 4006, 4007, 4008, 3926, 3926, 4008, 4008, - 4009, 4010, 3926, 3926, 4010, 4010, 3926, 3926, 4011, 4012, - 4011, 4013, 4014, 4015, 4015, 4015, 4014, 4016, 4017, 3926, - 3926, 4018, 4019, 4018, 4020, 4018, 4021, 4022, 4022, 4022, - 4023, 4023, 4023, 4024, 4022, 4017, 4017, 4025, 4026, 3926, - 3926, 4026, 4026, 3926, 4027, 3926, 3926, 4027, 3926, 4027, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4028, 3926, 3926, 4029, 4030, 3926, 3926, - 3926, 3926, 3926, 3926, 4031, 4032, 3926, 3926, 4033, 4034, - 3926, 3926, 4035, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4036, 3926, 4036, 4037, - 3926, 4037, 4038, 3926, 4038, 3926, 4039, 4040, 4040, 4040, - 4041, 4039, 4041, 4041, 3926, 4042, 3926, 3926, 4042, 3926, - 4017, 3926, 4043, 4043, 4043, 4044, 4045, 4044, 4044, 4046, - 4047, 4043, 4048, 4045, 4046, 4045, 4045, 4017, 4049, 4017, - - 3926, 4049, 3926, 4049, 4049, 4050, 4017, 4051, 3926, 4051, - 4052, 3926, 4052, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4053, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4054, 3926, 4055, 3926, 3926, - - 3926, 3926, 3926, 4056, 3926, 4057, 3926, 4058, 4058, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 4059, 3926, 4060, 3926, 4061, 4062, 4063, 4064, 3926, - 4043, 4065, 4065, 4065, 4046, 4043, 4045, 4046, 4045, 4066, - 4045, 4067, 4068, 4069, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4070, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4053, 4071, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4072, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 4073, 3926, 3926, 3926, 3926, 4074, 3926, - 4075, 3926, 4076, 4076, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4062, 4063, 4062, 4063, - 4065, 4045, 4065, 4046, 4065, 4046, 4077, 4046, 4046, 4045, - 4067, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4070, 4078, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4079, 3926, 3926, 4071, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4072, 3926, - 4072, 4080, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 4076, 4076, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 4065, 4046, 4066, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4078, 4081, - 4070, 4078, 3926, 3926, 3926, 3926, 3926, 3926, 4082, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4072, 3926, 4080, - 3926, 3926, 3926, 4076, 4083, 3926, 3926, 4084, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4046, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 4070, 4078, 3926, 4081, 4070, - 3926, 4085, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4072, 3926, 4076, 4086, 4087, 3926, 3926, 4088, 4084, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4089, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4078, - 3926, 4081, 4081, 3926, 4085, 4090, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4091, 4086, 4086, - 4087, 4087, 3926, 3926, 4088, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4092, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4093, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4089, 4094, 4089, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4095, - 3926, 4090, 4096, 4090, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 4097, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4098, 4099, 4086, 3926, 4086, 4087, 4087, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4100, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4092, - 4101, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4102, 3926, 3926, 3926, 3926, 4103, 4093, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4089, 4094, 3926, 4094, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4095, 4104, 4105, - 3926, 4090, 4096, 3926, 4096, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4097, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4098, 4106, - 4099, 4107, 3926, 3926, 3926, 3926, 3926, 4108, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4109, 4100, 4110, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4101, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 4102, 3926, 3926, 3926, 3926, 4103, 3926, 3926, 3926, 3926, - 3926, 4111, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4094, 3926, 4089, - 4094, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4112, 4104, 4113, 4095, 4114, 4115, 4104, 4116, 3926, 3926, - - 4117, 3926, 4118, 4117, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4119, - 4120, 3926, 4121, 4122, 3926, 3926, 3926, 3926, 3926, 4123, - 4124, 4125, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4126, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4127, - 4128, 4129, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4130, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4131, 3926, 3926, 4132, 4132, 4133, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4134, 4135, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4136, 4137, 4138, 4139, 3926, 4140, 4141, 4137, 4142, 4143, - 4144, 4145, 4136, 4138, 4145, 4146, 4147, 4148, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4149, 4150, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4151, 4152, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4153, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4154, 4154, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4155, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4156, 4157, 3926, 3926, 3926, 4158, 3926, 4158, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4159, 3926, 3926, 3926, 3926, 3926, 3926, 4138, 4160, 4136, - 4161, 4138, 4138, 4162, 3926, 3926, 4160, 4160, 4163, 4163, - 4164, 4165, 4146, 4165, 4165, 4166, 4166, 4136, 4167, 4167, - 4168, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4151, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4169, 4170, 3926, 3926, 3926, 3926, 4171, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4172, - 4155, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4156, - 3926, 3926, 3926, 3926, 4158, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4136, 4138, 3926, 4160, 4136, 4164, 4165, - 4161, 4167, 4138, 3926, 4163, 4160, 4146, 4165, 4146, 4173, - 4165, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 4169, 4169, 4174, 4170, 3926, 3926, 4171, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4172, 3926, 3926, 3926, 4175, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4158, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4138, 4160, - 4164, 4161, 4161, 4167, 4163, 4165, 4173, 4146, 4165, 4173, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4176, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4174, - 3926, 3926, 4177, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4175, 4175, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4138, 4160, 4173, 4146, 4165, 4173, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4177, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4178, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4179, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4173, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4178, 4178, 4180, 4181, 3926, 3926, 3926, 3926, - 3926, 3926, 4179, 4179, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4182, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4180, 4180, 4183, 4181, - 4181, 4184, 3926, 3926, 4185, 3926, 3926, 3926, 4179, 4179, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4182, 4186, 3926, 3926, 3926, 3926, 3926, - - 3926, 4187, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4188, - 3926, 4189, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4183, 4184, 3926, 3926, 4185, 3926, 4185, - 3926, 3926, 3926, 4179, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4186, 3926, 3926, 3926, 4187, 4187, 4190, 4191, 4192, - 3926, 3926, 4193, 3926, 3926, 3926, 4188, 4194, 4189, 4195, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4185, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4191, 3926, 4196, 4193, - 4197, 4198, 4194, 4195, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4185, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4196, - 4197, 4198, 3926, 4198, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4199, 3926, 4200, 4201, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4198, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4199, 4199, 3926, 4200, 4202, - 4201, 4203, 4204, 4205, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4206, 3926, 4207, - 4198, 3926, 3926, 3926, 3926, 3926, 3926, 4202, 4203, 4204, - 4208, 4205, 4209, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4206, 4210, 4207, 4207, 4211, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4208, 4209, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4210, 4211, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 0, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926 + 3938, 3938, 3937, 3, 3939, 3939, 3, 3, 3940, 3940, + 3940, 3940, 3941, 3941, 3942, 3942, 3943, 3943, 3944, 3944, + 3945, 3945, 3939, 3939, 3939, 3939, 3946, 3946, 3947, 3947, + 3947, 3947, 3948, 3948, 3949, 3949, 3937, 37, 37, 37, + 3939, 3939, 3939, 3939, 3939, 3939, 3950, 3950, 3951, 3951, + 3952, 3952, 3953, 3953, 3954, 3954, 3955, 3955, 3956, 3956, + 3939, 3939, 3957, 3957, 3958, 3958, 3956, 3956, 3939, 3939, + 3959, 3959, 3960, 3960, 3937, 3937, 3937, 3937, 3937, 3937, + 3961, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 131, 3937, 3937, 3937, 3962, 3962, 3962, 3937, + 3937, 3962, 3963, 3963, 3963, 3937, 3964, 3963, 3965, 3965, + 3965, 3937, 3966, 3937, 3965, 3967, 3967, 3937, 3967, 3937, + 3937, 3968, 3937, 3937, 3937, 3968, 3969, 3968, 3970, 3970, + 3970, 3937, 3971, 3970, 3937, 3972, 3937, 3970, 3973, 3973, + 3973, 3937, 3974, 3973, 3975, 3975, 3975, 3937, 3937, 3975, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3976, 3976, 3937, 3937, + 3976, 3977, 3977, 3937, 3978, 3977, 3937, 3979, 3980, 3981, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3982, 3937, 3983, 3982, 3937, 3937, 3937, 3984, 3937, 3985, + 3937, 3984, 3937, 3937, 3937, 3986, 3986, 3986, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3987, 3937, 3987, 3987, 3987, + 3937, 3937, 3987, 3987, 3987, 3988, 3937, 3989, 3988, 3988, + 3988, 3937, 3988, 3988, 3988, 3990, 3937, 3991, 3990, 3990, + 3990, 3937, 3990, 3990, 3990, 3992, 3992, 3937, 3992, 3937, + 3992, 3993, 3937, 3993, 3937, 3994, 3995, 3996, 3995, 3993, + 3997, 3937, 3998, 3997, 3997, 3997, 3997, 3937, 3997, 3937, + + 3999, 4000, 4001, 4000, 4002, 4000, 3937, 3937, 3997, 3997, + 4003, 3937, 4004, 4003, 4003, 4003, 3937, 4003, 4003, 4003, + 4005, 3937, 4005, 4005, 3937, 4005, 3937, 3937, 4005, 4005, + 4005, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 4006, 3937, 4006, 3937, 3937, 4006, + 4007, 3937, 4008, 4007, 3937, 4007, 4009, 4010, 4011, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4012, 3937, 4013, + 4012, 3937, 4012, 3937, 4014, 3937, 4015, 4014, 3937, 4014, + 4016, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4017, + 3937, 3937, 4017, 4017, 4018, 4019, 3937, 3937, 4019, 4019, + 4020, 4021, 3937, 3937, 4021, 4021, 3937, 3937, 4022, 4023, + 4022, 4024, 4025, 4026, 4026, 4026, 4025, 4027, 4028, 3937, + 3937, 4029, 4030, 4029, 4031, 4029, 4032, 4033, 4033, 4033, + 4034, 4034, 4034, 4035, 4033, 4028, 4028, 4036, 4037, 3937, + 3937, 4037, 4037, 3937, 4038, 3937, 3937, 4038, 3937, 4038, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4039, 3937, 3937, 4040, 4041, 3937, 3937, + 3937, 3937, 3937, 3937, 4042, 4043, 3937, 3937, 4044, 4045, + 3937, 3937, 4046, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4047, 3937, 4047, 4048, + 3937, 4048, 4049, 3937, 4049, 3937, 4050, 4051, 4051, 4051, + 4052, 4050, 4052, 4052, 3937, 4053, 3937, 3937, 4053, 3937, + 4028, 3937, 4054, 4054, 4054, 4055, 4056, 4055, 4055, 4057, + 4058, 4054, 4059, 4056, 4057, 4056, 4056, 4028, 4060, 4028, + + 3937, 4060, 3937, 4060, 4060, 4061, 4028, 4062, 3937, 4062, + 4063, 3937, 4063, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4064, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4065, 3937, 4066, 3937, + + 3937, 3937, 3937, 3937, 4067, 3937, 4068, 3937, 4069, 4069, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 4070, 3937, 4071, 3937, 4072, 4073, 4074, 4075, + 3937, 4054, 4076, 4076, 4076, 4057, 4054, 4056, 4057, 4056, + 4077, 4056, 4078, 4079, 4080, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4081, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4064, 4082, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4083, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 4084, 3937, 3937, 3937, 3937, + 4085, 3937, 4086, 3937, 4087, 4087, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4073, 4074, + 4073, 4074, 4076, 4056, 4076, 4057, 4076, 4057, 4088, 4057, + 4057, 4056, 4078, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4081, 4089, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4090, 3937, 3937, 4082, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4083, 3937, 4083, 4091, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 4087, 4087, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4076, 4057, 4077, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4089, 4092, 4081, 4089, 3937, 3937, 3937, 3937, 3937, + 3937, 4093, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4083, 3937, 4091, 3937, 3937, 3937, 4087, 4094, 3937, + 3937, 4095, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4057, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4081, + 4089, 3937, 4092, 4081, 3937, 4096, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4083, 3937, 4087, 4097, 4098, + 3937, 3937, 4099, 4095, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4100, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4089, 3937, 4092, 4092, 3937, 4096, + + 4101, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4102, 4097, 4097, 4098, 4098, 3937, 3937, + 4099, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4103, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4104, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 4100, 4105, 4100, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4106, 3937, 4101, 4107, 4101, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4108, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4109, 4110, 4097, 3937, 4097, 4098, 4098, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4111, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4103, 4112, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4113, 3937, + 3937, 3937, 3937, 4114, 4104, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4100, 4105, 3937, 4105, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4106, 4115, 4116, 3937, 4101, 4107, + + 3937, 4107, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4108, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4109, 4117, 4110, 4118, + 3937, 3937, 3937, 3937, 3937, 4119, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4120, 4111, 4121, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4112, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4113, 3937, + 3937, 3937, 3937, 4114, 3937, 3937, 3937, 3937, 3937, 4122, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4105, 3937, 4100, 4105, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4123, 4115, + + 4124, 4106, 4125, 4126, 4115, 4127, 3937, 3937, 4128, 3937, + 4129, 4128, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4130, 4131, + 3937, 4132, 4133, 3937, 3937, 3937, 3937, 3937, 4134, 4135, + 4136, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4137, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4138, 4139, + 4140, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4141, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4142, + 3937, 3937, 4143, 4143, 4144, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4145, + 4146, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4147, + 4148, 4149, 4150, 3937, 4151, 4152, 4148, 4153, 4154, 4155, + + 4156, 4147, 4149, 4156, 4157, 4158, 4159, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4160, 4161, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4162, 4163, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4164, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4165, 4165, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4166, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 4167, 4168, 3937, 3937, 3937, 4169, 3937, 4169, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4170, 3937, 3937, 3937, 3937, 3937, 3937, 4149, 4171, 4147, + 4172, 4149, 4149, 4173, 3937, 3937, 4171, 4171, 4174, 4174, + 4175, 4176, 4157, 4176, 4176, 4177, 4177, 4147, 4178, 4178, + 4179, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 4162, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4180, 4181, 3937, 3937, 3937, 3937, + 4182, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4183, 4166, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4167, 3937, 3937, 3937, 3937, 4169, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4147, 4149, 3937, 4171, 4147, 4175, + 4176, 4172, 4178, 4149, 3937, 4174, 4171, 4157, 4176, 4157, + 4184, 4176, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4180, 4180, 4185, 4181, 3937, 3937, 4182, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4183, 3937, 3937, 3937, 4186, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4169, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4149, + + 4171, 4175, 4172, 4172, 4178, 4174, 4176, 4184, 4157, 4176, + 4184, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4187, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4185, 3937, 3937, 4188, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4186, 4186, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4149, 4171, 4184, 4157, 4176, + 4184, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4188, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4189, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4190, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4184, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4189, 4189, 4191, 4192, 3937, 3937, 3937, + 3937, 3937, 3937, 4190, 4190, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4193, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4191, 4191, 4194, + 4192, 4192, 4195, 3937, 3937, 4196, 3937, 3937, 3937, 4190, + 4190, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 4193, 4197, 3937, 3937, 3937, 3937, + 3937, 3937, 4198, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4199, 3937, 4200, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4194, 4195, 3937, 3937, 4196, 3937, + 4196, 3937, 3937, 3937, 4190, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 4197, 3937, 3937, 3937, 4198, 4198, 4201, 4202, + 4203, 3937, 3937, 4204, 3937, 3937, 3937, 4199, 4205, 4200, + 4206, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4196, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4202, 3937, 4207, + 4204, 4208, 4209, 4205, 4206, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4196, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4207, 4208, 4209, 3937, 4209, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4210, 3937, 4211, 4212, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4209, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4210, 4210, 3937, 4211, + 4213, 4212, 4214, 4215, 4216, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4217, 3937, + 4218, 4209, 3937, 3937, 3937, 3937, 3937, 3937, 4213, 4214, + 4215, 4219, 4216, 4220, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4217, 4221, 4218, 4218, + 4222, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4219, 4220, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 4221, 4222, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 0, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937 } ; -static const flex_int16_t yy_nxt[14258] = +static const flex_int16_t yy_nxt[14268] = { 0, - 3926, 77, 78, 79, 77, 118, 80, 81, 118, 118, - 283, 284, 118, 3926, 82, 119, 120, 121, 119, 122, - 123, 3926, 129, 98, 124, 129, 130, 98, 125, 1390, - 83, 135, 84, 85, 3914, 269, 136, 86, 87, 88, - 315, 316, 98, 89, 90, 91, 135, 92, 93, 3908, - 131, 136, 94, 1108, 138, 139, 95, 138, 83, 873, + 3937, 77, 78, 79, 77, 118, 80, 81, 118, 118, + 283, 284, 118, 3937, 82, 119, 120, 121, 119, 122, + 123, 3937, 129, 98, 124, 129, 130, 98, 125, 1393, + 83, 135, 84, 85, 3925, 269, 136, 86, 87, 88, + 315, 316, 98, 89, 90, 91, 135, 92, 93, 3919, + 131, 136, 94, 1109, 138, 139, 95, 138, 83, 873, 84, 85, 140, 269, 141, 86, 87, 88, 256, 270, - 126, 89, 90, 91, 1391, 92, 93, 132, 283, 284, + 126, 89, 90, 91, 1394, 92, 93, 132, 283, 284, 94, 77, 78, 79, 77, 257, 80, 81, 129, 98, 256, 129, 130, 271, 82, 157, 158, 270, 157, 127, 96, 272, 129, 98, 233, 129, 130, 257, 234, 142, - 83, 235, 84, 85, 273, 3899, 131, 86, 87, 88, - 274, 271, 1008, 89, 90, 91, 275, 92, 93, 272, - 133, 280, 94, 526, 318, 527, 95, 318, 83, 1009, - 84, 85, 273, 132, 3898, 86, 87, 88, 274, 3926, + 83, 235, 84, 85, 273, 3910, 131, 86, 87, 88, + 274, 271, 1009, 89, 90, 91, 275, 92, 93, 272, + 133, 280, 94, 526, 318, 527, 95, 318, 83, 1010, + 84, 85, 273, 132, 3909, 86, 87, 88, 274, 3937, 159, 89, 90, 91, 275, 92, 93, 132, 236, 280, 94, 96, 97, 98, 96, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, @@ -1889,8 +1892,8 @@ static const flex_int16_t yy_nxt[14258] = 96, 106, 96, 107, 108, 109, 110, 111, 112, 113, 96, 114, 115, 96, 96, 96, 96, 117, 119, 120, 121, 119, 122, 123, 281, 129, 98, 124, 129, 130, - 3877, 125, 138, 139, 2290, 138, 144, 145, 3876, 144, - 140, 146, 141, 228, 147, 229, 144, 145, 2491, 144, + 3888, 125, 138, 139, 2297, 138, 144, 145, 3887, 144, + 140, 146, 141, 228, 147, 229, 144, 145, 2499, 144, 230, 146, 281, 133, 147, 150, 151, 347, 150, 347, 152, 150, 151, 153, 150, 526, 152, 527, 154, 153, @@ -1898,12 +1901,12 @@ static const flex_int16_t yy_nxt[14258] = 132, 489, 267, 569, 276, 180, 181, 142, 180, 289, 182, 148, 277, 183, 569, 163, 164, 231, 163, 282, 165, 148, 127, 96, 348, 166, 186, 187, 163, 188, - 155, 167, 276, 3867, 189, 278, 155, 289, 163, 164, + 155, 167, 276, 3878, 189, 278, 155, 289, 163, 164, 277, 163, 163, 165, 231, 290, 268, 347, 166, 347, 159, 163, 279, 645, 167, 490, 170, 171, 295, 170, - 184, 172, 3774, 278, 173, 163, 174, 301, 357, 175, - 168, 358, 176, 290, 170, 171, 3809, 170, 302, 172, - 279, 190, 173, 177, 174, 3838, 295, 175, 186, 187, + 184, 172, 3785, 278, 173, 163, 174, 301, 357, 175, + 168, 358, 176, 290, 170, 171, 3820, 170, 302, 172, + 279, 190, 173, 177, 174, 3849, 295, 175, 186, 187, 176, 188, 646, 168, 348, 301, 189, 474, 475, 163, 163, 177, 497, 498, 170, 171, 302, 170, 303, 172, @@ -1913,10 +1916,10 @@ static const flex_int16_t yy_nxt[14258] = 181, 176, 180, 190, 182, 313, 252, 183, 214, 215, 216, 217, 177, 191, 314, 214, 215, 216, 217, 178, 191, 191, 296, 351, 297, 226, 441, 487, 191, 441, - 487, 226, 488, 313, 254, 438, 439, 440, 438, 3837, - 178, 502, 314, 3830, 502, 503, 504, 283, 284, 286, + 487, 226, 488, 313, 254, 438, 439, 440, 438, 3848, + 178, 502, 314, 3841, 502, 503, 504, 283, 284, 286, - 296, 352, 297, 3809, 184, 191, 192, 193, 194, 192, + 296, 352, 297, 3820, 184, 191, 192, 193, 194, 192, 191, 195, 191, 191, 191, 191, 191, 191, 191, 196, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 197, 198, 199, 200, 201, @@ -1927,58 +1930,58 @@ static const flex_int16_t yy_nxt[14258] = 208, 209, 210, 191, 211, 191, 212, 191, 191, 191, 191, 191, 218, 219, 220, 221, 359, 222, 218, 219, - 220, 221, 369, 222, 218, 219, 220, 221, 3806, 222, + 220, 221, 369, 222, 218, 219, 220, 221, 3817, 222, 218, 219, 220, 221, 233, 222, 291, 252, 234, 242, 253, 235, 315, 316, 352, 252, 259, 242, 292, 260, 352, 261, 327, 259, 259, 327, 260, 557, 261, 252, 557, 259, 590, 318, 291, 590, 318, 223, 259, 422, 243, 242, 244, 223, 422, 259, 292, 395, 243, 223, - 244, 245, 246, 247, 248, 223, 2290, 254, 236, 245, + 244, 245, 246, 247, 248, 223, 2297, 254, 236, 245, 246, 247, 248, 242, 263, 264, 262, 263, 243, 619, 244, 414, 243, 262, 244, 400, 243, 265, 244, 245, 246, 247, 248, 245, 246, 247, 248, 245, 246, 247, - 248, 423, 287, 489, 243, 288, 244, 293, 2878, 400, + 248, 423, 287, 489, 243, 288, 244, 293, 2888, 400, 243, 298, 244, 306, 294, 245, 246, 247, 248, 428, - 304, 245, 246, 247, 248, 299, 620, 3800, 307, 265, + 304, 245, 246, 247, 248, 299, 620, 3811, 307, 265, 287, 300, 243, 288, 244, 293, 305, 308, 407, 298, - 408, 306, 294, 245, 246, 247, 248, 400, 304, 3775, + 408, 306, 294, 245, 246, 247, 248, 400, 304, 3786, 310, 584, 309, 299, 311, 312, 307, 490, 357, 300, - 446, 358, 584, 2290, 305, 308, 319, 320, 321, 319, + 446, 358, 584, 2297, 305, 308, 319, 320, 321, 319, 452, 322, 323, 320, 321, 323, 412, 324, 310, 413, 309, 398, 311, 312, 325, 321, 321, 325, 446, 326, 323, 320, 321, 323, 447, 324, 455, 342, 452, 349, - 343, 448, 349, 353, 354, 3038, 422, 347, 359, 347, + 343, 448, 349, 353, 354, 3049, 422, 347, 359, 347, 347, 422, 347, 449, 344, 345, 364, 365, 474, 475, 357, 320, 447, 358, 455, 342, 414, 320, 343, 448, - 360, 377, 378, 360, 377, 357, 3768, 412, 358, 321, + 360, 377, 378, 360, 377, 357, 3779, 412, 358, 321, 413, 449, 344, 345, 459, 320, 328, 329, 330, 331, 332, 333, 465, 334, 350, 472, 335, 355, 423, 662, 336, 367, 337, 338, 368, 339, 340, 341, 285, 367, 363, 285, 459, 873, 328, 329, 330, 331, 332, 333, - 465, 334, 3630, 472, 335, 361, 379, 414, 336, 367, + 465, 334, 3641, 472, 335, 361, 379, 414, 336, 367, 337, 338, 368, 339, 340, 341, 370, 367, 663, 370, 741, 367, 377, 378, 368, 377, 374, 375, 450, 367, 367, 369, 874, 368, 377, 380, 381, 377, 367, 383, 383, 451, 383, 427, 383, 383, 383, 473, 383, 347, - 383, 347, 383, 645, 637, 3698, 450, 637, 383, 369, - 392, 386, 3723, 393, 470, 394, 383, 471, 392, 451, - 441, 371, 383, 441, 742, 473, 2290, 379, 383, 388, + 383, 347, 383, 645, 637, 3709, 450, 637, 383, 369, + 392, 386, 3734, 393, 470, 394, 383, 471, 392, 451, + 441, 371, 383, 441, 742, 473, 2297, 379, 383, 388, 373, 383, 392, 383, 869, 383, 383, 508, 383, 379, - 383, 388, 646, 453, 384, 471, 348, 1567, 383, 424, + 383, 388, 646, 453, 384, 471, 348, 1571, 383, 424, 384, 396, 425, 454, 396, 383, 392, 422, 460, 393, - 395, 394, 383, 3719, 392, 509, 461, 392, 3049, 514, + 395, 394, 383, 3730, 392, 509, 461, 392, 3060, 514, 393, 453, 394, 383, 383, 392, 662, 625, 392, 383, 383, 454, 499, 389, 668, 499, 460, 500, 392, 392, - 390, 393, 1568, 394, 461, 391, 392, 509, 391, 401, - 392, 520, 871, 403, 426, 404, 397, 748, 405, 2266, - 392, 2267, 383, 388, 409, 410, 569, 395, 392, 383, + 390, 393, 1572, 394, 461, 391, 392, 509, 391, 401, + 392, 520, 871, 403, 426, 404, 397, 748, 405, 2273, + 392, 2274, 383, 388, 409, 410, 569, 395, 392, 383, 383, 393, 392, 394, 626, 415, 392, 569, 415, 520, - 412, 669, 521, 413, 3698, 419, 420, 501, 395, 412, - 392, 3691, 413, 659, 429, 430, 422, 497, 498, 442, + 412, 669, 521, 413, 3709, 419, 420, 501, 395, 412, + 392, 3702, 413, 659, 429, 430, 422, 497, 498, 442, 406, 422, 432, 433, 434, 432, 456, 522, 443, 466, 521, 749, 444, 467, 462, 435, 523, 445, 399, 468, @@ -1989,7 +1992,7 @@ static const flex_int16_t yy_nxt[14258] = 476, 477, 478, 476, 480, 477, 478, 481, 482, 483, 484, 482, 507, 485, 482, 483, 484, 491, 524, 485, 492, 493, 494, 492, 512, 495, 525, 513, 529, 531, - 507, 530, 538, 2268, 529, 2269, 529, 530, 510, 542, + 507, 530, 538, 2275, 529, 2276, 529, 530, 510, 542, 514, 674, 529, 543, 536, 514, 524, 537, 267, 536, 529, 267, 536, 544, 525, 436, 529, 534, 545, 436, @@ -2005,57 +2008,57 @@ static const flex_int16_t yy_nxt[14258] = 573, 574, 588, 589, 323, 327, 575, 323, 327, 324, 576, 579, 753, 582, 577, 325, 578, 583, 325, 585, - 326, 580, 581, 593, 594, 586, 587, 595, 598, 3690, + 326, 580, 581, 593, 594, 586, 587, 595, 598, 3701, 588, 589, 319, 320, 321, 319, 888, 322, 323, 320, 321, 323, 604, 324, 325, 321, 321, 325, 599, 326, 596, 593, 594, 597, 606, 595, 598, 605, 607, 754, - 265, 610, 600, 601, 602, 1326, 603, 611, 612, 614, - 604, 1115, 613, 615, 617, 608, 599, 682, 596, 618, - 609, 597, 606, 613, 987, 605, 607, 320, 3654, 610, + 265, 610, 600, 601, 602, 1328, 603, 611, 612, 614, + 604, 1116, 613, 615, 617, 608, 599, 682, 596, 618, + 609, 597, 606, 613, 988, 605, 607, 320, 3665, 610, 600, 601, 602, 320, 603, 611, 612, 614, 616, 321, 613, 615, 617, 608, 890, 682, 349, 618, 609, 349, 631, 613, 600, 601, 347, 367, 347, 353, 354, 621, 623, 355, 624, 623, 619, 347, 616, 347, 347, 347, - 347, 347, 357, 363, 360, 358, 627, 360, 988, 357, + 347, 347, 357, 363, 360, 358, 627, 360, 989, 357, 600, 601, 358, 364, 365, 357, 629, 757, 358, 629, 625, 357, 630, 683, 358, 367, 357, 632, 368, 358, - 2471, 350, 2472, 367, 373, 370, 622, 633, 370, 2290, + 2479, 350, 2480, 367, 373, 370, 622, 633, 370, 2297, 367, 620, 355, 368, 441, 348, 348, 441, 367, 374, 375, 683, 359, 628, 367, 635, 631, 368, 635, 361, 367, 367, 367, 368, 758, 363, 636, 626, 367, 684, 367, 359, 584, 368, 412, 369, 359, 413, 367, 377, - 378, 3038, 377, 584, 634, 377, 378, 685, 377, 650, + 378, 3049, 377, 584, 634, 377, 378, 685, 377, 650, 371, 377, 380, 381, 377, 377, 638, 684, 377, 383, 383, 686, 383, 632, 373, 873, 383, 383, 399, 383, 369, 383, 383, 392, 733, 685, 648, 733, 394, 383, 369, 392, 383, 640, 414, 383, 383, 383, 687, 686, - 2799, 419, 420, 383, 379, 640, 651, 2974, 668, 688, + 2809, 419, 420, 383, 379, 640, 651, 2985, 668, 688, 379, 735, 383, 388, 735, 383, 379, 383, 487, 383, 379, 487, 422, 488, 390, 388, 687, 422, 643, 383, 388, 384, 383, 649, 382, 383, 383, 688, 383, 383, - 383, 392, 388, 1320, 393, 643, 394, 641, 383, 392, + 383, 392, 388, 1322, 393, 643, 394, 641, 383, 392, - 2800, 429, 430, 383, 383, 669, 383, 2975, 674, 431, + 2810, 429, 430, 383, 383, 669, 383, 2986, 674, 431, 383, 383, 383, 392, 676, 392, 399, 389, 393, 399, - 394, 399, 689, 392, 423, 396, 642, 640, 396, 2266, - 392, 2267, 660, 393, 647, 394, 3639, 392, 392, 418, + 394, 399, 689, 392, 423, 396, 642, 640, 396, 2273, + 392, 2274, 660, 393, 647, 394, 3650, 392, 392, 418, 390, 395, 670, 399, 409, 410, 383, 388, 392, 805, - 689, 648, 392, 394, 392, 675, 392, 393, 3926, 394, + 689, 648, 392, 394, 392, 675, 392, 393, 3937, 394, 805, 677, 392, 383, 388, 395, 315, 316, 431, 383, 383, 406, 285, 676, 391, 285, 392, 391, 391, 392, 397, 391, 653, 392, 654, 808, 403, 655, 404, 671, 412, 405, 487, 413, 658, 487, 808, 488, 649, 661, 399, 392, 693, 673, 399, 392, 869, 412, 391, 391, - 413, 391, 391, 392, 392, 3926, 403, 664, 404, 404, + 413, 391, 391, 392, 392, 3937, 403, 664, 404, 404, 677, 405, 405, 415, 658, 658, 415, 427, 412, 656, - 693, 413, 1100, 406, 666, 392, 391, 666, 422, 392, + 693, 413, 1101, 406, 666, 392, 391, 666, 422, 392, 418, 667, 393, 422, 394, 392, 672, 392, 393, 672, 394, 412, 424, 392, 413, 425, 743, 414, 657, 743, - 422, 392, 391, 406, 665, 678, 1115, 392, 679, 680, - 2515, 422, 697, 422, 871, 698, 422, 699, 416, 620, + 422, 392, 391, 406, 665, 678, 1116, 392, 679, 680, + 2523, 422, 697, 422, 871, 698, 422, 699, 416, 620, 694, 432, 433, 434, 432, 438, 439, 440, 438, 395, 431, 695, 391, 391, 435, 395, 690, 700, 691, 701, @@ -2064,7 +2067,7 @@ static const flex_int16_t yy_nxt[14258] = 423, 716, 709, 423, 690, 700, 691, 701, 730, 731, 692, 711, 702, 887, 704, 888, 436, 705, 707, 706, 708, 710, 712, 703, 713, 715, 714, 732, 736, 716, - 709, 736, 502, 737, 1115, 502, 730, 731, 3595, 711, + 709, 736, 502, 737, 1116, 502, 730, 731, 3606, 711, 717, 718, 739, 719, 506, 739, 720, 740, 721, 506, 722, 723, 724, 761, 725, 732, 726, 727, 728, 729, 476, 477, 478, 476, 480, 477, 478, 480, 717, 718, @@ -2072,24 +2075,24 @@ static const flex_int16_t yy_nxt[14258] = 724, 761, 725, 890, 726, 727, 728, 729, 480, 477, 478, 481, 482, 483, 484, 482, 507, 485, 492, 493, - 494, 492, 1324, 495, 482, 483, 484, 491, 2974, 485, + 494, 492, 1326, 495, 482, 483, 484, 491, 2985, 485, 762, 492, 493, 494, 492, 436, 495, 499, 502, 436, 499, 502, 500, 750, 756, 506, 750, 763, 751, 512, - 506, 516, 513, 512, 759, 764, 513, 767, 762, 2137, - 2137, 529, 529, 436, 765, 530, 774, 486, 557, 529, - 529, 557, 775, 496, 529, 763, 533, 530, 2800, 486, + 506, 516, 513, 512, 759, 764, 513, 767, 762, 2144, + 2144, 529, 529, 436, 765, 530, 774, 486, 557, 529, + 529, 557, 775, 496, 529, 763, 533, 530, 2810, 486, 776, 777, 529, 764, 529, 536, 496, 771, 537, 540, - 536, 1755, 501, 536, 774, 778, 529, 510, 779, 514, + 536, 1760, 501, 536, 774, 778, 529, 510, 779, 514, 775, 760, 536, 516, 768, 769, 540, 536, 776, 777, 536, 766, 531, 780, 536, 781, 782, 537, 783, 536, 784, 799, 536, 778, 533, 800, 779, 801, 802, 803, - 801, 804, 806, 807, 772, 538, 536, 590, 809, 3134, + 801, 804, 806, 807, 772, 538, 536, 590, 809, 3145, 590, 780, 810, 781, 782, 266, 783, 811, 784, 799, - 812, 813, 770, 800, 3583, 3576, 802, 803, 814, 804, + 812, 813, 770, 800, 3594, 3587, 802, 803, 814, 804, 806, 807, 815, 816, 540, 785, 809, 786, 787, 817, - 810, 788, 789, 790, 818, 811, 3574, 791, 812, 813, - 792, 823, 793, 794, 795, 796, 814, 797, 798, 2800, + 810, 788, 789, 790, 818, 811, 3585, 791, 812, 813, + 792, 823, 793, 794, 795, 796, 814, 797, 798, 2810, 815, 816, 824, 785, 825, 786, 787, 817, 819, 788, 789, 790, 818, 821, 822, 791, 826, 827, 792, 823, @@ -2099,802 +2102,803 @@ static const flex_int16_t yy_nxt[14258] = 842, 843, 828, 844, 845, 820, 829, 830, 846, 831, 847, 835, 848, 849, 850, 851, 836, 837, 838, 852, 853, 839, 854, 855, 856, 840, 841, 832, 842, 843, - 351, 844, 845, 347, 357, 347, 846, 358, 847, 1107, + 351, 844, 845, 347, 357, 347, 846, 358, 847, 1108, 848, 849, 850, 851, 390, 869, 623, 852, 853, 623, - 854, 855, 856, 3559, 347, 645, 347, 859, 355, 637, + 854, 855, 856, 3570, 347, 645, 347, 859, 355, 637, 859, 629, 637, 869, 629, 347, 357, 347, 862, 358, 888, 862, 866, 357, 367, 866, 358, 368, 635, 878, - 857, 635, 367, 367, 860, 865, 368, 2515, 865, 879, - 367, 367, 645, 368, 383, 640, 1102, 383, 367, 383, - 428, 348, 870, 392, 915, 1115, 393, 640, 394, 889, + 857, 635, 367, 367, 860, 865, 368, 2523, 865, 879, + 367, 367, 645, 368, 383, 640, 1103, 383, 367, 383, + 428, 348, 870, 392, 915, 1116, 393, 640, 394, 889, 867, 392, 348, 871, 383, 640, 359, 383, 916, 382, - 917, 383, 3514, 359, 863, 392, 412, 640, 431, 413, + 917, 383, 3525, 359, 863, 392, 412, 640, 431, 413, 867, 871, 915, 369, 383, 388, 662, 875, 890, 383, - 369, 383, 590, 626, 1118, 590, 916, 876, 917, 641, - 643, 3481, 901, 881, 383, 388, 1567, 383, 918, 383, + 369, 383, 590, 626, 1119, 590, 916, 876, 917, 641, + 643, 3492, 901, 881, 383, 388, 1571, 383, 918, 383, - 880, 383, 902, 2515, 904, 662, 919, 388, 399, 872, + 880, 383, 902, 2523, 904, 662, 919, 388, 399, 872, 643, 399, 662, 399, 920, 663, 908, 391, 642, 640, - 391, 383, 392, 399, 885, 653, 918, 654, 3417, 389, + 391, 383, 392, 399, 885, 653, 918, 654, 3428, 389, 655, 422, 921, 883, 919, 399, 422, 428, 642, 640, - 391, 1391, 920, 391, 392, 392, 3402, 923, 653, 647, - 654, 905, 924, 655, 925, 3397, 883, 926, 877, 388, + 391, 1394, 920, 391, 392, 392, 3413, 923, 653, 647, + 654, 905, 924, 655, 925, 3408, 883, 926, 877, 388, 921, 391, 927, 656, 391, 928, 392, 392, 931, 891, 932, 654, 656, 903, 655, 923, 506, 883, 383, 388, - 924, 506, 925, 911, 399, 926, 3396, 399, 391, 399, + 924, 506, 925, 911, 399, 926, 3407, 399, 391, 399, 927, 886, 887, 928, 391, 656, 931, 391, 932, 392, - 660, 657, 893, 733, 894, 933, 733, 895, 3390, 391, - 896, 399, 898, 935, 392, 2135, 892, 403, 936, 404, - 977, 392, 899, 977, 657, 658, 672, 391, 996, 672, - 391, 412, 392, 933, 413, 403, 392, 404, 3355, 406, - 405, 935, 2268, 658, 2269, 657, 936, 391, 910, 897, + 660, 657, 893, 733, 894, 933, 733, 895, 3401, 391, + 896, 399, 898, 935, 392, 2142, 892, 403, 936, 404, + 978, 392, 899, 978, 657, 658, 672, 391, 997, 672, + 391, 412, 392, 933, 413, 403, 392, 404, 3366, 406, + 405, 935, 2275, 658, 2276, 657, 936, 391, 910, 897, 898, 910, 392, 412, 392, 403, 413, 404, 678, 662, 899, 679, 391, 658, 406, 391, 422, 392, 399, 266, - 403, 2515, 404, 735, 392, 405, 735, 913, 658, 937, - 914, 414, 659, 978, 938, 422, 978, 666, 939, 392, - 666, 940, 392, 900, 941, 393, 907, 394, 1122, 907, + 403, 2523, 404, 735, 392, 405, 735, 913, 658, 937, + 914, 414, 659, 979, 938, 422, 979, 666, 939, 392, + 666, 940, 392, 900, 941, 393, 907, 394, 1123, 907, 392, 392, 659, 414, 393, 736, 394, 937, 736, 392, - 737, 391, 938, 423, 392, 942, 939, 906, 1067, 940, - 943, 945, 941, 392, 951, 952, 929, 953, 954, 1067, - 3296, 900, 423, 930, 930, 930, 930, 930, 930, 930, + 737, 391, 938, 423, 392, 942, 939, 906, 1068, 940, + 943, 945, 941, 392, 951, 952, 929, 953, 954, 1068, + 3307, 900, 423, 930, 930, 930, 930, 930, 930, 930, 930, 930, 395, 942, 946, 958, 391, 961, 943, 945, 959, 395, 951, 952, 964, 953, 954, 947, 948, 962, - 949, 950, 955, 965, 956, 960, 966, 967, 957, 963, - 968, 970, 946, 958, 2471, 961, 2472, 976, 959, 969, - 981, 743, 964, 981, 743, 947, 948, 962, 949, 950, - 955, 965, 956, 960, 966, 967, 957, 963, 968, 970, - - 971, 1115, 972, 979, 973, 976, 979, 969, 980, 739, - 982, 508, 739, 982, 740, 983, 985, 746, 1000, 985, - 746, 986, 747, 989, 990, 1001, 989, 990, 971, 991, - 972, 750, 973, 1002, 750, 993, 751, 994, 993, 510, - 994, 512, 995, 1003, 513, 2290, 1000, 529, 1010, 1011, - 530, 536, 1012, 1001, 537, 529, 536, 1013, 1014, 536, - 1015, 1002, 1016, 3288, 1017, 1018, 1019, 1034, 887, 529, - 1026, 1003, 3283, 536, 1027, 1023, 1010, 1011, 1028, 1035, - 1012, 1020, 1024, 1036, 1041, 1013, 1014, 3049, 1015, 1025, - 1016, 998, 1017, 1018, 1019, 1034, 1021, 1004, 1026, 1022, - - 1029, 1006, 1027, 1023, 1032, 1037, 1028, 1035, 1044, 1020, - 1024, 1036, 1041, 1045, 1030, 1039, 1031, 1025, 1042, 1046, - 1043, 1038, 801, 1033, 1021, 801, 1047, 1022, 1029, 1050, - 1040, 1051, 1032, 1037, 1053, 1054, 1044, 1047, 1055, 3257, - 1056, 1045, 1030, 1039, 1031, 1057, 1042, 1046, 1043, 1038, - 1058, 1033, 1059, 1061, 1062, 1063, 1064, 1050, 1040, 1051, - 1065, 1066, 1053, 1054, 1068, 1069, 1055, 1048, 1056, 1070, - 1072, 1073, 1076, 1057, 1074, 1077, 834, 1078, 1058, 834, - 1059, 1061, 1062, 1063, 1064, 1074, 1079, 1080, 1065, 1066, - 1081, 1082, 1068, 1069, 1083, 1084, 1075, 1070, 1072, 1073, - - 1076, 1085, 1086, 1077, 1087, 1078, 1088, 1089, 1090, 1092, - 1093, 1094, 1095, 1096, 1079, 1080, 1091, 1097, 1081, 1082, - 1098, 1099, 1083, 1084, 1075, 1101, 1124, 355, 363, 1085, - 1086, 1103, 1087, 3243, 1088, 1089, 1090, 1092, 1093, 1094, - 1095, 1096, 2290, 859, 1091, 1097, 859, 862, 1098, 1099, - 862, 347, 357, 347, 1104, 358, 390, 373, 865, 367, - 1105, 865, 866, 367, 390, 866, 368, 869, 1110, 1128, - 1126, 367, 622, 669, 2515, 873, 383, 640, 628, 383, - 392, 383, 1708, 1109, 3318, 394, 1106, 399, 392, 640, - 1129, 977, 867, 978, 977, 1130, 978, 1128, 348, 1112, - - 873, 632, 359, 383, 2515, 888, 2974, 634, 834, 383, - 640, 834, 383, 369, 383, 651, 391, 675, 1129, 391, - 2515, 392, 640, 1130, 653, 867, 1111, 1709, 431, 655, - 649, 641, 883, 1127, 418, 871, 383, 1125, 1131, 874, - 1113, 391, 391, 392, 391, 391, 392, 392, 888, 653, - 653, 654, 1111, 1132, 655, 655, 2975, 883, 883, 399, - 642, 640, 391, 428, 872, 391, 1131, 392, 392, 392, - 893, 656, 894, 890, 399, 895, 1202, 399, 896, 399, - 677, 1132, 1190, 1133, 671, 1190, 1134, 1114, 1899, 392, - 885, 1138, 3046, 642, 640, 913, 884, 884, 914, 1139, - - 657, 399, 1115, 422, 399, 391, 1141, 399, 391, 399, - 392, 1133, 3044, 653, 1134, 654, 890, 887, 655, 1138, - 1117, 883, 3586, 754, 3587, 657, 657, 1139, 1204, 656, - 391, 399, 392, 391, 1141, 392, 3182, 1143, 893, 391, - 894, 1506, 391, 895, 392, 888, 896, 893, 392, 1119, - 423, 393, 895, 394, 1144, 896, 392, 392, 887, 897, - 1116, 2137, 2138, 3173, 391, 1143, 392, 391, 392, 392, - 392, 393, 1120, 394, 894, 758, 392, 895, 910, 2800, - 896, 910, 1144, 412, 1325, 897, 413, 890, 1145, 657, - 392, 391, 981, 1146, 897, 981, 391, 907, 395, 391, - - 907, 392, 392, 1135, 1123, 393, 404, 394, 1136, 405, - 392, 1191, 658, 890, 1191, 1940, 1145, 2976, 395, 1121, - 1137, 1146, 1147, 391, 392, 979, 1194, 3130, 979, 1194, - 980, 1135, 3090, 414, 1148, 1149, 1136, 1142, 1142, 1142, - 1142, 1142, 1142, 1142, 1142, 1142, 1150, 1151, 1137, 1152, - 1147, 665, 395, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 1148, 1149, 1153, 1156, 1157, 1158, 1159, 1160, - 1161, 1162, 1165, 1163, 1150, 1151, 1164, 1152, 1166, 1167, - 391, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1179, - 2515, 1182, 1153, 1156, 1157, 1158, 1159, 1160, 1161, 1162, - - 1165, 1177, 1183, 1184, 1164, 1178, 1166, 1167, 1185, 1168, - 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1179, 1180, 1182, - 1186, 1181, 1187, 1189, 989, 1198, 1206, 989, 1198, 1177, - 1183, 1184, 982, 1178, 3052, 982, 1185, 983, 1192, 985, - 510, 1192, 985, 1193, 986, 1203, 1180, 1207, 1186, 1181, - 1187, 1189, 1195, 990, 1206, 1195, 990, 1196, 991, 1199, - 993, 1208, 1199, 993, 1200, 994, 1201, 1074, 994, 1201, - 995, 516, 1210, 529, 1205, 1207, 1209, 536, 1074, 1212, - 1211, 529, 536, 1215, 1216, 536, 1217, 1218, 1219, 1208, - 1220, 533, 756, 3586, 1221, 3587, 1222, 1223, 540, 1899, - - 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, - 1235, 1215, 1216, 1234, 1217, 1218, 1219, 1236, 1220, 768, - 1237, 760, 1221, 766, 1222, 1223, 772, 770, 1224, 1225, - 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1235, 1238, - 1239, 1234, 1240, 1241, 1242, 1236, 1243, 1244, 1237, 1247, - 1248, 1245, 1250, 1246, 1249, 1252, 1253, 1254, 1255, 1256, - 1257, 3044, 1262, 1263, 1266, 1264, 1267, 1238, 1239, 1251, - 1240, 1241, 1242, 1268, 1243, 1244, 1264, 1247, 1248, 1245, - 1250, 1246, 1249, 1252, 1253, 1254, 1255, 1256, 1257, 1258, - 1262, 1263, 1266, 1259, 1267, 1269, 1270, 1251, 1271, 1272, - - 1260, 1268, 1261, 1273, 1274, 1276, 1265, 1277, 1278, 1279, - 1280, 1281, 1282, 1283, 2870, 1190, 1291, 1258, 1190, 1292, - 1293, 1259, 1294, 1269, 1270, 1295, 1271, 1272, 1260, 3031, - 1261, 1273, 1274, 1276, 1296, 1277, 1278, 1279, 1280, 1281, - 1282, 1283, 1284, 1285, 1291, 1297, 1286, 1292, 1293, 1298, - 1294, 1287, 1299, 1295, 1300, 1301, 1302, 1288, 1303, 1304, - 1305, 1289, 1296, 1290, 1306, 1307, 1308, 1309, 1310, 1311, - 1284, 1285, 1312, 1297, 1286, 1313, 1314, 1298, 1315, 1287, - 1299, 1316, 1300, 1301, 1302, 1288, 1303, 1304, 1305, 1289, - 351, 1290, 1306, 1307, 1308, 1309, 1310, 1311, 1319, 1323, - - 1312, 869, 888, 1313, 1314, 888, 1315, 383, 640, 1316, - 383, 391, 383, 2991, 391, 428, 392, 1328, 355, 653, - 1317, 654, 1751, 867, 1321, 1115, 1191, 883, 1332, 1191, - 1393, 1331, 391, 1393, 383, 391, 399, 392, 392, 662, - 1327, 391, 654, 431, 391, 655, 392, 1334, 883, 893, - 399, 1119, 1335, 1336, 895, 1337, 1332, 896, 399, 391, - 1338, 399, 641, 399, 1329, 1341, 656, 1391, 392, 1320, - 1324, 2990, 884, 890, 1117, 1334, 2981, 1342, 905, 1192, - 1335, 1336, 1192, 1337, 1193, 399, 1194, 892, 1338, 1194, - 2976, 1318, 640, 1341, 391, 1322, 887, 391, 391, 392, - - 2940, 391, 893, 392, 894, 1342, 893, 895, 894, 1345, - 896, 895, 399, 897, 896, 399, 657, 399, 1339, 1347, - 1348, 392, 1349, 1350, 1351, 392, 1353, 1354, 660, 1356, - 1357, 1358, 1359, 2923, 1340, 1360, 1361, 1345, 1362, 399, - 1195, 1394, 2290, 1195, 1394, 1196, 1339, 1347, 1348, 897, - 1349, 1350, 1351, 1330, 1353, 1354, 2865, 1356, 1357, 1358, - 1359, 1346, 1340, 1360, 1361, 1364, 1362, 406, 1142, 1142, - 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1365, 1322, 1363, - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1366, 1367, - 1368, 1369, 1370, 1364, 1371, 1372, 399, 1373, 1374, 1375, - - 1376, 1377, 1378, 1379, 1380, 1365, 1381, 1383, 1384, 1385, - 1386, 1387, 1198, 2290, 508, 1198, 1366, 1367, 1368, 1369, - 1370, 1397, 1371, 1372, 1397, 1373, 1374, 1375, 1376, 1377, - 1378, 1379, 1380, 1398, 1381, 1383, 1384, 1385, 1386, 1387, - 1395, 1199, 510, 1395, 1199, 1396, 1200, 1201, 1399, 1400, - 1201, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, - 1412, 1398, 1413, 1414, 1415, 1416, 1418, 1419, 1420, 1421, - 1422, 1417, 1423, 1424, 1425, 1426, 1399, 1400, 1427, 1403, - 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1428, - 1413, 1414, 1415, 1416, 1418, 1419, 1420, 1421, 1422, 1417, - - 1423, 1424, 1425, 1426, 1429, 1430, 1427, 1431, 1432, 1433, - 1434, 1435, 1436, 1437, 1438, 1439, 1441, 1428, 1442, 1443, - 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1455, 2826, 2825, - 1440, 1457, 1429, 1430, 2802, 1431, 1432, 1433, 1434, 1435, - 1436, 1437, 1438, 1439, 1441, 1451, 1442, 1443, 1444, 1445, - 1446, 1447, 1448, 1449, 1450, 1455, 1452, 1456, 1440, 1457, - 1458, 1453, 1454, 1459, 1461, 1462, 1463, 1464, 1456, 1466, - 1467, 1468, 1469, 1451, 1471, 1473, 1474, 1475, 1478, 1476, - 1479, 1480, 1482, 1483, 1452, 1477, 1484, 1485, 1458, 1453, - 1454, 1459, 1461, 1462, 1463, 1464, 1486, 1466, 1467, 1468, - - 1469, 1487, 1471, 1473, 1474, 1475, 1478, 1476, 1479, 1480, - 1482, 1483, 1488, 1477, 1484, 1485, 1489, 1490, 1491, 1492, - 1493, 1494, 1495, 1496, 1486, 1497, 1498, 1499, 1500, 1487, - 1501, 1502, 1503, 1504, 869, 888, 1508, 2764, 1511, 1393, - 1488, 662, 1393, 2352, 1489, 1490, 1491, 1492, 1493, 1494, - 1495, 1496, 3926, 1497, 1498, 1499, 1500, 1456, 1501, 1502, - 1503, 1504, 391, 1505, 1508, 391, 1511, 392, 1456, 1512, - 893, 888, 894, 870, 889, 895, 1513, 1514, 896, 3656, - 399, 3657, 399, 399, 1515, 399, 3629, 1516, 1394, 392, - 1509, 1394, 1510, 1517, 2350, 1518, 885, 1512, 1523, 3656, - - 1524, 3657, 871, 890, 1513, 1514, 391, 399, 659, 391, - 1114, 392, 1515, 1525, 1507, 1516, 894, 897, 1509, 895, - 1510, 1517, 896, 1518, 1520, 1526, 1523, 1520, 1524, 1520, - 1527, 1528, 1529, 391, 1521, 656, 3630, 1520, 1533, 890, - 2732, 1525, 1534, 1536, 1542, 1543, 1546, 1547, 1548, 1549, - 1550, 1395, 1571, 1526, 1395, 1571, 1396, 1397, 1527, 1528, - 1397, 1121, 1531, 1551, 887, 1552, 1533, 1553, 1532, 1554, - 1534, 1536, 1542, 1543, 1546, 1547, 1548, 1549, 1550, 1522, - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1555, - 1531, 1551, 1556, 1552, 1557, 1553, 1532, 1554, 1558, 1559, - - 1560, 1561, 1563, 1564, 1565, 1566, 1572, 1562, 1573, 1576, - 1577, 1578, 1579, 1580, 1578, 1581, 1582, 1555, 1583, 1584, - 1556, 1585, 1557, 1586, 1587, 1588, 1558, 1559, 1560, 1561, - 1563, 1564, 1565, 1566, 1572, 1562, 1573, 1576, 1577, 1592, - 1579, 1580, 1589, 1581, 1582, 1593, 1583, 1584, 1594, 1585, - 1595, 1586, 1587, 1588, 1596, 1590, 1597, 1598, 1599, 1600, - 1591, 1605, 1606, 1601, 1607, 1608, 1609, 1592, 1610, 1602, - 1589, 1603, 1611, 1593, 1604, 1618, 1594, 2730, 1595, 1619, - 1620, 1621, 1596, 1590, 1597, 1598, 1599, 1600, 1591, 1605, - 1606, 1601, 1607, 1608, 1609, 1622, 1610, 1602, 1623, 1603, - - 1611, 1612, 1604, 1618, 1624, 1613, 1625, 1619, 1620, 1621, - 1626, 1627, 1614, 1628, 1615, 1616, 1629, 1617, 1630, 1631, - 1632, 1633, 1634, 1622, 1635, 1636, 1623, 1637, 1638, 1612, - 1642, 1643, 1624, 1613, 1625, 1644, 1645, 1646, 1626, 1627, - 1614, 1628, 1615, 1616, 1629, 1617, 1630, 1631, 1632, 1633, - 1634, 1653, 1635, 1636, 1647, 1637, 1638, 1654, 1642, 1643, - 1655, 1648, 1660, 1644, 1645, 1646, 1661, 1662, 1663, 1649, - 1658, 1664, 1665, 1656, 1650, 1657, 1666, 1667, 1668, 1653, - 1669, 1658, 1647, 1670, 1671, 1654, 1672, 1673, 1655, 1648, - 1660, 1674, 1659, 1675, 1661, 1662, 1663, 1649, 1676, 1664, - - 1665, 1656, 1650, 1657, 1666, 1667, 1668, 1677, 1669, 1678, - 1679, 1670, 1671, 1680, 1672, 1673, 1681, 1682, 1683, 1674, - 1659, 1675, 1684, 1685, 1686, 1687, 1676, 1688, 1690, 1692, - 1693, 1694, 888, 1691, 2673, 1677, 1696, 1678, 1679, 1697, - 1698, 1680, 1699, 1689, 1681, 1682, 1683, 1700, 2504, 1701, - 1684, 1685, 1686, 1687, 1695, 1688, 1690, 1692, 1693, 1694, - 399, 1691, 1115, 399, 1696, 399, 1702, 1697, 1698, 1703, - 1699, 1689, 2502, 399, 1704, 1700, 1117, 1701, 1705, 1520, - 1520, 1711, 1520, 1520, 1520, 1520, 1714, 399, 1715, 1706, - 1706, 1716, 1520, 1520, 1702, 1571, 1658, 1703, 1571, 884, - - 890, 1329, 1704, 1721, 1718, 1722, 1705, 1658, 1719, 1711, - 1720, 1723, 1724, 1726, 1714, 897, 1715, 1727, 2084, 1716, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1730, - 1731, 1721, 1718, 1722, 1707, 1522, 1719, 1732, 1720, 1723, - 1724, 1726, 1733, 1734, 1735, 1727, 1728, 1728, 1728, 1728, - 1728, 1728, 1728, 1728, 1728, 1736, 1737, 1730, 1731, 1738, - 1739, 1740, 1741, 1742, 1743, 1732, 1744, 1745, 1746, 1747, - 1733, 1734, 1735, 1748, 1749, 1750, 1752, 1756, 1757, 1974, - 1760, 1761, 1974, 1736, 1737, 1762, 1763, 1738, 1739, 1740, - 1741, 1742, 1743, 1764, 1744, 1745, 1746, 1747, 1766, 1767, - - 1765, 1748, 1749, 1750, 1752, 1756, 1757, 1578, 1760, 1761, - 1578, 1768, 1758, 1762, 1763, 1769, 1770, 1771, 1772, 1773, - 1774, 1764, 1775, 1776, 1777, 1778, 1766, 1767, 1765, 1779, - 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1768, - 1789, 1790, 1791, 1769, 1770, 1771, 1772, 1773, 1774, 1792, - 1775, 1776, 1777, 1778, 1793, 1794, 1795, 1779, 1780, 1781, - 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1796, 1789, 1790, - 1791, 1797, 1798, 1799, 1800, 1801, 1802, 1792, 1803, 1804, - 1805, 1806, 1793, 1794, 1795, 1807, 1808, 1809, 1812, 1813, - 1814, 1815, 1816, 1817, 1810, 1796, 1818, 1819, 1820, 1797, - - 1798, 1799, 1800, 1801, 1802, 1810, 1803, 1804, 1805, 1806, - 1821, 1822, 1823, 1807, 1808, 1809, 1812, 1813, 1814, 1815, - 1816, 1817, 1824, 1826, 1818, 1819, 1820, 1827, 1828, 1829, - 1830, 1831, 1832, 1842, 1844, 1811, 1845, 1846, 1821, 1822, - 1823, 1847, 1848, 1833, 1842, 1990, 1849, 1850, 1990, 1851, - 1824, 1826, 1852, 1853, 2290, 1827, 1828, 1829, 1830, 1831, - 1832, 1854, 1844, 2290, 1845, 1846, 1855, 1856, 1857, 1847, - 1848, 1833, 1834, 1835, 1849, 1850, 1836, 1851, 1837, 1858, - 1852, 1853, 1838, 1839, 1859, 1860, 1840, 1861, 1862, 1854, - 1863, 1841, 1864, 1865, 1855, 1856, 1857, 1866, 1867, 1868, - - 1834, 1835, 1869, 1870, 1836, 1873, 1837, 1858, 1874, 1871, - 1838, 1839, 1859, 1860, 1840, 1861, 1862, 1875, 1863, 1841, - 1864, 1865, 1872, 1876, 1877, 1866, 1867, 1868, 1878, 1879, - 1869, 1870, 1881, 1873, 1882, 1883, 1874, 1871, 1884, 1885, - 1886, 1888, 1889, 1892, 3926, 1875, 1894, 3926, 1897, 3926, - 1872, 1876, 1877, 1887, 1842, 1898, 1878, 1879, 1900, 1901, - 1881, 1902, 1882, 1883, 2481, 1842, 1884, 1885, 1886, 1888, - 1889, 2479, 1520, 1903, 1894, 1520, 1897, 1520, 1904, 2069, - 1905, 1887, 1890, 1898, 1899, 1520, 1900, 1901, 1893, 1902, - 1907, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - - 1911, 1903, 1908, 1912, 1913, 1914, 1904, 1909, 1905, 1728, - 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1907, 1915, - 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1522, 1911, 1923, - 1908, 1912, 1913, 1914, 1924, 1909, 1930, 1567, 1931, 1932, - 1933, 1934, 1935, 1936, 1925, 1927, 1937, 1915, 1916, 1917, - 1918, 1919, 1920, 1921, 1922, 1926, 1928, 1923, 1943, 1944, - 1946, 1947, 1924, 1948, 1930, 1929, 1931, 1932, 1933, 1934, - 1935, 1936, 1925, 1927, 1937, 1949, 1950, 1951, 1952, 1953, - 1954, 1955, 1568, 1926, 1928, 1956, 1943, 1944, 1946, 1947, - 1957, 1948, 1958, 1929, 1959, 1961, 1962, 1963, 1964, 1965, - - 1966, 1967, 1968, 1949, 1950, 1951, 1952, 1953, 1954, 1955, - 1960, 1969, 1970, 1956, 1971, 1972, 1973, 1975, 1957, 1976, - 1958, 1977, 1959, 1961, 1962, 1963, 1964, 1965, 1966, 1967, - 1968, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1960, 1969, - 1970, 1985, 1971, 1972, 1973, 1975, 1986, 1976, 1987, 1977, - 1988, 1991, 1992, 1996, 1997, 1998, 1989, 1999, 2000, 1978, - 1979, 1980, 1981, 1982, 1983, 1984, 1993, 2003, 1994, 1985, - 2004, 2005, 2008, 1995, 1986, 2006, 1987, 2001, 1988, 1991, - 1992, 1996, 1997, 1998, 1989, 1999, 2000, 2009, 2001, 2007, - 2670, 2010, 2011, 2012, 1993, 2003, 1994, 2014, 2004, 2005, - - 2008, 1995, 2015, 2006, 2016, 2017, 2018, 2019, 2020, 2021, - 2022, 2024, 2025, 2026, 2027, 2009, 2028, 2029, 2002, 2010, - 2011, 2012, 2030, 2036, 2023, 2014, 2037, 2038, 2039, 2040, - 2015, 2041, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2024, - 2025, 2026, 2027, 2043, 2028, 2029, 2044, 2031, 2032, 2045, - 2030, 2036, 2023, 2033, 2037, 2038, 2039, 2040, 2046, 2041, - 2047, 2034, 2048, 2049, 2035, 2050, 2051, 2052, 2053, 2667, - 2059, 2043, 2060, 2061, 2044, 2031, 2032, 2045, 2062, 2063, - 2064, 2033, 2065, 2646, 2068, 2070, 2046, 2636, 2047, 2034, - 2048, 2049, 2035, 2050, 2051, 2052, 2053, 2054, 2059, 2055, - - 2060, 2061, 2071, 2056, 2074, 2072, 2062, 2063, 2064, 2054, - 2065, 2055, 2073, 2070, 2057, 2056, 2058, 2075, 2076, 2077, - 2078, 2079, 1708, 1708, 2083, 2054, 2057, 2055, 2066, 2069, - 2071, 2056, 2074, 2072, 2085, 2626, 2086, 2054, 2087, 2055, - 2073, 2624, 2057, 2056, 2058, 2075, 2076, 2077, 2078, 2079, - 1520, 2088, 2091, 1520, 2057, 1520, 2066, 2089, 2092, 2090, - 1706, 2093, 2085, 1520, 2086, 2094, 2087, 1709, 1893, 2084, - 2095, 2096, 2107, 2108, 2109, 2110, 2111, 2608, 2593, 2088, - 2091, 2112, 2113, 2114, 2115, 2089, 2092, 2090, 2158, 2093, - 2352, 2158, 1974, 2094, 2116, 1974, 2119, 2171, 2095, 2096, - - 2107, 2108, 2109, 2110, 2111, 1707, 2097, 2120, 2121, 2112, - 2113, 2114, 2115, 2098, 2098, 2098, 2098, 2098, 2098, 2098, - 2098, 2098, 2116, 2117, 2119, 2099, 2122, 2100, 2101, 2102, - 2118, 2123, 2124, 2103, 2125, 2120, 2121, 2127, 2104, 2128, - 2129, 2130, 2131, 2132, 2133, 2126, 2141, 2105, 3720, 2289, - 3721, 2117, 2290, 2099, 2122, 2100, 2101, 2102, 2118, 2123, - 2124, 2103, 2125, 2143, 2144, 2127, 2104, 2128, 2129, 2130, - 2131, 2132, 2133, 2126, 2141, 2105, 2136, 2137, 2138, 2136, - 2139, 2137, 2140, 2139, 2145, 2146, 2147, 2148, 2149, 2150, - 2151, 2143, 2144, 2152, 2153, 2154, 2155, 2156, 2159, 2160, - - 2161, 2162, 2163, 2350, 2164, 2165, 2166, 2540, 2167, 2168, - 2169, 2172, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2173, - 2174, 2152, 2153, 2154, 2155, 2156, 2159, 2160, 2161, 2162, - 2163, 1940, 2164, 2165, 2166, 1942, 2167, 2168, 2169, 2172, - 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2173, 2174, 2182, - 2183, 2184, 2185, 2186, 1990, 2189, 2190, 1990, 2191, 2187, - 2192, 2193, 2194, 2195, 2196, 2197, 2199, 2200, 2175, 2176, - 2177, 2178, 2179, 2180, 2181, 2201, 2198, 2182, 2183, 2184, - 2185, 2186, 2202, 2189, 2190, 2203, 2191, 2198, 2192, 2193, - 2194, 2195, 2196, 2197, 2199, 2200, 2204, 2205, 2206, 2207, - - 2208, 2209, 2502, 2201, 2877, 2221, 2084, 2222, 2418, 2158, - 2202, 2223, 2158, 2203, 2376, 2224, 2225, 2226, 2227, 2418, - 2228, 2498, 2229, 2230, 2204, 2205, 2206, 2207, 2208, 2209, - 2210, 2211, 2212, 2221, 2213, 2222, 2214, 2215, 2231, 2223, - 2216, 2217, 2218, 2224, 2225, 2226, 2227, 2219, 2228, 2220, - 2229, 2230, 2232, 2233, 2234, 2235, 2236, 2237, 2210, 2211, - 2212, 2238, 2213, 2239, 2214, 2215, 2231, 2240, 2216, 2217, - 2218, 2241, 2242, 2243, 2244, 2219, 2245, 2220, 2246, 2248, - 2232, 2233, 2234, 2235, 2236, 2237, 2249, 2250, 2251, 2238, - 2254, 2239, 2255, 2256, 2257, 2240, 2258, 2259, 2260, 2241, - - 2242, 2243, 2244, 2261, 2245, 2264, 2246, 2248, 2262, 2265, - 2263, 2270, 2273, 2276, 2249, 2250, 2251, 2271, 2254, 2272, - 2255, 2256, 2257, 2273, 2258, 2259, 2260, 2278, 2279, 2499, - 2291, 2261, 2280, 2264, 2281, 2282, 2262, 2265, 2263, 2270, - 2294, 2283, 2284, 2285, 2286, 2271, 2287, 2272, 2291, 2296, - 2297, 2298, 2299, 2300, 2301, 2278, 2279, 2274, 2277, 2302, - 2280, 2303, 2281, 2282, 2304, 3720, 2498, 3721, 2069, 2283, - 2284, 2285, 2286, 3193, 2287, 2292, 2315, 2296, 2297, 2298, - 2299, 2300, 2301, 2316, 2305, 2295, 2306, 2302, 2412, 2303, - 2498, 2412, 2304, 2084, 2098, 2098, 2098, 2098, 2098, 2098, - - 2098, 2098, 2098, 2479, 2315, 2317, 2320, 2069, 2318, 2321, - 2322, 2316, 2305, 2319, 2306, 2307, 2307, 2307, 2307, 2307, - 2307, 2307, 2307, 2307, 2324, 2325, 2326, 2308, 2327, 2309, - 2310, 2311, 2328, 2317, 2320, 2312, 2318, 2321, 2322, 2329, - 2313, 2319, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2314, - 2337, 2338, 2324, 2325, 2326, 2308, 2327, 2309, 2310, 2311, - 2328, 2339, 2340, 2312, 2341, 2342, 2343, 2329, 2313, 2344, - 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2314, 2337, 2338, - 2345, 2346, 2347, 2348, 2136, 2137, 2138, 2136, 2353, 2339, - 2340, 2354, 2341, 2342, 2343, 2137, 2140, 2344, 2139, 2137, - - 2140, 2139, 2355, 2356, 2357, 2366, 2367, 2368, 2345, 2346, - 2347, 2348, 2369, 2370, 2371, 2372, 2353, 2373, 2374, 2354, - 2375, 2378, 2380, 2381, 2378, 2477, 2562, 2382, 2383, 2562, - 2355, 2356, 2357, 2366, 2367, 2368, 2384, 2385, 2386, 1940, - 2369, 2370, 2371, 2372, 2387, 2373, 2374, 2388, 2375, 1942, - 2380, 2381, 2389, 1942, 2358, 2382, 2383, 2358, 2476, 2391, - 2461, 2379, 2392, 2393, 2384, 2385, 2386, 2394, 2395, 2396, - 2478, 3926, 2387, 2359, 3926, 2388, 3926, 2397, 2398, 2399, - 2389, 2400, 2402, 2403, 2404, 2405, 2360, 2391, 2361, 2379, - 2392, 2393, 2452, 2407, 2408, 2394, 2395, 2396, 2362, 2409, - - 2363, 2364, 2365, 2410, 2411, 2397, 2398, 2399, 2413, 2400, - 2402, 2403, 2404, 2405, 2360, 3926, 2361, 2414, 3926, 2415, - 3926, 2407, 2408, 2416, 2417, 2420, 2362, 2409, 2363, 2364, - 2365, 2410, 2411, 2419, 2421, 2422, 2413, 2423, 2424, 2425, - 2427, 2428, 2429, 2430, 2419, 2414, 2431, 2415, 2426, 2432, - 2433, 2416, 2417, 2420, 2434, 2435, 2436, 2437, 2439, 2440, - 2441, 2442, 2421, 2422, 2443, 2423, 2424, 2425, 2427, 2428, - 2429, 2430, 2438, 2444, 2431, 2445, 2446, 2432, 2433, 2447, - 2448, 2449, 2434, 2435, 2436, 2437, 2439, 2440, 2441, 2442, - 2450, 2451, 2443, 2453, 2454, 2455, 2456, 2457, 2458, 2459, - - 2438, 2444, 2460, 2445, 2446, 2462, 2463, 2447, 2448, 2449, - 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2473, 2450, 2451, - 2474, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2475, 2480, - 2460, 2482, 2483, 2462, 2463, 2484, 2485, 2486, 2464, 2465, - 2466, 2467, 2468, 2469, 2470, 2473, 2500, 2487, 2474, 2488, - 2489, 2490, 2503, 2505, 2506, 2352, 2475, 2350, 2507, 2482, - 2483, 2508, 2979, 2484, 2485, 2486, 2509, 2510, 2511, 2253, - 2512, 2513, 2514, 2979, 2481, 2487, 2516, 2488, 2489, 2490, - 2493, 2505, 2506, 2493, 2571, 2493, 2507, 2571, 2252, 2508, - 2494, 2501, 2517, 2495, 2509, 2510, 2511, 2504, 2512, 2513, - - 2514, 2515, 2518, 2521, 2516, 2522, 2523, 2496, 2307, 2307, - 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2519, 2524, 2525, - 2517, 2526, 2520, 2527, 2528, 2529, 2530, 2531, 2532, 2533, - 2518, 2521, 2534, 2522, 2523, 2497, 2535, 2536, 2537, 2538, - 2539, 2541, 2542, 2543, 2544, 2519, 2524, 2525, 2545, 2526, - 2520, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2546, 2547, - 2534, 2548, 2549, 2555, 2535, 2536, 2537, 2538, 2539, 2541, - 2542, 2543, 2544, 2556, 2551, 2552, 2545, 2551, 2554, 2552, - 2559, 2554, 2563, 2566, 2567, 2557, 2546, 2547, 2564, 2548, - 2549, 2555, 2558, 2358, 2565, 2568, 2358, 2569, 2560, 2570, - - 2572, 2556, 2573, 2574, 2575, 2247, 2576, 2577, 2559, 2578, - 2563, 2566, 2567, 2557, 2579, 2583, 2564, 2584, 2585, 2586, - 2558, 3926, 2565, 2568, 3926, 2569, 3926, 2570, 2572, 2350, - 2573, 2574, 2575, 2352, 2576, 2577, 2378, 2578, 2587, 2378, - 2588, 2581, 2579, 2583, 2349, 2584, 2585, 2586, 2351, 2589, - 2590, 2591, 2592, 2594, 2591, 2595, 2596, 2597, 2598, 2599, - 2600, 2601, 2602, 2603, 2604, 2605, 2587, 2606, 2588, 2607, - 2609, 2610, 2611, 2612, 2613, 2611, 2617, 2589, 2590, 2618, - 2592, 2594, 2619, 2595, 2596, 2597, 2598, 2599, 2600, 2601, - 2602, 2603, 2604, 2605, 2620, 2606, 2621, 2607, 2609, 2610, - - 2615, 2612, 2613, 2615, 2617, 2616, 2622, 2618, 2623, 2625, - 2619, 2629, 2627, 2630, 2631, 2632, 2633, 2634, 2635, 2637, - 2638, 2639, 2620, 2627, 2621, 2157, 2640, 2641, 2642, 2643, - 2644, 2645, 2647, 2648, 2622, 2649, 2623, 2625, 2650, 2629, - 2651, 2630, 2631, 2632, 2633, 2634, 2635, 2637, 2638, 2639, - 2652, 2653, 2654, 2628, 2640, 2641, 2642, 2643, 2644, 2645, - 2647, 2648, 2655, 2649, 2656, 2657, 2650, 2658, 2651, 2659, - 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2668, 2652, 2653, - 2654, 2669, 2671, 2273, 2477, 2673, 2674, 2675, 2676, 2677, - 2655, 2678, 2656, 2657, 2679, 2658, 2680, 2659, 2660, 2661, - - 2662, 2663, 2664, 2665, 2666, 2668, 2142, 2290, 1942, 2669, - 2697, 2699, 2291, 2673, 2674, 2675, 2676, 2677, 2685, 2678, - 2493, 2491, 2679, 2493, 2680, 2493, 2500, 2481, 2672, 2481, - 2682, 2493, 2700, 2495, 2493, 2686, 2493, 2701, 2702, 2699, - 2493, 2689, 1899, 2493, 2703, 2493, 2704, 2683, 2705, 2688, - 2693, 2493, 2706, 2495, 2493, 2504, 2493, 2698, 2690, 2707, - 2700, 2682, 2708, 2687, 2495, 2701, 2702, 2694, 2709, 2710, - 1899, 2504, 2703, 2711, 2704, 2684, 2705, 2712, 2683, 2713, - 2706, 2714, 2715, 2716, 2717, 2718, 2691, 2707, 2719, 2720, - 2708, 2721, 2722, 2723, 2724, 2695, 2709, 2710, 2725, 2726, - - 2727, 2711, 2728, 2729, 2731, 2712, 2497, 2713, 2733, 2714, - 2715, 2716, 2717, 2718, 2734, 2735, 2719, 2720, 2736, 2721, - 2722, 2723, 2724, 2737, 2738, 2739, 2725, 2726, 2727, 2740, - 2728, 2729, 2731, 2741, 2551, 2552, 2733, 2551, 2554, 2552, - 2742, 2554, 2734, 2735, 2743, 2744, 2736, 2562, 2747, 2748, - 2562, 2737, 2738, 2739, 2749, 2750, 2751, 2740, 2752, 2753, - 2754, 2741, 2571, 2757, 2758, 2571, 2759, 2755, 2742, 2760, - 2761, 2762, 2743, 2744, 2763, 2766, 2747, 2748, 2767, 2768, - 1940, 2769, 2749, 2750, 2751, 2770, 2752, 2753, 2754, 2350, - 2771, 2757, 2758, 2352, 2759, 2776, 2777, 2760, 2761, 2762, - - 2778, 2779, 2763, 2766, 2349, 2780, 2767, 2768, 2351, 2769, - 2772, 2775, 2773, 2770, 2775, 2781, 2782, 2783, 2771, 2784, - 2785, 2787, 2784, 2776, 2777, 2788, 2789, 2790, 2778, 2779, - 2791, 2792, 2611, 2780, 2797, 2611, 2801, 2793, 2772, 2786, - 2773, 2795, 2796, 2781, 2782, 2783, 2803, 2615, 2785, 2787, - 2615, 2804, 2616, 2788, 2789, 2790, 2805, 2806, 2791, 2792, - 2807, 2808, 2797, 2809, 2801, 2810, 2811, 2786, 2812, 2795, - 2796, 2813, 2814, 2815, 2803, 2816, 2817, 2818, 2819, 2804, - 2820, 2821, 2822, 2823, 2805, 2806, 2824, 2827, 2807, 2808, - 2828, 2809, 2829, 2810, 2811, 2830, 2812, 2831, 2832, 2813, - - 2814, 2815, 2833, 2816, 2817, 2818, 2819, 2834, 2820, 2821, - 2822, 2823, 2835, 2836, 2824, 2827, 2837, 2838, 2828, 2839, - 2829, 2840, 2841, 2830, 2842, 2831, 2832, 2843, 2844, 2845, - 2833, 2846, 2847, 2848, 2849, 2834, 2850, 2477, 2851, 2852, - 2835, 2836, 2853, 2854, 2837, 2838, 2855, 2839, 2856, 2840, - 2841, 2857, 2842, 2500, 2290, 2843, 2844, 2845, 2106, 2846, - 2847, 2848, 2849, 2944, 2850, 2498, 2944, 2852, 2491, 2881, - 2853, 2854, 2866, 2869, 2855, 2859, 2856, 2081, 2859, 2857, - 2859, 2493, 2478, 2069, 2493, 2860, 2493, 2882, 2861, 2867, - 2686, 2864, 2497, 2871, 2495, 2290, 2688, 2883, 2501, 2080, - - 2859, 2493, 2862, 2859, 2493, 2859, 2493, 1893, 2683, 2491, - 2873, 2876, 2884, 2861, 2084, 2882, 2493, 2868, 2870, 2493, - 2885, 2493, 2886, 2042, 2887, 2883, 2693, 2874, 2690, 2495, - 2863, 2013, 2859, 2888, 2889, 2859, 2497, 2859, 2890, 2891, - 2884, 2493, 2860, 2694, 2493, 2861, 2493, 2892, 2885, 2893, - 2886, 2879, 2887, 2894, 2495, 2875, 2877, 2895, 2896, 2862, - 2897, 2888, 2889, 2898, 2899, 2900, 2890, 2891, 2694, 2901, - 2902, 2695, 2903, 2904, 2905, 2892, 2906, 2893, 2907, 2908, - 2909, 2894, 2910, 2911, 2912, 2895, 2896, 2863, 2897, 2913, - 2914, 2898, 2899, 2900, 2915, 2916, 2880, 2901, 2902, 2917, - - 2903, 2904, 2905, 2918, 2906, 2919, 2907, 2908, 2909, 2920, - 2910, 2911, 2912, 2921, 2922, 2924, 2925, 2913, 2914, 2926, - 2927, 2928, 2915, 2916, 2929, 2930, 2931, 2917, 2933, 2934, - 2935, 2918, 2936, 2919, 2937, 2938, 2939, 2920, 2941, 2942, - 2943, 2921, 2922, 2924, 2925, 2946, 2947, 2926, 2927, 2928, - 2950, 2948, 2929, 2930, 2931, 2949, 2933, 2934, 2935, 1942, - 2936, 1940, 2937, 2938, 2939, 2956, 2941, 2942, 2943, 2945, - 2957, 2958, 2945, 2946, 2947, 2775, 2952, 2959, 2775, 2948, - 2962, 2951, 2963, 2949, 2953, 2784, 2964, 2954, 2784, 2955, - 2960, 2965, 2966, 2956, 2967, 2968, 2969, 2971, 2957, 2958, - - 2972, 2973, 2977, 2978, 2952, 2959, 2980, 2982, 2962, 2951, - 2963, 2983, 2953, 2984, 2964, 2954, 2985, 2955, 2982, 2965, - 2966, 2986, 2967, 2968, 2969, 2971, 2987, 2988, 2972, 2973, - 2977, 2978, 2989, 2992, 2980, 2994, 2995, 2996, 2997, 2983, - 2998, 2984, 2999, 3000, 2985, 3001, 3002, 2993, 3003, 2986, - 3004, 2998, 3005, 3006, 2987, 2988, 3007, 3008, 3009, 3010, - 2989, 2992, 3011, 2994, 2995, 2996, 2997, 3012, 3013, 3014, - 2999, 3000, 3015, 3001, 3002, 3016, 3003, 3017, 3004, 3018, - 3005, 3006, 3019, 3020, 3007, 3008, 3009, 3010, 3021, 3022, - 3011, 3023, 3024, 3025, 3026, 3012, 3013, 3014, 2477, 3027, - - 3015, 3028, 3029, 3016, 3030, 3017, 3032, 3018, 3036, 2880, - 3019, 3020, 2290, 2500, 3053, 3096, 3021, 3022, 3096, 3023, - 3024, 3025, 3026, 2859, 3033, 2867, 2859, 3027, 2859, 3028, - 3029, 3036, 3030, 3034, 3032, 2859, 2861, 1938, 2859, 3054, - 2859, 2859, 3053, 2277, 2859, 3039, 2859, 3045, 2867, 3055, - 2862, 3034, 3033, 3037, 2861, 2685, 2859, 2685, 2295, 2859, - 2493, 2859, 3040, 2493, 2867, 2493, 3042, 3054, 2862, 2861, - 2682, 3056, 2686, 2495, 2686, 3057, 3037, 3055, 3035, 1910, - 1906, 2859, 3058, 2862, 2859, 3102, 2859, 2683, 3102, 1896, - 3041, 3047, 3046, 3059, 2861, 3117, 3035, 1522, 3117, 3056, - - 2687, 3137, 2870, 3057, 2859, 3060, 1891, 2859, 2874, 2859, - 3058, 3043, 3137, 2859, 3047, 2684, 2859, 2861, 2859, 2493, - 1710, 3059, 2493, 3050, 2493, 2493, 2861, 3061, 2493, 2689, - 2493, 2874, 3062, 3060, 2493, 2689, 3048, 2493, 2493, 2493, - 2874, 2493, 3063, 2493, 2693, 3064, 2690, 2495, 2693, 3065, - 3066, 2495, 2690, 3067, 3068, 3061, 3069, 3070, 3071, 3048, - 3062, 2694, 3072, 3073, 3074, 2694, 3075, 3076, 3051, 3077, - 3063, 3078, 3079, 3064, 2691, 3080, 3081, 3065, 3066, 3082, - 2877, 3067, 3068, 3083, 3069, 3070, 3071, 3084, 3085, 2695, - 3072, 3073, 3074, 2880, 3075, 3076, 3086, 3077, 3087, 3078, - - 3079, 3088, 3089, 3080, 3081, 3091, 3092, 3082, 3093, 3094, - 3095, 3083, 3097, 3098, 3099, 3084, 3085, 3100, 2945, 3105, - 3106, 2945, 3108, 3103, 3086, 3109, 3087, 3110, 3111, 3088, - 3089, 3112, 3113, 3091, 3092, 3116, 3093, 3094, 3095, 3122, - 3097, 3098, 3099, 3114, 3115, 3100, 3926, 3105, 3106, 3926, - 3108, 3926, 3123, 3109, 3118, 3110, 3111, 3124, 3119, 3112, - 3113, 3125, 3126, 3116, 3125, 3120, 3127, 3122, 3128, 3129, - 3131, 3114, 3115, 3132, 3133, 3135, 3136, 3138, 3139, 3140, - 3123, 3141, 3118, 3142, 3143, 3124, 3119, 3144, 3145, 3146, - 3126, 3147, 3148, 3120, 3127, 3149, 3128, 3129, 3131, 3150, - - 3151, 3132, 3133, 3135, 3136, 3138, 3139, 3140, 3152, 3141, - 3153, 3142, 3143, 3154, 3155, 3144, 3145, 3146, 3156, 3147, - 3148, 3157, 3158, 3149, 3159, 3160, 3161, 3150, 3151, 3162, - 3165, 3168, 3163, 3166, 3169, 3170, 3152, 3171, 3153, 3172, - 3174, 3154, 3155, 3163, 3166, 1880, 3156, 3175, 3176, 3157, - 3158, 3177, 3159, 3160, 3161, 3178, 3179, 3162, 3165, 3168, - 3180, 3181, 3169, 3170, 3183, 3171, 3184, 3172, 3174, 3187, - 3185, 3188, 2498, 3164, 3167, 3175, 3176, 2859, 3190, 3177, - 2859, 1843, 2859, 3178, 3179, 3186, 2685, 3189, 3180, 3181, - 2861, 3036, 3183, 3043, 3184, 2867, 2290, 3187, 3185, 3188, - - 3191, 1825, 2859, 2686, 2862, 2859, 2859, 2859, 2867, 2859, - 1753, 2859, 3047, 3186, 2493, 2861, 3192, 2493, 3051, 2493, - 1391, 2290, 1569, 3046, 2693, 2859, 3201, 2495, 2859, 2874, - 2859, 3195, 3043, 3040, 3202, 3034, 3046, 2859, 2861, 3203, - 2859, 2694, 2859, 2493, 3204, 3205, 2493, 3196, 2493, 3206, - 2861, 3207, 2862, 3198, 3201, 2859, 2495, 3048, 2859, 3208, - 2859, 3193, 3202, 3209, 2874, 3047, 3210, 3203, 2861, 3194, - 3199, 3211, 3204, 3205, 3212, 3213, 3214, 3206, 3215, 3207, - 3043, 3216, 2874, 3217, 3218, 3219, 3220, 3208, 3221, 3222, - 3223, 3209, 3051, 3224, 3210, 3225, 3226, 3227, 3200, 3211, - - 3227, 3228, 3212, 3213, 3214, 3229, 3215, 3230, 3231, 3216, - 3051, 3217, 3218, 3219, 3220, 3232, 3221, 3222, 3223, 3233, - 3234, 3224, 3235, 3225, 3226, 3238, 3696, 3102, 3238, 3228, - 3102, 1729, 3237, 3229, 3096, 3230, 3231, 3096, 3239, 3926, - 3241, 3242, 3926, 3232, 3926, 3244, 3245, 3233, 3234, 3246, - 3235, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, - 3237, 3247, 3248, 3249, 3250, 3251, 3239, 3252, 3241, 3242, - 1725, 1713, 3262, 3244, 3245, 3262, 3697, 3246, 3254, 3117, - 3255, 3256, 3117, 3258, 3259, 3260, 3263, 3264, 3265, 3247, - 3248, 3249, 3250, 3251, 3266, 3252, 3253, 3253, 3253, 3253, - - 3253, 3253, 3253, 3253, 3253, 3267, 3254, 3268, 3255, 3256, - 3269, 3258, 3259, 3260, 3263, 3264, 3265, 3270, 3271, 3272, - 3273, 3274, 3266, 3275, 3276, 3277, 3278, 3279, 3280, 3281, - 3282, 3284, 3285, 3267, 3286, 3268, 3287, 3289, 3269, 3290, - 3291, 3292, 3293, 3294, 3295, 3270, 3271, 3272, 3273, 3274, - 3297, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3284, - 3285, 3297, 3286, 1712, 3287, 3289, 3299, 3290, 3291, 3292, - 3293, 3294, 3295, 3300, 3301, 3302, 3303, 3304, 3305, 3306, - 3307, 3308, 3309, 3310, 3311, 3312, 3314, 3385, 1710, 3339, - 2859, 3298, 3339, 2859, 3299, 2859, 3313, 1652, 3385, 3036, - - 3039, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, - 3309, 3310, 3311, 3312, 3314, 2859, 2867, 3040, 2859, 3369, - 2859, 3316, 3369, 3480, 3313, 3034, 2859, 2493, 2861, 2859, - 2493, 2859, 2493, 1651, 3480, 1641, 3039, 3315, 2686, 1640, - 2495, 3321, 2862, 1639, 3037, 3041, 2859, 2493, 3322, 2859, - 2493, 2859, 2493, 3040, 2694, 3323, 3047, 3198, 2859, 2861, - 2495, 2859, 2493, 2859, 3324, 2493, 2870, 2493, 2873, 3321, - 3035, 2861, 3319, 2874, 3199, 2495, 3322, 3325, 3326, 3327, - 3328, 3193, 2880, 3323, 3329, 2874, 3330, 3331, 3332, 3199, - 3333, 3334, 3324, 3335, 3336, 3337, 3338, 3340, 3341, 1575, - - 3344, 3048, 3317, 3345, 1574, 3325, 3326, 3327, 3328, 3346, - 3347, 3348, 3329, 2875, 3330, 3331, 3332, 3320, 3333, 3334, - 3349, 3335, 3336, 3337, 3338, 3340, 3341, 3227, 3344, 3350, - 3227, 3345, 3342, 3351, 1569, 1545, 1544, 3346, 3347, 3348, - 3485, 3357, 3262, 3352, 3357, 3262, 3378, 3380, 3349, 3378, - 3380, 3485, 1541, 3354, 3356, 3238, 3360, 3350, 3238, 1540, - 3361, 3351, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, - 3236, 3352, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3354, 3356, 3362, 3360, 3363, 3364, 3358, 3361, 3365, - 3366, 3367, 3368, 3253, 3253, 3253, 3253, 3253, 3253, 3253, - - 3253, 3253, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, - 3379, 3362, 3381, 3363, 3364, 3358, 3382, 3365, 3366, 3367, - 3368, 3383, 3384, 3386, 3387, 3388, 3389, 3391, 3392, 3393, - 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3379, 3394, - 3381, 3395, 3398, 3399, 3382, 3400, 3401, 3403, 3404, 3383, - 3384, 3386, 3387, 3388, 3389, 3391, 3392, 3393, 3405, 3408, - 3406, 3409, 3410, 3411, 3412, 3413, 3414, 3394, 3407, 3395, - 3398, 3399, 3415, 3400, 3401, 3403, 3404, 3416, 3418, 3419, - 3420, 3421, 3422, 3423, 3036, 1539, 3405, 3408, 3406, 3409, - 3410, 3411, 3412, 3413, 3414, 3320, 3407, 1538, 2290, 3425, - - 3415, 2867, 3426, 3715, 1537, 3416, 3418, 3419, 3420, 3421, - 3422, 3423, 2859, 2493, 3715, 2859, 2493, 2859, 2493, 3427, - 3428, 3429, 3034, 3424, 3430, 2861, 2495, 3425, 2859, 2868, - 3426, 2859, 2493, 2859, 3431, 2493, 3432, 2493, 3047, 2862, - 3199, 2861, 3198, 3433, 3434, 2495, 3435, 3427, 3428, 3429, - 3436, 3437, 3430, 3439, 3440, 2874, 3439, 3442, 3443, 3199, - 3444, 3445, 3431, 3464, 3432, 1535, 3464, 2863, 3320, 1115, - 873, 3433, 3434, 3339, 3435, 1481, 3339, 3465, 3436, 3437, - 3465, 3466, 3440, 2875, 3466, 3442, 3443, 3320, 3444, 3445, - 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3441, - - 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, - 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, - 3343, 3446, 3447, 3448, 3441, 3449, 3450, 3451, 3452, 3454, - 3455, 3456, 3457, 3458, 3696, 3343, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3357, 3459, 3460, 3357, 3446, - 3447, 3448, 3461, 3449, 3450, 3451, 3452, 3454, 3455, 3456, - 3457, 3458, 3453, 3453, 3453, 3453, 3453, 3453, 3453, 3453, - 3453, 3462, 3467, 3468, 3459, 3460, 3469, 3470, 3471, 3469, - 3461, 3472, 3474, 3475, 3630, 3474, 3475, 3510, 1472, 3510, - 1470, 3477, 3478, 3380, 3479, 3482, 3380, 3483, 3484, 3462, - - 3467, 3468, 3486, 3487, 1465, 3470, 3471, 3491, 3492, 3472, - 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3477, - 3478, 3493, 3479, 3482, 3488, 3483, 3484, 3494, 3495, 3496, - 3486, 3487, 3489, 3490, 3497, 3491, 3492, 3498, 3499, 3500, - 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3493, - 3511, 3512, 3488, 3513, 3515, 3494, 3495, 3496, 3516, 3510, - 3489, 3490, 3497, 3517, 3518, 3498, 3499, 3500, 3501, 3502, - 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3519, 3511, 3512, - 2493, 3513, 3515, 2493, 3520, 2493, 3516, 3521, 3522, 3523, - 3198, 3517, 3518, 2495, 3438, 3438, 3438, 3438, 3438, 3438, - - 3438, 3438, 3438, 3439, 3528, 3519, 3439, 3199, 3524, 3529, - 3526, 1460, 3520, 3526, 3527, 3521, 3522, 3523, 1402, 1401, - 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3530, - 3531, 3532, 3528, 3533, 3534, 3317, 3535, 3529, 3441, 3441, - 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3536, - 3537, 3538, 3539, 3540, 540, 3543, 3544, 3530, 3531, 3532, - 3545, 3533, 3534, 3441, 3535, 3453, 3453, 3453, 3453, 3453, - 3453, 3453, 3453, 3453, 3546, 3553, 3554, 3536, 3537, 3538, - 3539, 3540, 3541, 3543, 3544, 3541, 3464, 3548, 3545, 3464, - 3548, 3551, 3549, 3556, 3551, 3469, 3552, 3557, 3469, 3558, - - 3555, 538, 3546, 3553, 3554, 3474, 3602, 3716, 3560, 3602, - 3562, 3542, 3475, 3608, 3612, 3475, 3608, 3612, 3716, 533, - 531, 3556, 3563, 3565, 3566, 3557, 3567, 3558, 3564, 3561, - 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3562, 3542, - 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3568, - 3563, 3565, 3566, 3569, 3567, 3570, 3564, 3571, 3572, 3573, - 3575, 3577, 3578, 3579, 3580, 3581, 3582, 3584, 3585, 3588, - 3589, 3548, 516, 514, 3548, 3551, 3549, 3568, 3551, 510, - 3552, 3569, 3591, 3570, 3592, 3571, 3572, 3573, 3575, 3577, - 3578, 3579, 3580, 3581, 3582, 3584, 3585, 3588, 3589, 3590, - - 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, - 3591, 3593, 3592, 3596, 3597, 3598, 3599, 3600, 3601, 3673, - 3676, 1392, 3673, 3676, 3590, 3603, 3603, 3603, 3603, 3603, - 3603, 3603, 3603, 3603, 3605, 3606, 3607, 3609, 3610, 3593, - 3611, 3596, 3597, 3598, 3599, 3600, 3601, 3525, 3525, 3525, - 3525, 3525, 3525, 3525, 3525, 3525, 3526, 3613, 3614, 3526, - 3615, 3616, 3605, 3606, 3607, 3609, 3610, 3618, 3611, 3619, - 3620, 3623, 3626, 3604, 3604, 3604, 3604, 3604, 3604, 3604, - 3604, 3604, 3627, 3631, 3541, 3613, 3614, 3541, 3615, 3616, - 3621, 1388, 3632, 3621, 3633, 3618, 3635, 3619, 3620, 3623, - - 3626, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, - 3627, 3631, 3559, 1382, 3763, 3926, 3636, 3637, 3474, 3622, - 3632, 3560, 3633, 3747, 3635, 3763, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3636, 3637, 3638, 3622, 3561, 3561, - 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3640, 3641, 3642, - 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, - 3653, 3655, 3658, 3630, 3638, 3604, 3604, 3604, 3604, 3604, - 3604, 3604, 3604, 3604, 3659, 3640, 3641, 3642, 3643, 3644, - 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3655, - - 3658, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, - 3590, 3590, 3659, 3660, 3661, 3663, 3664, 3665, 3667, 3612, - 3668, 3667, 3612, 3669, 3680, 1352, 3590, 3672, 3674, 3785, - 3678, 3668, 3785, 3681, 3671, 3682, 3683, 3684, 3685, 3686, - 3688, 3660, 3661, 3663, 3664, 3665, 3603, 3603, 3603, 3603, - 3603, 3603, 3603, 3603, 3603, 3672, 3674, 3608, 3678, 3786, - 3608, 3681, 3786, 3682, 3683, 3684, 3685, 3686, 3688, 3689, - 3692, 3699, 1344, 3700, 3675, 3675, 3675, 3675, 3675, 3675, - 3675, 3675, 3675, 3617, 3617, 3617, 3617, 3617, 3617, 3617, - 3617, 3617, 3621, 3701, 1333, 3621, 3693, 3689, 3692, 3699, - - 3694, 3700, 3670, 3702, 3703, 3704, 3705, 3695, 431, 3687, - 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3706, 3707, - 3708, 3701, 3559, 3709, 3693, 3710, 3711, 3712, 3694, 3713, - 3714, 3702, 3703, 3704, 3705, 3695, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3634, 3717, 3706, 3707, 3708, 3718, - 3722, 3709, 3724, 3710, 3711, 3712, 3725, 3713, 3714, 3726, - 418, 3668, 3728, 3668, 3668, 3673, 3926, 3731, 3673, 3817, - 3729, 414, 3817, 3717, 3668, 399, 3676, 3718, 3722, 3676, - 3724, 3732, 3735, 3667, 3725, 3668, 3667, 3726, 3669, 3926, - 3728, 3736, 3926, 3737, 3926, 3731, 3668, 3675, 3675, 3675, - - 3675, 3675, 3675, 3675, 3675, 3675, 3738, 3739, 3740, 3741, - 3735, 3742, 3743, 3744, 3745, 3746, 3748, 395, 3749, 3736, - 3750, 3737, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, - 3687, 3751, 3752, 3753, 3738, 3739, 3740, 3741, 3754, 3742, - 3743, 3744, 3745, 3746, 3748, 3670, 3749, 3755, 3750, 3756, - 3757, 3758, 3759, 3760, 3761, 3762, 3764, 3765, 3766, 3751, - 3752, 3753, 3769, 3773, 3776, 3926, 3754, 3670, 3926, 3767, - 3926, 3777, 3778, 3779, 3780, 3755, 3781, 3756, 3757, 3758, - 3759, 3760, 3761, 3762, 3764, 3765, 3766, 3782, 3783, 3787, - 3769, 3783, 3776, 3788, 3696, 3789, 3790, 3767, 3791, 3777, - - 3778, 3779, 3780, 3792, 3781, 3793, 3794, 3807, 3795, 3796, - 3797, 3798, 3799, 3774, 3801, 3782, 3807, 3787, 3802, 3803, - 3804, 3788, 3805, 3789, 3790, 3810, 3791, 3811, 3812, 373, - 3813, 3792, 3814, 3793, 3794, 3784, 3795, 3796, 3797, 3798, - 3799, 3815, 3801, 3818, 3697, 3825, 3802, 3803, 3804, 3785, - 3805, 3826, 3785, 3810, 3820, 3811, 3812, 3808, 3813, 3786, - 3814, 3827, 3786, 3784, 3822, 3823, 3774, 3824, 3823, 3815, - 3824, 3818, 3828, 3825, 3829, 3831, 3832, 3833, 3834, 3826, - 3835, 3836, 3839, 3840, 3841, 3842, 3840, 3843, 3844, 3827, - 3845, 3846, 3817, 3847, 3926, 3817, 3807, 3926, 3872, 3926, - - 3828, 3872, 3829, 3831, 3832, 3833, 3834, 3854, 3835, 3836, - 3839, 3855, 3856, 3842, 3857, 3843, 3844, 3926, 3845, 3846, - 3926, 3847, 3926, 3823, 3824, 3858, 3823, 3824, 3851, 3853, - 3859, 3860, 3861, 3862, 3774, 3854, 3863, 3871, 3869, 3855, - 3856, 3869, 3857, 3870, 3873, 3874, 3808, 3864, 3874, 3875, - 3865, 3926, 3926, 3858, 3926, 3926, 3926, 3926, 3859, 3860, - 3861, 3862, 3880, 3881, 3863, 3871, 3882, 3883, 3884, 3885, - 3886, 3887, 3873, 3888, 3889, 3864, 3890, 3875, 3865, 3869, - 3893, 369, 3869, 3895, 3870, 3897, 3895, 3900, 3901, 363, - 3880, 3881, 359, 355, 3882, 3883, 3884, 3885, 3886, 3887, - - 3872, 3888, 3889, 3872, 3890, 1275, 1214, 3902, 3893, 3874, - 3903, 3904, 3874, 3897, 3905, 3900, 3901, 3894, 3894, 3894, - 3894, 3894, 3894, 3894, 3894, 3894, 3896, 3896, 3896, 3896, - 3896, 3896, 3896, 3896, 3896, 3902, 3906, 3907, 3903, 3904, - 3910, 1213, 3905, 3894, 3894, 3894, 3894, 3894, 3894, 3894, - 3894, 3894, 3895, 1197, 1188, 3895, 1176, 1155, 1140, 3911, - 3912, 3913, 3915, 3916, 3906, 3907, 662, 1115, 3910, 3909, - 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3896, 3896, - 3896, 3896, 3896, 3896, 3896, 3896, 3896, 3911, 3912, 3913, - 3915, 3916, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, - - 3909, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, - 645, 385, 385, 873, 1071, 1060, 1052, 1049, 1007, 540, - 538, 1005, 533, 531, 999, 516, 514, 997, 510, 3917, - 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 76, 76, + 949, 950, 955, 965, 956, 960, 968, 966, 957, 963, + 969, 971, 946, 958, 967, 961, 977, 982, 959, 970, + 982, 743, 964, 1125, 743, 947, 948, 962, 949, 950, + 955, 965, 956, 960, 968, 966, 957, 963, 969, 971, + + 508, 972, 967, 973, 977, 974, 980, 970, 1001, 980, + 739, 981, 1002, 739, 983, 740, 3299, 983, 986, 984, + 2985, 986, 746, 987, 1003, 746, 1004, 747, 510, 972, + 669, 973, 990, 974, 991, 990, 1001, 991, 750, 992, + 1002, 750, 994, 751, 995, 994, 1011, 995, 512, 996, + 529, 513, 1003, 530, 1004, 1012, 536, 1013, 529, 537, + 1014, 536, 1015, 1016, 536, 1017, 1018, 1019, 1020, 1021, + 2986, 3294, 529, 1027, 1011, 1024, 1035, 1028, 536, 1036, + 1033, 1029, 1025, 1012, 1022, 1013, 1037, 1023, 1014, 1026, + 1015, 1016, 1042, 1017, 1018, 1019, 1020, 1021, 999, 1034, + + 1005, 1027, 1030, 1024, 1035, 1028, 1007, 1036, 1033, 1029, + 1025, 1040, 1022, 1038, 1037, 1023, 1031, 1026, 1032, 1043, + 1042, 1044, 1045, 1046, 1047, 801, 1041, 1034, 801, 1039, + 1030, 1048, 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1040, + 1059, 1038, 1048, 1060, 1031, 1062, 1032, 1043, 1063, 1044, + 1045, 1046, 1047, 1064, 1041, 1065, 1066, 1039, 1067, 1069, + 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1070, 1059, 1071, + 1073, 1060, 1049, 1062, 1074, 1077, 1063, 1075, 1078, 834, + 1079, 1064, 834, 1065, 1066, 1080, 1067, 1069, 1075, 1081, + 1082, 1083, 1084, 1085, 1086, 1070, 1087, 1071, 1073, 1076, + + 1088, 1089, 1074, 1077, 1090, 1093, 1078, 1091, 1079, 1094, + 1095, 1096, 1097, 1080, 1098, 1092, 1099, 1081, 1082, 1083, + 1084, 1085, 1086, 1100, 1087, 1105, 1127, 1076, 1088, 1089, + 367, 1204, 1090, 1093, 1102, 1091, 355, 1094, 1095, 1096, + 1097, 390, 1098, 1092, 1099, 859, 363, 373, 859, 1104, + 1106, 1100, 869, 347, 862, 347, 1206, 862, 865, 357, + 2297, 865, 358, 367, 866, 390, 368, 866, 3268, 3254, + 1111, 367, 632, 675, 383, 640, 873, 383, 754, 383, + 392, 622, 2523, 1110, 1107, 394, 1129, 640, 392, 399, + 867, 1130, 1712, 1113, 1131, 418, 628, 634, 1126, 888, + + 348, 383, 3060, 758, 1075, 383, 640, 1132, 383, 359, + 383, 431, 1133, 369, 1129, 1075, 1128, 651, 640, 1130, + 871, 867, 1131, 391, 834, 1756, 391, 834, 392, 641, + 649, 653, 383, 1112, 1114, 1132, 655, 1713, 391, 883, + 1133, 391, 888, 392, 910, 671, 653, 910, 654, 412, + 392, 655, 413, 399, 883, 1134, 1135, 2523, 642, 640, + 872, 391, 2523, 677, 391, 392, 392, 890, 1139, 653, + 1394, 1112, 978, 1140, 655, 978, 1142, 883, 656, 428, + 1904, 1115, 399, 1134, 1135, 399, 1144, 399, 392, 642, + 640, 979, 391, 884, 979, 391, 1139, 392, 885, 414, + + 893, 1140, 894, 913, 1142, 895, 914, 657, 896, 399, + 890, 422, 1897, 2887, 1144, 391, 884, 873, 391, 392, + 392, 1459, 657, 653, 399, 654, 1145, 399, 655, 399, + 2506, 883, 1459, 391, 3057, 1146, 391, 656, 392, 510, + 1118, 893, 392, 894, 1205, 657, 895, 887, 1116, 896, + 1192, 399, 1147, 1192, 1145, 1148, 874, 1898, 423, 391, + 392, 3055, 391, 1146, 392, 3193, 887, 893, 391, 1120, + 1117, 391, 895, 392, 1149, 896, 1121, 3184, 894, 897, + 1147, 895, 392, 1148, 896, 393, 392, 394, 897, 392, + 392, 756, 393, 391, 394, 391, 391, 392, 392, 657, + + 1136, 1124, 1149, 404, 392, 1137, 405, 890, 1150, 658, + 1151, 392, 1152, 1153, 897, 887, 907, 1138, 1154, 907, + 391, 392, 980, 1122, 393, 980, 394, 981, 1136, 392, + 2810, 982, 395, 1137, 982, 2479, 1150, 2480, 1151, 395, + 1152, 1153, 1157, 392, 1158, 1138, 1154, 1159, 665, 1143, + 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 930, 930, + 930, 930, 930, 930, 930, 930, 930, 1160, 1161, 1162, + 1157, 395, 1158, 1163, 1166, 1159, 1164, 391, 1167, 1165, + 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1178, + 1180, 1181, 1184, 1179, 1185, 1160, 1161, 1162, 1186, 1187, + + 1182, 1163, 1166, 1183, 1188, 1189, 1167, 1165, 1168, 1169, + 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1178, 1180, 1181, + 1184, 1179, 1185, 1191, 2987, 1459, 1186, 1187, 1182, 1208, + 3141, 1183, 1188, 1189, 983, 1193, 1459, 983, 1193, 984, + 1194, 986, 3101, 1194, 986, 1195, 987, 1196, 2523, 1197, + 1196, 1191, 1197, 990, 1198, 991, 990, 1208, 991, 1200, + 992, 1201, 1200, 1209, 1201, 994, 1202, 995, 994, 1210, + 995, 1203, 996, 516, 1203, 529, 1207, 1212, 1211, 536, + 1214, 1217, 1213, 529, 536, 1218, 1219, 536, 1220, 1221, + 1222, 1209, 1223, 1224, 1225, 3063, 533, 1210, 1226, 540, + + 1227, 1904, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1217, + 1237, 1235, 1238, 1218, 1219, 1236, 1220, 1221, 1222, 1239, + 1223, 1224, 1225, 760, 768, 766, 1226, 772, 1227, 770, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1240, 1237, 1235, + 1238, 1241, 1242, 1236, 1243, 1244, 1245, 1239, 1246, 1249, + 1252, 1250, 1247, 1254, 1248, 1251, 1255, 1256, 1257, 1258, + 1259, 3055, 1264, 1265, 1266, 1240, 1268, 1253, 1269, 1241, + 1242, 1270, 1243, 1244, 1245, 1266, 1246, 1249, 1252, 1250, + 1247, 1254, 1248, 1251, 1255, 1256, 1257, 1258, 1259, 1260, + 1264, 1265, 1271, 1261, 1268, 1253, 1269, 1272, 1273, 1270, + + 1262, 1274, 1263, 1275, 1276, 1267, 1278, 1279, 1280, 1281, + 1282, 1283, 1284, 1285, 2880, 1192, 1293, 1260, 1192, 1294, + 1271, 1261, 1295, 3042, 1296, 1272, 1273, 1297, 1262, 1274, + 1263, 1275, 1276, 3002, 1278, 1279, 1280, 1281, 1282, 1283, + 1284, 1285, 1286, 1287, 1293, 1298, 1288, 1294, 1299, 1300, + 1295, 1289, 1296, 1301, 1302, 1297, 1303, 1290, 1304, 1305, + 1306, 1291, 1307, 1292, 1308, 1309, 1310, 1311, 1312, 1313, + 1286, 1287, 1314, 1298, 1288, 1315, 1299, 1300, 1316, 1289, + 1317, 1301, 1302, 1318, 1303, 1290, 1304, 1305, 1306, 1291, + 1307, 1292, 1308, 1309, 1310, 1311, 1312, 1313, 351, 1321, + + 1314, 888, 869, 1315, 383, 640, 1316, 383, 1317, 383, + 1325, 1318, 888, 888, 3001, 1330, 1571, 1319, 2992, 391, + 867, 428, 391, 1116, 392, 1333, 355, 653, 1334, 654, + 2987, 383, 1323, 662, 399, 883, 2951, 391, 399, 1336, + 391, 399, 392, 399, 399, 1329, 392, 654, 1337, 431, + 655, 1327, 2934, 883, 1118, 399, 1334, 1338, 399, 641, + 399, 1572, 1331, 1193, 391, 399, 1193, 1336, 884, 890, + 1322, 660, 905, 2297, 656, 1396, 1337, 1339, 1396, 1662, + 890, 1326, 399, 1196, 1340, 1338, 1196, 1343, 1320, 640, + 1662, 391, 892, 897, 391, 1344, 392, 1341, 1347, 893, + + 1349, 1120, 1350, 1324, 895, 1339, 391, 896, 1351, 391, + 406, 392, 1340, 1342, 893, 1343, 894, 2074, 392, 895, + 1352, 657, 896, 1344, 391, 1341, 1347, 391, 1349, 392, + 1350, 2875, 893, 392, 894, 1353, 1351, 895, 1355, 399, + 896, 1342, 1356, 1358, 1359, 1348, 887, 1360, 1352, 1361, + 1362, 392, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 897, 2075, 1353, 1363, 1364, 1355, 1366, 1367, 1368, + 1356, 1358, 1359, 1369, 1370, 1360, 1371, 1361, 1362, 1332, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1372, + 1324, 1375, 1363, 1364, 1376, 1366, 1367, 1368, 1373, 1374, + + 1377, 1369, 1370, 1378, 1371, 1379, 1380, 1381, 1382, 1383, + 1384, 1386, 1387, 1388, 1389, 1390, 2297, 1372, 1194, 1375, + 2836, 1194, 1376, 1195, 2835, 2812, 1373, 1374, 1377, 1397, + 2774, 1378, 1397, 1379, 1380, 1381, 1382, 1383, 1384, 1386, + 1387, 1388, 1389, 1390, 1197, 1398, 508, 1197, 1398, 1198, + 1399, 1200, 1201, 1400, 1200, 1201, 1400, 1202, 1203, 1401, + 1402, 1203, 1403, 1406, 1407, 1408, 1409, 1410, 1411, 1412, + 1413, 1414, 1415, 1416, 510, 1417, 1418, 1419, 1421, 1422, + 1423, 1424, 1425, 1420, 1426, 1427, 1428, 1401, 1402, 1429, + 1403, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, + + 1415, 1416, 1430, 1417, 1418, 1419, 1421, 1422, 1423, 1424, + 1425, 1420, 1426, 1427, 1428, 1431, 1432, 1429, 1433, 1434, + 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1444, 1445, + 1430, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1458, + 1460, 2360, 1443, 1431, 1432, 1461, 1433, 1434, 1435, 1436, + 1437, 1438, 1439, 1440, 1441, 1442, 1444, 1445, 1454, 1446, + 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1458, 1460, 1455, + 1443, 1462, 1464, 1461, 1456, 1457, 1465, 1466, 1467, 1469, + 1470, 1471, 1472, 1474, 1476, 1477, 1454, 1478, 1479, 1481, + 1482, 1483, 1485, 1486, 1480, 1487, 1488, 1455, 1489, 1462, + + 1464, 1490, 1456, 1457, 1465, 1466, 1467, 1469, 1470, 1471, + 1472, 1474, 1476, 1477, 1491, 1478, 1479, 1481, 1482, 1483, + 1485, 1486, 1480, 1487, 1488, 1492, 1489, 1493, 1494, 1490, + 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, + 1505, 1506, 1491, 1507, 869, 888, 1511, 1116, 1396, 1397, + 2358, 1396, 1397, 1492, 1575, 1493, 1494, 1575, 1495, 1496, + 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, + 1508, 1507, 391, 1514, 1511, 391, 399, 392, 888, 399, + 893, 399, 894, 870, 889, 895, 1509, 662, 896, 399, + 1515, 1400, 885, 1512, 1400, 1513, 1516, 1517, 3937, 392, + + 1518, 1514, 1519, 399, 1520, 2741, 391, 1521, 1526, 391, + 1527, 392, 871, 890, 1510, 1528, 894, 1115, 1515, 895, + 1529, 1512, 896, 1513, 1516, 1517, 1532, 897, 1518, 1530, + 1519, 656, 1520, 391, 1523, 1521, 1526, 1523, 1527, 1523, + 1531, 1536, 1537, 1528, 1524, 1539, 890, 1523, 1529, 1545, + 1546, 1549, 1550, 1551, 659, 1552, 1534, 1530, 1553, 1554, + 887, 1122, 1535, 1582, 1575, 2739, 1582, 1575, 1531, 1536, + 1537, 2682, 1555, 1539, 1556, 1557, 1558, 1545, 1546, 1549, + 1550, 1551, 1559, 1552, 1534, 1560, 1553, 1554, 1561, 1525, + 1535, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + + 1555, 1562, 1556, 1557, 1558, 1563, 1564, 1567, 1565, 1568, + 1559, 1569, 1570, 1560, 1566, 1398, 1561, 1576, 1398, 1577, + 1399, 1580, 1581, 1583, 1584, 1585, 1586, 1587, 1588, 1562, + 1589, 1590, 1591, 1563, 1564, 1567, 1565, 1568, 1592, 1569, + 1570, 1596, 1566, 1597, 1593, 1576, 1598, 1577, 1599, 1580, + 1581, 1583, 1584, 1585, 1586, 1587, 1588, 1594, 1589, 1590, + 1591, 1600, 1595, 1601, 1602, 1603, 1592, 1604, 1609, 1596, + 1610, 1597, 1593, 1605, 1598, 1611, 1599, 1612, 1613, 1606, + 1614, 1607, 1615, 1582, 1608, 1594, 1582, 1622, 1763, 1600, + 1595, 1601, 1602, 1603, 1623, 1604, 1609, 1624, 1610, 1625, + + 1616, 1605, 1626, 1611, 1617, 1612, 1613, 1606, 1614, 1607, + 1615, 1618, 1608, 1619, 1620, 1622, 1621, 1627, 1628, 1629, + 1630, 1631, 1623, 1632, 1633, 1624, 1634, 1625, 1616, 1635, + 1626, 1636, 1617, 1637, 1638, 1639, 1640, 1641, 1642, 1618, + 1646, 1619, 1620, 1647, 1621, 1627, 1628, 1629, 1630, 1631, + 1648, 1632, 1633, 1649, 1634, 1650, 1657, 1635, 1658, 1636, + 1651, 1637, 1638, 1639, 1640, 1641, 1642, 1652, 1646, 1664, + 1665, 1647, 1659, 2512, 1666, 1653, 1667, 1668, 1648, 1662, + 1654, 1649, 1669, 1650, 1657, 1660, 1658, 1661, 1651, 1670, + 1662, 1671, 1672, 1673, 1674, 1652, 1675, 1664, 1665, 1676, + + 1659, 1663, 1666, 1653, 1667, 1668, 1677, 1678, 1654, 1679, + 1669, 1681, 1682, 1660, 1680, 1661, 1683, 1670, 1684, 1671, + 1672, 1673, 1674, 1685, 1675, 1686, 1687, 1676, 1688, 1663, + 1689, 1690, 1691, 1692, 1677, 1678, 1694, 1679, 1696, 1681, + 1682, 1695, 1680, 1697, 1683, 1698, 1684, 888, 1700, 1693, + 2510, 1685, 1701, 1686, 1687, 1699, 1688, 1702, 1689, 1690, + 1691, 1692, 399, 1116, 1694, 399, 1696, 399, 1703, 1695, + 1704, 1697, 1705, 1698, 399, 1706, 1700, 1693, 1118, 1707, + 1701, 1708, 1709, 1847, 1715, 1702, 2090, 2297, 1718, 399, + 1847, 2297, 1719, 2205, 1847, 1720, 1703, 1725, 1704, 2489, + + 1705, 1847, 1331, 1706, 2205, 2487, 2075, 1707, 1523, 1708, + 1709, 1523, 1715, 1523, 884, 890, 1718, 897, 1710, 1523, + 1719, 1523, 1523, 1720, 1523, 1725, 1726, 1722, 1727, 1710, + 1728, 1723, 1523, 1724, 1533, 1533, 1533, 1533, 1533, 1533, + 1533, 1533, 1533, 1730, 1731, 1732, 1732, 1732, 1732, 1732, + 1732, 1732, 1732, 1732, 1726, 1722, 1727, 1734, 1728, 1723, + 1735, 1724, 1736, 1711, 1737, 1738, 1739, 1740, 1741, 1742, + 1743, 1730, 1731, 1744, 1525, 1745, 1746, 1747, 1748, 1749, + 1750, 1751, 1752, 1753, 1754, 1734, 1755, 1757, 1735, 1761, + 1736, 1762, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1765, + + 1766, 1744, 1767, 1745, 1746, 1747, 1748, 1749, 1750, 1751, + 1752, 1753, 1754, 1768, 1755, 1757, 1769, 1761, 1771, 1762, + 1772, 1773, 1774, 1770, 1775, 1776, 1777, 1765, 1766, 1778, + 1767, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, + 1788, 1768, 1789, 1790, 1769, 1791, 1771, 1792, 1772, 1773, + 1774, 1770, 1775, 1776, 1777, 1793, 1794, 1778, 1795, 1779, + 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1796, + 1789, 1790, 1797, 1791, 1798, 1792, 1799, 1800, 1801, 1802, + 1803, 1804, 1805, 1793, 1794, 1806, 1795, 1807, 1808, 1809, + 1810, 1811, 1812, 1813, 1814, 1817, 1818, 1796, 1819, 1820, + + 1797, 1815, 1798, 1821, 1799, 1800, 1801, 1802, 1803, 1804, + 1805, 1822, 1815, 1806, 1712, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1814, 1817, 1818, 1823, 1819, 1820, 1824, 1825, + 1826, 1821, 1827, 1828, 1829, 1831, 1832, 1833, 1834, 1822, + 1835, 1836, 1816, 1837, 1849, 1850, 1851, 1852, 1853, 1854, + 1855, 1856, 1857, 1823, 1838, 2679, 1824, 1825, 1826, 1713, + 1827, 1828, 1829, 1831, 1832, 1833, 1834, 1858, 1835, 1836, + 1859, 1837, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, + 1857, 1860, 1838, 1839, 1840, 1861, 1862, 1841, 1863, 1842, + 1864, 1865, 1866, 1843, 1844, 1858, 1867, 1845, 1859, 1868, + + 1869, 1870, 1846, 1871, 1872, 1873, 1874, 1875, 2676, 1860, + 1876, 1839, 1840, 1861, 1862, 1841, 1863, 1842, 1864, 1865, + 1866, 1843, 1844, 1877, 1867, 1845, 1880, 1868, 1869, 1870, + 1846, 1871, 1872, 1873, 1874, 1875, 1878, 1881, 1876, 1879, + 1882, 1883, 1884, 1886, 1887, 1888, 1889, 1890, 1891, 1893, + 1894, 1877, 1899, 1523, 1880, 1902, 1523, 1903, 1523, 1905, + 1906, 1892, 1907, 1895, 1878, 1881, 1523, 1879, 1882, 1883, + 1884, 1886, 1887, 1888, 1889, 1890, 1891, 1893, 1894, 1908, + 1899, 1916, 1919, 1902, 1904, 1903, 1920, 1905, 1906, 1892, + 1907, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + + 1909, 1912, 1910, 1917, 1918, 1921, 1922, 1908, 1525, 1916, + 1919, 1923, 1924, 1913, 1920, 1925, 1926, 1927, 1914, 1732, + 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1909, 1912, + 1910, 1917, 1918, 1921, 1922, 1928, 1932, 1929, 1936, 1923, + 1924, 1913, 1933, 1925, 1926, 1927, 1914, 1930, 1937, 1938, + 1939, 1940, 1941, 1934, 1942, 1943, 1949, 1950, 1931, 1952, + 1953, 1954, 1935, 1928, 1932, 1929, 1936, 1955, 3937, 1956, + 1933, 3937, 1957, 3937, 1958, 1930, 1937, 1938, 1939, 1940, + 1941, 1934, 1942, 1943, 1949, 1950, 1931, 1952, 1953, 1954, + 1935, 1959, 1960, 1961, 1962, 1955, 1963, 1956, 1964, 1965, + + 1957, 1967, 1958, 1968, 1969, 1970, 1971, 1972, 1973, 1974, + 1975, 1976, 1977, 1978, 1979, 1966, 1981, 1982, 1983, 1959, + 1960, 1961, 1962, 1984, 1963, 1980, 1964, 1965, 1980, 1967, + 1985, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, + 1977, 1978, 1979, 1966, 1981, 1982, 1983, 1986, 1987, 1988, + 1989, 1984, 1990, 1991, 1992, 1993, 1994, 1996, 1985, 1997, + 1996, 1998, 1995, 1999, 2002, 2000, 2003, 2004, 2005, 2006, + 2001, 2009, 2010, 2011, 2007, 1986, 1987, 1988, 1989, 2014, + 1990, 1991, 1992, 1993, 1994, 2007, 2015, 1997, 2012, 1998, + 1995, 1999, 2002, 2000, 2003, 2004, 2005, 2006, 2001, 2009, + + 2010, 2011, 2013, 2016, 2017, 2018, 2020, 2014, 2021, 2022, + 2023, 2024, 2025, 2026, 2015, 2008, 2012, 2027, 2030, 2031, + 2032, 2028, 2033, 2034, 2035, 2036, 3204, 2655, 2042, 2043, + 2044, 2016, 2017, 2018, 2020, 2029, 2021, 2022, 2023, 2024, + 2025, 2026, 2045, 2506, 2046, 2027, 2030, 2031, 2032, 2028, + 2033, 2034, 2035, 2036, 2037, 2038, 2042, 2043, 2044, 2047, + 2039, 2049, 2050, 2029, 2051, 2052, 2053, 2054, 2040, 2055, + 2045, 2041, 2046, 2056, 2057, 2058, 2059, 3597, 2065, 3598, + 2066, 2067, 2037, 2038, 2068, 2069, 2070, 2047, 2039, 2049, + 2050, 2071, 2051, 2052, 2053, 2054, 2040, 2055, 2076, 2041, + + 2077, 2056, 2057, 2058, 2059, 2060, 2065, 2061, 2066, 2067, + 2080, 2062, 2068, 2069, 2070, 2060, 2078, 2061, 2081, 2071, + 2082, 2062, 2063, 2079, 2064, 2083, 2076, 2084, 2077, 2085, + 1712, 2089, 2063, 2060, 2072, 2061, 2091, 2092, 2080, 2062, + 2093, 2297, 2094, 2060, 2078, 2061, 2081, 2280, 2082, 2062, + 2063, 2079, 2064, 2083, 2097, 2084, 1523, 2085, 2098, 1523, + 2063, 1523, 2072, 2099, 2091, 2092, 1710, 2100, 2093, 1523, + 2094, 2095, 2101, 2096, 2102, 1898, 2090, 2113, 2114, 2115, + 2116, 2117, 2097, 3329, 2645, 2118, 2098, 2119, 2120, 2121, + 2122, 2099, 2281, 2165, 2296, 2100, 2165, 2297, 2635, 2095, + + 2101, 2096, 2102, 2633, 2125, 2113, 2114, 2115, 2116, 2117, + 2126, 1711, 2103, 2118, 2127, 2119, 2120, 2121, 2122, 2104, + 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2128, 2123, + 2129, 2105, 2125, 2106, 2107, 2108, 2124, 2130, 2126, 2109, + 2131, 2132, 2127, 2134, 2110, 2135, 2136, 2137, 2138, 2139, + 2140, 2148, 2133, 2111, 2617, 2602, 2128, 2123, 2129, 2105, + 2360, 2106, 2107, 2108, 2124, 2130, 2150, 2109, 2131, 2132, + 2151, 2134, 2110, 2135, 2136, 2137, 2138, 2139, 2140, 2148, + 2133, 2111, 2143, 2144, 2145, 2143, 2146, 2144, 2147, 2146, + 2152, 2153, 2154, 2155, 2150, 2156, 2157, 2158, 2151, 2159, + + 2160, 2161, 2162, 2163, 2166, 2167, 2168, 2169, 2170, 2358, + 2171, 2172, 2173, 2548, 2174, 2175, 2176, 2510, 2152, 2153, + 2154, 2155, 2090, 2156, 2157, 2158, 2179, 2159, 2160, 2161, + 2162, 2163, 2166, 2167, 2168, 2169, 2170, 1946, 2171, 2172, + 2173, 1948, 2174, 2175, 2176, 1980, 2180, 2181, 1980, 2182, + 2178, 2183, 2184, 2185, 2179, 2186, 2187, 2188, 2189, 2190, + 2191, 2192, 2193, 1996, 2196, 2197, 1996, 2198, 2194, 2199, + 2200, 2201, 2202, 2203, 2180, 2181, 2204, 2182, 2206, 2183, + 2184, 2185, 2207, 2186, 2187, 2188, 2189, 2190, 2191, 2192, + 2193, 2208, 2196, 2197, 2209, 2198, 2210, 2199, 2200, 2201, + + 2202, 2203, 2211, 2212, 2204, 2213, 2206, 2214, 2215, 2216, + 2207, 2165, 2507, 2228, 2165, 2229, 2384, 2420, 2230, 2208, + 2420, 2506, 2209, 2231, 2210, 2232, 2233, 3597, 2234, 3598, + 2211, 2212, 2235, 2213, 2236, 2214, 2215, 2216, 2217, 2218, + 2219, 2228, 2220, 2229, 2221, 2222, 2230, 2237, 2223, 2224, + 2225, 2231, 2238, 2232, 2233, 2226, 2234, 2227, 2239, 2240, + 2235, 2241, 2236, 2242, 2243, 2244, 2217, 2218, 2219, 2245, + 2220, 2246, 2221, 2222, 2247, 2237, 2223, 2224, 2225, 2248, + 2238, 2249, 2250, 2226, 2251, 2227, 2239, 2240, 2252, 2241, + 2253, 2242, 2243, 2244, 2255, 2256, 2257, 2245, 2258, 2246, + + 2261, 2262, 2247, 2263, 2264, 2265, 2266, 2248, 2267, 2249, + 2250, 2268, 2251, 2269, 2271, 2270, 2252, 2272, 2253, 2277, + 2283, 2280, 2255, 2256, 2257, 2278, 2258, 2279, 2261, 2262, + 2285, 2263, 2264, 2265, 2266, 2286, 2267, 2298, 2301, 2268, + 2287, 2269, 2271, 2270, 2288, 2272, 2289, 2277, 2290, 2291, + 2292, 2293, 2294, 2278, 2298, 2279, 2303, 2304, 2285, 2305, + 2306, 2307, 2308, 2286, 2309, 2284, 2075, 2310, 2287, 2311, + 2322, 2487, 2288, 2312, 2289, 2313, 2290, 2291, 2292, 2293, + 2294, 2075, 2299, 2302, 2303, 2304, 2323, 2305, 2306, 2307, + 2308, 3937, 2309, 2324, 3937, 2310, 3937, 2311, 2322, 2090, + + 2327, 2312, 2328, 2313, 2314, 2314, 2314, 2314, 2314, 2314, + 2314, 2314, 2314, 2329, 2323, 2331, 2315, 2325, 2316, 2317, + 2318, 2324, 2326, 2332, 2319, 2333, 2334, 2335, 2327, 2320, + 2328, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2321, 2571, + 2484, 2329, 2571, 2331, 2315, 2325, 2316, 2317, 2318, 2343, + 2326, 2332, 2319, 2333, 2334, 2335, 2344, 2320, 2345, 2336, + 2337, 2338, 2339, 2340, 2341, 2342, 2321, 2104, 2104, 2104, + 2104, 2104, 2104, 2104, 2104, 2104, 2346, 2343, 2347, 2348, + 2349, 2350, 2351, 2352, 2344, 2353, 2345, 2354, 2355, 2356, + 2143, 2144, 2145, 2143, 2144, 2145, 2146, 2144, 2147, 2146, + + 2144, 2147, 2361, 2362, 2346, 2363, 2347, 2348, 2349, 2350, + 2351, 2352, 2364, 2353, 2365, 2354, 2355, 2356, 2374, 2375, + 2469, 2376, 2377, 2386, 2378, 2379, 2386, 2460, 2380, 2381, + 2361, 2362, 2382, 2363, 2383, 2360, 2388, 2389, 2390, 2391, + 2364, 2392, 2365, 2393, 2394, 1946, 2374, 2375, 1946, 2376, + 2377, 1948, 2378, 2379, 1948, 2366, 2380, 2381, 2366, 3667, + 2382, 3668, 2383, 2387, 2388, 2389, 2390, 2391, 2395, 2392, + 2396, 2393, 2394, 3667, 2367, 3668, 2397, 2399, 2400, 2401, + 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2368, 2410, 2369, + 2411, 2387, 2412, 2413, 2358, 2415, 2395, 2416, 2396, 2370, + + 2417, 2371, 2372, 2373, 2397, 2399, 2400, 2401, 2402, 2403, + 2404, 2405, 2406, 2407, 2408, 2368, 2410, 2369, 2411, 3937, + 2412, 2413, 3937, 2415, 3937, 2416, 2418, 2370, 2417, 2371, + 2372, 2373, 2419, 2421, 2422, 2423, 2424, 2425, 2426, 2427, + 2428, 2429, 2430, 2431, 2432, 2435, 2433, 2436, 2437, 2426, + 2427, 2438, 2439, 2440, 2418, 2434, 2441, 2442, 2443, 2444, + 2419, 2421, 2422, 2423, 2424, 2425, 2447, 2445, 2428, 2429, + 2430, 2431, 2432, 2435, 2433, 2436, 2437, 2448, 2449, 2438, + 2439, 2440, 2446, 2450, 2441, 2442, 2443, 2444, 2451, 2452, + 2453, 2454, 2455, 2456, 2447, 2445, 2457, 2458, 2459, 2461, + + 2462, 2463, 2464, 2465, 2466, 2448, 2449, 2467, 2468, 2470, + 2446, 2450, 2471, 2472, 2473, 2474, 2451, 2452, 2453, 2454, + 2455, 2456, 2475, 2476, 2457, 2458, 2459, 2461, 2462, 2463, + 2464, 2465, 2466, 2477, 2478, 2467, 2468, 2470, 2481, 2482, + 2471, 2472, 2473, 2474, 2483, 2485, 2488, 2490, 2491, 2492, + 2475, 2476, 2493, 2494, 2495, 2496, 2497, 2498, 2508, 2511, + 2501, 2477, 2478, 2501, 2513, 2501, 2481, 2482, 2514, 2515, + 2502, 2516, 2483, 2503, 2517, 2490, 2491, 2492, 2518, 2519, + 2493, 2494, 2495, 2496, 2497, 2498, 2520, 2504, 2521, 2522, + 2486, 2489, 2513, 2260, 2259, 2580, 2514, 2515, 2580, 2516, + + 2524, 2525, 2517, 2509, 2512, 2526, 2518, 2519, 2527, 2529, + 2530, 2523, 2531, 2528, 2520, 2505, 2521, 2522, 2314, 2314, + 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2532, 2524, 2525, + 2533, 2534, 2535, 2526, 2536, 2537, 2527, 2529, 2530, 2538, + 2531, 2528, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, + 2547, 2549, 2550, 2551, 2552, 2532, 2553, 2554, 2533, 2534, + 2535, 2555, 2536, 2537, 2556, 2557, 2558, 2538, 2254, 2564, + 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2549, + 2550, 2551, 2552, 2565, 2553, 2554, 2568, 2560, 2561, 2555, + 2560, 2572, 2556, 2557, 2558, 2563, 2561, 2564, 2563, 2566, + + 2366, 2573, 2575, 2366, 2576, 2569, 2567, 2574, 2577, 2578, + 2579, 2565, 2581, 2582, 2568, 2583, 2584, 2585, 2586, 2572, + 2587, 2588, 2164, 3937, 2592, 2593, 3937, 2566, 3937, 2573, + 2575, 2594, 2576, 2595, 2567, 2574, 2577, 2578, 2579, 2596, + 2581, 2582, 2358, 2583, 2584, 2585, 2586, 2597, 2587, 2588, + 2360, 2386, 2592, 2593, 2386, 2598, 2590, 2357, 2599, 2594, + 2600, 2595, 2601, 2600, 2603, 2359, 2604, 2596, 2605, 2606, + 2607, 2608, 2609, 2610, 2611, 2597, 2612, 2613, 2614, 2615, + 2616, 2618, 2619, 2598, 2620, 2621, 2599, 2620, 2622, 2149, + 2601, 2626, 2603, 2627, 2604, 2628, 2605, 2606, 2607, 2608, + + 2609, 2610, 2611, 2629, 2612, 2613, 2614, 2615, 2616, 2618, + 2619, 2630, 2624, 2621, 2631, 2624, 2622, 2625, 2632, 2626, + 2634, 2627, 2636, 2628, 2638, 2639, 2640, 2641, 2642, 2643, + 2644, 2629, 2646, 2636, 2647, 1948, 2648, 2649, 2650, 2630, + 2651, 2652, 2631, 2653, 2654, 2656, 2632, 2657, 2634, 2658, + 2659, 2660, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2661, + 2646, 2662, 2647, 2637, 2648, 2649, 2650, 2663, 2651, 2652, + 2664, 2653, 2654, 2656, 2665, 2657, 2666, 2658, 2659, 2660, + 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2661, 2674, 2662, + 2675, 2677, 2678, 2680, 2280, 2663, 2485, 2682, 2664, 2683, + + 2684, 2685, 2665, 2686, 2666, 2687, 2688, 2689, 2667, 2668, + 2669, 2670, 2671, 2672, 2673, 2694, 2674, 2708, 2675, 2677, + 2678, 2706, 2298, 2709, 2508, 2682, 1946, 2683, 2684, 2685, + 2297, 2686, 2695, 2687, 2688, 2689, 2112, 2501, 2489, 2681, + 2501, 2489, 2501, 2501, 2499, 2708, 2501, 2691, 2501, 2501, + 2503, 2709, 2501, 2698, 2501, 2710, 2711, 2087, 2501, 2702, + 2696, 2501, 2503, 2501, 2692, 1904, 2512, 2707, 2691, 2512, + 2699, 2503, 2697, 2712, 2713, 2714, 2703, 2715, 2716, 2717, + 2718, 2719, 2720, 2710, 2711, 2692, 2721, 2722, 2723, 2724, + 2725, 2726, 2693, 1904, 2727, 2728, 2729, 2730, 2700, 2731, + + 2732, 2712, 2713, 2714, 2704, 2715, 2716, 2717, 2718, 2719, + 2720, 2733, 2734, 2505, 2721, 2722, 2723, 2724, 2725, 2726, + 2735, 2736, 2727, 2728, 2729, 2730, 2737, 2731, 2732, 2738, + 2740, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2733, + 2734, 2750, 2560, 2561, 2751, 2560, 2752, 2753, 2735, 2736, + 2563, 2561, 2754, 2563, 2737, 2757, 2758, 2738, 2740, 2742, + 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2571, 2759, 2750, + 2571, 2760, 2751, 2761, 2752, 2753, 2762, 2086, 2763, 2764, + 2754, 2767, 2580, 2757, 2758, 2580, 2768, 2765, 2769, 2770, + 2771, 2772, 1898, 2773, 2776, 2777, 2759, 2358, 2778, 2760, + + 2779, 2761, 2780, 2781, 2762, 2360, 2763, 2764, 2782, 2767, + 2783, 2786, 2357, 2787, 2768, 2788, 2769, 2770, 2771, 2772, + 2359, 2773, 2776, 2777, 2785, 2789, 2778, 2785, 2779, 2790, + 2780, 2781, 2791, 2792, 2793, 2795, 2782, 2794, 2783, 2786, + 2794, 2787, 2797, 2788, 2798, 2799, 2800, 2801, 2802, 2805, + 2806, 2807, 2955, 2789, 2796, 2955, 2811, 2790, 2813, 2814, + 2791, 2792, 2793, 2795, 2620, 2815, 2816, 2620, 2817, 2803, + 2797, 2818, 2798, 2799, 2800, 2801, 2802, 2805, 2806, 2807, + 2624, 2819, 2796, 2624, 2811, 2625, 2813, 2814, 2820, 2821, + 2822, 2823, 2824, 2815, 2816, 2825, 2817, 2826, 2827, 2818, + + 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2837, 2838, 2819, + 2839, 2840, 2841, 2842, 2843, 2844, 2820, 2821, 2822, 2823, + 2824, 2845, 2846, 2825, 2847, 2826, 2827, 2848, 2828, 2829, + 2830, 2831, 2832, 2833, 2834, 2837, 2838, 2849, 2839, 2840, + 2841, 2842, 2843, 2844, 2850, 2851, 2852, 2853, 2854, 2845, + 2846, 2855, 2847, 2856, 2857, 2848, 2858, 2859, 2860, 2485, + 2861, 2862, 2863, 2864, 2865, 2849, 2866, 2867, 2508, 2297, + 2876, 2879, 2850, 2851, 2852, 2853, 2854, 2048, 2019, 2855, + 2506, 2856, 2857, 2499, 2858, 2859, 2860, 2877, 2695, 2862, + 2863, 2864, 2865, 2869, 2866, 2867, 2869, 2501, 2869, 1948, + + 2501, 2891, 2501, 2870, 2486, 2075, 2871, 2874, 2881, 2505, + 2503, 2697, 2297, 2509, 2892, 2878, 2880, 3731, 2869, 3732, + 2872, 2869, 2501, 2869, 2692, 2501, 2499, 2501, 2883, 1946, + 2501, 2871, 2886, 2501, 2869, 2501, 2893, 2869, 1944, 2869, + 2702, 2894, 2892, 2503, 2870, 2884, 2090, 2871, 2873, 2699, + 2895, 2896, 2505, 2501, 2897, 2898, 2501, 2703, 2501, 2899, + 2900, 2872, 2901, 2889, 2893, 2902, 2503, 2903, 2904, 2894, + 2905, 2906, 2907, 2885, 2908, 2909, 2910, 2887, 2895, 2896, + 2703, 2911, 2897, 2898, 2912, 2704, 2913, 2899, 2900, 2873, + 2901, 2914, 2915, 2902, 2916, 2903, 2904, 2917, 2905, 2906, + + 2907, 2918, 2908, 2909, 2910, 2919, 2920, 2921, 2890, 2911, + 2922, 2923, 2912, 2924, 2913, 2925, 2926, 2927, 2928, 2914, + 2915, 2929, 2916, 2930, 2931, 2917, 2932, 2933, 2935, 2918, + 2936, 2937, 2938, 2919, 2920, 2921, 2939, 2940, 2922, 2923, + 2941, 2924, 2942, 2925, 2926, 2927, 2928, 2944, 2945, 2929, + 2946, 2930, 2931, 2947, 2932, 2933, 2935, 2948, 2936, 2937, + 2938, 2949, 2950, 2952, 2939, 2940, 2953, 2954, 2941, 2956, + 2942, 2957, 2956, 2958, 2785, 2944, 2945, 2785, 2946, 2959, + 2960, 2947, 2961, 2967, 2968, 2948, 2969, 2970, 2973, 2949, + 2950, 2952, 2963, 2794, 2953, 2954, 2794, 2974, 2971, 2957, + + 2964, 2958, 2975, 2965, 2976, 2966, 2977, 2959, 2960, 2978, + 2979, 2967, 2968, 2962, 2969, 2970, 2973, 2980, 2982, 2983, + 2963, 2984, 2988, 2989, 2990, 2974, 2991, 2994, 2964, 2993, + 2975, 2965, 2976, 2966, 2977, 2990, 2995, 2978, 2979, 2996, + 2993, 2962, 2997, 2998, 2999, 2980, 2982, 2983, 3000, 2984, + 2988, 2989, 3003, 3005, 2991, 2994, 3006, 3007, 3008, 3010, + 3011, 3012, 3009, 3013, 2995, 3014, 3004, 2996, 3015, 3016, + 2997, 2998, 2999, 3009, 3017, 3018, 3000, 3019, 3020, 3021, + 3003, 3005, 3022, 3023, 3006, 3007, 3008, 3010, 3011, 3012, + 3024, 3013, 3025, 3014, 3026, 3027, 3015, 3016, 3028, 3029, + + 3030, 3031, 3017, 3018, 3032, 3019, 3020, 3021, 3033, 3034, + 3022, 3023, 3035, 3036, 3037, 2485, 3038, 3039, 3024, 3040, + 3025, 3041, 3026, 3027, 2508, 3043, 3028, 3029, 3030, 3031, + 2890, 3047, 3032, 2297, 1915, 1911, 3033, 3034, 3064, 3148, + 3035, 3036, 3037, 3044, 3038, 3039, 3047, 3040, 2877, 3041, + 3148, 2869, 2869, 3043, 2869, 2869, 2869, 2869, 3056, 1901, + 2284, 3045, 3050, 2877, 2871, 3107, 3064, 2869, 3107, 2302, + 2869, 3044, 2869, 2694, 3065, 2877, 3048, 3045, 2872, 3051, + 2871, 2694, 2869, 2501, 3066, 2869, 2501, 2869, 2501, 1525, + 2695, 3048, 3053, 2691, 2872, 2871, 2503, 3731, 2695, 3732, + + 3067, 3113, 3065, 3057, 3113, 1896, 3046, 3052, 3068, 2872, + 2692, 1714, 3066, 1885, 2869, 1848, 3069, 2869, 2696, 2869, + 2869, 1830, 3046, 2869, 3058, 2869, 2880, 2871, 3067, 2869, + 3058, 1758, 2869, 2871, 2869, 3070, 3068, 3054, 2693, 3061, + 2501, 2884, 2871, 2501, 3069, 2501, 1394, 2884, 1573, 2501, + 2698, 3071, 2501, 3072, 2501, 2501, 2884, 3073, 2501, 2698, + 2501, 2501, 3074, 3070, 2501, 2702, 2501, 2699, 2503, 3059, + 3075, 2702, 3076, 3077, 2503, 3059, 2699, 3078, 3079, 3071, + 3080, 3072, 2703, 3081, 3062, 3073, 3082, 3083, 2703, 3084, + 3074, 3085, 3086, 3087, 3088, 2700, 3089, 3090, 3075, 3091, + + 3076, 3077, 3092, 3093, 2887, 3078, 3079, 3094, 3080, 3095, + 2704, 3081, 3096, 3097, 3082, 3083, 2890, 3084, 3098, 3085, + 3086, 3087, 3088, 3099, 3089, 3090, 3100, 3091, 3102, 3103, + 3092, 3093, 3104, 3105, 3106, 3094, 3108, 3095, 3109, 3110, + 3096, 3097, 3111, 3116, 2956, 3117, 3098, 2956, 3119, 3114, + 3120, 3099, 3121, 3122, 3100, 3123, 3102, 3103, 3127, 1733, + 3104, 3105, 3106, 3124, 3108, 3128, 3109, 3110, 3128, 3133, + 3111, 3116, 3134, 3117, 3125, 3126, 3119, 3135, 3120, 3137, + 3121, 3122, 3937, 3123, 3129, 3937, 3127, 3937, 3130, 3136, + 3138, 3124, 3136, 3139, 3140, 3131, 3142, 3133, 3143, 3144, + + 3134, 3146, 3125, 3126, 3147, 3135, 3149, 3137, 3150, 3151, + 3152, 3153, 3129, 3154, 3155, 3156, 3130, 3157, 3138, 3158, + 3159, 3139, 3140, 3131, 3142, 3160, 3143, 3144, 3161, 3146, + 3162, 3163, 3147, 3164, 3149, 3165, 3150, 3151, 3152, 3153, + 3166, 3154, 3155, 3156, 3167, 3157, 3168, 3158, 3159, 3169, + 3170, 3171, 3172, 3160, 3173, 3174, 3161, 3176, 3162, 3163, + 3177, 3164, 3179, 3165, 3180, 3181, 3174, 3182, 3166, 3183, + 3185, 3177, 3167, 1729, 3168, 3186, 3187, 3169, 3170, 3171, + 3172, 3188, 3173, 3189, 3190, 3176, 3191, 3192, 3194, 3195, + 3179, 3196, 3180, 3181, 3198, 3182, 3175, 3183, 3185, 3199, + + 1717, 3178, 3054, 3186, 3187, 2297, 3197, 3201, 2506, 3188, + 3062, 3189, 3190, 2297, 3191, 3192, 3194, 3195, 2869, 3196, + 2694, 2869, 3198, 2869, 2877, 1716, 3212, 3199, 3200, 3047, + 2869, 2871, 3213, 2869, 3197, 2869, 3202, 2695, 3238, 2869, + 3058, 3238, 2869, 2871, 2869, 2872, 2877, 3249, 2501, 3203, + 3249, 2501, 3057, 2501, 3212, 1714, 3214, 2884, 2702, 2869, + 3213, 2503, 2869, 1656, 2869, 3206, 3051, 3215, 3113, 3045, + 3216, 3113, 2871, 3054, 3057, 2703, 1655, 2869, 2501, 3217, + 2869, 2501, 2869, 2501, 3214, 3059, 2872, 3207, 3209, 3218, + 2871, 2503, 3219, 3220, 3204, 3215, 2869, 3221, 3216, 2869, + + 3222, 2869, 3223, 3205, 2884, 3210, 3058, 3217, 3224, 2871, + 3225, 3226, 3227, 3228, 3054, 3229, 3230, 3218, 3231, 3232, + 3219, 3220, 3233, 2884, 3234, 3221, 3235, 3236, 3222, 3237, + 3223, 3239, 3062, 3211, 3240, 3241, 3224, 3242, 3225, 3226, + 3227, 3228, 3243, 3229, 3230, 3244, 3231, 3232, 3245, 3246, + 3233, 3062, 3234, 3937, 3235, 3236, 3937, 3237, 3937, 3239, + 3248, 3107, 3240, 3241, 3107, 3242, 3250, 3252, 3253, 3255, + 3243, 3256, 3257, 3244, 3258, 3259, 3245, 3246, 3247, 3247, + 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3260, 3248, 3261, + 3262, 3263, 3265, 1645, 3250, 3252, 3253, 3255, 3273, 3256, + + 3257, 3273, 3258, 3259, 3128, 3266, 3267, 3128, 3269, 3270, + 3271, 3274, 3275, 3276, 3277, 3260, 3278, 3261, 3262, 3263, + 3265, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3279, 3280, 3281, 3266, 3267, 3282, 3269, 3270, 3271, 3274, + 3275, 3276, 3277, 3283, 3278, 3284, 3285, 3286, 3287, 3288, + 3289, 3290, 3291, 3292, 3293, 3295, 3296, 3297, 3279, 3280, + 3281, 3298, 3300, 3282, 3301, 3302, 3303, 3304, 3305, 3306, + 1644, 3283, 3310, 3284, 3285, 3286, 3287, 3288, 3289, 3290, + 3291, 3292, 3293, 3295, 3296, 3297, 3311, 3308, 3312, 3298, + 3300, 3313, 3301, 3302, 3303, 3304, 3305, 3306, 3308, 3314, + + 3310, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, + 3325, 1643, 2869, 3332, 3311, 2869, 3312, 2869, 3350, 3313, + 3324, 3350, 3045, 3047, 3640, 2871, 3327, 3314, 3309, 3315, + 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3325, 2872, + 2877, 3332, 2869, 2695, 3333, 2869, 2869, 2869, 3324, 2869, + 2501, 2869, 3050, 2501, 3334, 2501, 3050, 1579, 3380, 3335, + 3326, 3380, 3336, 2503, 3337, 3338, 3339, 3046, 3048, 3051, + 3340, 2880, 3333, 3051, 3641, 2869, 2501, 2703, 2869, 2501, + 2869, 2501, 3334, 1578, 1573, 3058, 3209, 3335, 2871, 2503, + 3336, 1548, 3337, 3338, 3339, 3341, 3342, 3052, 3340, 3343, + + 3344, 3204, 2884, 3210, 3345, 2890, 2869, 2501, 3346, 2869, + 2501, 2869, 2501, 3347, 3348, 3349, 2883, 3330, 3351, 2871, + 2503, 3352, 3355, 3341, 3342, 3356, 3357, 3343, 3344, 3358, + 3059, 3328, 3345, 2884, 3210, 3238, 3346, 3359, 3238, 3360, + 3353, 3347, 3348, 3349, 3361, 3362, 3351, 3396, 3273, 3352, + 3355, 3273, 1547, 3356, 3357, 3363, 3365, 3358, 3396, 1544, + 3368, 2885, 3331, 3368, 1543, 3359, 3367, 3360, 3249, 3371, + 3372, 3249, 3361, 3362, 3247, 3247, 3247, 3247, 3247, 3247, + 3247, 3247, 3247, 3363, 3365, 3364, 3364, 3364, 3364, 3364, + 3364, 3364, 3364, 3364, 3367, 3373, 3374, 3371, 3372, 3375, + + 3376, 3377, 3378, 3379, 3381, 3382, 3369, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3383, 3384, 3385, 3386, + 3387, 3388, 3389, 3373, 3374, 3389, 3390, 3375, 3376, 3377, + 3378, 3379, 3381, 3382, 3369, 3391, 3392, 3393, 3391, 3394, + 3395, 3397, 3398, 3399, 3383, 3384, 3385, 3386, 3387, 3388, + 3400, 3402, 3403, 3404, 3390, 3405, 3406, 3409, 3410, 3411, + 3412, 3414, 3415, 3416, 3392, 3393, 3417, 3394, 3395, 3397, + 3398, 3399, 3419, 3420, 3418, 3421, 3422, 3423, 3400, 3402, + 3403, 3404, 3424, 3405, 3406, 3409, 3410, 3411, 3412, 3414, + 3415, 3416, 3425, 3426, 3417, 3427, 3429, 3430, 3431, 3432, + + 3419, 3420, 3418, 3421, 3422, 3423, 3433, 3434, 1542, 2869, + 3424, 3047, 2869, 3331, 2869, 1541, 2297, 3436, 3437, 3045, + 3425, 3426, 2871, 3427, 3429, 3430, 3431, 3432, 2877, 3438, + 3439, 3440, 1540, 3441, 3433, 3434, 2872, 1538, 2501, 2869, + 3442, 2501, 2869, 2501, 2869, 3436, 3437, 3443, 3435, 3058, + 2501, 2503, 2871, 2501, 3444, 2501, 2878, 3438, 3439, 3440, + 3209, 3441, 3445, 2503, 2873, 3210, 2884, 3446, 3442, 3447, + 3448, 3450, 3451, 3453, 3450, 3443, 3454, 3210, 3475, 1116, + 3476, 3475, 3444, 3476, 3477, 3480, 873, 3477, 3480, 3350, + 3445, 3491, 3350, 3331, 2885, 3446, 3485, 3447, 3448, 3485, + + 3451, 3453, 3491, 1484, 3454, 3331, 3449, 3449, 3449, 3449, + 3449, 3449, 3449, 3449, 3449, 3452, 3452, 3452, 3452, 3452, + 3452, 3452, 3452, 3452, 3452, 3452, 3354, 3354, 3354, 3354, + 3354, 3354, 3354, 3354, 3354, 3354, 3354, 3455, 3456, 3457, + 3452, 3458, 3459, 3460, 3461, 3462, 3463, 3465, 3466, 3467, + 1475, 3354, 3364, 3364, 3364, 3364, 3364, 3364, 3364, 3364, + 3364, 3368, 3468, 3469, 3368, 3455, 3456, 3457, 3470, 3458, + 3459, 3460, 3461, 3462, 3463, 3465, 3466, 3467, 3464, 3464, + 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3471, 3472, 3473, + 3468, 3469, 3478, 3479, 3481, 3482, 3470, 3483, 3486, 1473, + + 3537, 3486, 3521, 3537, 3521, 1468, 1463, 3488, 3489, 3391, + 3490, 3493, 3391, 3494, 3495, 3471, 3472, 3473, 3497, 3498, + 3478, 3479, 3481, 3482, 1405, 3483, 3487, 3487, 3487, 3487, + 3487, 3487, 3487, 3487, 3487, 3488, 3489, 3496, 3490, 3493, + 3502, 3494, 3495, 3499, 3503, 3504, 3497, 3498, 3496, 3505, + 3506, 3500, 3501, 3507, 3508, 3509, 3510, 3511, 3512, 3513, + 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3522, 3502, 3523, + 3524, 3499, 3503, 3504, 3521, 3526, 3527, 3505, 3506, 3500, + 3501, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, + 3516, 3517, 3518, 3519, 3520, 3522, 2501, 3523, 3524, 2501, + + 3528, 2501, 3529, 3526, 3527, 3530, 3209, 3531, 3532, 2503, + 3533, 3534, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, + 3449, 3726, 3539, 3210, 3450, 3540, 3541, 3450, 3528, 3535, + 3529, 3538, 3726, 3530, 3475, 3531, 3532, 3475, 3533, 3534, + 3542, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3539, 3328, 1404, 3540, 3541, 3452, 3452, 3452, 3452, 3452, + 3452, 3452, 3452, 3452, 3452, 3452, 3543, 3544, 3542, 3545, + 3546, 3547, 3548, 3549, 3550, 3551, 3552, 540, 3554, 3552, + 3452, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, + 3555, 3556, 3557, 3564, 3543, 3544, 3565, 3545, 3546, 3547, + + 3548, 3549, 3550, 3551, 3559, 3553, 3554, 3559, 3562, 3560, + 3567, 3562, 3480, 3563, 3568, 3480, 3569, 3566, 3555, 3556, + 3557, 3564, 3485, 3613, 3565, 3571, 3613, 3619, 3486, 3623, + 3619, 3486, 3623, 3553, 538, 3573, 3576, 3574, 3567, 3577, + 3578, 3579, 3568, 3575, 3569, 3572, 3572, 3572, 3572, 3572, + 3572, 3572, 3572, 3572, 3487, 3487, 3487, 3487, 3487, 3487, + 3487, 3487, 3487, 3573, 3576, 3574, 3580, 3577, 3578, 3579, + 3581, 3575, 3582, 3583, 3584, 3586, 3588, 3589, 3590, 3591, + 3592, 3593, 3595, 3596, 3599, 3600, 3559, 3562, 3707, 3559, + 3562, 3560, 3563, 3684, 3580, 533, 3684, 3602, 3581, 3603, + + 3582, 3583, 3584, 3586, 3588, 3589, 3590, 3591, 3592, 3593, + 3595, 3596, 3599, 3600, 3601, 3601, 3601, 3601, 3601, 3601, + 3601, 3601, 3601, 3601, 3601, 3602, 3604, 3603, 3607, 3608, + 3609, 3610, 3611, 3612, 3687, 531, 516, 3687, 3708, 3601, + 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3616, + 3617, 3618, 3620, 3621, 3604, 3622, 3607, 3608, 3609, 3610, + 3611, 3612, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3536, 3537, 3624, 3625, 3537, 3626, 3627, 3616, 3617, 3618, + 3620, 3621, 3629, 3622, 3630, 3631, 3634, 3637, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3638, 3642, 3552, + + 3624, 3625, 3552, 3626, 3627, 3632, 514, 3643, 3632, 3644, + 3629, 3646, 3630, 3631, 3634, 3637, 3628, 3628, 3628, 3628, + 3628, 3628, 3628, 3628, 3628, 3638, 3642, 3570, 510, 3727, + 1395, 3647, 3648, 3485, 3633, 3643, 3571, 3644, 3707, 3646, + 3727, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3647, + 3648, 3649, 3633, 3572, 3572, 3572, 3572, 3572, 3572, 3572, + 3572, 3572, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, + 3659, 3660, 3661, 3662, 3663, 3664, 3666, 3669, 3641, 3649, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3670, + + 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, + 3661, 3662, 3663, 3664, 3666, 3669, 3601, 3601, 3601, 3601, + 3601, 3601, 3601, 3601, 3601, 3601, 3601, 3670, 3671, 3672, + 3674, 3675, 3676, 3678, 3623, 3679, 3678, 3623, 3680, 3691, + 1391, 3601, 3683, 3685, 3796, 3689, 3679, 3796, 3692, 3682, + 3693, 3694, 3695, 3696, 3697, 3699, 3671, 3672, 3674, 3675, + 3676, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, + 3683, 3685, 3619, 3689, 3797, 3619, 3692, 3797, 3693, 3694, + 3695, 3696, 3697, 3699, 3700, 3703, 3710, 1385, 3711, 3686, + 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3628, 3628, + + 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3632, 3712, 3937, + 3632, 3704, 3700, 3703, 3710, 3705, 3711, 3681, 3713, 3714, + 3715, 3716, 3706, 1354, 3698, 3698, 3698, 3698, 3698, 3698, + 3698, 3698, 3698, 3717, 3718, 3719, 3712, 3570, 3720, 3704, + 3721, 3722, 3723, 3705, 3724, 3725, 3713, 3714, 3715, 3716, + 3706, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3728, 3717, 3718, 3719, 3729, 3733, 3720, 3735, 3721, 3722, + 3723, 3736, 3724, 3725, 3737, 3774, 3679, 3739, 3679, 3679, + 3684, 3937, 3742, 3684, 3828, 3740, 3774, 3828, 3728, 3679, + 1346, 3687, 3729, 3733, 3687, 3735, 3743, 3746, 3678, 3736, + + 3679, 3678, 3737, 3680, 3937, 3739, 3747, 3937, 3748, 3937, + 3742, 3679, 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3686, + 3686, 3749, 3750, 3751, 3752, 3746, 3753, 3754, 3755, 3756, + 3757, 3758, 1335, 3759, 3747, 3760, 3748, 3698, 3698, 3698, + 3698, 3698, 3698, 3698, 3698, 3698, 3761, 3762, 3763, 3749, + 3750, 3751, 3752, 3784, 3753, 3754, 3755, 3756, 3757, 3764, + 3681, 3759, 3765, 3760, 3766, 3767, 3768, 3769, 3770, 3771, + 3772, 3773, 3775, 3776, 3761, 3762, 3763, 3777, 3780, 3787, + 3937, 3641, 3681, 3937, 3788, 3937, 3789, 3764, 3778, 3790, + 3765, 3791, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, + + 3775, 3776, 3792, 3785, 3793, 3777, 3780, 3787, 3794, 3798, + 3799, 3794, 3788, 3707, 3789, 3800, 3778, 3790, 3801, 3791, + 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3818, 3809, 3810, + 3792, 3812, 3793, 3813, 3814, 3818, 3815, 3798, 3799, 3816, + 3821, 3822, 3823, 3800, 3824, 3825, 3801, 3826, 3802, 3803, + 3804, 3805, 3806, 3807, 3808, 3795, 3809, 3810, 3829, 3812, + 3836, 3813, 3814, 3708, 3815, 3837, 3838, 3816, 3821, 3822, + 3823, 3796, 3824, 3825, 3796, 3826, 3831, 3819, 3834, 3797, + 3839, 3834, 3797, 3795, 3833, 3785, 3829, 3835, 3836, 3840, + 3835, 3842, 3843, 3837, 3838, 3844, 3845, 3846, 3847, 3850, + + 3851, 3852, 3853, 3851, 3854, 3855, 3856, 3857, 3839, 3828, + 3858, 3937, 3828, 3818, 3937, 3883, 3937, 3840, 3883, 3842, + 3843, 3865, 3866, 3844, 3845, 3846, 3847, 3850, 3867, 3868, + 3853, 3869, 3854, 3855, 3856, 3857, 3937, 3834, 3858, 3937, + 3834, 3937, 3862, 3835, 3870, 3871, 3835, 3872, 3864, 3865, + 3866, 3785, 3873, 3874, 3882, 3880, 3867, 3868, 3880, 3869, + 3881, 3884, 3885, 3819, 3875, 3885, 3886, 3876, 3891, 3892, + 3893, 3937, 3870, 3871, 3937, 3872, 3937, 3894, 3895, 3896, + 3873, 3874, 3882, 3937, 3897, 3898, 3937, 3899, 3937, 3884, + 3900, 3901, 3875, 3904, 3886, 3876, 3891, 3892, 3893, 3880, + + 3906, 431, 3880, 3906, 3881, 3894, 3895, 3896, 3883, 418, + 414, 3883, 3897, 3898, 399, 3899, 3908, 3885, 3900, 3901, + 3885, 3904, 3911, 3912, 3913, 3905, 3905, 3905, 3905, 3905, + 3905, 3905, 3905, 3905, 3907, 3907, 3907, 3907, 3907, 3907, + 3907, 3907, 3907, 3914, 3908, 3915, 3916, 3917, 3918, 3921, + 3911, 3912, 3913, 3905, 3905, 3905, 3905, 3905, 3905, 3905, + 3905, 3905, 3906, 395, 373, 3906, 369, 363, 359, 3922, + 3923, 3914, 3924, 3915, 3916, 3917, 3918, 3921, 3926, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3907, 3907, + 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3922, 3923, 3927, + + 3924, 3928, 3929, 3930, 3931, 3932, 3926, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3933, 3934, 3935, 3936, + 355, 1277, 1216, 1215, 1199, 1190, 1177, 3927, 1156, 3928, + 3929, 3930, 3931, 3932, 1141, 662, 1116, 645, 385, 385, + 873, 1072, 1061, 1053, 3933, 3934, 3935, 3936, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 134, 134, 134, 134, 134, 134, 134, 134, + 128, 128, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 143, 143, @@ -2904,8 +2908,8 @@ static const flex_int16_t yy_nxt[14258] = 149, 149, 149, 149, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, @@ -2915,8 +2919,8 @@ static const flex_int16_t yy_nxt[14258] = 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, @@ -2926,19 +2930,19 @@ static const flex_int16_t yy_nxt[14258] = 240, 240, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 251, 251, + 249, 249, 249, 249, 249, 249, 249, 249, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 266, 266, 992, 266, 266, 266, 266, 266, + 258, 258, 266, 266, 1050, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 366, 366, 366, 366, 366, 366, @@ -2948,8 +2952,8 @@ static const flex_int16_t yy_nxt[14258] = 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 382, 382, 382, 382, 382, 382, 387, 387, 387, 387, + 382, 382, 382, 382, 382, 382, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, @@ -2959,8 +2963,8 @@ static const flex_int16_t yy_nxt[14258] = 402, 402, 402, 402, 402, 402, 402, 402, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 505, 505, 505, 505, 505, 505, 505, 505, @@ -2968,12 +2972,12 @@ static const flex_int16_t yy_nxt[14258] = 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 517, 517, 984, 517, + 516, 516, 516, 516, 516, 516, 517, 517, 1008, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 518, 518, 975, 518, 518, 518, + 517, 517, 517, 517, 518, 518, 540, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, - 518, 518, 519, 519, 974, 519, 519, 519, 519, 519, + 518, 518, 519, 519, 538, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 533, 533, @@ -2981,20 +2985,20 @@ static const flex_int16_t yy_nxt[14258] = 533, 533, 533, 533, 533, 533, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 266, 266, 944, 266, 266, 266, 266, 266, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 266, 266, 1006, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, - 363, 363, 934, 363, 366, 366, 366, 366, 366, 366, + 363, 363, 533, 363, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 922, 373, + 366, 366, 373, 373, 373, 373, 373, 373, 373, 373, + 373, 373, 373, 373, 373, 373, 373, 373, 531, 373, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, @@ -3002,86 +3006,86 @@ static const flex_int16_t yy_nxt[14258] = 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, - 387, 387, 644, 912, 644, 644, 431, 909, 644, 644, - 644, 644, 644, 418, 644, 644, 644, 644, 644, 391, + 387, 387, 644, 1000, 644, 644, 516, 514, 644, 644, + 644, 644, 644, 998, 644, 644, 644, 644, 644, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, - 399, 399, 399, 414, 399, 652, 652, 652, 652, 652, + 399, 399, 399, 510, 399, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 661, - 662, 661, 661, 882, 399, 661, 661, 661, 661, 661, - 395, 661, 661, 661, 661, 661, 411, 411, 411, 411, + 993, 661, 661, 985, 976, 661, 661, 661, 661, 661, + 975, 661, 661, 661, 661, 661, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - 645, 418, 421, 421, 421, 421, 421, 421, 421, 421, + 944, 418, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, - 511, 511, 511, 511, 511, 511, 516, 516, 516, 516, + 511, 511, 511, 511, 511, 511, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 864, 516, 517, 517, 373, 517, 517, 517, + 516, 516, 934, 516, 517, 517, 922, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 518, 518, 369, 518, 518, 518, 518, 518, + 517, 517, 518, 518, 912, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, - 519, 519, 861, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 431, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, 363, 533, 535, 535, 535, 535, 535, 535, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 909, 533, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 359, 540, - 266, 266, 858, 266, 266, 266, 266, 266, 266, 266, + 540, 540, 540, 540, 540, 540, 540, 540, 418, 540, + 266, 266, 414, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, - 363, 363, 363, 363, 356, 356, 356, 356, 356, 356, + 363, 363, 363, 363, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 868, 355, 868, 868, - 773, 538, 868, 868, 868, 868, 868, 539, 868, 868, - 868, 868, 868, 868, 871, 531, 871, 871, 532, 514, - 871, 871, 871, 871, 871, 515, 871, 871, 871, 871, + 639, 639, 639, 639, 639, 639, 868, 662, 868, 868, + 882, 399, 868, 868, 868, 868, 868, 395, 868, 868, + 868, 868, 868, 868, 871, 645, 871, 871, 864, 373, + 871, 871, 871, 871, 871, 369, 871, 871, 871, 871, 871, 871, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, - 644, 508, 644, 644, 752, 738, 644, 644, 644, 644, - 644, 479, 644, 644, 644, 644, 644, 399, 399, 399, + 644, 861, 644, 644, 363, 359, 644, 644, 644, 644, + 644, 858, 644, 644, 644, 644, 644, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, - 652, 884, 884, 884, 884, 884, 884, 884, 884, 884, + 652, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 886, - 734, 886, 886, 696, 681, 886, 886, 886, 886, 886, - 437, 886, 886, 886, 886, 886, 886, 657, 657, 657, + 355, 886, 886, 773, 538, 886, 886, 886, 886, 886, + 539, 886, 886, 886, 886, 886, 886, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 661, 428, 661, 661, 414, 417, 661, - 661, 661, 661, 661, 395, 661, 661, 661, 661, 661, + 402, 402, 402, 661, 531, 661, 661, 532, 514, 661, + 661, 661, 661, 661, 515, 661, 661, 661, 661, 661, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, - 659, 659, 659, 659, 659, 659, 659, 659, 418, 418, + 659, 659, 659, 659, 659, 659, 659, 659, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, @@ -3091,8 +3095,8 @@ static const flex_int16_t yy_nxt[14258] = 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 511, 511, - 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, + 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 528, 528, 528, 528, 528, 528, @@ -3101,44 +3105,44 @@ static const flex_int16_t yy_nxt[14258] = 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 266, 266, - 398, 266, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, + 508, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, 868, 390, - 868, 868, 385, 369, 868, 868, 868, 868, 868, 372, - 868, 868, 868, 868, 868, 868, 871, 359, 871, 871, - 362, 351, 871, 871, 871, 871, 871, 592, 871, 871, + 639, 639, 639, 639, 639, 639, 639, 639, 868, 752, + 868, 868, 738, 479, 868, 868, 868, 868, 868, 734, + 868, 868, 868, 868, 868, 868, 871, 696, 871, 871, - 871, 871, 871, 871, 644, 591, 644, 644, 558, 541, - 644, 644, 644, 644, 644, 539, 644, 644, 644, 644, + 681, 437, 871, 871, 871, 871, 871, 428, 871, 871, + 871, 871, 871, 871, 644, 414, 644, 644, 417, 395, + 644, 644, 644, 644, 644, 398, 644, 644, 644, 644, 644, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 886, - 539, 886, 886, 532, 515, 886, 886, 886, 886, 886, - 508, 886, 886, 886, 886, 886, 886, 657, 657, 657, + 390, 886, 886, 385, 369, 886, 886, 886, 886, 886, + 372, 886, 886, 886, 886, 886, 886, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, - 657, 657, 657, 657, 657, 890, 479, 890, 890, 437, - 417, 890, 890, 890, 890, 890, 398, 890, 890, 890, - 890, 890, 890, 884, 884, 884, 884, 884, 884, 884, + 657, 657, 657, 657, 657, 890, 359, 890, 890, 362, + 351, 890, 890, 890, 890, 890, 592, 890, 890, 890, + 890, 890, 890, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 661, - 398, 661, 661, 385, 385, 661, 661, 661, 661, 661, - 385, 661, 661, 661, 661, 661, 402, 402, 402, 402, + 591, 661, 661, 558, 541, 661, 661, 661, 661, 661, + 539, 661, 661, 661, 661, 661, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 372, - 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 505, 505, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 539, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, @@ -3146,309 +3150,309 @@ static const flex_int16_t yy_nxt[14258] = 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, - 266, 266, 372, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 532, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 868, 362, 868, 868, 351, 317, 868, 868, - 868, 868, 868, 3926, 868, 868, 868, 868, 868, 868, - 871, 250, 871, 871, 250, 98, 871, 871, 871, 871, - 871, 98, 871, 871, 871, 871, 871, 871, 399, 399, + 639, 639, 868, 515, 868, 868, 508, 479, 868, 868, + 868, 868, 868, 437, 868, 868, 868, 868, 868, 868, + 871, 417, 871, 871, 398, 398, 871, 871, 871, 871, + 871, 385, 871, 871, 871, 871, 871, 871, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, - 399, 399, 399, 399, 399, 399, 886, 98, 886, 886, - 98, 98, 886, 886, 886, 886, 886, 98, 886, 886, + 399, 399, 399, 399, 399, 399, 886, 385, 886, 886, + 385, 372, 886, 886, 886, 886, 886, 372, 886, 886, 886, 886, 886, 886, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 661, 98, 661, 661, 98, 161, 661, 661, + 887, 887, 661, 362, 661, 661, 351, 317, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 418, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 1343, 161, 1343, 1343, 160, - 160, 1343, 1343, 1343, 3926, 1343, 1343, 1343, 1343, 1343, - 1343, 1343, 1343, 1355, 1355, 1355, 1355, 1355, 1355, 1355, - 3926, 1355, 3926, 1355, 1355, 1355, 1355, 1355, 1355, 1355, - 1355, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, - 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 516, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 1345, 3937, 1345, 1345, 250, + 250, 1345, 1345, 1345, 98, 1345, 1345, 1345, 1345, 1345, + 1345, 1345, 1345, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 98, 1357, 98, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, + 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 540, 540, 540, 540, 540, + 533, 533, 533, 533, 533, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 266, 266, 3926, 266, 266, 266, 266, + 540, 540, 540, 266, 266, 98, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 884, 884, 884, 884, 884, 884, 884, 884, 884, - 884, 884, 884, 884, 884, 884, 884, 884, 884, 1519, - 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, - 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1530, 3926, 3926, - 1530, 3926, 3926, 1530, 1570, 3926, 3926, 3926, 3926, 3926, - 1570, 1570, 1570, 3926, 1570, 1570, 1570, 1570, 1570, 1570, - 1570, 1570, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1717, 3926, 3926, 1717, 3926, 1717, 1754, 1754, 1754, 1754, - 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, - 1754, 1754, 1754, 1754, 1759, 3926, 3926, 1759, 1759, 3926, - 3926, 1759, 3926, 1759, 3926, 1759, 1759, 1759, 1759, 1895, - 1895, 1895, 1895, 1939, 1939, 3926, 1939, 1939, 1939, 1939, - 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, - 1939, 1941, 1941, 3926, 1941, 1941, 1941, 1941, 1941, 1941, - 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1945, - 3926, 1945, 3926, 1945, 1945, 1945, 1945, 2067, 2067, 2067, - - 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, - 2067, 2067, 2067, 2067, 2067, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2170, 2170, 3926, 3926, 2170, 2170, 2170, 2170, 2170, - 3926, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2188, - 3926, 3926, 2188, 2188, 3926, 3926, 2188, 3926, 2188, 3926, - 2188, 2188, 2188, 2188, 2275, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, - - 2275, 2275, 2288, 3926, 2288, 2288, 3926, 3926, 2288, 2288, - 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2323, 3926, - 3926, 3926, 3926, 3926, 2323, 2323, 2323, 3926, 2323, 2323, - 2323, 2323, 2323, 2323, 2323, 2323, 2349, 2349, 3926, 2349, - 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, - 2349, 2349, 2349, 2349, 2351, 2351, 3926, 2351, 2351, 2351, - 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, - 2351, 2351, 2377, 3926, 3926, 2377, 2377, 3926, 3926, 2377, - - 3926, 2377, 3926, 2377, 2377, 2377, 2377, 2390, 3926, 3926, - 3926, 3926, 3926, 2390, 2390, 2390, 3926, 2390, 2390, 2390, - 2390, 2390, 2390, 2390, 2390, 2401, 2401, 3926, 2401, 2401, - 3926, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, - 2401, 2401, 2406, 3926, 2406, 3926, 2406, 2406, 2406, 2406, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2290, 3926, - 2290, 2290, 3926, 3926, 2290, 2290, 2290, 2290, 2290, 2290, - 2290, 2290, 2290, 2290, 2290, 2290, 2550, 2550, 2550, 2550, - 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, - - 2550, 2550, 2550, 2550, 2553, 2553, 2553, 2553, 2553, 2553, - 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, - 2553, 2553, 2561, 3926, 3926, 2561, 2561, 3926, 3926, 2561, - 3926, 2561, 3926, 2561, 2561, 2561, 2561, 2580, 3926, 2580, - 3926, 2580, 2580, 2580, 2580, 2582, 3926, 3926, 2582, 2582, - 3926, 3926, 2582, 3926, 2582, 3926, 2582, 2582, 2582, 2582, - 2614, 2614, 3926, 2614, 2614, 2614, 2614, 2614, 2614, 2614, - 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2681, 3926, 2681, - 2681, 3926, 3926, 2681, 2681, 2681, 2681, 2681, 2681, 2681, - 2681, 2681, 2681, 2681, 2681, 2493, 2493, 2493, 2493, 2493, - - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, - 2493, 2493, 2493, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2696, - 3926, 2696, 2696, 3926, 3926, 2696, 2696, 2696, 2696, 2696, - 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, - - 2082, 2082, 2082, 2349, 2349, 3926, 2349, 2349, 2349, 2349, - 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, - 2349, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, - 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2351, - 2351, 3926, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, - 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2553, 2553, 2553, - 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, - 2553, 2553, 2553, 2553, 2553, 2745, 3926, 2745, 3926, 2745, - 2745, 2745, 2745, 2561, 3926, 2561, 3926, 2561, 2561, 2561, - 2561, 2746, 3926, 3926, 2746, 3926, 3926, 3926, 2746, 3926, - - 2746, 3926, 2746, 2746, 2746, 2746, 2756, 3926, 3926, 2756, - 2756, 3926, 3926, 2756, 3926, 2756, 3926, 2756, 2756, 2756, - 2756, 2580, 3926, 3926, 2580, 3926, 2580, 3926, 2580, 2580, - 2580, 2580, 2765, 3926, 2765, 3926, 2765, 2765, 2765, 2765, - 2582, 3926, 2582, 3926, 2582, 2582, 2582, 2582, 2774, 2774, - 3926, 2774, 2774, 3926, 2774, 2774, 2774, 2774, 2774, 2774, - 2774, 2774, 2774, 2774, 2774, 2794, 3926, 3926, 2794, 2794, - 3926, 3926, 2794, 3926, 2794, 3926, 2794, 2794, 2794, 2794, - 2614, 2614, 3926, 2614, 2614, 3926, 2614, 2614, 2614, 2614, - 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2798, 2798, 2798, - - 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, - 2798, 2798, 2798, 2798, 2798, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2067, 2067, 2067, 2067, 2067, 2067, 2067, - 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, - 2067, 2681, 3926, 2681, 2681, 3926, 3926, 2681, 2681, 2681, - 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2288, - 3926, 2288, 2288, 3926, 3926, 2288, 2288, 2288, 2288, 2288, - 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - - 2858, 2858, 2858, 2858, 2858, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2859, 2859, 2859, 2859, 2859, 2859, 2859, - 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, - 2859, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2290, - 3926, 2290, 2290, 3926, 3926, 2290, 2290, 2290, 2290, 2290, - 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2872, 2872, 2872, - 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, - 2872, 2872, 2872, 2872, 2872, 2495, 2495, 2495, 2495, 2495, - - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2696, 3926, 2696, 2696, 3926, 3926, 2696, 2696, 2696, - 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2745, 3926, 3926, 2745, 3926, - 2745, 3926, 2745, 2745, 2745, 2745, 2746, 3926, 2746, 3926, - - 2746, 2746, 2746, 2746, 2932, 3926, 2932, 3926, 2932, 2932, - 2932, 2932, 2756, 3926, 2756, 3926, 2756, 2756, 2756, 2756, - 2765, 3926, 3926, 2765, 3926, 2765, 3926, 2765, 2765, 2765, - 2765, 2774, 2774, 3926, 2774, 2774, 3926, 2774, 2774, 2774, - 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2961, 3926, - 3926, 2961, 2961, 3926, 3926, 2961, 3926, 2961, 3926, 2961, - 2961, 2961, 2961, 2970, 3926, 2970, 3926, 2970, 2970, 2970, - 2970, 2794, 3926, 2794, 3926, 2794, 2794, 2794, 2794, 2798, - 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, - 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2275, 2275, 2275, - - 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2275, 2275, 2859, 2859, 2859, 2859, 2859, - 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, - 2859, 2859, 2859, 2861, 2861, 2861, 2861, 2861, 2861, 2861, - 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, - 2861, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2493, - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2290, 3926, 2290, - 2290, 3926, 3926, 2290, 2290, 2290, 2290, 2290, 2290, 2290, - - 2290, 2290, 2290, 2290, 2290, 2872, 2872, 2872, 2872, 2872, - 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, - 2872, 2872, 2872, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 3101, 3101, 3926, - 3101, 3101, 3926, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3101, 3101, 3101, 3101, 3104, 3926, 3926, 3104, 3104, 3926, - - 3926, 3104, 3926, 3104, 3926, 3104, 3104, 3104, 3104, 3107, - 3107, 3107, 3107, 3926, 3107, 3107, 3107, 3107, 3107, 3107, - 3107, 3107, 3107, 3107, 3107, 3107, 3107, 3121, 3926, 3926, - 3926, 3926, 3926, 3121, 3121, 3121, 3926, 3121, 3121, 3121, - 3121, 3121, 3121, 3121, 3121, 3197, 3197, 3197, 3197, 3197, - 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, - 3197, 3197, 3197, 3240, 3926, 3240, 3926, 3240, 3240, 3240, - 3240, 3261, 3261, 3926, 3261, 3261, 3926, 3261, 3261, 3261, - 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3343, 3926, - 3926, 3343, 3343, 3926, 3926, 3926, 3926, 3926, 3926, 3343, - - 3359, 3359, 3926, 3926, 3926, 3359, 3359, 3359, 3359, 3359, - 3359, 3359, 3359, 3359, 3359, 3359, 3359, 3359, 3463, 3463, - 3926, 3463, 3463, 3926, 3463, 3463, 3463, 3463, 3463, 3463, - 3463, 3463, 3463, 3463, 3463, 3473, 3473, 3926, 3473, 3473, - 3926, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473, - 3473, 3473, 3547, 3547, 3926, 3547, 3547, 3547, 3547, 3547, - 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3550, - 3550, 3926, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, - 3550, 3550, 3550, 3550, 3550, 3550, 3594, 3926, 3594, 3926, - 3594, 3926, 3594, 3594, 3594, 3594, 3624, 3624, 3926, 3624, - - 3624, 3926, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, - 3624, 3624, 3624, 3625, 3625, 3926, 3625, 3625, 3926, 3625, - 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, - 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, - 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3662, 3926, - 3662, 3926, 3662, 3926, 3662, 3662, 3662, 3662, 3666, 3666, - 3926, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, - 3666, 3666, 3666, 3666, 3666, 3666, 3677, 3677, 3926, 3677, - 3677, 3926, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, - 3677, 3677, 3677, 3679, 3679, 3926, 3926, 3679, 3679, 3679, - - 3679, 3679, 3926, 3679, 3679, 3679, 3679, 3679, 3679, 3679, - 3679, 3668, 3668, 3926, 3668, 3668, 3926, 3668, 3668, 3668, - 3668, 3668, 3668, 3668, 3668, 3668, 3668, 3668, 3727, 3926, - 3926, 3926, 3926, 3926, 3727, 3727, 3727, 3926, 3727, 3727, - 3727, 3727, 3727, 3727, 3727, 3727, 3670, 3926, 3926, 3926, - 3926, 3926, 3670, 3670, 3670, 3926, 3670, 3670, 3670, 3670, - 3670, 3670, 3670, 3670, 3730, 3926, 3926, 3730, 3730, 3926, - 3926, 3730, 3926, 3730, 3926, 3730, 3730, 3730, 3730, 3733, - 3733, 3926, 3733, 3733, 3926, 3733, 3733, 3733, 3733, 3733, - 3733, 3733, 3733, 3733, 3733, 3733, 3734, 3926, 3926, 3926, - - 3926, 3926, 3734, 3734, 3734, 3926, 3734, 3734, 3734, 3734, - 3734, 3734, 3734, 3734, 3770, 3926, 3770, 3926, 3770, 3770, - 3770, 3770, 3771, 3771, 3926, 3771, 3771, 3926, 3771, 3771, - 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3772, - 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, - 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3816, 3816, 3926, - 3816, 3816, 3926, 3816, 3816, 3816, 3816, 3816, 3816, 3816, - 3816, 3816, 3816, 3816, 3819, 3819, 3926, 3926, 3819, 3819, - 3819, 3819, 3819, 3926, 3819, 3819, 3819, 3819, 3819, 3819, - 3819, 3819, 3821, 3821, 3926, 3926, 3821, 3821, 3821, 3821, - - 3821, 3926, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, - 3848, 3848, 3926, 3848, 3848, 3926, 3848, 3848, 3848, 3848, - 3848, 3848, 3848, 3848, 3848, 3848, 3848, 3849, 3849, 3926, - 3849, 3849, 3926, 3849, 3849, 3849, 3849, 3849, 3849, 3849, - 3849, 3849, 3849, 3849, 3850, 3850, 3926, 3926, 3850, 3850, - 3850, 3850, 3850, 3926, 3850, 3850, 3850, 3850, 3850, 3850, - 3850, 3850, 3852, 3852, 3926, 3926, 3852, 3852, 3852, 3852, - 3852, 3926, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, - 3866, 3926, 3866, 3926, 3866, 3926, 3866, 3866, 3866, 3866, - 3868, 3868, 3926, 3868, 3868, 3868, 3868, 3868, 3868, 3868, - - 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3878, 3878, 3926, - 3878, 3878, 3926, 3878, 3878, 3878, 3878, 3878, 3878, 3878, - 3878, 3878, 3878, 3878, 3879, 3879, 3926, 3879, 3879, 3926, - 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879, - 3879, 3891, 3926, 3891, 3926, 3891, 3926, 3891, 3891, 3891, - 3891, 3892, 3926, 3926, 3926, 3926, 3926, 3892, 3892, 3892, - 3926, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 75, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926 + 884, 884, 884, 884, 884, 884, 884, 884, 884, 1522, + 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, + 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1533, 98, 98, + 1533, 98, 98, 1533, 1574, 161, 161, 160, 160, 3937, + 1574, 1574, 1574, 3937, 1574, 1574, 1574, 1574, 1574, 1574, + + 1574, 1574, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, + 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, + 1721, 3937, 3937, 1721, 3937, 1721, 1759, 1759, 1759, 1759, + 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, + 1759, 1759, 1759, 1759, 1764, 3937, 3937, 1764, 1764, 3937, + 3937, 1764, 3937, 1764, 3937, 1764, 1764, 1764, 1764, 1900, + 1900, 1900, 1900, 1945, 1945, 3937, 1945, 1945, 1945, 1945, + 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, + 1945, 1947, 1947, 3937, 1947, 1947, 1947, 1947, 1947, 1947, + 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1951, + + 3937, 1951, 3937, 1951, 1951, 1951, 1951, 2073, 2073, 2073, + 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, + 2073, 2073, 2073, 2073, 2073, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2141, 2141, 2141, 2141, 2141, 2141, 2141, + 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, + 2141, 2177, 2177, 3937, 3937, 2177, 2177, 2177, 2177, 2177, + 3937, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2195, + 3937, 3937, 2195, 2195, 3937, 3937, 2195, 3937, 2195, 3937, + 2195, 2195, 2195, 2195, 2282, 2282, 2282, 2282, 2282, 2282, + + 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2295, 3937, 2295, 2295, 3937, 3937, 2295, 2295, + 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2330, 3937, + 3937, 3937, 3937, 3937, 2330, 2330, 2330, 3937, 2330, 2330, + 2330, 2330, 2330, 2330, 2330, 2330, 2357, 2357, 3937, 2357, + 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, + 2357, 2357, 2357, 2357, 2359, 2359, 3937, 2359, 2359, 2359, + 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, + + 2359, 2359, 2385, 3937, 3937, 2385, 2385, 3937, 3937, 2385, + 3937, 2385, 3937, 2385, 2385, 2385, 2385, 2398, 3937, 3937, + 3937, 3937, 3937, 2398, 2398, 2398, 3937, 2398, 2398, 2398, + 2398, 2398, 2398, 2398, 2398, 2409, 2409, 3937, 2409, 2409, + 3937, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, + 2409, 2409, 2414, 3937, 2414, 3937, 2414, 2414, 2414, 2414, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2297, 3937, + 2297, 2297, 3937, 3937, 2297, 2297, 2297, 2297, 2297, 2297, + 2297, 2297, 2297, 2297, 2297, 2297, 2559, 2559, 2559, 2559, + + 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, + 2559, 2559, 2559, 2559, 2562, 2562, 2562, 2562, 2562, 2562, + 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, + 2562, 2562, 2570, 3937, 3937, 2570, 2570, 3937, 3937, 2570, + 3937, 2570, 3937, 2570, 2570, 2570, 2570, 2589, 3937, 2589, + 3937, 2589, 2589, 2589, 2589, 2591, 3937, 3937, 2591, 2591, + 3937, 3937, 2591, 3937, 2591, 3937, 2591, 2591, 2591, 2591, + 2623, 2623, 3937, 2623, 2623, 2623, 2623, 2623, 2623, 2623, + 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2690, 3937, 2690, + 2690, 3937, 3937, 2690, 2690, 2690, 2690, 2690, 2690, 2690, + + 2690, 2690, 2690, 2690, 2690, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2705, + 3937, 2705, 2705, 3937, 3937, 2705, 2705, 2705, 2705, 2705, + 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2088, 2088, 2088, 2088, 2088, + + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2357, 2357, 3937, 2357, 2357, 2357, 2357, + 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, + 2357, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, + 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2359, + 2359, 3937, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, + 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2562, 2562, 2562, + 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, + 2562, 2562, 2562, 2562, 2562, 2755, 3937, 2755, 3937, 2755, + 2755, 2755, 2755, 2570, 3937, 2570, 3937, 2570, 2570, 2570, + + 2570, 2756, 3937, 3937, 2756, 3937, 3937, 3937, 2756, 3937, + 2756, 3937, 2756, 2756, 2756, 2756, 2766, 3937, 3937, 2766, + 2766, 3937, 3937, 2766, 3937, 2766, 3937, 2766, 2766, 2766, + 2766, 2589, 3937, 3937, 2589, 3937, 2589, 3937, 2589, 2589, + 2589, 2589, 2775, 3937, 2775, 3937, 2775, 2775, 2775, 2775, + 2591, 3937, 2591, 3937, 2591, 2591, 2591, 2591, 2784, 2784, + 3937, 2784, 2784, 3937, 2784, 2784, 2784, 2784, 2784, 2784, + 2784, 2784, 2784, 2784, 2784, 2804, 3937, 3937, 2804, 2804, + 3937, 3937, 2804, 3937, 2804, 3937, 2804, 2804, 2804, 2804, + 2623, 2623, 3937, 2623, 2623, 3937, 2623, 2623, 2623, 2623, + + 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2808, 2808, 2808, + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, + 2808, 2808, 2808, 2808, 2808, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2282, 2073, 2073, 2073, 2073, 2073, 2073, 2073, + 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, + 2073, 2690, 3937, 2690, 2690, 3937, 3937, 2690, 2690, 2690, + 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2295, + 3937, 2295, 2295, 3937, 3937, 2295, 2295, 2295, 2295, 2295, + 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2868, 2868, 2868, + + 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, + 2868, 2868, 2868, 2868, 2868, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2869, 2869, 2869, 2869, 2869, 2869, 2869, + 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, + 2869, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2297, + 3937, 2297, 2297, 3937, 3937, 2297, 2297, 2297, 2297, 2297, + 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2882, 2882, 2882, + 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, + + 2882, 2882, 2882, 2882, 2882, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2705, 3937, 2705, 2705, 3937, 3937, 2705, 2705, 2705, + 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2088, 2088, 2088, + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2088, 2088, 2755, 3937, 3937, 2755, 3937, + + 2755, 3937, 2755, 2755, 2755, 2755, 2756, 3937, 2756, 3937, + 2756, 2756, 2756, 2756, 2943, 3937, 2943, 3937, 2943, 2943, + 2943, 2943, 2766, 3937, 2766, 3937, 2766, 2766, 2766, 2766, + 2775, 3937, 3937, 2775, 3937, 2775, 3937, 2775, 2775, 2775, + 2775, 2784, 2784, 3937, 2784, 2784, 3937, 2784, 2784, 2784, + 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2972, 3937, + 3937, 2972, 2972, 3937, 3937, 2972, 3937, 2972, 3937, 2972, + 2972, 2972, 2972, 2981, 3937, 2981, 3937, 2981, 2981, 2981, + 2981, 2804, 3937, 2804, 3937, 2804, 2804, 2804, 2804, 2808, + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, + + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2282, 2282, 2282, + 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2282, 2282, 2282, 2869, 2869, 2869, 2869, 2869, + 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, + 2869, 2869, 2869, 2871, 2871, 2871, 2871, 2871, 2871, 2871, + 2871, 2871, 2871, 2871, 2871, 2871, 2871, 2871, 2871, 2871, + 2871, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2297, 3937, 2297, + + 2297, 3937, 3937, 2297, 2297, 2297, 2297, 2297, 2297, 2297, + 2297, 2297, 2297, 2297, 2297, 2882, 2882, 2882, 2882, 2882, + 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, + 2882, 2882, 2882, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 3112, 3112, 3937, + 3112, 3112, 3937, 3112, 3112, 3112, 3112, 3112, 3112, 3112, + + 3112, 3112, 3112, 3112, 3115, 3937, 3937, 3115, 3115, 3937, + 3937, 3115, 3937, 3115, 3937, 3115, 3115, 3115, 3115, 3118, + 3118, 3118, 3118, 3937, 3118, 3118, 3118, 3118, 3118, 3118, + 3118, 3118, 3118, 3118, 3118, 3118, 3118, 3132, 3937, 3937, + 3937, 3937, 3937, 3132, 3132, 3132, 3937, 3132, 3132, 3132, + 3132, 3132, 3132, 3132, 3132, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3251, 3937, 3251, 3937, 3251, 3251, 3251, + 3251, 3272, 3272, 3937, 3272, 3272, 3937, 3272, 3272, 3272, + 3272, 3272, 3272, 3272, 3272, 3272, 3272, 3272, 3354, 3937, + + 3937, 3354, 3354, 3937, 3937, 3937, 3937, 3937, 3937, 3354, + 3370, 3370, 3937, 3937, 3937, 3370, 3370, 3370, 3370, 3370, + 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3474, 3474, + 3937, 3474, 3474, 3937, 3474, 3474, 3474, 3474, 3474, 3474, + 3474, 3474, 3474, 3474, 3474, 3484, 3484, 3937, 3484, 3484, + 3937, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, + 3484, 3484, 3558, 3558, 3937, 3558, 3558, 3558, 3558, 3558, + 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3561, + 3561, 3937, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, + 3561, 3561, 3561, 3561, 3561, 3561, 3605, 3937, 3605, 3937, + + 3605, 3937, 3605, 3605, 3605, 3605, 3635, 3635, 3937, 3635, + 3635, 3937, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3636, 3636, 3937, 3636, 3636, 3937, 3636, + 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, + 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, + 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3673, 3937, + 3673, 3937, 3673, 3937, 3673, 3673, 3673, 3673, 3677, 3677, + 3937, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, + 3677, 3677, 3677, 3677, 3677, 3677, 3688, 3688, 3937, 3688, + 3688, 3937, 3688, 3688, 3688, 3688, 3688, 3688, 3688, 3688, + + 3688, 3688, 3688, 3690, 3690, 3937, 3937, 3690, 3690, 3690, + 3690, 3690, 3937, 3690, 3690, 3690, 3690, 3690, 3690, 3690, + 3690, 3679, 3679, 3937, 3679, 3679, 3937, 3679, 3679, 3679, + 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3738, 3937, + 3937, 3937, 3937, 3937, 3738, 3738, 3738, 3937, 3738, 3738, + 3738, 3738, 3738, 3738, 3738, 3738, 3681, 3937, 3937, 3937, + 3937, 3937, 3681, 3681, 3681, 3937, 3681, 3681, 3681, 3681, + 3681, 3681, 3681, 3681, 3741, 3937, 3937, 3741, 3741, 3937, + 3937, 3741, 3937, 3741, 3937, 3741, 3741, 3741, 3741, 3744, + 3744, 3937, 3744, 3744, 3937, 3744, 3744, 3744, 3744, 3744, + + 3744, 3744, 3744, 3744, 3744, 3744, 3745, 3937, 3937, 3937, + 3937, 3937, 3745, 3745, 3745, 3937, 3745, 3745, 3745, 3745, + 3745, 3745, 3745, 3745, 3781, 3937, 3781, 3937, 3781, 3781, + 3781, 3781, 3782, 3782, 3937, 3782, 3782, 3937, 3782, 3782, + 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3783, + 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, + 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3827, 3827, 3937, + 3827, 3827, 3937, 3827, 3827, 3827, 3827, 3827, 3827, 3827, + 3827, 3827, 3827, 3827, 3830, 3830, 3937, 3937, 3830, 3830, + 3830, 3830, 3830, 3937, 3830, 3830, 3830, 3830, 3830, 3830, + + 3830, 3830, 3832, 3832, 3937, 3937, 3832, 3832, 3832, 3832, + 3832, 3937, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3859, 3859, 3937, 3859, 3859, 3937, 3859, 3859, 3859, 3859, + 3859, 3859, 3859, 3859, 3859, 3859, 3859, 3860, 3860, 3937, + 3860, 3860, 3937, 3860, 3860, 3860, 3860, 3860, 3860, 3860, + 3860, 3860, 3860, 3860, 3861, 3861, 3937, 3937, 3861, 3861, + 3861, 3861, 3861, 3937, 3861, 3861, 3861, 3861, 3861, 3861, + 3861, 3861, 3863, 3863, 3937, 3937, 3863, 3863, 3863, 3863, + 3863, 3937, 3863, 3863, 3863, 3863, 3863, 3863, 3863, 3863, + 3877, 3937, 3877, 3937, 3877, 3937, 3877, 3877, 3877, 3877, + + 3879, 3879, 3937, 3879, 3879, 3879, 3879, 3879, 3879, 3879, + 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3889, 3889, 3937, + 3889, 3889, 3937, 3889, 3889, 3889, 3889, 3889, 3889, 3889, + 3889, 3889, 3889, 3889, 3890, 3890, 3937, 3890, 3890, 3937, + 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, + 3890, 3902, 3937, 3902, 3937, 3902, 3937, 3902, 3902, 3902, + 3902, 3903, 3937, 3937, 3937, 3937, 3937, 3903, 3903, 3903, + 3937, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 75, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937 } ; -static const flex_int16_t yy_chk[14258] = +static const flex_int16_t yy_chk[14268] = { 0, 0, 1, 1, 1, 1, 5, 1, 1, 5, 6, 95, 95, 6, 0, 1, 7, 7, 7, 7, 7, - 7, 0, 9, 9, 7, 9, 9, 13, 7, 1188, - 1, 13, 1, 1, 3904, 83, 13, 1, 1, 1, - 116, 116, 14, 1, 1, 1, 14, 1, 1, 3892, + 7, 0, 9, 9, 7, 9, 9, 13, 7, 1190, + 1, 13, 1, 1, 3915, 83, 13, 1, 1, 1, + 116, 116, 14, 1, 1, 1, 14, 1, 1, 3903, 9, 14, 1, 873, 15, 15, 1, 15, 1, 873, 1, 1, 15, 83, 15, 1, 1, 1, 71, 84, - 7, 1, 1, 1, 1188, 1, 1, 9, 132, 132, + 7, 1, 1, 1, 1190, 1, 1, 9, 132, 132, 1, 2, 2, 2, 2, 71, 2, 2, 10, 10, 72, 10, 10, 85, 2, 21, 21, 84, 21, 7, 7, 86, 11, 11, 49, 11, 11, 72, 49, 15, - 2, 49, 2, 2, 87, 3879, 10, 2, 2, 2, + 2, 49, 2, 2, 87, 3890, 10, 2, 2, 2, 88, 85, 773, 2, 2, 2, 89, 2, 2, 86, 11, 92, 2, 250, 118, 250, 2, 118, 2, 773, - 2, 2, 87, 10, 3878, 2, 2, 2, 88, 3868, + 2, 2, 87, 10, 3889, 2, 2, 2, 88, 3879, 21, 2, 2, 2, 89, 2, 2, 11, 49, 92, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -3461,8 +3465,8 @@ static const flex_int16_t yy_chk[14258] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 93, 12, 12, 8, 12, 12, - 3849, 8, 16, 16, 2288, 16, 17, 17, 3848, 17, - 16, 17, 16, 47, 17, 47, 18, 18, 2288, 18, + 3860, 8, 16, 16, 2295, 16, 17, 17, 3859, 17, + 16, 17, 16, 47, 17, 47, 18, 18, 2295, 18, 47, 18, 93, 12, 18, 19, 19, 137, 19, 137, 19, 20, 20, 19, 20, 257, 20, 257, 19, 20, @@ -3470,12 +3474,12 @@ static const flex_int16_t yy_chk[14258] = 12, 220, 81, 297, 90, 33, 33, 16, 33, 100, 33, 17, 90, 33, 297, 27, 27, 47, 27, 94, 27, 18, 8, 8, 137, 27, 35, 35, 27, 35, - 19, 27, 90, 3839, 35, 91, 20, 100, 28, 28, + 19, 27, 90, 3850, 35, 91, 20, 100, 28, 28, 90, 28, 27, 28, 48, 101, 81, 139, 28, 139, 22, 28, 91, 388, 28, 220, 29, 29, 104, 29, - 33, 29, 3809, 91, 29, 28, 29, 107, 143, 29, - 27, 143, 29, 101, 30, 30, 3807, 30, 108, 30, - 91, 35, 30, 29, 30, 3803, 104, 30, 36, 36, + 33, 29, 3820, 91, 29, 28, 29, 107, 143, 29, + 27, 143, 29, 101, 30, 30, 3818, 30, 108, 30, + 91, 35, 30, 29, 30, 3814, 104, 30, 36, 36, 30, 36, 388, 28, 139, 107, 36, 213, 213, 27, 27, 30, 223, 223, 31, 31, 108, 31, 109, 31, @@ -3485,10 +3489,10 @@ static const flex_int16_t yy_chk[14258] = 34, 32, 34, 36, 34, 114, 65, 34, 39, 39, 39, 39, 32, 39, 115, 40, 40, 40, 40, 31, 40, 39, 105, 140, 105, 45, 196, 219, 40, 196, - 219, 46, 219, 114, 65, 195, 195, 195, 195, 3802, - 32, 225, 115, 3795, 225, 226, 226, 265, 265, 97, + 219, 46, 219, 114, 65, 195, 195, 195, 195, 3813, + 32, 225, 115, 3806, 225, 226, 226, 265, 265, 97, - 105, 140, 105, 3773, 34, 37, 37, 37, 37, 37, + 105, 140, 105, 3784, 34, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, @@ -3499,58 +3503,58 @@ static const flex_int16_t yy_chk[14258] = 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 41, 41, 41, 41, 147, 41, 42, 42, - 42, 42, 153, 42, 43, 43, 43, 43, 3770, 43, + 42, 42, 153, 42, 43, 43, 43, 43, 3781, 43, 44, 44, 44, 44, 50, 44, 102, 66, 50, 59, 66, 50, 286, 286, 147, 66, 73, 60, 102, 73, 153, 73, 129, 74, 73, 129, 74, 283, 74, 66, 283, 74, 315, 318, 102, 315, 318, 41, 73, 185, 59, 67, 59, 42, 185, 74, 102, 173, 60, 43, - 60, 59, 59, 59, 59, 44, 2693, 66, 50, 60, + 60, 59, 59, 59, 59, 44, 2702, 66, 50, 60, 60, 60, 60, 68, 77, 77, 73, 77, 59, 348, 59, 183, 67, 74, 67, 173, 60, 129, 60, 59, 59, 59, 59, 67, 67, 67, 67, 60, 60, 60, - 60, 185, 99, 484, 68, 99, 68, 103, 2693, 183, + 60, 185, 99, 484, 68, 99, 68, 103, 2702, 183, 67, 106, 67, 111, 103, 68, 68, 68, 68, 189, - 110, 67, 67, 67, 67, 106, 348, 3761, 111, 77, + 110, 67, 67, 67, 67, 106, 348, 3772, 111, 77, 99, 106, 68, 99, 68, 103, 110, 112, 177, 106, - 177, 111, 103, 68, 68, 68, 68, 189, 110, 3734, + 177, 111, 103, 68, 68, 68, 68, 189, 110, 3745, 113, 309, 112, 106, 113, 113, 111, 484, 145, 106, - 198, 145, 309, 2860, 110, 112, 119, 119, 119, 119, + 198, 145, 309, 2870, 110, 112, 119, 119, 119, 119, 201, 119, 120, 120, 120, 120, 179, 120, 113, 179, 112, 177, 113, 113, 121, 121, 121, 121, 198, 121, 126, 126, 126, 126, 199, 126, 203, 133, 201, 138, - 133, 199, 138, 142, 142, 2860, 187, 138, 145, 138, + 133, 199, 138, 142, 142, 2870, 187, 138, 145, 138, 142, 187, 142, 199, 133, 133, 148, 148, 436, 436, 148, 119, 199, 148, 203, 133, 179, 120, 133, 199, - 144, 156, 156, 144, 156, 144, 3727, 181, 144, 121, + 144, 156, 156, 144, 156, 144, 3738, 181, 144, 121, 181, 199, 133, 133, 205, 126, 131, 131, 131, 131, 131, 131, 208, 131, 138, 211, 131, 142, 187, 405, 131, 149, 131, 131, 149, 131, 131, 131, 188, 149, 148, 188, 205, 642, 131, 131, 131, 131, 131, 131, - 208, 131, 3698, 211, 131, 144, 156, 181, 131, 151, + 208, 131, 3709, 211, 131, 144, 156, 181, 131, 151, 131, 131, 151, 131, 131, 131, 150, 151, 405, 150, 494, 150, 157, 157, 150, 157, 155, 155, 200, 150, 155, 149, 642, 155, 159, 159, 159, 159, 155, 162, 162, 200, 162, 188, 162, 166, 166, 212, 166, 346, - 166, 346, 162, 876, 380, 3696, 200, 380, 166, 151, - 169, 166, 3660, 169, 210, 169, 162, 210, 169, 200, - 435, 150, 166, 435, 494, 212, 2873, 157, 167, 167, + 166, 346, 162, 876, 380, 3707, 200, 380, 166, 151, + 169, 166, 3671, 169, 210, 169, 162, 210, 169, 200, + 435, 150, 166, 435, 494, 212, 2883, 157, 167, 167, 155, 167, 169, 167, 868, 168, 168, 230, 168, 159, - 168, 167, 876, 202, 162, 210, 346, 1389, 168, 186, + 168, 167, 876, 202, 162, 210, 346, 1392, 168, 186, 166, 170, 186, 202, 170, 167, 170, 186, 206, 170, - 169, 170, 168, 3655, 170, 230, 206, 171, 2873, 235, + 169, 170, 168, 3666, 170, 230, 206, 171, 2883, 235, 171, 202, 171, 162, 162, 171, 904, 359, 170, 166, 166, 202, 224, 167, 414, 224, 206, 224, 174, 171, - 168, 174, 1389, 174, 206, 176, 174, 235, 176, 174, - 176, 243, 868, 176, 186, 176, 170, 498, 176, 2063, - 174, 2063, 167, 167, 178, 178, 521, 171, 178, 168, + 168, 174, 1392, 174, 206, 176, 174, 235, 176, 174, + 176, 243, 868, 176, 186, 176, 170, 498, 176, 2069, + 174, 2069, 167, 167, 178, 178, 521, 171, 178, 168, 168, 178, 176, 178, 359, 180, 178, 521, 180, 243, - 180, 414, 244, 180, 3629, 184, 184, 224, 174, 184, - 178, 3625, 184, 904, 190, 190, 190, 486, 486, 197, + 180, 414, 244, 180, 3640, 184, 184, 224, 174, 184, + 178, 3636, 184, 904, 190, 190, 190, 486, 486, 197, 176, 190, 192, 192, 192, 192, 204, 245, 197, 209, 244, 498, 197, 209, 207, 192, 246, 197, 178, 209, @@ -3561,7 +3565,7 @@ static const flex_int16_t yy_chk[14258] = 214, 214, 214, 214, 217, 217, 217, 217, 218, 218, 218, 218, 227, 218, 221, 221, 221, 221, 247, 221, 222, 222, 222, 222, 236, 222, 248, 236, 251, 253, - 228, 251, 260, 2064, 254, 2064, 251, 254, 231, 269, + 228, 251, 260, 2070, 254, 2070, 251, 254, 231, 269, 232, 423, 254, 270, 258, 233, 247, 258, 267, 258, 251, 267, 258, 271, 248, 214, 254, 253, 272, 217, @@ -3577,13 +3581,13 @@ static const flex_int16_t yy_chk[14258] = 301, 302, 313, 314, 323, 327, 303, 323, 327, 323, 304, 305, 507, 307, 304, 325, 304, 308, 325, 310, - 325, 306, 306, 328, 329, 311, 312, 330, 332, 3624, + 325, 306, 306, 328, 329, 311, 312, 330, 332, 3635, 313, 314, 319, 319, 319, 319, 886, 319, 320, 320, 320, 320, 335, 320, 321, 321, 321, 321, 333, 321, 331, 328, 329, 331, 336, 330, 332, 335, 337, 507, - 327, 338, 333, 333, 334, 1115, 334, 339, 340, 341, - 335, 1115, 340, 342, 344, 337, 333, 442, 331, 345, - 337, 331, 336, 345, 745, 335, 337, 319, 3584, 338, + 327, 338, 333, 333, 334, 1116, 334, 339, 340, 341, + 335, 1116, 340, 342, 344, 337, 333, 442, 331, 345, + 337, 331, 336, 345, 745, 335, 337, 319, 3595, 338, 333, 333, 334, 320, 334, 339, 340, 341, 343, 321, 340, 342, 344, 337, 886, 442, 349, 345, 337, 349, @@ -3592,76 +3596,76 @@ static const flex_int16_t yy_chk[14258] = 353, 354, 356, 362, 360, 356, 362, 360, 745, 360, 343, 343, 360, 361, 361, 363, 364, 514, 363, 364, 361, 364, 365, 443, 364, 366, 365, 369, 366, 365, - 2265, 349, 2265, 366, 372, 370, 351, 372, 370, 3034, + 2272, 349, 2272, 366, 372, 370, 351, 372, 370, 3045, 370, 350, 355, 370, 441, 353, 354, 441, 370, 371, 371, 443, 356, 362, 373, 374, 371, 373, 374, 360, 374, 371, 373, 374, 514, 363, 375, 361, 374, 444, 375, 364, 524, 375, 411, 366, 365, 411, 375, 376, - 376, 3034, 376, 524, 372, 377, 377, 445, 377, 398, + 376, 3045, 376, 524, 372, 377, 377, 445, 377, 398, 370, 379, 379, 379, 379, 381, 381, 444, 381, 384, - 384, 446, 384, 371, 373, 1108, 382, 382, 398, 382, + 384, 446, 384, 371, 373, 1109, 382, 382, 398, 382, 374, 382, 384, 395, 474, 445, 395, 474, 395, 382, 375, 395, 386, 386, 411, 386, 384, 386, 447, 446, - 2616, 416, 416, 382, 376, 386, 398, 2798, 416, 448, + 2625, 416, 416, 382, 376, 386, 398, 2808, 416, 448, 377, 488, 387, 387, 488, 387, 379, 387, 483, 386, 381, 483, 421, 483, 384, 387, 447, 421, 387, 389, 389, 382, 389, 395, 389, 390, 390, 448, 390, 387, - 390, 391, 389, 1108, 391, 389, 391, 386, 390, 391, + 390, 391, 389, 1109, 391, 389, 391, 386, 390, 391, - 2616, 426, 426, 384, 384, 416, 389, 2798, 426, 428, + 2625, 426, 426, 384, 384, 416, 389, 2808, 426, 428, 382, 382, 390, 391, 428, 394, 403, 387, 394, 403, - 394, 403, 449, 394, 421, 396, 386, 386, 396, 2266, - 396, 2266, 403, 396, 389, 396, 3568, 394, 396, 417, + 394, 403, 449, 394, 421, 396, 386, 386, 396, 2273, + 396, 2273, 403, 396, 389, 396, 3579, 394, 396, 417, 390, 391, 417, 403, 397, 397, 387, 387, 397, 562, - 449, 397, 396, 397, 399, 426, 397, 399, 3550, 399, + 449, 397, 396, 397, 399, 426, 397, 399, 3561, 399, 562, 428, 399, 389, 389, 394, 427, 427, 427, 390, 390, 403, 425, 427, 401, 425, 399, 401, 402, 401, 396, 402, 401, 402, 401, 565, 402, 401, 402, 417, 418, 402, 487, 418, 402, 487, 565, 487, 397, 403, - 403, 401, 451, 420, 399, 402, 1319, 420, 404, 406, - 420, 404, 406, 404, 406, 3547, 404, 406, 404, 406, + 403, 401, 451, 420, 399, 402, 1321, 420, 404, 406, + 420, 404, 406, 404, 406, 3558, 404, 406, 404, 406, 427, 404, 406, 415, 404, 406, 415, 425, 415, 401, 451, 415, 857, 402, 409, 404, 406, 409, 431, 409, 418, 410, 409, 431, 409, 410, 419, 409, 410, 419, 410, 419, 424, 410, 419, 424, 495, 420, 401, 495, - 424, 409, 402, 404, 406, 429, 1328, 410, 429, 430, - 3520, 430, 454, 429, 1319, 455, 430, 456, 415, 857, + 424, 409, 402, 404, 406, 429, 1330, 410, 429, 430, + 3531, 430, 454, 429, 1321, 455, 430, 456, 415, 857, 452, 432, 432, 432, 432, 438, 438, 438, 438, 409, 431, 452, 404, 406, 432, 410, 450, 457, 450, 458, 454, 419, 450, 455, 459, 456, 460, 424, 452, 462, 463, 462, 464, 465, 466, 459, 467, 468, 467, 452, 429, 469, 464, 430, 450, 457, 450, 458, 471, 472, - 450, 465, 459, 1328, 460, 1323, 432, 462, 463, 462, + 450, 465, 459, 1330, 460, 1325, 432, 462, 463, 462, 464, 465, 466, 459, 467, 468, 467, 473, 489, 469, - 464, 489, 500, 489, 1326, 500, 471, 472, 3515, 465, + 464, 489, 500, 489, 1328, 500, 471, 472, 3526, 465, 470, 470, 493, 470, 505, 493, 470, 493, 470, 505, 470, 470, 470, 520, 470, 473, 470, 470, 470, 470, 476, 476, 476, 476, 480, 480, 480, 480, 470, 470, 497, 470, 508, 497, 470, 497, 470, 508, 470, 470, - 470, 520, 470, 1323, 470, 470, 470, 470, 481, 481, + 470, 520, 470, 1325, 470, 470, 470, 470, 481, 481, 481, 481, 482, 482, 482, 482, 505, 482, 485, 485, - 485, 485, 1326, 485, 491, 491, 491, 491, 2800, 491, + 485, 485, 1328, 485, 491, 491, 491, 491, 2810, 491, 522, 492, 492, 492, 492, 476, 492, 499, 502, 480, 499, 502, 499, 503, 508, 510, 503, 523, 503, 511, - 510, 515, 511, 516, 515, 525, 516, 532, 522, 2137, - 2137, 531, 528, 481, 531, 528, 542, 482, 557, 531, - 528, 557, 543, 485, 533, 523, 532, 533, 2800, 491, + 510, 515, 511, 516, 515, 525, 516, 532, 522, 2144, + 2144, 531, 528, 481, 531, 528, 542, 482, 557, 531, + 528, 557, 543, 485, 533, 523, 532, 533, 2810, 491, 544, 545, 533, 525, 528, 535, 492, 539, 535, 539, - 535, 1575, 499, 535, 542, 546, 533, 510, 547, 511, + 535, 1579, 499, 535, 542, 546, 533, 510, 547, 511, 543, 515, 538, 516, 532, 538, 539, 535, 544, 545, 538, 531, 528, 548, 540, 550, 551, 540, 552, 540, 553, 555, 540, 546, 533, 556, 547, 558, 559, 560, - 558, 561, 563, 564, 539, 535, 540, 590, 566, 2975, - 590, 548, 567, 550, 551, 1575, 552, 568, 553, 555, - 570, 571, 538, 556, 3504, 3494, 559, 560, 572, 561, + 558, 561, 563, 564, 539, 535, 540, 590, 566, 2986, + 590, 548, 567, 550, 551, 1579, 552, 568, 553, 555, + 570, 571, 538, 556, 3515, 3505, 559, 560, 572, 561, 563, 564, 573, 574, 540, 554, 566, 554, 554, 575, - 567, 554, 554, 554, 576, 568, 3492, 554, 570, 571, - 554, 579, 554, 554, 554, 554, 572, 554, 554, 2975, + 567, 554, 554, 554, 576, 568, 3503, 554, 570, 571, + 554, 579, 554, 554, 554, 554, 572, 554, 554, 2986, 573, 574, 580, 554, 581, 554, 554, 575, 577, 554, 554, 554, 576, 578, 578, 554, 582, 583, 554, 579, @@ -3673,1334 +3677,1335 @@ static const flex_int16_t yy_chk[14258] = 615, 598, 616, 617, 618, 599, 600, 588, 602, 603, 619, 606, 607, 620, 626, 620, 608, 626, 609, 869, 610, 611, 612, 613, 646, 869, 623, 614, 615, 623, - 616, 617, 618, 3473, 623, 646, 623, 624, 619, 637, + 616, 617, 618, 3484, 623, 646, 623, 624, 619, 637, 624, 629, 637, 640, 629, 624, 629, 624, 630, 629, 655, 630, 638, 630, 632, 638, 630, 632, 635, 645, - 620, 635, 632, 635, 626, 636, 635, 3428, 636, 645, + 620, 635, 632, 635, 626, 636, 635, 3439, 636, 645, 636, 635, 645, 636, 639, 639, 860, 639, 636, 639, 674, 623, 640, 649, 682, 895, 649, 639, 649, 655, 639, 649, 624, 869, 641, 641, 629, 641, 683, 641, - 684, 639, 3421, 630, 632, 649, 669, 641, 674, 669, + 684, 639, 3432, 630, 632, 649, 669, 641, 674, 669, 641, 640, 682, 635, 643, 643, 899, 643, 655, 643, 636, 641, 679, 860, 895, 679, 683, 643, 684, 639, - 643, 3389, 662, 649, 647, 647, 1391, 647, 685, 647, + 643, 3400, 662, 649, 647, 647, 1394, 647, 685, 647, - 645, 643, 662, 3326, 663, 662, 686, 647, 653, 641, + 645, 643, 662, 3337, 663, 662, 686, 647, 653, 641, 647, 653, 663, 653, 687, 899, 669, 652, 639, 639, - 652, 647, 652, 663, 653, 652, 685, 652, 3308, 643, + 652, 647, 652, 663, 653, 652, 685, 652, 3319, 643, 652, 675, 688, 652, 686, 653, 675, 679, 641, 641, - 654, 1391, 687, 654, 652, 654, 3292, 690, 654, 647, - 654, 663, 691, 654, 692, 3286, 654, 693, 643, 643, + 654, 1394, 687, 654, 652, 654, 3303, 690, 654, 647, + 654, 663, 691, 654, 692, 3297, 654, 693, 643, 643, 688, 656, 694, 653, 656, 695, 656, 654, 697, 656, 698, 656, 652, 662, 656, 690, 754, 656, 647, 647, - 691, 754, 692, 675, 664, 693, 3284, 664, 656, 664, + 691, 754, 692, 675, 664, 693, 3295, 664, 656, 664, 694, 653, 653, 695, 657, 654, 697, 657, 698, 657, - 664, 652, 657, 733, 657, 699, 733, 657, 3278, 658, - 657, 664, 658, 701, 658, 1938, 656, 658, 702, 658, + 664, 652, 657, 733, 657, 699, 733, 657, 3289, 658, + 657, 664, 658, 701, 658, 1944, 656, 658, 702, 658, 734, 657, 658, 734, 654, 658, 672, 659, 754, 672, - 659, 672, 659, 699, 672, 659, 658, 659, 3240, 664, - 659, 701, 2268, 659, 2268, 656, 702, 660, 673, 657, + 659, 672, 659, 699, 672, 659, 658, 659, 3251, 664, + 659, 701, 2275, 659, 2275, 656, 702, 660, 673, 657, 660, 673, 660, 673, 659, 660, 673, 660, 678, 905, - 660, 678, 665, 660, 658, 665, 678, 665, 664, 1938, - 665, 3206, 665, 735, 660, 665, 735, 680, 665, 703, + 660, 678, 665, 660, 658, 665, 678, 665, 664, 1944, + 665, 3217, 665, 735, 660, 665, 735, 680, 665, 703, 680, 672, 659, 737, 705, 680, 737, 666, 706, 665, 666, 707, 666, 658, 708, 666, 667, 666, 905, 667, 666, 667, 660, 673, 667, 736, 667, 703, 736, 667, 736, 659, 705, 678, 666, 709, 706, 665, 823, 707, 710, 712, 708, 667, 714, 715, 696, 716, 717, 823, - 3169, 660, 680, 696, 696, 696, 696, 696, 696, 696, + 3180, 660, 680, 696, 696, 696, 696, 696, 696, 696, 696, 696, 666, 709, 713, 719, 665, 721, 710, 712, 720, 667, 714, 715, 723, 716, 717, 713, 713, 722, - 713, 713, 718, 724, 718, 720, 725, 726, 718, 722, - 727, 728, 713, 719, 2471, 721, 2471, 732, 720, 727, - 740, 743, 723, 740, 743, 713, 713, 722, 713, 713, - 718, 724, 718, 720, 725, 726, 718, 722, 727, 728, - - 729, 1695, 729, 738, 729, 732, 738, 727, 738, 739, - 741, 753, 739, 741, 739, 741, 744, 746, 761, 744, - 746, 744, 746, 747, 748, 762, 747, 748, 729, 748, - 729, 750, 729, 763, 750, 751, 750, 752, 751, 753, - 752, 758, 752, 764, 758, 3047, 761, 766, 774, 775, - 766, 770, 776, 762, 770, 766, 770, 777, 778, 770, - 780, 763, 781, 3156, 782, 783, 784, 790, 1695, 766, - 787, 764, 3151, 770, 787, 786, 774, 775, 787, 791, - 776, 785, 786, 792, 795, 777, 778, 3047, 780, 786, - 781, 758, 782, 783, 784, 790, 785, 766, 787, 785, - - 788, 770, 787, 786, 789, 793, 787, 791, 797, 785, - 786, 792, 795, 798, 788, 794, 788, 786, 796, 799, - 796, 793, 801, 789, 785, 801, 802, 785, 788, 804, - 794, 806, 789, 793, 809, 810, 797, 802, 811, 3121, - 812, 798, 788, 794, 788, 813, 796, 799, 796, 793, - 814, 789, 815, 817, 818, 819, 820, 804, 794, 806, - 821, 822, 809, 810, 824, 825, 811, 802, 812, 826, - 828, 829, 831, 813, 830, 832, 834, 835, 814, 834, - 815, 817, 818, 819, 820, 830, 836, 837, 821, 822, - 838, 839, 824, 825, 840, 841, 830, 826, 828, 829, - - 831, 842, 843, 832, 844, 835, 846, 847, 848, 849, - 850, 851, 852, 853, 836, 837, 848, 854, 838, 839, - 855, 856, 840, 841, 830, 858, 908, 858, 861, 842, - 843, 861, 844, 3107, 846, 847, 848, 849, 850, 851, - 852, 853, 3198, 859, 848, 854, 859, 862, 855, 856, - 862, 859, 862, 859, 863, 862, 870, 864, 865, 863, - 864, 865, 866, 865, 874, 866, 865, 870, 882, 915, - 911, 865, 858, 908, 3061, 874, 867, 867, 861, 867, - 881, 867, 1520, 881, 3198, 881, 867, 882, 881, 867, - 916, 977, 867, 978, 977, 917, 978, 915, 859, 888, - - 1318, 863, 862, 867, 3059, 888, 3134, 864, 914, 872, - 872, 914, 872, 865, 872, 882, 883, 911, 916, 883, - 3057, 883, 872, 917, 883, 872, 883, 1520, 912, 883, - 881, 867, 883, 912, 909, 870, 872, 909, 918, 1318, - 889, 884, 885, 883, 884, 885, 884, 885, 889, 884, - 885, 884, 885, 919, 884, 885, 3134, 884, 885, 889, - 867, 867, 887, 914, 872, 887, 918, 887, 884, 885, - 887, 883, 887, 888, 891, 887, 996, 891, 887, 891, - 912, 919, 980, 920, 909, 980, 921, 889, 3053, 887, - 891, 924, 3044, 872, 872, 913, 884, 885, 913, 925, - - 883, 891, 1329, 913, 893, 892, 928, 893, 892, 893, - 892, 920, 3036, 892, 921, 892, 889, 887, 892, 924, - 893, 892, 3507, 996, 3507, 884, 885, 925, 998, 891, - 894, 893, 892, 894, 928, 894, 3027, 931, 894, 896, - 894, 1329, 896, 894, 896, 1114, 894, 896, 898, 896, - 913, 898, 896, 898, 932, 896, 898, 894, 891, 893, - 892, 2138, 2138, 3017, 897, 931, 896, 897, 900, 897, - 898, 900, 897, 900, 897, 998, 900, 897, 910, 2976, - 897, 910, 932, 910, 1114, 894, 910, 893, 933, 892, - 900, 897, 981, 935, 896, 981, 906, 907, 898, 906, - - 907, 906, 907, 922, 906, 907, 906, 907, 922, 906, - 907, 983, 906, 1114, 983, 2138, 933, 2974, 900, 897, - 922, 935, 936, 906, 907, 979, 986, 2970, 979, 986, - 979, 922, 2932, 910, 937, 939, 922, 929, 929, 929, - 929, 929, 929, 929, 929, 929, 940, 941, 922, 942, - 936, 906, 907, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 937, 939, 943, 945, 946, 947, 948, 949, - 950, 951, 953, 952, 940, 941, 952, 942, 954, 955, - 906, 956, 957, 958, 959, 960, 961, 962, 963, 966, - 2894, 968, 943, 945, 946, 947, 948, 949, 950, 951, - - 953, 965, 969, 970, 952, 965, 954, 955, 971, 956, - 957, 958, 959, 960, 961, 962, 963, 966, 967, 968, - 972, 967, 973, 976, 989, 991, 1000, 989, 991, 965, - 969, 970, 982, 965, 2883, 982, 971, 982, 984, 985, - 997, 984, 985, 984, 985, 997, 967, 1001, 972, 967, - 973, 976, 987, 990, 1000, 987, 990, 987, 990, 992, - 993, 1002, 992, 993, 992, 994, 995, 1003, 994, 995, - 994, 999, 1005, 1004, 999, 1001, 1004, 1006, 1003, 1007, - 1006, 1004, 1006, 1011, 1012, 1006, 1014, 1015, 1016, 1002, - 1017, 1005, 997, 3586, 1018, 3586, 1019, 1020, 1007, 2882, - - 1021, 1022, 1023, 1024, 1025, 1025, 1025, 1025, 1026, 1027, - 1028, 1011, 1012, 1027, 1014, 1015, 1016, 1029, 1017, 1005, - 1030, 999, 1018, 1004, 1019, 1020, 1007, 1006, 1021, 1022, - 1023, 1024, 1025, 1025, 1025, 1025, 1026, 1027, 1028, 1031, - 1032, 1027, 1033, 1034, 1035, 1029, 1036, 1037, 1030, 1038, - 1039, 1037, 1040, 1037, 1039, 1041, 1042, 1043, 1044, 1045, - 1046, 2866, 1049, 1050, 1052, 1051, 1053, 1031, 1032, 1040, - 1033, 1034, 1035, 1054, 1036, 1037, 1051, 1038, 1039, 1037, - 1040, 1037, 1039, 1041, 1042, 1043, 1044, 1045, 1046, 1048, - 1049, 1050, 1052, 1048, 1053, 1055, 1056, 1040, 1057, 1058, - - 1048, 1054, 1048, 1059, 1060, 1062, 1051, 1063, 1064, 1065, - 1066, 1068, 1069, 1070, 2865, 1190, 1072, 1048, 1190, 1073, - 1075, 1048, 1076, 1055, 1056, 1077, 1057, 1058, 1048, 2856, - 1048, 1059, 1060, 1062, 1078, 1063, 1064, 1065, 1066, 1068, - 1069, 1070, 1071, 1071, 1072, 1079, 1071, 1073, 1075, 1080, - 1076, 1071, 1081, 1077, 1082, 1083, 1084, 1071, 1085, 1086, - 1087, 1071, 1078, 1071, 1089, 1090, 1091, 1092, 1093, 1094, - 1071, 1071, 1095, 1079, 1071, 1096, 1097, 1080, 1098, 1071, - 1081, 1099, 1082, 1083, 1084, 1071, 1085, 1086, 1087, 1071, - 1100, 1071, 1089, 1090, 1091, 1092, 1093, 1094, 1107, 1112, - - 1095, 1107, 1112, 1096, 1097, 1113, 1098, 1106, 1106, 1099, - 1106, 1111, 1106, 2815, 1111, 1126, 1111, 1118, 1100, 1111, - 1106, 1111, 1568, 1106, 1111, 1118, 1191, 1111, 1128, 1191, - 1193, 1122, 1116, 1193, 1106, 1116, 1118, 1116, 1111, 1122, - 1116, 1117, 1116, 1126, 1117, 1116, 1117, 1130, 1116, 1117, - 1122, 1117, 1131, 1133, 1117, 1135, 1128, 1117, 1120, 1116, - 1136, 1120, 1106, 1120, 1118, 1138, 1111, 1568, 1117, 1107, - 1112, 2814, 1113, 1113, 1120, 1130, 2805, 1139, 1122, 1192, - 1131, 1133, 1192, 1135, 1192, 1120, 1194, 1116, 1136, 1194, - 2799, 1106, 1106, 1138, 1119, 1111, 1117, 1119, 1121, 1119, - - 2765, 1121, 1119, 1121, 1119, 1139, 1121, 1119, 1121, 1141, - 1119, 1121, 1123, 1120, 1121, 1123, 1116, 1123, 1137, 1143, - 1144, 1119, 1145, 1146, 1147, 1121, 1151, 1153, 1123, 1156, - 1157, 1158, 1159, 2745, 1137, 1160, 1161, 1141, 1162, 1123, - 1195, 1196, 2696, 1195, 1196, 1195, 1137, 1143, 1144, 1119, - 1145, 1146, 1147, 1121, 1151, 1153, 2685, 1156, 1157, 1158, - 1159, 1142, 1137, 1160, 1161, 1164, 1162, 1123, 1142, 1142, - 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1165, 1119, 1163, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1166, 1167, - 1168, 1169, 1170, 1164, 1171, 1171, 1123, 1172, 1173, 1174, - - 1175, 1177, 1178, 1179, 1180, 1165, 1181, 1183, 1184, 1185, - 1186, 1186, 1198, 2681, 1202, 1198, 1166, 1167, 1168, 1169, - 1170, 1200, 1171, 1171, 1200, 1172, 1173, 1174, 1175, 1177, - 1178, 1179, 1180, 1206, 1181, 1183, 1184, 1185, 1186, 1186, - 1197, 1199, 1202, 1197, 1199, 1197, 1199, 1201, 1207, 1208, - 1201, 1215, 1216, 1217, 1219, 1220, 1222, 1223, 1224, 1225, - 1226, 1206, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, - 1235, 1230, 1236, 1237, 1238, 1239, 1207, 1208, 1240, 1215, - 1216, 1217, 1219, 1220, 1222, 1223, 1224, 1225, 1226, 1241, - 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1230, - - 1236, 1237, 1238, 1239, 1242, 1243, 1240, 1244, 1245, 1246, - 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1241, 1254, 1255, - 1256, 1258, 1259, 1260, 1261, 1262, 1263, 1266, 2643, 2642, - 1252, 1268, 1242, 1243, 2618, 1244, 1245, 1246, 1247, 1248, - 1249, 1250, 1251, 1252, 1253, 1265, 1254, 1255, 1256, 1258, - 1259, 1260, 1261, 1262, 1263, 1266, 1265, 1267, 1252, 1268, - 1269, 1265, 1265, 1270, 1272, 1273, 1274, 1275, 1267, 1277, - 1278, 1279, 1280, 1265, 1282, 1284, 1285, 1286, 1288, 1287, - 1289, 1290, 1292, 1294, 1265, 1287, 1295, 1296, 1269, 1265, - 1265, 1270, 1272, 1273, 1274, 1275, 1297, 1277, 1278, 1279, - - 1280, 1298, 1282, 1284, 1285, 1286, 1288, 1287, 1289, 1290, - 1292, 1294, 1299, 1287, 1295, 1296, 1300, 1301, 1302, 1303, - 1304, 1305, 1306, 1308, 1297, 1309, 1310, 1311, 1312, 1298, - 1313, 1314, 1315, 1316, 1317, 1321, 1332, 2580, 1335, 1393, - 1299, 1331, 1393, 2553, 1300, 1301, 1302, 1303, 1304, 1305, - 1306, 1308, 1331, 1309, 1310, 1311, 1312, 1398, 1313, 1314, - 1315, 1316, 1322, 1325, 1332, 1322, 1335, 1322, 1398, 1336, - 1322, 1325, 1322, 1317, 1321, 1322, 1337, 1338, 1322, 3588, - 1327, 3588, 1325, 1327, 1339, 1327, 3555, 1340, 1394, 1322, - 1333, 1394, 1333, 1341, 2550, 1342, 1327, 1336, 1345, 3656, - - 1347, 3656, 1317, 1321, 1337, 1338, 1330, 1327, 1331, 1330, - 1325, 1330, 1339, 1348, 1330, 1340, 1330, 1322, 1333, 1330, - 1333, 1341, 1330, 1342, 1344, 1349, 1345, 1344, 1347, 1344, - 1350, 1351, 1352, 1330, 1344, 1327, 3555, 1344, 1353, 1325, - 2541, 1348, 1354, 1356, 1362, 1364, 1367, 1368, 1369, 1370, - 1371, 1395, 1396, 1349, 1395, 1396, 1395, 1397, 1350, 1351, - 1397, 1330, 1352, 1372, 1327, 1373, 1353, 1374, 1352, 1375, - 1354, 1356, 1362, 1364, 1367, 1368, 1369, 1370, 1371, 1344, - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1376, - 1352, 1372, 1378, 1373, 1379, 1374, 1352, 1375, 1380, 1381, - - 1383, 1384, 1385, 1386, 1387, 1388, 1399, 1384, 1400, 1403, - 1404, 1405, 1406, 1407, 1405, 1408, 1409, 1376, 1410, 1411, - 1378, 1412, 1379, 1413, 1414, 1415, 1380, 1381, 1383, 1384, - 1385, 1386, 1387, 1388, 1399, 1384, 1400, 1403, 1404, 1417, - 1406, 1407, 1416, 1408, 1409, 1418, 1410, 1411, 1419, 1412, - 1420, 1413, 1414, 1415, 1421, 1416, 1422, 1423, 1424, 1425, - 1416, 1427, 1428, 1426, 1429, 1430, 1431, 1417, 1432, 1426, - 1416, 1426, 1433, 1418, 1426, 1435, 1419, 2539, 1420, 1436, - 1437, 1438, 1421, 1416, 1422, 1423, 1424, 1425, 1416, 1427, - 1428, 1426, 1429, 1430, 1431, 1439, 1432, 1426, 1440, 1426, - - 1433, 1434, 1426, 1435, 1441, 1434, 1442, 1436, 1437, 1438, - 1443, 1444, 1434, 1445, 1434, 1434, 1446, 1434, 1447, 1448, - 1449, 1450, 1451, 1439, 1452, 1453, 1440, 1454, 1455, 1434, - 1460, 1461, 1441, 1434, 1442, 1462, 1463, 1464, 1443, 1444, - 1434, 1445, 1434, 1434, 1446, 1434, 1447, 1448, 1449, 1450, - 1451, 1468, 1452, 1453, 1465, 1454, 1455, 1469, 1460, 1461, - 1470, 1465, 1472, 1462, 1463, 1464, 1473, 1474, 1475, 1465, - 1471, 1476, 1477, 1470, 1465, 1470, 1478, 1479, 1480, 1468, - 1481, 1471, 1465, 1482, 1483, 1469, 1484, 1485, 1470, 1465, - 1472, 1486, 1471, 1487, 1473, 1474, 1475, 1465, 1487, 1476, - - 1477, 1470, 1465, 1470, 1478, 1479, 1480, 1488, 1481, 1489, - 1490, 1482, 1483, 1491, 1484, 1485, 1492, 1493, 1494, 1486, - 1471, 1487, 1495, 1496, 1497, 1498, 1487, 1499, 1501, 1502, - 1503, 1504, 1505, 1501, 2506, 1488, 1508, 1489, 1490, 1509, - 1510, 1491, 1511, 1499, 1492, 1493, 1494, 1513, 2502, 1514, - 1495, 1496, 1497, 1498, 1506, 1499, 1501, 1502, 1503, 1504, - 1507, 1501, 1506, 1507, 1508, 1507, 1515, 1509, 1510, 1516, - 1511, 1499, 2500, 1506, 1517, 1513, 1507, 1514, 1518, 1519, - 1522, 1523, 1519, 1522, 1519, 1522, 1526, 1507, 1527, 1519, - 1522, 1528, 1519, 1522, 1515, 1571, 1573, 1516, 1571, 1505, - - 1505, 1506, 1517, 1531, 1529, 1532, 1518, 1573, 1529, 1523, - 1529, 1534, 1536, 1542, 1526, 1507, 1527, 1543, 2499, 1528, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1546, - 1547, 1531, 1529, 1532, 1519, 1522, 1529, 1548, 1529, 1534, - 1536, 1542, 1549, 1550, 1551, 1543, 1544, 1544, 1544, 1544, - 1544, 1544, 1544, 1544, 1544, 1552, 1553, 1546, 1547, 1554, - 1555, 1556, 1557, 1558, 1559, 1548, 1560, 1561, 1562, 1563, - 1549, 1550, 1551, 1564, 1565, 1566, 1572, 1576, 1577, 1788, - 1580, 1581, 1788, 1552, 1553, 1582, 1583, 1554, 1555, 1556, - 1557, 1558, 1559, 1584, 1560, 1561, 1562, 1563, 1585, 1586, - - 1584, 1564, 1565, 1566, 1572, 1576, 1577, 1578, 1580, 1581, - 1578, 1587, 1578, 1582, 1583, 1588, 1589, 1590, 1591, 1592, - 1593, 1584, 1594, 1595, 1596, 1597, 1585, 1586, 1584, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1587, - 1608, 1609, 1610, 1588, 1589, 1590, 1591, 1592, 1593, 1611, - 1594, 1595, 1596, 1597, 1612, 1613, 1614, 1598, 1599, 1600, - 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1615, 1608, 1609, - 1610, 1616, 1617, 1618, 1619, 1620, 1621, 1611, 1622, 1623, - 1624, 1625, 1612, 1613, 1614, 1626, 1627, 1628, 1630, 1631, - 1632, 1634, 1635, 1636, 1629, 1615, 1637, 1638, 1639, 1616, - - 1617, 1618, 1619, 1620, 1621, 1629, 1622, 1623, 1624, 1625, - 1640, 1641, 1642, 1626, 1627, 1628, 1630, 1631, 1632, 1634, - 1635, 1636, 1643, 1645, 1637, 1638, 1639, 1646, 1647, 1648, - 1649, 1650, 1651, 1653, 1655, 1629, 1656, 1657, 1640, 1641, - 1642, 1659, 1660, 1651, 1653, 1803, 1662, 1663, 1803, 1667, - 1643, 1645, 1668, 1669, 2498, 1646, 1647, 1648, 1649, 1650, - 1651, 1670, 1655, 2491, 1656, 1657, 1672, 1673, 1674, 1659, - 1660, 1651, 1652, 1652, 1662, 1663, 1652, 1667, 1652, 1675, - 1668, 1669, 1652, 1652, 1676, 1677, 1652, 1678, 1679, 1670, - 1680, 1652, 1681, 1682, 1672, 1673, 1674, 1683, 1684, 1685, - - 1652, 1652, 1686, 1687, 1652, 1689, 1652, 1675, 1689, 1688, - 1652, 1652, 1676, 1677, 1652, 1678, 1679, 1690, 1680, 1652, - 1681, 1682, 1688, 1691, 1692, 1683, 1684, 1685, 1693, 1694, - 1686, 1687, 1697, 1689, 1698, 1700, 1689, 1688, 1701, 1702, - 1703, 1704, 1705, 1709, 1759, 1690, 1711, 1759, 1715, 1759, - 1688, 1691, 1692, 1703, 1752, 1716, 1693, 1694, 1718, 1719, - 1697, 1720, 1698, 1700, 2479, 1752, 1701, 1702, 1703, 1704, - 1705, 2477, 1707, 1721, 1711, 1707, 1715, 1707, 1722, 2476, - 1722, 1703, 1707, 1716, 1717, 1707, 1718, 1719, 1709, 1720, - 1724, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - - 1727, 1721, 1724, 1729, 1729, 1730, 1722, 1724, 1722, 1728, - 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1724, 1731, - 1732, 1733, 1734, 1735, 1736, 1737, 1739, 1707, 1727, 1740, - 1724, 1729, 1729, 1730, 1741, 1724, 1743, 1751, 1744, 1745, - 1746, 1747, 1748, 1749, 1741, 1742, 1750, 1731, 1732, 1733, - 1734, 1735, 1736, 1737, 1739, 1741, 1742, 1740, 1756, 1757, - 1760, 1761, 1741, 1763, 1743, 1742, 1744, 1745, 1746, 1747, - 1748, 1749, 1741, 1742, 1750, 1764, 1765, 1766, 1767, 1768, - 1769, 1770, 1751, 1741, 1742, 1771, 1756, 1757, 1760, 1761, - 1772, 1763, 1773, 1742, 1774, 1775, 1776, 1777, 1778, 1779, - - 1780, 1781, 1782, 1764, 1765, 1766, 1767, 1768, 1769, 1770, - 1774, 1783, 1784, 1771, 1785, 1786, 1787, 1789, 1772, 1790, - 1773, 1791, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, - 1782, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1774, 1783, - 1784, 1799, 1785, 1786, 1787, 1789, 1800, 1790, 1801, 1791, - 1802, 1804, 1805, 1807, 1808, 1809, 1802, 1811, 1812, 1792, - 1793, 1794, 1795, 1796, 1797, 1798, 1806, 1815, 1806, 1799, - 1816, 1817, 1819, 1806, 1800, 1818, 1801, 1813, 1802, 1804, - 1805, 1807, 1808, 1809, 1802, 1811, 1812, 1820, 1813, 1818, - 2475, 1821, 1822, 1823, 1806, 1815, 1806, 1825, 1816, 1817, - - 1819, 1806, 1827, 1818, 1828, 1829, 1830, 1831, 1832, 1833, - 1834, 1835, 1836, 1837, 1838, 1820, 1839, 1840, 1813, 1821, - 1822, 1823, 1841, 1844, 1834, 1825, 1845, 1846, 1848, 1849, - 1827, 1854, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, - 1836, 1837, 1838, 1856, 1839, 1840, 1857, 1843, 1843, 1858, - 1841, 1844, 1834, 1843, 1845, 1846, 1848, 1849, 1859, 1854, - 1861, 1843, 1862, 1863, 1843, 1864, 1865, 1866, 1869, 2470, - 1872, 1856, 1873, 1874, 1857, 1843, 1843, 1858, 1875, 1876, - 1877, 1843, 1878, 2445, 1880, 1881, 1859, 2434, 1861, 1843, - 1862, 1863, 1843, 1864, 1865, 1866, 1869, 1870, 1872, 1870, - - 1873, 1874, 1882, 1870, 1884, 1883, 1875, 1876, 1877, 1879, - 1878, 1879, 1883, 1881, 1870, 1879, 1870, 1885, 1886, 1887, - 1888, 1889, 1892, 1893, 1896, 1870, 1879, 1870, 1879, 1880, - 1882, 1870, 1884, 1883, 1897, 2424, 1898, 1879, 1900, 1879, - 1883, 2422, 1870, 1879, 1870, 1885, 1886, 1887, 1888, 1889, - 1890, 1901, 1903, 1890, 1879, 1890, 1879, 1902, 1904, 1902, - 1890, 1905, 1897, 1890, 1898, 1907, 1900, 1892, 1893, 1896, - 1908, 1909, 1912, 1913, 1915, 1916, 1917, 2406, 2390, 1901, - 1903, 1918, 1919, 1920, 1921, 1902, 1904, 1902, 1961, 1905, - 2351, 1961, 1974, 1907, 1922, 1974, 1924, 1974, 1908, 1909, - - 1912, 1913, 1915, 1916, 1917, 1890, 1910, 1925, 1926, 1918, - 1919, 1920, 1921, 1910, 1910, 1910, 1910, 1910, 1910, 1910, - 1910, 1910, 1922, 1923, 1924, 1910, 1927, 1910, 1910, 1910, - 1923, 1928, 1929, 1910, 1930, 1925, 1926, 1931, 1910, 1932, - 1933, 1934, 1935, 1936, 1937, 1930, 1944, 1910, 3658, 2080, - 3658, 1923, 2080, 1910, 1927, 1910, 1910, 1910, 1923, 1928, - 1929, 1910, 1930, 1946, 1947, 1931, 1910, 1932, 1933, 1934, - 1935, 1936, 1937, 1930, 1944, 1910, 1940, 1940, 1940, 1940, - 1942, 1942, 1942, 1942, 1948, 1949, 1950, 1951, 1952, 1953, - 1954, 1946, 1947, 1955, 1956, 1957, 1958, 1959, 1962, 1963, - - 1964, 1965, 1966, 2349, 1967, 1968, 1970, 2336, 1971, 1972, - 1973, 1975, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1976, - 1977, 1955, 1956, 1957, 1958, 1959, 1962, 1963, 1964, 1965, - 1966, 1940, 1967, 1968, 1970, 1942, 1971, 1972, 1973, 1975, - 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1976, 1977, 1985, - 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1990, 1993, 1990, - 1994, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 1978, 1979, - 1980, 1981, 1982, 1983, 1984, 2004, 2000, 1985, 1986, 1987, - 1988, 1989, 2005, 1991, 1992, 2006, 1993, 2000, 1994, 1995, - 1996, 1997, 1998, 1999, 2002, 2003, 2007, 2008, 2009, 2010, - - 2011, 2012, 2294, 2004, 2871, 2014, 2292, 2015, 2201, 2158, - 2005, 2016, 2158, 2006, 2158, 2017, 2018, 2019, 2020, 2201, - 2021, 2871, 2022, 2023, 2007, 2008, 2009, 2010, 2011, 2012, - 2013, 2013, 2013, 2014, 2013, 2015, 2013, 2013, 2024, 2016, - 2013, 2013, 2013, 2017, 2018, 2019, 2020, 2013, 2021, 2013, - 2022, 2023, 2025, 2026, 2027, 2028, 2029, 2030, 2013, 2013, - 2013, 2031, 2013, 2032, 2013, 2013, 2024, 2033, 2013, 2013, - 2013, 2034, 2035, 2036, 2037, 2013, 2038, 2013, 2039, 2042, - 2025, 2026, 2027, 2028, 2029, 2030, 2043, 2044, 2045, 2031, - 2050, 2032, 2051, 2052, 2053, 2033, 2054, 2055, 2056, 2034, - - 2035, 2036, 2037, 2057, 2038, 2061, 2039, 2042, 2058, 2062, - 2058, 2065, 2067, 2068, 2043, 2044, 2045, 2066, 2050, 2066, - 2051, 2052, 2053, 2069, 2054, 2055, 2056, 2070, 2071, 2291, - 2082, 2057, 2072, 2061, 2073, 2074, 2058, 2062, 2058, 2065, - 2083, 2075, 2076, 2077, 2078, 2066, 2079, 2066, 2084, 2087, - 2088, 2089, 2090, 2091, 2092, 2070, 2071, 2067, 2068, 2093, - 2072, 2094, 2073, 2074, 2095, 3720, 2290, 3720, 2069, 2075, - 2076, 2077, 2078, 3191, 2079, 2082, 2099, 2087, 2088, 2089, - 2090, 2091, 2092, 2100, 2096, 2083, 2096, 2093, 2194, 2094, - 3191, 2194, 2095, 2084, 2098, 2098, 2098, 2098, 2098, 2098, - - 2098, 2098, 2098, 2276, 2099, 2101, 2103, 2274, 2102, 2104, - 2105, 2100, 2096, 2102, 2096, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2107, 2108, 2109, 2097, 2110, 2097, - 2097, 2097, 2111, 2101, 2103, 2097, 2102, 2104, 2105, 2112, - 2097, 2102, 2113, 2114, 2116, 2117, 2118, 2119, 2120, 2097, - 2121, 2122, 2107, 2108, 2109, 2097, 2110, 2097, 2097, 2097, - 2111, 2123, 2124, 2097, 2125, 2126, 2127, 2112, 2097, 2129, - 2113, 2114, 2116, 2117, 2118, 2119, 2120, 2097, 2121, 2122, - 2130, 2131, 2132, 2133, 2136, 2136, 2136, 2136, 2141, 2123, - 2124, 2143, 2125, 2126, 2127, 2140, 2140, 2129, 2139, 2139, - - 2139, 2139, 2144, 2145, 2146, 2148, 2149, 2150, 2130, 2131, - 2132, 2133, 2151, 2152, 2153, 2154, 2141, 2155, 2156, 2143, - 2157, 2159, 2160, 2161, 2159, 2275, 2359, 2162, 2163, 2359, - 2144, 2145, 2146, 2148, 2149, 2150, 2164, 2165, 2166, 2136, - 2151, 2152, 2153, 2154, 2167, 2155, 2156, 2168, 2157, 2140, - 2160, 2161, 2169, 2139, 2147, 2162, 2163, 2147, 2273, 2172, - 2251, 2159, 2173, 2174, 2164, 2165, 2166, 2175, 2176, 2177, - 2275, 2170, 2167, 2147, 2170, 2168, 2170, 2178, 2179, 2180, - 2169, 2181, 2183, 2184, 2185, 2186, 2147, 2172, 2147, 2159, - 2173, 2174, 2237, 2189, 2190, 2175, 2176, 2177, 2147, 2191, - - 2147, 2147, 2147, 2192, 2193, 2178, 2179, 2180, 2195, 2181, - 2183, 2184, 2185, 2186, 2147, 2188, 2147, 2196, 2188, 2197, - 2188, 2189, 2190, 2199, 2200, 2203, 2147, 2191, 2147, 2147, - 2147, 2192, 2193, 2202, 2204, 2205, 2195, 2206, 2207, 2208, - 2209, 2210, 2211, 2212, 2202, 2196, 2213, 2197, 2208, 2214, - 2215, 2199, 2200, 2203, 2216, 2217, 2218, 2219, 2220, 2221, - 2222, 2227, 2204, 2205, 2228, 2206, 2207, 2208, 2209, 2210, - 2211, 2212, 2219, 2229, 2213, 2230, 2231, 2214, 2215, 2232, - 2233, 2234, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2227, - 2235, 2236, 2228, 2238, 2239, 2240, 2241, 2242, 2247, 2248, - - 2219, 2229, 2250, 2230, 2231, 2254, 2255, 2232, 2233, 2234, - 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2270, 2235, 2236, - 2271, 2238, 2239, 2240, 2241, 2242, 2247, 2248, 2272, 2277, - 2250, 2279, 2280, 2254, 2255, 2281, 2282, 2283, 2257, 2258, - 2259, 2260, 2261, 2262, 2263, 2270, 2293, 2284, 2271, 2285, - 2286, 2287, 2295, 2296, 2297, 2135, 2272, 2134, 2298, 2279, - 2280, 2299, 2803, 2281, 2282, 2283, 2300, 2301, 2302, 2048, - 2304, 2305, 2306, 2803, 2277, 2284, 2308, 2285, 2286, 2287, - 2289, 2296, 2297, 2289, 2367, 2289, 2298, 2367, 2046, 2299, - 2289, 2293, 2309, 2289, 2300, 2301, 2302, 2295, 2304, 2305, - - 2306, 2307, 2310, 2312, 2308, 2313, 2314, 2289, 2307, 2307, - 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2311, 2315, 2316, - 2309, 2317, 2311, 2318, 2319, 2320, 2321, 2322, 2324, 2325, - 2310, 2312, 2326, 2313, 2314, 2289, 2328, 2331, 2333, 2334, - 2335, 2337, 2338, 2339, 2340, 2311, 2315, 2316, 2341, 2317, - 2311, 2318, 2319, 2320, 2321, 2322, 2324, 2325, 2342, 2343, - 2326, 2346, 2348, 2353, 2328, 2331, 2333, 2334, 2335, 2337, - 2338, 2339, 2340, 2354, 2350, 2350, 2341, 2350, 2352, 2352, - 2357, 2352, 2360, 2362, 2363, 2356, 2342, 2343, 2361, 2346, - 2348, 2353, 2356, 2358, 2361, 2364, 2358, 2365, 2358, 2366, - - 2368, 2354, 2369, 2370, 2371, 2041, 2372, 2373, 2357, 2374, - 2360, 2362, 2363, 2356, 2375, 2379, 2361, 2380, 2381, 2382, - 2356, 2377, 2361, 2364, 2377, 2365, 2377, 2366, 2368, 2350, - 2369, 2370, 2371, 2352, 2372, 2373, 2378, 2374, 2383, 2378, - 2384, 2378, 2375, 2379, 2350, 2380, 2381, 2382, 2352, 2385, - 2386, 2388, 2389, 2391, 2388, 2392, 2393, 2394, 2395, 2396, - 2397, 2398, 2399, 2400, 2402, 2403, 2383, 2404, 2384, 2405, - 2407, 2408, 2409, 2410, 2411, 2409, 2413, 2385, 2386, 2414, - 2389, 2391, 2415, 2392, 2393, 2394, 2395, 2396, 2397, 2398, - 2399, 2400, 2402, 2403, 2416, 2404, 2417, 2405, 2407, 2408, - - 2412, 2410, 2411, 2412, 2413, 2412, 2420, 2414, 2421, 2423, - 2415, 2426, 2425, 2428, 2429, 2430, 2431, 2432, 2433, 2435, - 2436, 2437, 2416, 2425, 2417, 1960, 2438, 2439, 2440, 2442, - 2443, 2444, 2446, 2447, 2420, 2448, 2421, 2423, 2450, 2426, - 2451, 2428, 2429, 2430, 2431, 2432, 2433, 2435, 2436, 2437, - 2452, 2453, 2454, 2425, 2438, 2439, 2440, 2442, 2443, 2444, - 2446, 2447, 2455, 2448, 2456, 2457, 2450, 2458, 2451, 2459, - 2460, 2463, 2464, 2465, 2467, 2468, 2469, 2473, 2452, 2453, - 2454, 2474, 2478, 2480, 2481, 2482, 2483, 2484, 2485, 2486, - 2455, 2487, 2456, 2457, 2488, 2458, 2490, 2459, 2460, 2463, - - 2464, 2465, 2467, 2468, 2469, 2473, 1945, 2494, 1941, 2474, - 2501, 2505, 2503, 2482, 2483, 2484, 2485, 2486, 2493, 2487, - 2492, 2494, 2488, 2492, 2490, 2492, 2504, 2478, 2480, 2481, - 2492, 2495, 2507, 2492, 2495, 2493, 2495, 2508, 2509, 2505, - 2496, 2495, 2510, 2496, 2511, 2496, 2512, 2492, 2513, 2494, - 2496, 2497, 2514, 2496, 2497, 2501, 2497, 2503, 2495, 2516, - 2507, 2497, 2517, 2493, 2497, 2508, 2509, 2496, 2518, 2519, - 2510, 2504, 2511, 2520, 2512, 2492, 2513, 2521, 2497, 2522, - 2514, 2523, 2524, 2525, 2526, 2527, 2495, 2516, 2528, 2529, - 2517, 2530, 2531, 2532, 2533, 2496, 2518, 2519, 2534, 2535, - - 2536, 2520, 2537, 2538, 2540, 2521, 2497, 2522, 2542, 2523, - 2524, 2525, 2526, 2527, 2543, 2544, 2528, 2529, 2545, 2530, - 2531, 2532, 2533, 2546, 2547, 2548, 2534, 2535, 2536, 2549, - 2537, 2538, 2540, 2556, 2551, 2551, 2542, 2551, 2554, 2554, - 2557, 2554, 2543, 2544, 2558, 2559, 2545, 2562, 2563, 2564, - 2562, 2546, 2547, 2548, 2565, 2566, 2567, 2549, 2568, 2569, - 2570, 2556, 2571, 2572, 2573, 2571, 2575, 2571, 2557, 2576, - 2577, 2578, 2558, 2559, 2579, 2583, 2563, 2564, 2584, 2585, - 1939, 2586, 2565, 2566, 2567, 2587, 2568, 2569, 2570, 2551, - 2588, 2572, 2573, 2554, 2575, 2592, 2594, 2576, 2577, 2578, - - 2595, 2596, 2579, 2583, 2551, 2597, 2584, 2585, 2554, 2586, - 2590, 2591, 2590, 2587, 2591, 2599, 2600, 2601, 2588, 2602, - 2603, 2604, 2602, 2592, 2594, 2605, 2606, 2607, 2595, 2596, - 2609, 2610, 2611, 2597, 2613, 2611, 2617, 2611, 2590, 2603, - 2590, 2612, 2612, 2599, 2600, 2601, 2619, 2615, 2603, 2604, - 2615, 2620, 2615, 2605, 2606, 2607, 2621, 2622, 2609, 2610, - 2623, 2624, 2613, 2625, 2617, 2626, 2628, 2603, 2629, 2612, - 2612, 2630, 2631, 2632, 2619, 2633, 2634, 2635, 2636, 2620, - 2637, 2638, 2639, 2640, 2621, 2622, 2641, 2644, 2623, 2624, - 2645, 2625, 2646, 2626, 2628, 2647, 2629, 2648, 2649, 2630, - - 2631, 2632, 2650, 2633, 2634, 2635, 2636, 2651, 2637, 2638, - 2639, 2640, 2652, 2654, 2641, 2644, 2655, 2656, 2645, 2657, - 2646, 2658, 2659, 2647, 2661, 2648, 2649, 2662, 2663, 2665, - 2650, 2666, 2667, 2668, 2669, 2651, 2670, 2671, 2672, 2674, - 2652, 2654, 2675, 2676, 2655, 2656, 2677, 2657, 2678, 2658, - 2659, 2679, 2661, 2697, 2682, 2662, 2663, 2665, 1911, 2666, - 2667, 2668, 2669, 2769, 2670, 2689, 2769, 2674, 2682, 2698, - 2675, 2676, 2686, 2687, 2677, 2683, 2678, 1895, 2683, 2679, - 2683, 2684, 2671, 2672, 2684, 2683, 2684, 2699, 2683, 2686, - 2687, 2684, 2688, 2689, 2684, 2688, 2682, 2700, 2697, 1894, - - 2690, 2691, 2683, 2690, 2691, 2690, 2691, 1891, 2684, 2688, - 2690, 2691, 2701, 2690, 2698, 2699, 2692, 2686, 2687, 2692, - 2703, 2692, 2704, 1855, 2705, 2700, 2692, 2690, 2691, 2692, - 2683, 1824, 2694, 2706, 2707, 2694, 2684, 2694, 2708, 2709, - 2701, 2695, 2694, 2692, 2695, 2694, 2695, 2710, 2703, 2711, - 2704, 2695, 2705, 2712, 2695, 2690, 2691, 2713, 2714, 2694, - 2715, 2706, 2707, 2716, 2717, 2718, 2708, 2709, 2695, 2719, - 2721, 2692, 2722, 2723, 2724, 2710, 2725, 2711, 2726, 2727, - 2728, 2712, 2729, 2730, 2731, 2713, 2714, 2694, 2715, 2732, - 2733, 2716, 2717, 2718, 2735, 2736, 2695, 2719, 2721, 2737, - - 2722, 2723, 2724, 2738, 2725, 2739, 2726, 2727, 2728, 2740, - 2729, 2730, 2731, 2742, 2743, 2747, 2748, 2732, 2733, 2749, - 2750, 2751, 2735, 2736, 2752, 2753, 2754, 2737, 2757, 2758, - 2759, 2738, 2760, 2739, 2761, 2762, 2763, 2740, 2766, 2767, - 2768, 2742, 2743, 2747, 2748, 2772, 2773, 2749, 2750, 2751, - 2778, 2776, 2752, 2753, 2754, 2777, 2757, 2758, 2759, 1755, - 2760, 1754, 2761, 2762, 2763, 2780, 2766, 2767, 2768, 2770, - 2781, 2782, 2770, 2772, 2773, 2775, 2779, 2783, 2775, 2776, - 2785, 2778, 2786, 2777, 2779, 2784, 2787, 2779, 2784, 2779, - 2784, 2788, 2789, 2780, 2790, 2791, 2792, 2795, 2781, 2782, - - 2796, 2797, 2801, 2802, 2779, 2783, 2804, 2806, 2785, 2778, - 2786, 2807, 2779, 2808, 2787, 2779, 2809, 2779, 2806, 2788, - 2789, 2810, 2790, 2791, 2792, 2795, 2811, 2812, 2796, 2797, - 2801, 2802, 2813, 2816, 2804, 2817, 2818, 2819, 2820, 2807, - 2821, 2808, 2822, 2823, 2809, 2824, 2825, 2816, 2826, 2810, - 2827, 2821, 2828, 2829, 2811, 2812, 2830, 2831, 2832, 2834, - 2813, 2816, 2835, 2817, 2818, 2819, 2820, 2836, 2837, 2838, - 2822, 2823, 2839, 2824, 2825, 2840, 2826, 2841, 2827, 2842, - 2828, 2829, 2843, 2844, 2830, 2831, 2832, 2834, 2845, 2846, - 2835, 2847, 2848, 2849, 2850, 2836, 2837, 2838, 2851, 2852, - - 2839, 2853, 2854, 2840, 2855, 2841, 2857, 2842, 2859, 2878, - 2843, 2844, 2878, 2881, 2884, 2938, 2845, 2846, 2938, 2847, - 2848, 2849, 2850, 2858, 2857, 2859, 2858, 2852, 2858, 2853, - 2854, 2867, 2855, 2858, 2857, 2861, 2858, 1753, 2861, 2886, - 2861, 2862, 2884, 2851, 2862, 2861, 2862, 2868, 2867, 2887, - 2858, 2862, 2857, 2859, 2862, 2869, 2863, 2870, 2881, 2863, - 2864, 2863, 2861, 2864, 2868, 2864, 2863, 2886, 2862, 2863, - 2864, 2888, 2869, 2864, 2870, 2889, 2867, 2887, 2858, 1726, - 1723, 2872, 2890, 2863, 2872, 2944, 2872, 2864, 2944, 1714, - 2861, 2872, 2868, 2891, 2872, 2958, 2862, 1710, 2958, 2888, - - 2869, 2980, 2870, 2889, 2874, 2892, 1708, 2874, 2872, 2874, - 2890, 2863, 2980, 2875, 2874, 2864, 2875, 2874, 2875, 2876, - 1706, 2891, 2876, 2875, 2876, 2877, 2875, 2893, 2877, 2876, - 2877, 2874, 2895, 2892, 2879, 2877, 2872, 2879, 2880, 2879, - 2875, 2880, 2896, 2880, 2879, 2898, 2876, 2879, 2880, 2900, - 2902, 2880, 2877, 2903, 2904, 2893, 2906, 2907, 2908, 2874, - 2895, 2879, 2909, 2910, 2911, 2880, 2912, 2913, 2875, 2914, - 2896, 2915, 2916, 2898, 2876, 2920, 2921, 2900, 2902, 2922, - 2877, 2903, 2904, 2924, 2906, 2907, 2908, 2925, 2926, 2879, - 2909, 2910, 2911, 2880, 2912, 2913, 2927, 2914, 2928, 2915, - - 2916, 2929, 2931, 2920, 2921, 2933, 2934, 2922, 2935, 2936, - 2937, 2924, 2939, 2941, 2942, 2925, 2926, 2943, 2945, 2948, - 2949, 2945, 2951, 2945, 2927, 2952, 2928, 2953, 2954, 2929, - 2931, 2955, 2956, 2933, 2934, 2957, 2935, 2936, 2937, 2962, - 2939, 2941, 2942, 2956, 2956, 2943, 2961, 2948, 2949, 2961, - 2951, 2961, 2963, 2952, 2959, 2953, 2954, 2964, 2959, 2955, - 2956, 2965, 2966, 2957, 2965, 2959, 2967, 2962, 2968, 2969, - 2971, 2956, 2956, 2972, 2973, 2977, 2978, 2981, 2983, 2984, - 2963, 2985, 2959, 2986, 2987, 2964, 2959, 2988, 2989, 2990, - 2966, 2991, 2991, 2959, 2967, 2992, 2968, 2969, 2971, 2993, - - 2994, 2972, 2973, 2977, 2978, 2981, 2983, 2984, 2995, 2985, - 2996, 2986, 2987, 2997, 2999, 2988, 2989, 2990, 3000, 2991, - 2991, 3001, 3002, 2992, 3003, 3004, 3005, 2993, 2994, 3006, - 3008, 3010, 3007, 3009, 3012, 3013, 2995, 3014, 2996, 3016, - 3018, 2997, 2999, 3007, 3009, 1696, 3000, 3019, 3020, 3001, - 3002, 3022, 3003, 3004, 3005, 3023, 3024, 3006, 3008, 3010, - 3025, 3026, 3012, 3013, 3028, 3014, 3029, 3016, 3018, 3032, - 3030, 3033, 3039, 3007, 3009, 3019, 3020, 3035, 3037, 3022, - 3035, 1654, 3035, 3023, 3024, 3030, 3045, 3035, 3025, 3026, - 3035, 3046, 3028, 3038, 3029, 3037, 3038, 3032, 3030, 3033, - - 3039, 1644, 3040, 3045, 3035, 3040, 3041, 3040, 3046, 3041, - 1574, 3041, 3040, 3030, 3042, 3040, 3041, 3042, 3049, 3042, - 1569, 3049, 1567, 3037, 3042, 3043, 3054, 3042, 3043, 3040, - 3043, 3045, 3035, 3041, 3055, 3043, 3046, 3048, 3043, 3056, - 3048, 3042, 3048, 3050, 3058, 3060, 3050, 3048, 3050, 3062, - 3048, 3063, 3043, 3050, 3054, 3051, 3050, 3040, 3051, 3064, - 3051, 3041, 3055, 3065, 3048, 3051, 3067, 3056, 3051, 3042, - 3050, 3068, 3058, 3060, 3069, 3070, 3071, 3062, 3072, 3063, - 3043, 3073, 3051, 3074, 3076, 3077, 3078, 3064, 3079, 3081, - 3082, 3065, 3048, 3083, 3067, 3084, 3085, 3086, 3050, 3068, - - 3086, 3087, 3069, 3070, 3071, 3088, 3072, 3089, 3091, 3073, - 3051, 3074, 3076, 3077, 3078, 3092, 3079, 3081, 3082, 3093, - 3094, 3083, 3095, 3084, 3085, 3098, 3628, 3102, 3098, 3087, - 3102, 1545, 3097, 3088, 3096, 3089, 3091, 3096, 3100, 3104, - 3105, 3106, 3104, 3092, 3104, 3108, 3109, 3093, 3094, 3110, - 3095, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, - 3097, 3111, 3112, 3113, 3114, 3115, 3100, 3116, 3105, 3106, - 1541, 1525, 3125, 3108, 3109, 3125, 3628, 3110, 3118, 3117, - 3119, 3120, 3117, 3122, 3123, 3124, 3126, 3127, 3128, 3111, - 3112, 3113, 3114, 3115, 3129, 3116, 3117, 3117, 3117, 3117, - - 3117, 3117, 3117, 3117, 3117, 3131, 3118, 3132, 3119, 3120, - 3133, 3122, 3123, 3124, 3126, 3127, 3128, 3135, 3136, 3138, - 3139, 3140, 3129, 3142, 3143, 3145, 3146, 3147, 3148, 3149, - 3150, 3152, 3153, 3131, 3154, 3132, 3155, 3157, 3133, 3158, - 3159, 3160, 3162, 3164, 3167, 3135, 3136, 3138, 3139, 3140, - 3170, 3142, 3143, 3145, 3146, 3147, 3148, 3149, 3150, 3152, - 3153, 3170, 3154, 1524, 3155, 3157, 3171, 3158, 3159, 3160, - 3162, 3164, 3167, 3173, 3175, 3176, 3177, 3178, 3179, 3180, - 3181, 3183, 3184, 3185, 3186, 3187, 3188, 3273, 1521, 3223, - 3192, 3170, 3223, 3192, 3171, 3192, 3187, 1467, 3273, 3190, - - 3192, 3173, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3183, - 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3192, 3189, 3254, - 3189, 3195, 3254, 3388, 3187, 3189, 3193, 3194, 3189, 3193, - 3194, 3193, 3194, 1466, 3388, 1459, 3193, 3194, 3195, 1458, - 3194, 3201, 3189, 1457, 3190, 3192, 3196, 3197, 3202, 3196, - 3197, 3196, 3197, 3193, 3194, 3203, 3196, 3197, 3199, 3196, - 3197, 3199, 3200, 3199, 3204, 3200, 3195, 3200, 3199, 3201, - 3189, 3199, 3200, 3196, 3197, 3200, 3202, 3205, 3207, 3208, - 3209, 3193, 3194, 3203, 3211, 3199, 3212, 3213, 3214, 3200, - 3215, 3216, 3204, 3219, 3220, 3221, 3222, 3224, 3225, 1402, - - 3228, 3196, 3197, 3229, 1401, 3205, 3207, 3208, 3209, 3230, - 3231, 3232, 3211, 3199, 3212, 3213, 3214, 3200, 3215, 3216, - 3233, 3219, 3220, 3221, 3222, 3224, 3225, 3227, 3228, 3234, - 3227, 3229, 3227, 3235, 1390, 1366, 1365, 3230, 3231, 3232, - 3393, 3242, 3262, 3237, 3242, 3262, 3266, 3268, 3233, 3266, - 3268, 3393, 1361, 3239, 3241, 3238, 3244, 3234, 3238, 1360, - 3245, 3235, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, - 3236, 3237, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, - 3238, 3239, 3241, 3246, 3244, 3247, 3248, 3242, 3245, 3249, - 3250, 3251, 3252, 3253, 3253, 3253, 3253, 3253, 3253, 3253, - - 3253, 3253, 3255, 3256, 3258, 3259, 3260, 3263, 3264, 3265, - 3267, 3246, 3269, 3247, 3248, 3242, 3270, 3249, 3250, 3251, - 3252, 3271, 3272, 3274, 3275, 3276, 3277, 3279, 3280, 3281, - 3255, 3256, 3258, 3259, 3260, 3263, 3264, 3265, 3267, 3282, - 3269, 3283, 3287, 3288, 3270, 3289, 3290, 3293, 3294, 3271, - 3272, 3274, 3275, 3276, 3277, 3279, 3280, 3281, 3295, 3298, - 3296, 3300, 3301, 3302, 3303, 3304, 3305, 3282, 3296, 3283, - 3287, 3288, 3306, 3289, 3290, 3293, 3294, 3307, 3309, 3310, - 3311, 3312, 3313, 3314, 3316, 1359, 3295, 3298, 3296, 3300, - 3301, 3302, 3303, 3304, 3305, 3318, 3296, 1358, 3318, 3321, - - 3306, 3316, 3322, 3649, 1357, 3307, 3309, 3310, 3311, 3312, - 3313, 3314, 3315, 3317, 3649, 3315, 3317, 3315, 3317, 3323, - 3324, 3325, 3315, 3317, 3328, 3315, 3317, 3321, 3319, 3316, - 3322, 3319, 3320, 3319, 3330, 3320, 3332, 3320, 3319, 3315, - 3317, 3319, 3320, 3333, 3334, 3320, 3335, 3323, 3324, 3325, - 3336, 3338, 3328, 3340, 3341, 3319, 3340, 3344, 3345, 3320, - 3346, 3347, 3330, 3369, 3332, 1355, 3369, 3315, 3317, 1324, - 1320, 3333, 3334, 3339, 3335, 1291, 3339, 3370, 3336, 3338, - 3370, 3371, 3341, 3319, 3371, 3344, 3345, 3320, 3346, 3347, - 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3342, - - 3342, 3342, 3342, 3342, 3342, 3342, 3342, 3342, 3342, 3342, - 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, - 3343, 3348, 3349, 3350, 3342, 3351, 3352, 3354, 3356, 3358, - 3360, 3361, 3362, 3363, 3630, 3343, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3357, 3364, 3365, 3357, 3348, - 3349, 3350, 3366, 3351, 3352, 3354, 3356, 3358, 3360, 3361, - 3362, 3363, 3357, 3357, 3357, 3357, 3357, 3357, 3357, 3357, - 3357, 3367, 3372, 3373, 3364, 3365, 3374, 3375, 3376, 3374, - 3366, 3377, 3378, 3379, 3630, 3378, 3379, 3417, 1283, 3417, - 1281, 3382, 3384, 3380, 3386, 3390, 3380, 3391, 3392, 3367, - - 3372, 3373, 3394, 3395, 1276, 3375, 3376, 3397, 3398, 3377, - 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3382, - 3384, 3399, 3386, 3390, 3396, 3391, 3392, 3400, 3401, 3402, - 3394, 3395, 3396, 3396, 3403, 3397, 3398, 3404, 3405, 3406, - 3407, 3408, 3409, 3410, 3412, 3413, 3414, 3415, 3416, 3399, - 3418, 3419, 3396, 3420, 3422, 3400, 3401, 3402, 3423, 3417, - 3396, 3396, 3403, 3425, 3426, 3404, 3405, 3406, 3407, 3408, - 3409, 3410, 3412, 3413, 3414, 3415, 3416, 3427, 3418, 3419, - 3424, 3420, 3422, 3424, 3429, 3424, 3423, 3431, 3435, 3437, - 3424, 3425, 3426, 3424, 3438, 3438, 3438, 3438, 3438, 3438, - - 3438, 3438, 3438, 3439, 3442, 3427, 3439, 3424, 3439, 3443, - 3440, 1271, 3429, 3440, 3441, 3431, 3435, 3437, 1214, 1213, - 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3444, - 3445, 3446, 3442, 3447, 3448, 3424, 3450, 3443, 3441, 3441, - 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3451, - 3454, 3455, 3456, 3457, 1212, 3459, 3460, 3444, 3445, 3446, - 3461, 3447, 3448, 3441, 3450, 3453, 3453, 3453, 3453, 3453, - 3453, 3453, 3453, 3453, 3462, 3467, 3468, 3451, 3454, 3455, - 3456, 3457, 3458, 3459, 3460, 3458, 3464, 3465, 3461, 3464, - 3465, 3466, 3465, 3470, 3466, 3469, 3466, 3471, 3469, 3472, - - 3469, 1211, 3462, 3467, 3468, 3474, 3523, 3650, 3474, 3523, - 3477, 3458, 3475, 3531, 3535, 3475, 3531, 3535, 3650, 1210, - 1209, 3470, 3481, 3482, 3483, 3471, 3484, 3472, 3481, 3475, - 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3477, 3458, - 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3486, - 3481, 3482, 3483, 3487, 3484, 3488, 3481, 3489, 3490, 3491, - 3493, 3496, 3498, 3499, 3500, 3501, 3502, 3505, 3506, 3508, - 3509, 3548, 1205, 1204, 3548, 3551, 3548, 3486, 3551, 1203, - 3551, 3487, 3511, 3488, 3512, 3489, 3490, 3491, 3493, 3496, - 3498, 3499, 3500, 3501, 3502, 3505, 3506, 3508, 3509, 3510, - - 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, - 3511, 3513, 3512, 3516, 3517, 3518, 3519, 3521, 3522, 3606, - 3609, 1189, 3606, 3609, 3510, 3524, 3524, 3524, 3524, 3524, - 3524, 3524, 3524, 3524, 3528, 3529, 3530, 3532, 3533, 3513, - 3534, 3516, 3517, 3518, 3519, 3521, 3522, 3525, 3525, 3525, - 3525, 3525, 3525, 3525, 3525, 3525, 3526, 3536, 3537, 3526, - 3538, 3540, 3528, 3529, 3530, 3532, 3533, 3542, 3534, 3543, - 3544, 3546, 3553, 3526, 3526, 3526, 3526, 3526, 3526, 3526, - 3526, 3526, 3554, 3556, 3541, 3536, 3537, 3541, 3538, 3540, - 3545, 1187, 3557, 3545, 3558, 3542, 3563, 3543, 3544, 3546, - - 3553, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, - 3554, 3556, 3559, 1182, 3718, 1154, 3564, 3565, 3560, 3545, - 3557, 3560, 3558, 3697, 3563, 3718, 3559, 3559, 3559, 3559, - 3559, 3559, 3559, 3559, 3559, 3560, 3560, 3560, 3560, 3560, - 3560, 3560, 3560, 3560, 3564, 3565, 3567, 3545, 3561, 3561, - 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3569, 3570, 3571, - 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, - 3582, 3585, 3589, 3697, 3567, 3604, 3604, 3604, 3604, 3604, - 3604, 3604, 3604, 3604, 3591, 3569, 3570, 3571, 3572, 3573, - 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3585, - - 3589, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, - 3590, 3590, 3591, 3592, 3593, 3596, 3598, 3599, 3602, 3612, - 3602, 3602, 3612, 3602, 3612, 1150, 3590, 3605, 3607, 3743, - 3611, 3602, 3743, 3613, 3603, 3614, 3615, 3616, 3618, 3619, - 3622, 3592, 3593, 3596, 3598, 3599, 3603, 3603, 3603, 3603, - 3603, 3603, 3603, 3603, 3603, 3605, 3607, 3608, 3611, 3744, - 3608, 3613, 3744, 3614, 3615, 3616, 3618, 3619, 3622, 3623, - 3626, 3631, 1140, 3632, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3617, 3617, 3617, 3617, 3617, 3617, 3617, - 3617, 3617, 3621, 3633, 1129, 3621, 3627, 3623, 3626, 3631, - - 3627, 3632, 3602, 3635, 3636, 3637, 3639, 3627, 1127, 3621, - 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3640, 3641, - 3642, 3633, 3634, 3643, 3627, 3644, 3645, 3646, 3627, 3647, - 3648, 3635, 3636, 3637, 3639, 3627, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3634, 3651, 3640, 3641, 3642, 3653, - 3659, 3643, 3661, 3644, 3645, 3646, 3663, 3647, 3648, 3665, - 1125, 3666, 3672, 3666, 3666, 3673, 3666, 3674, 3673, 3783, - 3673, 1124, 3783, 3651, 3666, 1110, 3676, 3653, 3659, 3676, - 3661, 3676, 3681, 3667, 3663, 3667, 3667, 3665, 3667, 3679, - 3672, 3682, 3679, 3683, 3679, 3674, 3667, 3675, 3675, 3675, - - 3675, 3675, 3675, 3675, 3675, 3675, 3684, 3685, 3686, 3688, - 3681, 3689, 3692, 3693, 3694, 3695, 3699, 1109, 3700, 3682, - 3701, 3683, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, - 3687, 3702, 3703, 3704, 3684, 3685, 3686, 3688, 3705, 3689, - 3692, 3693, 3694, 3695, 3699, 3666, 3700, 3706, 3701, 3707, - 3709, 3710, 3711, 3713, 3714, 3717, 3722, 3724, 3725, 3702, - 3703, 3704, 3728, 3732, 3735, 3730, 3705, 3667, 3730, 3725, - 3730, 3736, 3737, 3738, 3739, 3706, 3740, 3707, 3709, 3710, - 3711, 3713, 3714, 3717, 3722, 3724, 3725, 3741, 3742, 3745, - 3728, 3742, 3735, 3746, 3747, 3748, 3749, 3725, 3751, 3736, - - 3737, 3738, 3739, 3752, 3740, 3754, 3755, 3772, 3756, 3757, - 3758, 3759, 3760, 3732, 3764, 3741, 3774, 3745, 3765, 3766, - 3767, 3746, 3769, 3748, 3749, 3776, 3751, 3777, 3779, 1105, - 3780, 3752, 3781, 3754, 3755, 3742, 3756, 3757, 3758, 3759, - 3760, 3782, 3764, 3784, 3747, 3789, 3765, 3766, 3767, 3785, - 3769, 3790, 3785, 3776, 3785, 3777, 3779, 3772, 3780, 3786, - 3781, 3791, 3786, 3742, 3786, 3787, 3774, 3788, 3787, 3782, - 3788, 3784, 3792, 3789, 3793, 3796, 3797, 3798, 3799, 3790, - 3800, 3801, 3804, 3805, 3808, 3810, 3805, 3811, 3812, 3791, - 3814, 3815, 3817, 3818, 3819, 3817, 3841, 3819, 3843, 3819, - - 3792, 3843, 3793, 3796, 3797, 3798, 3799, 3826, 3800, 3801, - 3804, 3828, 3829, 3810, 3830, 3811, 3812, 3821, 3814, 3815, - 3821, 3818, 3821, 3823, 3824, 3832, 3823, 3824, 3823, 3824, - 3833, 3834, 3835, 3836, 3808, 3826, 3837, 3842, 3840, 3828, - 3829, 3840, 3830, 3840, 3844, 3845, 3841, 3837, 3845, 3847, - 3837, 3850, 3852, 3832, 3850, 3852, 3850, 3852, 3833, 3834, - 3835, 3836, 3855, 3856, 3837, 3842, 3857, 3858, 3859, 3860, - 3861, 3862, 3844, 3863, 3864, 3837, 3865, 3847, 3837, 3869, - 3871, 1104, 3869, 3873, 3869, 3875, 3873, 3880, 3881, 1103, - 3855, 3856, 1102, 1101, 3857, 3858, 3859, 3860, 3861, 3862, - - 3872, 3863, 3864, 3872, 3865, 1061, 1009, 3882, 3871, 3874, - 3885, 3887, 3874, 3875, 3888, 3880, 3881, 3872, 3872, 3872, - 3872, 3872, 3872, 3872, 3872, 3872, 3874, 3874, 3874, 3874, - 3874, 3874, 3874, 3874, 3874, 3882, 3889, 3890, 3885, 3887, - 3897, 1008, 3888, 3894, 3894, 3894, 3894, 3894, 3894, 3894, - 3894, 3894, 3895, 988, 975, 3895, 964, 944, 927, 3900, - 3901, 3902, 3905, 3906, 3889, 3890, 902, 890, 3897, 3895, - 3895, 3895, 3895, 3895, 3895, 3895, 3895, 3895, 3896, 3896, - 3896, 3896, 3896, 3896, 3896, 3896, 3896, 3900, 3901, 3902, - 3905, 3906, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, - - 3909, 3913, 3916, 3917, 3918, 3919, 3920, 3922, 3923, 3924, - 879, 877, 875, 871, 827, 816, 807, 803, 772, 771, - 769, 768, 767, 765, 760, 759, 757, 756, 755, 3913, - 3916, 3917, 3918, 3919, 3920, 3922, 3923, 3924, 3927, 3927, - 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, - 3927, 3927, 3927, 3927, 3927, 3927, 3928, 3928, 3928, 3928, - 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, - 3928, 3928, 3928, 3928, 3929, 3929, 3929, 3929, 3929, 3929, - 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, - 3929, 3929, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, - - 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, - 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, - 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3932, 3932, - 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, - 3932, 3932, 3932, 3932, 3932, 3932, 3933, 3933, 3933, 3933, - 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, - 3933, 3933, 3933, 3933, 3934, 3934, 3934, 3934, 3934, 3934, - 3934, 3934, 3934, 3934, 3934, 3934, 3934, 3934, 3934, 3934, - 3934, 3934, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, - 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, - - 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, - 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3937, 3937, - 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, - 3937, 3937, 3937, 3937, 3937, 3937, 3938, 3938, 3938, 3938, + 713, 713, 718, 724, 718, 720, 726, 725, 718, 722, + 727, 728, 713, 719, 725, 721, 732, 740, 720, 727, + 740, 743, 723, 908, 743, 713, 713, 722, 713, 713, + 718, 724, 718, 720, 726, 725, 718, 722, 727, 728, + + 753, 729, 725, 729, 732, 729, 738, 727, 761, 738, + 739, 738, 762, 739, 741, 739, 3167, 741, 744, 741, + 3145, 744, 746, 744, 763, 746, 764, 746, 753, 729, + 908, 729, 747, 729, 748, 747, 761, 748, 750, 748, + 762, 750, 751, 750, 752, 751, 774, 752, 758, 752, + 766, 758, 763, 766, 764, 775, 770, 776, 766, 770, + 777, 770, 778, 780, 770, 781, 782, 783, 784, 785, + 3145, 3162, 766, 787, 774, 786, 790, 787, 770, 791, + 789, 787, 786, 775, 785, 776, 792, 785, 777, 786, + 778, 780, 795, 781, 782, 783, 784, 785, 758, 789, + + 766, 787, 788, 786, 790, 787, 770, 791, 789, 787, + 786, 794, 785, 793, 792, 785, 788, 786, 788, 796, + 795, 796, 797, 798, 799, 801, 794, 789, 801, 793, + 788, 802, 804, 806, 809, 810, 811, 812, 813, 794, + 814, 793, 802, 815, 788, 817, 788, 796, 818, 796, + 797, 798, 799, 819, 794, 820, 821, 793, 822, 824, + 804, 806, 809, 810, 811, 812, 813, 825, 814, 826, + 828, 815, 802, 817, 829, 831, 818, 830, 832, 834, + 835, 819, 834, 820, 821, 836, 822, 824, 830, 837, + 838, 839, 840, 841, 842, 825, 843, 826, 828, 830, + + 844, 846, 829, 831, 847, 849, 832, 848, 835, 850, + 851, 852, 853, 836, 854, 848, 855, 837, 838, 839, + 840, 841, 842, 856, 843, 863, 911, 830, 844, 846, + 863, 997, 847, 849, 858, 848, 858, 850, 851, 852, + 853, 870, 854, 848, 855, 859, 861, 864, 859, 861, + 864, 856, 870, 859, 862, 859, 999, 862, 865, 862, + 3058, 865, 862, 865, 866, 874, 865, 866, 3132, 3118, + 882, 865, 863, 911, 867, 867, 874, 867, 997, 867, + 881, 858, 3072, 881, 867, 881, 915, 867, 881, 882, + 867, 916, 1523, 888, 917, 909, 861, 864, 909, 888, + + 859, 867, 3058, 999, 1004, 872, 872, 918, 872, 862, + 872, 912, 919, 865, 915, 1004, 912, 882, 872, 916, + 870, 872, 917, 883, 914, 1572, 883, 914, 883, 867, + 881, 883, 872, 883, 889, 918, 883, 1523, 884, 883, + 919, 884, 889, 884, 910, 909, 884, 910, 884, 910, + 883, 884, 910, 889, 884, 920, 921, 3070, 867, 867, + 872, 885, 3068, 912, 885, 884, 885, 888, 924, 885, + 1572, 885, 978, 925, 885, 978, 928, 885, 883, 914, + 3064, 889, 891, 920, 921, 891, 931, 891, 885, 872, + 872, 979, 887, 884, 979, 887, 924, 887, 891, 910, + + 887, 925, 887, 913, 928, 887, 913, 883, 887, 891, + 889, 913, 1713, 2881, 931, 892, 885, 1320, 892, 887, + 892, 1269, 884, 892, 893, 892, 932, 893, 892, 893, + 2881, 892, 1269, 894, 3055, 933, 894, 891, 894, 998, + 893, 894, 892, 894, 998, 885, 894, 887, 1699, 894, + 981, 893, 935, 981, 932, 936, 1320, 1713, 913, 896, + 894, 3047, 896, 933, 896, 3038, 891, 896, 897, 896, + 892, 897, 896, 897, 937, 896, 897, 3028, 897, 893, + 935, 897, 898, 936, 897, 898, 896, 898, 894, 900, + 898, 998, 900, 906, 900, 897, 906, 900, 906, 892, + + 922, 906, 937, 906, 898, 922, 906, 893, 939, 906, + 940, 900, 941, 942, 896, 1699, 907, 922, 943, 907, + 906, 907, 980, 897, 907, 980, 907, 980, 922, 907, + 2987, 982, 898, 922, 982, 2479, 939, 2479, 940, 900, + 941, 942, 945, 907, 946, 922, 943, 947, 906, 929, + 929, 929, 929, 929, 929, 929, 929, 929, 930, 930, + 930, 930, 930, 930, 930, 930, 930, 948, 949, 950, + 945, 907, 946, 951, 953, 947, 952, 906, 954, 952, + 955, 956, 957, 958, 959, 960, 961, 962, 963, 965, + 966, 967, 969, 965, 970, 948, 949, 950, 971, 972, + + 968, 951, 953, 968, 973, 974, 954, 952, 955, 956, + 957, 958, 959, 960, 961, 962, 963, 965, 966, 967, + 969, 965, 970, 977, 2985, 1401, 971, 972, 968, 1001, + 2981, 968, 973, 974, 983, 984, 1401, 983, 984, 983, + 985, 986, 2943, 985, 986, 985, 986, 987, 2904, 988, + 987, 977, 988, 990, 988, 991, 990, 1001, 991, 992, + 991, 993, 992, 1002, 993, 994, 993, 995, 994, 1003, + 995, 996, 995, 1000, 996, 1005, 1000, 1006, 1005, 1007, + 1008, 1012, 1007, 1005, 1007, 1013, 1015, 1007, 1016, 1017, + 1018, 1002, 1019, 1020, 1021, 2893, 1006, 1003, 1022, 1008, + + 1023, 2892, 1024, 1025, 1026, 1026, 1026, 1026, 1027, 1012, + 1029, 1028, 1030, 1013, 1015, 1028, 1016, 1017, 1018, 1031, + 1019, 1020, 1021, 1000, 1006, 1005, 1022, 1008, 1023, 1007, + 1024, 1025, 1026, 1026, 1026, 1026, 1027, 1032, 1029, 1028, + 1030, 1033, 1034, 1028, 1035, 1036, 1037, 1031, 1038, 1039, + 1041, 1040, 1038, 1042, 1038, 1040, 1043, 1044, 1045, 1046, + 1047, 2876, 1050, 1051, 1052, 1032, 1053, 1041, 1054, 1033, + 1034, 1055, 1035, 1036, 1037, 1052, 1038, 1039, 1041, 1040, + 1038, 1042, 1038, 1040, 1043, 1044, 1045, 1046, 1047, 1049, + 1050, 1051, 1056, 1049, 1053, 1041, 1054, 1057, 1058, 1055, + + 1049, 1059, 1049, 1060, 1061, 1052, 1063, 1064, 1065, 1066, + 1067, 1069, 1070, 1071, 2875, 1192, 1073, 1049, 1192, 1074, + 1056, 1049, 1076, 2866, 1077, 1057, 1058, 1078, 1049, 1059, + 1049, 1060, 1061, 2825, 1063, 1064, 1065, 1066, 1067, 1069, + 1070, 1071, 1072, 1072, 1073, 1079, 1072, 1074, 1080, 1081, + 1076, 1072, 1077, 1082, 1083, 1078, 1084, 1072, 1085, 1086, + 1087, 1072, 1088, 1072, 1090, 1091, 1092, 1093, 1094, 1095, + 1072, 1072, 1096, 1079, 1072, 1097, 1080, 1081, 1098, 1072, + 1099, 1082, 1083, 1100, 1084, 1072, 1085, 1086, 1087, 1072, + 1088, 1072, 1090, 1091, 1092, 1093, 1094, 1095, 1101, 1108, + + 1096, 1114, 1108, 1097, 1107, 1107, 1098, 1107, 1099, 1107, + 1113, 1100, 1115, 1113, 2824, 1119, 1756, 1107, 2815, 1112, + 1107, 1127, 1112, 1119, 1112, 1123, 1101, 1112, 1129, 1112, + 2809, 1107, 1112, 1123, 1119, 1112, 2775, 1117, 1121, 1131, + 1117, 1121, 1117, 1121, 1123, 1117, 1112, 1117, 1132, 1127, + 1117, 1115, 2755, 1117, 1121, 1124, 1129, 1134, 1124, 1107, + 1124, 1756, 1119, 1193, 1117, 1121, 1193, 1131, 1114, 1114, + 1108, 1124, 1123, 2705, 1112, 1195, 1132, 1136, 1195, 1577, + 1115, 1113, 1124, 1196, 1137, 1134, 1196, 1139, 1107, 1107, + 1577, 1118, 1117, 1121, 1118, 1140, 1118, 1138, 1142, 1118, + + 1144, 1118, 1145, 1112, 1118, 1136, 1120, 1118, 1146, 1120, + 1124, 1120, 1137, 1138, 1120, 1139, 1120, 1885, 1118, 1120, + 1147, 1117, 1120, 1140, 1122, 1138, 1142, 1122, 1144, 1122, + 1145, 2694, 1122, 1120, 1122, 1148, 1146, 1122, 1152, 1124, + 1122, 1138, 1154, 1157, 1158, 1143, 1118, 1159, 1147, 1160, + 1161, 1122, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1120, 1885, 1148, 1162, 1163, 1152, 1165, 1166, 1167, + 1154, 1157, 1158, 1168, 1169, 1159, 1170, 1160, 1161, 1122, + 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1171, + 1120, 1173, 1162, 1163, 1174, 1165, 1166, 1167, 1172, 1172, + + 1175, 1168, 1169, 1176, 1170, 1178, 1179, 1180, 1181, 1182, + 1183, 1185, 1186, 1187, 1188, 1188, 2690, 1171, 1194, 1173, + 2652, 1194, 1174, 1194, 2651, 2627, 1172, 1172, 1175, 1198, + 2589, 1176, 1198, 1178, 1179, 1180, 1181, 1182, 1183, 1185, + 1186, 1187, 1188, 1188, 1197, 1199, 1204, 1197, 1199, 1197, + 1199, 1200, 1201, 1202, 1200, 1201, 1202, 1201, 1203, 1208, + 1209, 1203, 1210, 1217, 1218, 1219, 1221, 1222, 1224, 1225, + 1226, 1227, 1228, 1229, 1204, 1230, 1231, 1232, 1233, 1234, + 1235, 1236, 1237, 1232, 1238, 1239, 1240, 1208, 1209, 1241, + 1210, 1217, 1218, 1219, 1221, 1222, 1224, 1225, 1226, 1227, + + 1228, 1229, 1242, 1230, 1231, 1232, 1233, 1234, 1235, 1236, + 1237, 1232, 1238, 1239, 1240, 1243, 1244, 1241, 1245, 1246, + 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, + 1242, 1257, 1258, 1260, 1261, 1262, 1263, 1264, 1265, 1268, + 1270, 2562, 1254, 1243, 1244, 1271, 1245, 1246, 1247, 1248, + 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1267, 1257, + 1258, 1260, 1261, 1262, 1263, 1264, 1265, 1268, 1270, 1267, + 1254, 1272, 1274, 1271, 1267, 1267, 1275, 1276, 1277, 1279, + 1280, 1281, 1282, 1284, 1286, 1287, 1267, 1288, 1289, 1290, + 1291, 1292, 1294, 1296, 1289, 1297, 1298, 1267, 1299, 1272, + + 1274, 1300, 1267, 1267, 1275, 1276, 1277, 1279, 1280, 1281, + 1282, 1284, 1286, 1287, 1301, 1288, 1289, 1290, 1291, 1292, + 1294, 1296, 1289, 1297, 1298, 1302, 1299, 1303, 1304, 1300, + 1305, 1306, 1307, 1308, 1310, 1311, 1312, 1313, 1314, 1315, + 1316, 1317, 1301, 1318, 1319, 1323, 1334, 1331, 1396, 1397, + 2559, 1396, 1397, 1302, 1399, 1303, 1304, 1399, 1305, 1306, + 1307, 1308, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, + 1327, 1318, 1324, 1337, 1334, 1324, 1329, 1324, 1327, 1329, + 1324, 1329, 1324, 1319, 1323, 1324, 1331, 1333, 1324, 1327, + 1338, 1400, 1329, 1335, 1400, 1335, 1339, 1340, 1333, 1324, + + 1341, 1337, 1342, 1329, 1343, 2549, 1332, 1344, 1347, 1332, + 1349, 1332, 1319, 1323, 1332, 1350, 1332, 1327, 1338, 1332, + 1351, 1335, 1332, 1335, 1339, 1340, 1354, 1324, 1341, 1352, + 1342, 1329, 1343, 1332, 1346, 1344, 1347, 1346, 1349, 1346, + 1353, 1355, 1356, 1350, 1346, 1358, 1327, 1346, 1351, 1364, + 1366, 1369, 1370, 1371, 1333, 1372, 1354, 1352, 1373, 1374, + 1329, 1332, 1354, 1408, 1575, 2547, 1408, 1575, 1353, 1355, + 1356, 2514, 1375, 1358, 1376, 1377, 1378, 1364, 1366, 1369, + 1370, 1371, 1380, 1372, 1354, 1381, 1373, 1374, 1382, 1346, + 1354, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + + 1375, 1383, 1376, 1377, 1378, 1384, 1386, 1388, 1387, 1389, + 1380, 1390, 1391, 1381, 1387, 1398, 1382, 1402, 1398, 1403, + 1398, 1406, 1407, 1409, 1410, 1411, 1412, 1413, 1414, 1383, + 1415, 1416, 1417, 1384, 1386, 1388, 1387, 1389, 1418, 1390, + 1391, 1420, 1387, 1421, 1419, 1402, 1422, 1403, 1423, 1406, + 1407, 1409, 1410, 1411, 1412, 1413, 1414, 1419, 1415, 1416, + 1417, 1424, 1419, 1425, 1426, 1427, 1418, 1428, 1430, 1420, + 1431, 1421, 1419, 1429, 1422, 1432, 1423, 1433, 1434, 1429, + 1435, 1429, 1436, 1582, 1429, 1419, 1582, 1438, 1582, 1424, + 1419, 1425, 1426, 1427, 1439, 1428, 1430, 1440, 1431, 1441, + + 1437, 1429, 1442, 1432, 1437, 1433, 1434, 1429, 1435, 1429, + 1436, 1437, 1429, 1437, 1437, 1438, 1437, 1443, 1444, 1445, + 1446, 1447, 1439, 1448, 1449, 1440, 1450, 1441, 1437, 1451, + 1442, 1452, 1437, 1453, 1454, 1455, 1456, 1457, 1458, 1437, + 1463, 1437, 1437, 1464, 1437, 1443, 1444, 1445, 1446, 1447, + 1465, 1448, 1449, 1466, 1450, 1467, 1471, 1451, 1472, 1452, + 1468, 1453, 1454, 1455, 1456, 1457, 1458, 1468, 1463, 1475, + 1476, 1464, 1473, 2510, 1477, 1468, 1478, 1479, 1465, 1474, + 1468, 1466, 1480, 1467, 1471, 1473, 1472, 1473, 1468, 1481, + 1474, 1482, 1483, 1484, 1485, 1468, 1486, 1475, 1476, 1487, + + 1473, 1474, 1477, 1468, 1478, 1479, 1488, 1489, 1468, 1490, + 1480, 1491, 1492, 1473, 1490, 1473, 1493, 1481, 1494, 1482, + 1483, 1484, 1485, 1495, 1486, 1496, 1497, 1487, 1498, 1474, + 1499, 1500, 1501, 1502, 1488, 1489, 1504, 1490, 1505, 1491, + 1492, 1504, 1490, 1506, 1493, 1507, 1494, 1508, 1511, 1502, + 2508, 1495, 1512, 1496, 1497, 1509, 1498, 1513, 1499, 1500, + 1501, 1502, 1510, 1509, 1504, 1510, 1505, 1510, 1514, 1504, + 1516, 1506, 1517, 1507, 1509, 1518, 1511, 1502, 1510, 1519, + 1512, 1520, 1521, 1657, 1526, 1513, 2507, 2506, 1529, 1510, + 1757, 2499, 1530, 2006, 1657, 1531, 1514, 1534, 1516, 2487, + + 1517, 1757, 1509, 1518, 2006, 2485, 2484, 1519, 1522, 1520, + 1521, 1522, 1526, 1522, 1508, 1508, 1529, 1510, 1522, 1525, + 1530, 1522, 1525, 1531, 1525, 1534, 1535, 1532, 1537, 1525, + 1539, 1532, 1525, 1532, 1533, 1533, 1533, 1533, 1533, 1533, + 1533, 1533, 1533, 1545, 1546, 1547, 1547, 1547, 1547, 1547, + 1547, 1547, 1547, 1547, 1535, 1532, 1537, 1549, 1539, 1532, + 1550, 1532, 1551, 1522, 1552, 1553, 1554, 1555, 1556, 1557, + 1558, 1545, 1546, 1559, 1525, 1560, 1561, 1562, 1563, 1564, + 1565, 1566, 1567, 1568, 1569, 1549, 1570, 1576, 1550, 1580, + 1551, 1581, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1584, + + 1585, 1559, 1586, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1587, 1570, 1576, 1588, 1580, 1589, 1581, + 1590, 1591, 1592, 1588, 1593, 1594, 1595, 1584, 1585, 1596, + 1586, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, + 1606, 1587, 1607, 1608, 1588, 1609, 1589, 1610, 1590, 1591, + 1592, 1588, 1593, 1594, 1595, 1611, 1612, 1596, 1613, 1597, + 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1614, + 1607, 1608, 1615, 1609, 1616, 1610, 1617, 1618, 1619, 1620, + 1621, 1622, 1623, 1611, 1612, 1624, 1613, 1625, 1626, 1627, + 1628, 1629, 1630, 1631, 1632, 1634, 1635, 1614, 1636, 1638, + + 1615, 1633, 1616, 1639, 1617, 1618, 1619, 1620, 1621, 1622, + 1623, 1640, 1633, 1624, 1897, 1625, 1626, 1627, 1628, 1629, + 1630, 1631, 1632, 1634, 1635, 1641, 1636, 1638, 1642, 1643, + 1644, 1639, 1645, 1646, 1647, 1649, 1650, 1651, 1652, 1640, + 1653, 1654, 1633, 1655, 1659, 1660, 1661, 1663, 1664, 1666, + 1667, 1671, 1672, 1641, 1655, 2483, 1642, 1643, 1644, 1897, + 1645, 1646, 1647, 1649, 1650, 1651, 1652, 1673, 1653, 1654, + 1674, 1655, 1659, 1660, 1661, 1663, 1664, 1666, 1667, 1671, + 1672, 1676, 1655, 1656, 1656, 1677, 1678, 1656, 1679, 1656, + 1680, 1681, 1682, 1656, 1656, 1673, 1683, 1656, 1674, 1684, + + 1685, 1686, 1656, 1687, 1688, 1689, 1690, 1691, 2478, 1676, + 1692, 1656, 1656, 1677, 1678, 1656, 1679, 1656, 1680, 1681, + 1682, 1656, 1656, 1692, 1683, 1656, 1694, 1684, 1685, 1686, + 1656, 1687, 1688, 1689, 1690, 1691, 1693, 1695, 1692, 1693, + 1696, 1697, 1698, 1701, 1702, 1704, 1705, 1706, 1707, 1708, + 1709, 1692, 1715, 1711, 1694, 1719, 1711, 1720, 1711, 1722, + 1723, 1707, 1724, 1711, 1693, 1695, 1711, 1693, 1696, 1697, + 1698, 1701, 1702, 1704, 1705, 1706, 1707, 1708, 1709, 1725, + 1715, 1731, 1734, 1719, 1721, 1720, 1735, 1722, 1723, 1707, + 1724, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + + 1726, 1728, 1726, 1733, 1733, 1736, 1737, 1725, 1711, 1731, + 1734, 1738, 1739, 1728, 1735, 1740, 1741, 1743, 1728, 1732, + 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1726, 1728, + 1726, 1733, 1733, 1736, 1737, 1744, 1746, 1745, 1748, 1738, + 1739, 1728, 1747, 1740, 1741, 1743, 1728, 1745, 1749, 1750, + 1751, 1752, 1753, 1747, 1754, 1755, 1761, 1762, 1745, 1765, + 1766, 1768, 1747, 1744, 1746, 1745, 1748, 1769, 1764, 1770, + 1747, 1764, 1771, 1764, 1772, 1745, 1749, 1750, 1751, 1752, + 1753, 1747, 1754, 1755, 1761, 1762, 1745, 1765, 1766, 1768, + 1747, 1773, 1774, 1775, 1776, 1769, 1777, 1770, 1778, 1779, + + 1771, 1780, 1772, 1781, 1782, 1783, 1784, 1785, 1786, 1787, + 1788, 1789, 1790, 1791, 1792, 1779, 1794, 1795, 1796, 1773, + 1774, 1775, 1776, 1797, 1777, 1793, 1778, 1779, 1793, 1780, + 1798, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, + 1790, 1791, 1792, 1779, 1794, 1795, 1796, 1799, 1800, 1801, + 1802, 1797, 1803, 1804, 1805, 1806, 1807, 1808, 1798, 1809, + 1808, 1810, 1807, 1811, 1812, 1811, 1813, 1814, 1816, 1817, + 1811, 1820, 1821, 1822, 1818, 1799, 1800, 1801, 1802, 1824, + 1803, 1804, 1805, 1806, 1807, 1818, 1825, 1809, 1823, 1810, + 1807, 1811, 1812, 1811, 1813, 1814, 1816, 1817, 1811, 1820, + + 1821, 1822, 1823, 1826, 1827, 1828, 1830, 1824, 1832, 1833, + 1834, 1835, 1836, 1837, 1825, 1818, 1823, 1838, 1840, 1841, + 1842, 1839, 1843, 1844, 1845, 1846, 3202, 2453, 1849, 1850, + 1851, 1826, 1827, 1828, 1830, 1839, 1832, 1833, 1834, 1835, + 1836, 1837, 1853, 3202, 1854, 1838, 1840, 1841, 1842, 1839, + 1843, 1844, 1845, 1846, 1848, 1848, 1849, 1850, 1851, 1859, + 1848, 1861, 1862, 1839, 1863, 1864, 1866, 1867, 1848, 1868, + 1853, 1848, 1854, 1869, 1870, 1871, 1874, 3518, 1877, 3518, + 1878, 1879, 1848, 1848, 1880, 1881, 1882, 1859, 1848, 1861, + 1862, 1883, 1863, 1864, 1866, 1867, 1848, 1868, 1886, 1848, + + 1887, 1869, 1870, 1871, 1874, 1875, 1877, 1875, 1878, 1879, + 1889, 1875, 1880, 1881, 1882, 1884, 1888, 1884, 1890, 1883, + 1891, 1884, 1875, 1888, 1875, 1892, 1886, 1893, 1887, 1894, + 1898, 1901, 1884, 1875, 1884, 1875, 1902, 1903, 1889, 1875, + 1905, 3209, 1906, 1884, 1888, 1884, 1890, 2073, 1891, 1884, + 1875, 1888, 1875, 1892, 1908, 1893, 1895, 1894, 1909, 1895, + 1884, 1895, 1884, 1910, 1902, 1903, 1895, 1912, 1905, 1895, + 1906, 1907, 1913, 1907, 1914, 1898, 1901, 1917, 1918, 1920, + 1921, 1922, 1908, 3209, 2442, 1923, 1909, 1924, 1925, 1926, + 1927, 1910, 2073, 1967, 2086, 1912, 1967, 2086, 2432, 1907, + + 1913, 1907, 1914, 2430, 1929, 1917, 1918, 1920, 1921, 1922, + 1930, 1895, 1915, 1923, 1931, 1924, 1925, 1926, 1927, 1915, + 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1932, 1928, + 1933, 1915, 1929, 1915, 1915, 1915, 1928, 1934, 1930, 1915, + 1935, 1936, 1931, 1937, 1915, 1938, 1939, 1940, 1941, 1942, + 1943, 1950, 1936, 1915, 2414, 2398, 1932, 1928, 1933, 1915, + 2359, 1915, 1915, 1915, 1928, 1934, 1952, 1915, 1935, 1936, + 1953, 1937, 1915, 1938, 1939, 1940, 1941, 1942, 1943, 1950, + 1936, 1915, 1946, 1946, 1946, 1946, 1948, 1948, 1948, 1948, + 1954, 1955, 1956, 1957, 1952, 1958, 1959, 1960, 1953, 1961, + + 1962, 1963, 1964, 1965, 1968, 1969, 1970, 1971, 1972, 2357, + 1973, 1974, 1976, 2343, 1977, 1978, 1979, 2301, 1954, 1955, + 1956, 1957, 2299, 1958, 1959, 1960, 1981, 1961, 1962, 1963, + 1964, 1965, 1968, 1969, 1970, 1971, 1972, 1946, 1973, 1974, + 1976, 1948, 1977, 1978, 1979, 1980, 1982, 1983, 1980, 1984, + 1980, 1985, 1986, 1987, 1981, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1996, 1999, 1996, 2000, + 2001, 2002, 2003, 2004, 1982, 1983, 2005, 1984, 2008, 1985, + 1986, 1987, 2009, 1988, 1989, 1990, 1991, 1992, 1993, 1994, + 1995, 2010, 1997, 1998, 2011, 1999, 2012, 2000, 2001, 2002, + + 2003, 2004, 2013, 2014, 2005, 2015, 2008, 2016, 2017, 2018, + 2009, 2165, 2298, 2020, 2165, 2021, 2165, 2201, 2022, 2010, + 2201, 2297, 2011, 2023, 2012, 2024, 2025, 3597, 2026, 3597, + 2013, 2014, 2027, 2015, 2028, 2016, 2017, 2018, 2019, 2019, + 2019, 2020, 2019, 2021, 2019, 2019, 2022, 2029, 2019, 2019, + 2019, 2023, 2030, 2024, 2025, 2019, 2026, 2019, 2031, 2032, + 2027, 2033, 2028, 2034, 2035, 2036, 2019, 2019, 2019, 2037, + 2019, 2038, 2019, 2019, 2039, 2029, 2019, 2019, 2019, 2040, + 2030, 2041, 2042, 2019, 2043, 2019, 2031, 2032, 2044, 2033, + 2045, 2034, 2035, 2036, 2048, 2049, 2050, 2037, 2051, 2038, + + 2056, 2057, 2039, 2058, 2059, 2060, 2061, 2040, 2062, 2041, + 2042, 2063, 2043, 2064, 2067, 2064, 2044, 2068, 2045, 2071, + 2074, 2075, 2048, 2049, 2050, 2072, 2051, 2072, 2056, 2057, + 2076, 2058, 2059, 2060, 2061, 2077, 2062, 2088, 2089, 2063, + 2078, 2064, 2067, 2064, 2079, 2068, 2080, 2071, 2081, 2082, + 2083, 2084, 2085, 2072, 2090, 2072, 2093, 2094, 2076, 2095, + 2096, 2097, 2098, 2077, 2099, 2074, 2075, 2100, 2078, 2101, + 2105, 2283, 2079, 2102, 2080, 2102, 2081, 2082, 2083, 2084, + 2085, 2281, 2088, 2089, 2093, 2094, 2106, 2095, 2096, 2097, + 2098, 2177, 2099, 2107, 2177, 2100, 2177, 2101, 2105, 2090, + + 2109, 2102, 2110, 2102, 2103, 2103, 2103, 2103, 2103, 2103, + 2103, 2103, 2103, 2111, 2106, 2113, 2103, 2108, 2103, 2103, + 2103, 2107, 2108, 2114, 2103, 2115, 2116, 2117, 2109, 2103, + 2110, 2118, 2119, 2120, 2122, 2123, 2124, 2125, 2103, 2367, + 2280, 2111, 2367, 2113, 2103, 2108, 2103, 2103, 2103, 2126, + 2108, 2114, 2103, 2115, 2116, 2117, 2127, 2103, 2128, 2118, + 2119, 2120, 2122, 2123, 2124, 2125, 2103, 2104, 2104, 2104, + 2104, 2104, 2104, 2104, 2104, 2104, 2129, 2126, 2130, 2131, + 2132, 2133, 2134, 2136, 2127, 2137, 2128, 2138, 2139, 2140, + 2143, 2143, 2143, 2143, 2145, 2145, 2146, 2146, 2146, 2146, + + 2147, 2147, 2148, 2150, 2129, 2151, 2130, 2131, 2132, 2133, + 2134, 2136, 2152, 2137, 2153, 2138, 2139, 2140, 2155, 2156, + 2258, 2157, 2158, 2166, 2159, 2160, 2166, 2244, 2161, 2162, + 2148, 2150, 2163, 2151, 2164, 2142, 2167, 2168, 2169, 2170, + 2152, 2171, 2153, 2172, 2173, 2143, 2155, 2156, 2145, 2157, + 2158, 2146, 2159, 2160, 2147, 2154, 2161, 2162, 2154, 3599, + 2163, 3599, 2164, 2166, 2167, 2168, 2169, 2170, 2174, 2171, + 2175, 2172, 2173, 3667, 2154, 3667, 2176, 2179, 2180, 2181, + 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2154, 2190, 2154, + 2191, 2166, 2192, 2193, 2141, 2196, 2174, 2197, 2175, 2154, + + 2198, 2154, 2154, 2154, 2176, 2179, 2180, 2181, 2182, 2183, + 2184, 2185, 2186, 2187, 2188, 2154, 2190, 2154, 2191, 2195, + 2192, 2193, 2195, 2196, 2195, 2197, 2199, 2154, 2198, 2154, + 2154, 2154, 2200, 2202, 2203, 2204, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2216, 2215, 2217, 2218, 2208, + 2209, 2219, 2220, 2221, 2199, 2215, 2222, 2223, 2224, 2225, + 2200, 2202, 2203, 2204, 2206, 2207, 2227, 2226, 2210, 2211, + 2212, 2213, 2214, 2216, 2215, 2217, 2218, 2228, 2229, 2219, + 2220, 2221, 2226, 2234, 2222, 2223, 2224, 2225, 2235, 2236, + 2237, 2238, 2239, 2240, 2227, 2226, 2241, 2242, 2243, 2245, + + 2246, 2247, 2248, 2249, 2254, 2228, 2229, 2255, 2257, 2261, + 2226, 2234, 2262, 2264, 2265, 2266, 2235, 2236, 2237, 2238, + 2239, 2240, 2267, 2268, 2241, 2242, 2243, 2245, 2246, 2247, + 2248, 2249, 2254, 2269, 2270, 2255, 2257, 2261, 2277, 2278, + 2262, 2264, 2265, 2266, 2279, 2282, 2284, 2286, 2287, 2288, + 2267, 2268, 2289, 2290, 2291, 2292, 2293, 2294, 2300, 2302, + 2296, 2269, 2270, 2296, 2303, 2296, 2277, 2278, 2304, 2305, + 2296, 2306, 2279, 2296, 2307, 2286, 2287, 2288, 2308, 2309, + 2289, 2290, 2291, 2292, 2293, 2294, 2311, 2296, 2312, 2313, + 2282, 2284, 2303, 2054, 2052, 2375, 2304, 2305, 2375, 2306, + + 2315, 2316, 2307, 2300, 2302, 2317, 2308, 2309, 2318, 2319, + 2320, 2314, 2321, 2318, 2311, 2296, 2312, 2313, 2314, 2314, + 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2322, 2315, 2316, + 2323, 2324, 2325, 2317, 2326, 2327, 2318, 2319, 2320, 2328, + 2321, 2318, 2329, 2331, 2332, 2333, 2335, 2338, 2340, 2341, + 2342, 2344, 2345, 2346, 2347, 2322, 2348, 2349, 2323, 2324, + 2325, 2350, 2326, 2327, 2351, 2354, 2356, 2328, 2047, 2361, + 2329, 2331, 2332, 2333, 2335, 2338, 2340, 2341, 2342, 2344, + 2345, 2346, 2347, 2362, 2348, 2349, 2365, 2358, 2358, 2350, + 2358, 2368, 2351, 2354, 2356, 2360, 2360, 2361, 2360, 2364, + + 2366, 2369, 2370, 2366, 2371, 2366, 2364, 2369, 2372, 2373, + 2374, 2362, 2376, 2377, 2365, 2378, 2379, 2380, 2381, 2368, + 2382, 2383, 1966, 2385, 2387, 2388, 2385, 2364, 2385, 2369, + 2370, 2389, 2371, 2390, 2364, 2369, 2372, 2373, 2374, 2391, + 2376, 2377, 2358, 2378, 2379, 2380, 2381, 2392, 2382, 2383, + 2360, 2386, 2387, 2388, 2386, 2393, 2386, 2358, 2394, 2389, + 2396, 2390, 2397, 2396, 2399, 2360, 2400, 2391, 2401, 2402, + 2403, 2404, 2405, 2406, 2407, 2392, 2408, 2410, 2411, 2412, + 2413, 2415, 2416, 2393, 2417, 2418, 2394, 2417, 2419, 1951, + 2397, 2421, 2399, 2422, 2400, 2423, 2401, 2402, 2403, 2404, + + 2405, 2406, 2407, 2424, 2408, 2410, 2411, 2412, 2413, 2415, + 2416, 2425, 2420, 2418, 2428, 2420, 2419, 2420, 2429, 2421, + 2431, 2422, 2433, 2423, 2434, 2436, 2437, 2438, 2439, 2440, + 2441, 2424, 2443, 2433, 2444, 1947, 2445, 2446, 2447, 2425, + 2448, 2450, 2428, 2451, 2452, 2454, 2429, 2455, 2431, 2456, + 2458, 2459, 2434, 2436, 2437, 2438, 2439, 2440, 2441, 2460, + 2443, 2461, 2444, 2433, 2445, 2446, 2447, 2462, 2448, 2450, + 2463, 2451, 2452, 2454, 2464, 2455, 2465, 2456, 2458, 2459, + 2466, 2467, 2468, 2471, 2472, 2473, 2475, 2460, 2476, 2461, + 2477, 2481, 2482, 2486, 2488, 2462, 2489, 2490, 2463, 2491, + + 2492, 2493, 2464, 2494, 2465, 2495, 2496, 2498, 2466, 2467, + 2468, 2471, 2472, 2473, 2475, 2501, 2476, 2513, 2477, 2481, + 2482, 2509, 2511, 2515, 2512, 2490, 1945, 2491, 2492, 2493, + 2502, 2494, 2501, 2495, 2496, 2498, 1916, 2500, 2486, 2488, + 2500, 2489, 2500, 2503, 2502, 2513, 2503, 2500, 2503, 2504, + 2500, 2515, 2504, 2503, 2504, 2516, 2517, 1900, 2505, 2504, + 2501, 2505, 2504, 2505, 2500, 2518, 2509, 2511, 2505, 2512, + 2503, 2505, 2502, 2519, 2520, 2521, 2504, 2522, 2524, 2525, + 2526, 2527, 2528, 2516, 2517, 2505, 2529, 2530, 2531, 2532, + 2533, 2534, 2500, 2518, 2535, 2536, 2537, 2538, 2503, 2539, + + 2540, 2519, 2520, 2521, 2504, 2522, 2524, 2525, 2526, 2527, + 2528, 2541, 2542, 2505, 2529, 2530, 2531, 2532, 2533, 2534, + 2543, 2544, 2535, 2536, 2537, 2538, 2545, 2539, 2540, 2546, + 2548, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2541, + 2542, 2558, 2560, 2560, 2565, 2560, 2566, 2567, 2543, 2544, + 2563, 2563, 2568, 2563, 2545, 2572, 2573, 2546, 2548, 2550, + 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2571, 2574, 2558, + 2571, 2575, 2565, 2576, 2566, 2567, 2577, 1899, 2578, 2579, + 2568, 2581, 2580, 2572, 2573, 2580, 2582, 2580, 2584, 2585, + 2586, 2587, 1896, 2588, 2592, 2593, 2574, 2560, 2594, 2575, + + 2595, 2576, 2596, 2597, 2577, 2563, 2578, 2579, 2599, 2581, + 2599, 2601, 2560, 2603, 2582, 2604, 2584, 2585, 2586, 2587, + 2563, 2588, 2592, 2593, 2600, 2605, 2594, 2600, 2595, 2606, + 2596, 2597, 2608, 2609, 2610, 2612, 2599, 2611, 2599, 2601, + 2611, 2603, 2613, 2604, 2614, 2615, 2616, 2618, 2619, 2621, + 2621, 2622, 2779, 2605, 2612, 2779, 2626, 2606, 2628, 2629, + 2608, 2609, 2610, 2612, 2620, 2630, 2631, 2620, 2632, 2620, + 2613, 2633, 2614, 2615, 2616, 2618, 2619, 2621, 2621, 2622, + 2624, 2634, 2612, 2624, 2626, 2624, 2628, 2629, 2635, 2637, + 2638, 2639, 2640, 2630, 2631, 2641, 2632, 2642, 2643, 2633, + + 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2653, 2654, 2634, + 2655, 2656, 2657, 2658, 2659, 2660, 2635, 2637, 2638, 2639, + 2640, 2661, 2663, 2641, 2664, 2642, 2643, 2665, 2644, 2645, + 2646, 2647, 2648, 2649, 2650, 2653, 2654, 2666, 2655, 2656, + 2657, 2658, 2659, 2660, 2667, 2668, 2670, 2671, 2672, 2661, + 2663, 2674, 2664, 2675, 2676, 2665, 2677, 2678, 2679, 2680, + 2681, 2683, 2684, 2685, 2686, 2666, 2687, 2688, 2706, 2691, + 2695, 2696, 2667, 2668, 2670, 2671, 2672, 1860, 1829, 2674, + 2698, 2675, 2676, 2691, 2677, 2678, 2679, 2695, 2696, 2683, + 2684, 2685, 2686, 2692, 2687, 2688, 2692, 2693, 2692, 1760, + + 2693, 2707, 2693, 2692, 2680, 2681, 2692, 2693, 2698, 2697, + 2693, 2691, 2697, 2706, 2708, 2695, 2696, 3669, 2699, 3669, + 2692, 2699, 2700, 2699, 2693, 2700, 2697, 2700, 2699, 1759, + 2701, 2699, 2700, 2701, 2703, 2701, 2709, 2703, 1758, 2703, + 2701, 2710, 2708, 2701, 2703, 2699, 2707, 2703, 2692, 2700, + 2712, 2713, 2693, 2704, 2714, 2715, 2704, 2701, 2704, 2716, + 2717, 2703, 2718, 2704, 2709, 2719, 2704, 2720, 2721, 2710, + 2722, 2723, 2724, 2699, 2725, 2726, 2727, 2700, 2712, 2713, + 2704, 2728, 2714, 2715, 2730, 2701, 2731, 2716, 2717, 2703, + 2718, 2732, 2733, 2719, 2734, 2720, 2721, 2735, 2722, 2723, + + 2724, 2736, 2725, 2726, 2727, 2737, 2738, 2739, 2704, 2728, + 2740, 2741, 2730, 2742, 2731, 2743, 2745, 2746, 2747, 2732, + 2733, 2748, 2734, 2749, 2750, 2735, 2752, 2753, 2757, 2736, + 2758, 2759, 2760, 2737, 2738, 2739, 2761, 2762, 2740, 2741, + 2763, 2742, 2764, 2743, 2745, 2746, 2747, 2767, 2768, 2748, + 2769, 2749, 2750, 2770, 2752, 2753, 2757, 2771, 2758, 2759, + 2760, 2772, 2773, 2776, 2761, 2762, 2777, 2778, 2763, 2780, + 2764, 2782, 2780, 2783, 2785, 2767, 2768, 2785, 2769, 2786, + 2787, 2770, 2788, 2790, 2791, 2771, 2792, 2793, 2795, 2772, + 2773, 2776, 2789, 2794, 2777, 2778, 2794, 2796, 2794, 2782, + + 2789, 2783, 2797, 2789, 2798, 2789, 2799, 2786, 2787, 2800, + 2801, 2790, 2791, 2788, 2792, 2793, 2795, 2802, 2805, 2806, + 2789, 2807, 2811, 2812, 2813, 2796, 2814, 2817, 2789, 2816, + 2797, 2789, 2798, 2789, 2799, 2813, 2818, 2800, 2801, 2819, + 2816, 2788, 2820, 2821, 2822, 2802, 2805, 2806, 2823, 2807, + 2811, 2812, 2826, 2827, 2814, 2817, 2828, 2829, 2830, 2832, + 2833, 2834, 2831, 2835, 2818, 2836, 2826, 2819, 2837, 2838, + 2820, 2821, 2822, 2831, 2839, 2840, 2823, 2841, 2842, 2844, + 2826, 2827, 2845, 2846, 2828, 2829, 2830, 2832, 2833, 2834, + 2847, 2835, 2848, 2836, 2849, 2850, 2837, 2838, 2851, 2852, + + 2853, 2854, 2839, 2840, 2855, 2841, 2842, 2844, 2856, 2857, + 2845, 2846, 2858, 2859, 2860, 2861, 2862, 2863, 2847, 2864, + 2848, 2865, 2849, 2850, 2891, 2867, 2851, 2852, 2853, 2854, + 2888, 2869, 2855, 2888, 1730, 1727, 2856, 2857, 2894, 2991, + 2858, 2859, 2860, 2867, 2862, 2863, 2877, 2864, 2869, 2865, + 2991, 2868, 2871, 2867, 2868, 2871, 2868, 2871, 2878, 1718, + 2861, 2868, 2871, 2877, 2868, 2949, 2894, 2872, 2949, 2891, + 2872, 2867, 2872, 2879, 2896, 2878, 2869, 2872, 2868, 2871, + 2872, 2880, 2873, 2874, 2897, 2873, 2874, 2873, 2874, 1714, + 2879, 2877, 2873, 2874, 2872, 2873, 2874, 3731, 2880, 3731, + + 2898, 2955, 2896, 2878, 2955, 1712, 2868, 2871, 2899, 2873, + 2874, 1710, 2897, 1700, 2882, 1658, 2900, 2882, 2879, 2882, + 2884, 1648, 2872, 2884, 2882, 2884, 2880, 2882, 2898, 2885, + 2884, 1578, 2885, 2884, 2885, 2901, 2899, 2873, 2874, 2885, + 2886, 2882, 2885, 2886, 2900, 2886, 1573, 2884, 1571, 2887, + 2886, 2902, 2887, 2903, 2887, 2889, 2885, 2905, 2889, 2887, + 2889, 2890, 2906, 2901, 2890, 2889, 2890, 2886, 2889, 2882, + 2908, 2890, 2910, 2912, 2890, 2884, 2887, 2913, 2914, 2902, + 2916, 2903, 2889, 2917, 2885, 2905, 2918, 2919, 2890, 2920, + 2906, 2921, 2922, 2923, 2925, 2886, 2926, 2927, 2908, 2931, + + 2910, 2912, 2932, 2933, 2887, 2913, 2914, 2935, 2916, 2936, + 2889, 2917, 2937, 2938, 2918, 2919, 2890, 2920, 2939, 2921, + 2922, 2923, 2925, 2940, 2926, 2927, 2942, 2931, 2944, 2945, + 2932, 2933, 2946, 2947, 2948, 2935, 2950, 2936, 2952, 2953, + 2937, 2938, 2954, 2959, 2956, 2960, 2939, 2956, 2962, 2956, + 2963, 2940, 2964, 2965, 2942, 2966, 2944, 2945, 2968, 1548, + 2946, 2947, 2948, 2967, 2950, 2969, 2952, 2953, 2969, 2973, + 2954, 2959, 2974, 2960, 2967, 2967, 2962, 2975, 2963, 2977, + 2964, 2965, 2972, 2966, 2970, 2972, 2968, 2972, 2970, 2976, + 2978, 2967, 2976, 2979, 2980, 2970, 2982, 2973, 2983, 2984, + + 2974, 2988, 2967, 2967, 2989, 2975, 2992, 2977, 2994, 2995, + 2996, 2997, 2970, 2998, 2999, 3000, 2970, 3001, 2978, 3002, + 3002, 2979, 2980, 2970, 2982, 3003, 2983, 2984, 3004, 2988, + 3005, 3006, 2989, 3007, 2992, 3008, 2994, 2995, 2996, 2997, + 3010, 2998, 2999, 3000, 3011, 3001, 3012, 3002, 3002, 3013, + 3014, 3015, 3016, 3003, 3017, 3018, 3004, 3019, 3005, 3006, + 3020, 3007, 3021, 3008, 3023, 3024, 3018, 3025, 3010, 3027, + 3029, 3020, 3011, 1544, 3012, 3030, 3031, 3013, 3014, 3015, + 3016, 3033, 3017, 3034, 3035, 3019, 3036, 3037, 3039, 3040, + 3021, 3041, 3023, 3024, 3043, 3025, 3018, 3027, 3029, 3044, + + 1528, 3020, 3049, 3030, 3031, 3049, 3041, 3048, 3050, 3033, + 3060, 3034, 3035, 3060, 3036, 3037, 3039, 3040, 3046, 3041, + 3056, 3046, 3043, 3046, 3048, 1527, 3065, 3044, 3046, 3057, + 3051, 3046, 3066, 3051, 3041, 3051, 3050, 3056, 3097, 3052, + 3051, 3097, 3052, 3051, 3052, 3046, 3057, 3109, 3053, 3052, + 3109, 3053, 3048, 3053, 3065, 1524, 3067, 3051, 3053, 3054, + 3066, 3053, 3054, 1470, 3054, 3056, 3052, 3069, 3113, 3054, + 3071, 3113, 3054, 3046, 3057, 3053, 1469, 3059, 3061, 3073, + 3059, 3061, 3059, 3061, 3067, 3051, 3054, 3059, 3061, 3074, + 3059, 3061, 3075, 3076, 3052, 3069, 3062, 3078, 3071, 3062, + + 3079, 3062, 3080, 3053, 3059, 3061, 3062, 3073, 3081, 3062, + 3082, 3083, 3084, 3085, 3054, 3087, 3088, 3074, 3089, 3090, + 3075, 3076, 3092, 3062, 3093, 3078, 3094, 3095, 3079, 3096, + 3080, 3098, 3059, 3061, 3099, 3100, 3081, 3102, 3082, 3083, + 3084, 3085, 3103, 3087, 3088, 3104, 3089, 3090, 3105, 3106, + 3092, 3062, 3093, 3115, 3094, 3095, 3115, 3096, 3115, 3098, + 3108, 3107, 3099, 3100, 3107, 3102, 3111, 3116, 3117, 3119, + 3103, 3120, 3121, 3104, 3122, 3123, 3105, 3106, 3107, 3107, + 3107, 3107, 3107, 3107, 3107, 3107, 3107, 3124, 3108, 3125, + 3126, 3127, 3129, 1462, 3111, 3116, 3117, 3119, 3136, 3120, + + 3121, 3136, 3122, 3123, 3128, 3130, 3131, 3128, 3133, 3134, + 3135, 3137, 3138, 3139, 3140, 3124, 3142, 3125, 3126, 3127, + 3129, 3128, 3128, 3128, 3128, 3128, 3128, 3128, 3128, 3128, + 3143, 3144, 3146, 3130, 3131, 3147, 3133, 3134, 3135, 3137, + 3138, 3139, 3140, 3149, 3142, 3150, 3151, 3153, 3154, 3156, + 3157, 3158, 3159, 3160, 3161, 3163, 3164, 3165, 3143, 3144, + 3146, 3166, 3168, 3147, 3169, 3170, 3171, 3173, 3175, 3178, + 1461, 3149, 3182, 3150, 3151, 3153, 3154, 3156, 3157, 3158, + 3159, 3160, 3161, 3163, 3164, 3165, 3184, 3181, 3186, 3166, + 3168, 3187, 3169, 3170, 3171, 3173, 3175, 3178, 3181, 3188, + + 3182, 3189, 3190, 3191, 3192, 3194, 3195, 3196, 3197, 3198, + 3199, 1460, 3200, 3212, 3184, 3200, 3186, 3200, 3234, 3187, + 3198, 3234, 3200, 3201, 3566, 3200, 3206, 3188, 3181, 3189, + 3190, 3191, 3192, 3194, 3195, 3196, 3197, 3198, 3199, 3200, + 3201, 3212, 3203, 3206, 3213, 3203, 3204, 3203, 3198, 3204, + 3205, 3204, 3203, 3205, 3214, 3205, 3204, 1405, 3265, 3215, + 3205, 3265, 3216, 3205, 3218, 3219, 3220, 3200, 3201, 3203, + 3222, 3206, 3213, 3204, 3566, 3207, 3208, 3205, 3207, 3208, + 3207, 3208, 3214, 1404, 1393, 3207, 3208, 3215, 3207, 3208, + 3216, 1368, 3218, 3219, 3220, 3223, 3224, 3203, 3222, 3225, + + 3226, 3204, 3207, 3208, 3227, 3205, 3210, 3211, 3230, 3210, + 3211, 3210, 3211, 3231, 3232, 3233, 3210, 3211, 3235, 3210, + 3211, 3236, 3239, 3223, 3224, 3240, 3241, 3225, 3226, 3242, + 3207, 3208, 3227, 3210, 3211, 3238, 3230, 3243, 3238, 3244, + 3238, 3231, 3232, 3233, 3245, 3246, 3235, 3284, 3273, 3236, + 3239, 3273, 1367, 3240, 3241, 3248, 3250, 3242, 3284, 1363, + 3253, 3210, 3211, 3253, 1362, 3243, 3252, 3244, 3249, 3255, + 3256, 3249, 3245, 3246, 3247, 3247, 3247, 3247, 3247, 3247, + 3247, 3247, 3247, 3248, 3250, 3249, 3249, 3249, 3249, 3249, + 3249, 3249, 3249, 3249, 3252, 3257, 3258, 3255, 3256, 3259, + + 3260, 3261, 3262, 3263, 3266, 3267, 3253, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3269, 3270, 3271, 3274, + 3275, 3276, 3277, 3257, 3258, 3277, 3278, 3259, 3260, 3261, + 3262, 3263, 3266, 3267, 3253, 3279, 3280, 3281, 3279, 3282, + 3283, 3285, 3286, 3287, 3269, 3270, 3271, 3274, 3275, 3276, + 3288, 3290, 3291, 3292, 3278, 3293, 3294, 3298, 3299, 3300, + 3301, 3304, 3305, 3306, 3280, 3281, 3307, 3282, 3283, 3285, + 3286, 3287, 3309, 3311, 3307, 3312, 3313, 3314, 3288, 3290, + 3291, 3292, 3315, 3293, 3294, 3298, 3299, 3300, 3301, 3304, + 3305, 3306, 3316, 3317, 3307, 3318, 3320, 3321, 3322, 3323, + + 3309, 3311, 3307, 3312, 3313, 3314, 3324, 3325, 1361, 3326, + 3315, 3327, 3326, 3329, 3326, 1360, 3329, 3332, 3333, 3326, + 3316, 3317, 3326, 3318, 3320, 3321, 3322, 3323, 3327, 3334, + 3335, 3336, 1359, 3339, 3324, 3325, 3326, 1357, 3328, 3330, + 3341, 3328, 3330, 3328, 3330, 3332, 3333, 3343, 3328, 3330, + 3331, 3328, 3330, 3331, 3344, 3331, 3327, 3334, 3335, 3336, + 3331, 3339, 3345, 3331, 3326, 3328, 3330, 3346, 3341, 3347, + 3349, 3351, 3352, 3355, 3351, 3343, 3356, 3331, 3380, 1326, + 3381, 3380, 3344, 3381, 3382, 3385, 1322, 3382, 3385, 3350, + 3345, 3399, 3350, 3328, 3330, 3346, 3389, 3347, 3349, 3389, + + 3352, 3355, 3399, 1293, 3356, 3331, 3350, 3350, 3350, 3350, + 3350, 3350, 3350, 3350, 3350, 3353, 3353, 3353, 3353, 3353, + 3353, 3353, 3353, 3353, 3353, 3353, 3354, 3354, 3354, 3354, + 3354, 3354, 3354, 3354, 3354, 3354, 3354, 3357, 3358, 3359, + 3353, 3360, 3361, 3362, 3363, 3365, 3367, 3369, 3371, 3372, + 1285, 3354, 3364, 3364, 3364, 3364, 3364, 3364, 3364, 3364, + 3364, 3368, 3373, 3374, 3368, 3357, 3358, 3359, 3375, 3360, + 3361, 3362, 3363, 3365, 3367, 3369, 3371, 3372, 3368, 3368, + 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3376, 3377, 3378, + 3373, 3374, 3383, 3384, 3386, 3387, 3375, 3388, 3390, 1283, + + 3451, 3390, 3428, 3451, 3428, 1278, 1273, 3393, 3395, 3391, + 3397, 3401, 3391, 3402, 3403, 3376, 3377, 3378, 3405, 3406, + 3383, 3384, 3386, 3387, 1216, 3388, 3391, 3391, 3391, 3391, + 3391, 3391, 3391, 3391, 3391, 3393, 3395, 3404, 3397, 3401, + 3408, 3402, 3403, 3407, 3409, 3410, 3405, 3406, 3404, 3411, + 3412, 3407, 3407, 3413, 3414, 3415, 3416, 3417, 3418, 3419, + 3420, 3421, 3423, 3424, 3425, 3426, 3427, 3429, 3408, 3430, + 3431, 3407, 3409, 3410, 3428, 3433, 3434, 3411, 3412, 3407, + 3407, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, + 3423, 3424, 3425, 3426, 3427, 3429, 3435, 3430, 3431, 3435, + + 3436, 3435, 3437, 3433, 3434, 3438, 3435, 3440, 3442, 3435, + 3446, 3448, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, + 3449, 3660, 3453, 3435, 3450, 3454, 3455, 3450, 3436, 3450, + 3437, 3452, 3660, 3438, 3475, 3440, 3442, 3475, 3446, 3448, + 3456, 3450, 3450, 3450, 3450, 3450, 3450, 3450, 3450, 3450, + 3453, 3435, 1215, 3454, 3455, 3452, 3452, 3452, 3452, 3452, + 3452, 3452, 3452, 3452, 3452, 3452, 3457, 3458, 3456, 3459, + 3461, 3462, 3465, 3466, 3467, 3468, 3469, 1214, 3470, 3469, + 3452, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, + 3471, 3472, 3473, 3478, 3457, 3458, 3479, 3459, 3461, 3462, + + 3465, 3466, 3467, 3468, 3476, 3469, 3470, 3476, 3477, 3476, + 3481, 3477, 3480, 3477, 3482, 3480, 3483, 3480, 3471, 3472, + 3473, 3478, 3485, 3534, 3479, 3485, 3534, 3542, 3486, 3546, + 3542, 3486, 3546, 3469, 1213, 3488, 3493, 3492, 3481, 3494, + 3495, 3497, 3482, 3492, 3483, 3486, 3486, 3486, 3486, 3486, + 3486, 3486, 3486, 3486, 3487, 3487, 3487, 3487, 3487, 3487, + 3487, 3487, 3487, 3488, 3493, 3492, 3498, 3494, 3495, 3497, + 3499, 3492, 3500, 3501, 3502, 3504, 3507, 3509, 3510, 3511, + 3512, 3513, 3516, 3517, 3519, 3520, 3559, 3562, 3639, 3559, + 3562, 3559, 3562, 3617, 3498, 1212, 3617, 3522, 3499, 3523, + + 3500, 3501, 3502, 3504, 3507, 3509, 3510, 3511, 3512, 3513, + 3516, 3517, 3519, 3520, 3521, 3521, 3521, 3521, 3521, 3521, + 3521, 3521, 3521, 3521, 3521, 3522, 3524, 3523, 3527, 3528, + 3529, 3530, 3532, 3533, 3620, 1211, 1207, 3620, 3639, 3521, + 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3539, + 3540, 3541, 3543, 3544, 3524, 3545, 3527, 3528, 3529, 3530, + 3532, 3533, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3536, 3537, 3547, 3548, 3537, 3549, 3551, 3539, 3540, 3541, + 3543, 3544, 3553, 3545, 3554, 3555, 3557, 3564, 3537, 3537, + 3537, 3537, 3537, 3537, 3537, 3537, 3537, 3565, 3567, 3552, + + 3547, 3548, 3552, 3549, 3551, 3556, 1206, 3568, 3556, 3569, + 3553, 3574, 3554, 3555, 3557, 3564, 3552, 3552, 3552, 3552, + 3552, 3552, 3552, 3552, 3552, 3565, 3567, 3570, 1205, 3661, + 1191, 3575, 3576, 3571, 3556, 3568, 3571, 3569, 3641, 3574, + 3661, 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3570, + 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3575, + 3576, 3578, 3556, 3572, 3572, 3572, 3572, 3572, 3572, 3572, + 3572, 3572, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, + 3588, 3589, 3590, 3591, 3592, 3593, 3596, 3600, 3641, 3578, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3602, + + 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, + 3590, 3591, 3592, 3593, 3596, 3600, 3601, 3601, 3601, 3601, + 3601, 3601, 3601, 3601, 3601, 3601, 3601, 3602, 3603, 3604, + 3607, 3609, 3610, 3613, 3623, 3613, 3613, 3623, 3613, 3623, + 1189, 3601, 3616, 3618, 3754, 3622, 3613, 3754, 3624, 3614, + 3625, 3626, 3627, 3629, 3630, 3633, 3603, 3604, 3607, 3609, + 3610, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, + 3616, 3618, 3619, 3622, 3755, 3619, 3624, 3755, 3625, 3626, + 3627, 3629, 3630, 3633, 3634, 3637, 3642, 1184, 3643, 3619, + 3619, 3619, 3619, 3619, 3619, 3619, 3619, 3619, 3628, 3628, + + 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3632, 3644, 1155, + 3632, 3638, 3634, 3637, 3642, 3638, 3643, 3613, 3646, 3647, + 3648, 3650, 3638, 1151, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3651, 3652, 3653, 3644, 3645, 3654, 3638, + 3655, 3656, 3657, 3638, 3658, 3659, 3646, 3647, 3648, 3650, + 3638, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3662, 3651, 3652, 3653, 3664, 3670, 3654, 3672, 3655, 3656, + 3657, 3674, 3658, 3659, 3676, 3729, 3677, 3683, 3677, 3677, + 3684, 3677, 3685, 3684, 3794, 3684, 3729, 3794, 3662, 3677, + 1141, 3687, 3664, 3670, 3687, 3672, 3687, 3692, 3678, 3674, + + 3678, 3678, 3676, 3678, 3690, 3683, 3693, 3690, 3694, 3690, + 3685, 3678, 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3686, + 3686, 3695, 3696, 3697, 3699, 3692, 3700, 3703, 3704, 3705, + 3706, 3708, 1130, 3710, 3693, 3711, 3694, 3698, 3698, 3698, + 3698, 3698, 3698, 3698, 3698, 3698, 3712, 3713, 3714, 3695, + 3696, 3697, 3699, 3743, 3700, 3703, 3704, 3705, 3706, 3715, + 3677, 3710, 3716, 3711, 3717, 3718, 3720, 3721, 3722, 3724, + 3725, 3728, 3733, 3735, 3712, 3713, 3714, 3736, 3739, 3746, + 3741, 3708, 3678, 3741, 3747, 3741, 3748, 3715, 3736, 3749, + 3716, 3750, 3717, 3718, 3720, 3721, 3722, 3724, 3725, 3728, + + 3733, 3735, 3751, 3743, 3752, 3736, 3739, 3746, 3753, 3756, + 3757, 3753, 3747, 3758, 3748, 3759, 3736, 3749, 3760, 3750, + 3762, 3763, 3765, 3766, 3767, 3768, 3769, 3783, 3770, 3771, + 3751, 3775, 3752, 3776, 3777, 3785, 3778, 3756, 3757, 3780, + 3787, 3788, 3790, 3759, 3791, 3792, 3760, 3793, 3762, 3763, + 3765, 3766, 3767, 3768, 3769, 3753, 3770, 3771, 3795, 3775, + 3800, 3776, 3777, 3758, 3778, 3801, 3802, 3780, 3787, 3788, + 3790, 3796, 3791, 3792, 3796, 3793, 3796, 3783, 3798, 3797, + 3803, 3798, 3797, 3753, 3797, 3785, 3795, 3799, 3800, 3804, + 3799, 3807, 3808, 3801, 3802, 3809, 3810, 3811, 3812, 3815, + + 3816, 3819, 3821, 3816, 3822, 3823, 3825, 3826, 3803, 3828, + 3829, 3830, 3828, 3852, 3830, 3854, 3830, 3804, 3854, 3807, + 3808, 3837, 3839, 3809, 3810, 3811, 3812, 3815, 3840, 3841, + 3821, 3843, 3822, 3823, 3825, 3826, 3832, 3834, 3829, 3832, + 3834, 3832, 3834, 3835, 3844, 3845, 3835, 3846, 3835, 3837, + 3839, 3819, 3847, 3848, 3853, 3851, 3840, 3841, 3851, 3843, + 3851, 3855, 3856, 3852, 3848, 3856, 3858, 3848, 3866, 3867, + 3868, 3861, 3844, 3845, 3861, 3846, 3861, 3869, 3870, 3871, + 3847, 3848, 3853, 3863, 3872, 3873, 3863, 3874, 3863, 3855, + 3875, 3876, 3848, 3882, 3858, 3848, 3866, 3867, 3868, 3880, + + 3884, 1128, 3880, 3884, 3880, 3869, 3870, 3871, 3883, 1126, + 1125, 3883, 3872, 3873, 1111, 3874, 3886, 3885, 3875, 3876, + 3885, 3882, 3891, 3892, 3893, 3883, 3883, 3883, 3883, 3883, + 3883, 3883, 3883, 3883, 3885, 3885, 3885, 3885, 3885, 3885, + 3885, 3885, 3885, 3896, 3886, 3898, 3899, 3900, 3901, 3908, + 3891, 3892, 3893, 3905, 3905, 3905, 3905, 3905, 3905, 3905, + 3905, 3905, 3906, 1110, 1106, 3906, 1105, 1104, 1103, 3911, + 3912, 3896, 3913, 3898, 3899, 3900, 3901, 3908, 3916, 3906, + 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3907, 3907, + 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3911, 3912, 3917, + + 3913, 3924, 3927, 3928, 3929, 3930, 3916, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3931, 3933, 3934, 3935, + 1102, 1062, 1010, 1009, 989, 976, 964, 3917, 944, 3924, + 3927, 3928, 3929, 3930, 927, 902, 890, 879, 877, 875, + 871, 827, 816, 807, 3931, 3933, 3934, 3935, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, - 3938, 3938, 3938, 3938, 3939, 3939, 3939, 3939, 3939, 3939, + 3938, 3938, 3938, 3938, 3938, 3938, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, - 3939, 3939, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, + 3939, 3939, 3939, 3939, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, - 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, - 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3942, 3942, + 3940, 3940, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, + 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, - 3942, 3942, 3942, 3942, 3942, 3942, 3943, 3943, 3943, 3943, + 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, - 3943, 3943, 3943, 3943, 3944, 3944, 3944, 3944, 3944, 3944, + 3943, 3943, 3943, 3943, 3943, 3943, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, - 3944, 3944, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, + 3944, 3944, 3944, 3944, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, - 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, - 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3947, 3947, + 3945, 3945, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, + 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, - 3947, 3947, 3947, 3947, 3947, 3947, 3948, 3948, 3948, 3948, + 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, - 3948, 3948, 3948, 3948, 3949, 3949, 3949, 3949, 3949, 3949, + 3948, 3948, 3948, 3948, 3948, 3948, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, - 3949, 3949, 3950, 3950, 749, 3950, 3950, 3950, 3950, 3950, + 3949, 3949, 3949, 3949, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, + 3950, 3950, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, - 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3952, 3952, - 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, - 3952, 3952, 3952, 3952, 3952, 3952, 3953, 3953, 3953, 3953, + 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, + 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, - 3953, 3953, 3953, 3953, 3954, 3954, 3954, 3954, 3954, 3954, + 3953, 3953, 3953, 3953, 3953, 3953, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, - 3954, 3954, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, + 3954, 3954, 3954, 3954, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, + 3955, 3955, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, - 3957, 3957, 3957, 3957, 3957, 3957, 3958, 3958, 3958, 3958, + 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, - 3958, 3958, 3958, 3958, 3959, 3959, 3959, 3959, 3959, 3959, + 3958, 3958, 3958, 3958, 3958, 3958, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, - 3959, 3959, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, + 3959, 3959, 3959, 3959, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, + 3960, 3960, 3961, 3961, 803, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, - 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, - 3962, 3962, 3962, 3962, 3962, 3962, 3963, 3963, 3963, 3963, - 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3963, 3963, - 3963, 3963, 3963, 3963, 3964, 3964, 3964, 3964, 3964, 3964, + 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, + 3963, 3963, 3963, 3963, 3963, 3963, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, - 3964, 3964, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, + 3964, 3964, 3964, 3964, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, + 3965, 3965, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, - 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, - 3967, 3967, 3967, 3967, 3967, 3967, 3968, 3968, 742, 3968, + 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, - 3968, 3968, 3968, 3968, 3969, 3969, 731, 3969, 3969, 3969, + 3968, 3968, 3968, 3968, 3968, 3968, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, - 3969, 3969, 3970, 3970, 730, 3970, 3970, 3970, 3970, 3970, + 3969, 3969, 3969, 3969, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, + 3970, 3970, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, - 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, - 3972, 3972, 3972, 3972, 3972, 3972, 3973, 3973, 3973, 3973, + 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, - 3973, 3973, 3973, 3973, 3974, 3974, 3974, 3974, 3974, 3974, - 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, + 3973, 3973, 3973, 3973, 3973, 3973, 3974, 3974, 3974, 3974, - 3974, 3974, 3975, 3975, 711, 3975, 3975, 3975, 3975, 3975, + 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, + 3974, 3974, 3974, 3974, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, + 3975, 3975, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, - 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, - 3977, 3977, 3977, 3977, 3977, 3977, 3978, 3978, 3978, 3978, + 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, - 3978, 3978, 700, 3978, 3979, 3979, 3979, 3979, 3979, 3979, + 3978, 3978, 3978, 3978, 3978, 3978, 3979, 3979, 772, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, - 3979, 3979, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, - 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 689, 3980, + 3979, 3979, 3979, 3979, 3980, 3980, 771, 3980, 3980, 3980, + 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, + 3980, 3980, 3981, 3981, 769, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, - 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, - 3982, 3982, 3982, 3982, 3982, 3982, 3983, 3983, 3983, 3983, + 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, - 3983, 3983, 3983, 3983, 3984, 3984, 3984, 3984, 3984, 3984, + 3983, 3983, 3983, 3983, 3983, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, - 3984, 3984, 3985, 677, 3985, 3985, 676, 671, 3985, 3985, - 3985, 3985, 3985, 670, 3985, 3985, 3985, 3985, 3985, 3986, + 3984, 3984, 3984, 3984, 3985, 3985, 3985, 3985, 3985, 3985, + 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, + 3985, 3985, 3986, 3986, 768, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, - 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, - 3987, 3987, 3987, 668, 3987, 3988, 3988, 3988, 3988, 3988, + 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, - 3988, 3988, 3988, 3989, 3989, 3989, 3989, 3989, 3989, 3989, + 3988, 3988, 3988, 3988, 3988, 3988, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, - 3989, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, - 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3991, - 661, 3991, 3991, 651, 650, 3991, 3991, 3991, 3991, 3991, + 3989, 3989, 767, 3989, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, - 648, 3991, 3991, 3991, 3991, 3991, 3992, 3992, 3992, 3992, + 3990, 3990, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, + 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 765, 3991, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, - 3992, 3992, 3992, 3992, 3993, 3993, 3993, 3993, 3993, 3993, + 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, - 644, 3993, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, + 3993, 3993, 3993, 3993, 3993, 3993, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, + 3994, 3994, 3994, 3994, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, - 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3996, 3996, - 3996, 3996, 3996, 3996, 3996, 3996, 3996, 3996, 3996, 3996, - 3996, 3996, 3996, 3996, 3996, 3996, 3997, 3997, 3997, 3997, + 3995, 3995, 3996, 760, 3996, 3996, 759, 757, 3996, 3996, + 3996, 3996, 3996, 756, 3996, 3996, 3996, 3996, 3996, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, - 3997, 3997, 634, 3997, 3998, 3998, 633, 3998, 3998, 3998, + 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, - 3998, 3998, 3999, 3999, 631, 3999, 3999, 3999, 3999, 3999, + 3998, 3998, 3998, 755, 3998, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, - 4000, 4000, 628, 4000, 4000, 4000, 4000, 4000, 4000, 4000, - 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4001, 4001, - 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, - 4001, 4001, 4001, 4001, 4001, 4001, 4002, 4002, 4002, 4002, - 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002, + 3999, 3999, 3999, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, + 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4002, - 4002, 4002, 627, 4002, 4003, 4003, 4003, 4003, 4003, 4003, + 749, 4002, 4002, 742, 731, 4002, 4002, 4002, 4002, 4002, + 730, 4002, 4002, 4002, 4002, 4002, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, - 4003, 4003, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, - 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 625, 4004, - 4005, 4005, 622, 4005, 4005, 4005, 4005, 4005, 4005, 4005, - 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4006, 4006, + 4003, 4003, 4003, 4003, 4004, 4004, 4004, 4004, 4004, 4004, + 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, + 711, 4004, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, + 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, - 4006, 4006, 4006, 4006, 4006, 4006, 4007, 4007, 4007, 4007, + 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, - 4007, 4007, 4007, 4007, 4008, 4008, 4008, 4008, 4008, 4008, + 4007, 4007, 4007, 4007, 4007, 4007, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, - 4008, 4008, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, + 4008, 4008, 700, 4008, 4009, 4009, 689, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, + 4009, 4009, 4010, 4010, 677, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, - 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4011, 4011, - 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, - 4011, 4011, 4011, 4011, 4011, 4011, 4012, 621, 4012, 4012, - 541, 537, 4012, 4012, 4012, 4012, 4012, 536, 4012, 4012, - 4012, 4012, 4012, 4012, 4013, 530, 4013, 4013, 529, 513, - 4013, 4013, 4013, 4013, 4013, 512, 4013, 4013, 4013, 4013, - - 4013, 4013, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, + 4011, 4011, 676, 4011, 4011, 4011, 4011, 4011, 4011, 4011, + 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4012, 4012, + 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, + 4012, 4012, 4012, 4012, 4012, 4012, 4013, 4013, 4013, 4013, + + 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, + 4013, 4013, 671, 4013, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, - 4015, 506, 4015, 4015, 504, 490, 4015, 4015, 4015, 4015, - 4015, 478, 4015, 4015, 4015, 4015, 4015, 4016, 4016, 4016, - 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, - 4016, 4016, 4016, 4016, 4016, 4017, 4017, 4017, 4017, 4017, + 4014, 4014, 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015, + 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015, 670, 4015, + 4016, 4016, 668, 4016, 4016, 4016, 4016, 4016, 4016, 4016, + 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, - 4017, 4017, 4017, 4018, 4018, 4018, 4018, 4018, 4018, 4018, + 4017, 4017, 4017, 4017, 4017, 4017, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, - 4018, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, - 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4020, - 475, 4020, 4020, 453, 440, 4020, 4020, 4020, 4020, 4020, - 434, 4020, 4020, 4020, 4020, 4020, 4020, 4021, 4021, 4021, + 4018, 4018, 4018, 4018, 4019, 4019, 4019, 4019, 4019, 4019, + 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, + 4019, 4019, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, + 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, - 4021, 4021, 4021, 4021, 4021, 4022, 4022, 4022, 4022, 4022, + 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, - 4022, 4022, 4022, 4023, 422, 4023, 4023, 413, 412, 4023, - 4023, 4023, 4023, 4023, 393, 4023, 4023, 4023, 4023, 4023, - 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, - 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4025, 4025, + 4022, 4022, 4022, 4022, 4022, 4022, 4023, 661, 4023, 4023, + 651, 650, 4023, 4023, 4023, 4023, 4023, 648, 4023, 4023, + 4023, 4023, 4023, 4023, 4024, 644, 4024, 4024, 634, 633, + 4024, 4024, 4024, 4024, 4024, 631, 4024, 4024, 4024, 4024, + 4024, 4024, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, - 4025, 4025, 4025, 4025, 4025, 4025, 4026, 4026, 4026, 4026, - 4026, 4026, 4026, 4026, 4026, 4026, 4026, 4026, 4026, 4026, - 4026, 4026, 4026, 4026, 4027, 4027, 4027, 4027, 4027, 4027, + 4026, 628, 4026, 4026, 627, 625, 4026, 4026, 4026, 4026, + 4026, 622, 4026, 4026, 4026, 4026, 4026, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, - 4027, 4027, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, + 4027, 4027, 4027, 4027, 4027, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, + 4028, 4028, 4028, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, - 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4030, 4030, - 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, - 4030, 4030, 4030, 4030, 4030, 4030, 4031, 4031, 4031, 4031, - 4031, 4031, 4031, 4031, 4031, 4031, 4031, 4031, 4031, 4031, - 4031, 4031, 4031, 4031, 4032, 4032, 4032, 4032, 4032, 4032, + 4029, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, + 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4031, + 621, 4031, 4031, 541, 537, 4031, 4031, 4031, 4031, 4031, + 536, 4031, 4031, 4031, 4031, 4031, 4031, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, - 4032, 4032, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, + 4032, 4032, 4032, 4032, 4032, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, - 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, - 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4035, 4035, - 392, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, - 4035, 4035, 4035, 4035, 4035, 4035, 4036, 4036, 4036, 4036, + 4033, 4033, 4033, 4034, 530, 4034, 4034, 529, 513, 4034, + 4034, 4034, 4034, 4034, 512, 4034, 4034, 4034, 4034, 4034, + 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, + 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, - 4036, 4036, 4036, 4036, 4037, 4037, 4037, 4037, 4037, 4037, + 4036, 4036, 4036, 4036, 4036, 4036, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, - 4037, 4037, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, + 4037, 4037, 4037, 4037, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, + 4038, 4038, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, - 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4040, 385, - 4040, 4040, 383, 368, 4040, 4040, 4040, 4040, 4040, 367, - 4040, 4040, 4040, 4040, 4040, 4040, 4041, 358, 4041, 4041, - 357, 347, 4041, 4041, 4041, 4041, 4041, 317, 4041, 4041, - - 4041, 4041, 4041, 4041, 4042, 316, 4042, 4042, 284, 268, - 4042, 4042, 4042, 4042, 4042, 261, 4042, 4042, 4042, 4042, - 4042, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, - 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4044, - 259, 4044, 4044, 252, 234, 4044, 4044, 4044, 4044, 4044, - 229, 4044, 4044, 4044, 4044, 4044, 4044, 4045, 4045, 4045, + 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, + 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4041, 4041, + + 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, + 4041, 4041, 4041, 4041, 4041, 4041, 4042, 4042, 4042, 4042, + 4042, 4042, 4042, 4042, 4042, 4042, 4042, 4042, 4042, 4042, + 4042, 4042, 4042, 4042, 4043, 4043, 4043, 4043, 4043, 4043, + 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, + 4043, 4043, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, + 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, - 4045, 4045, 4045, 4045, 4045, 4046, 216, 4046, 4046, 194, - 182, 4046, 4046, 4046, 4046, 4046, 175, 4046, 4046, 4046, - 4046, 4046, 4046, 4047, 4047, 4047, 4047, 4047, 4047, 4047, + 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4046, 4046, + 506, 4046, 4046, 4046, 4046, 4046, 4046, 4046, 4046, 4046, + 4046, 4046, 4046, 4046, 4046, 4046, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, - 4047, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, - 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4049, - 172, 4049, 4049, 165, 164, 4049, 4049, 4049, 4049, 4049, - 163, 4049, 4049, 4049, 4049, 4049, 4050, 4050, 4050, 4050, + 4047, 4047, 4047, 4047, 4048, 4048, 4048, 4048, 4048, 4048, + 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, + 4048, 4048, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, + 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, - 4050, 4050, 4050, 4050, 4051, 4051, 4051, 4051, 4051, 4051, - 4051, 4051, 4051, 4051, 4051, 4051, 4051, 4051, 4051, 4051, - 4051, 4051, 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, - 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, - - 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 154, - 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4054, 4054, - 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, - 4054, 4054, 4054, 4054, 4054, 4054, 4055, 4055, 4055, 4055, - 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, - 4055, 4055, 4055, 4055, 4056, 4056, 4056, 4056, 4056, 4056, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4051, 504, + 4051, 4051, 490, 478, 4051, 4051, 4051, 4051, 4051, 475, + 4051, 4051, 4051, 4051, 4051, 4051, 4052, 453, 4052, 4052, + + 440, 434, 4052, 4052, 4052, 4052, 4052, 422, 4052, 4052, + 4052, 4052, 4052, 4052, 4053, 413, 4053, 4053, 412, 393, + 4053, 4053, 4053, 4053, 4053, 392, 4053, 4053, 4053, 4053, + 4053, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, + 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4055, + 385, 4055, 4055, 383, 368, 4055, 4055, 4055, 4055, 4055, + 367, 4055, 4055, 4055, 4055, 4055, 4055, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, - 4056, 4056, 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, - 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, - 4058, 4058, 152, 4058, 4058, 4058, 4058, 4058, 4058, 4058, - - 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4059, 4059, - 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, - 4059, 4059, 4059, 4059, 4059, 4059, 4060, 4060, 4060, 4060, - 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060, - 4060, 4060, 4060, 4060, 4061, 4061, 4061, 4061, 4061, 4061, + 4056, 4056, 4056, 4056, 4056, 4057, 358, 4057, 4057, 357, + 347, 4057, 4057, 4057, 4057, 4057, 317, 4057, 4057, 4057, + + 4057, 4057, 4057, 4058, 4058, 4058, 4058, 4058, 4058, 4058, + 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, + 4058, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, + 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4060, + 316, 4060, 4060, 284, 268, 4060, 4060, 4060, 4060, 4060, + 261, 4060, 4060, 4060, 4060, 4060, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, - 4061, 4061, 4062, 146, 4062, 4062, 141, 117, 4062, 4062, - 4062, 4062, 4062, 75, 4062, 4062, 4062, 4062, 4062, 4062, - 4063, 64, 4063, 4063, 63, 58, 4063, 4063, 4063, 4063, - 4063, 57, 4063, 4063, 4063, 4063, 4063, 4063, 4064, 4064, - - 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, - 4064, 4064, 4064, 4064, 4064, 4064, 4065, 56, 4065, 4065, - 55, 54, 4065, 4065, 4065, 4065, 4065, 53, 4065, 4065, - 4065, 4065, 4065, 4065, 4066, 4066, 4066, 4066, 4066, 4066, + 4061, 4061, 4061, 4061, 4062, 4062, 4062, 4062, 4062, 4062, + 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062, + 4062, 4062, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, + + 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, + 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 259, + 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4065, 4065, + 4065, 4065, 4065, 4065, 4065, 4065, 4065, 4065, 4065, 4065, + 4065, 4065, 4065, 4065, 4065, 4065, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, - 4066, 4066, 4067, 52, 4067, 4067, 51, 26, 4067, 4067, - 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4068, + 4066, 4066, 4066, 4066, 4067, 4067, 4067, 4067, 4067, 4067, + 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, + 4067, 4067, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, - 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4069, 4069, 4069, - 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, - - 4069, 4069, 4069, 4069, 4069, 4070, 25, 4070, 4070, 24, - 23, 4070, 4070, 4070, 0, 4070, 4070, 4070, 4070, 4070, - 4070, 4070, 4070, 4071, 4071, 4071, 4071, 4071, 4071, 4071, - 0, 4071, 0, 4071, 4071, 4071, 4071, 4071, 4071, 4071, - 4071, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, - 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4073, - 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, - 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4074, 4074, 4074, - 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, - 4074, 4074, 4074, 4074, 4074, 4075, 4075, 4075, 4075, 4075, + 4069, 4069, 252, 4069, 4069, 4069, 4069, 4069, 4069, 4069, + 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4070, 4070, + 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070, + 4070, 4070, 4070, 4070, 4070, 4070, 4071, 4071, 4071, 4071, + 4071, 4071, 4071, 4071, 4071, 4071, 4071, 4071, 4071, 4071, + 4071, 4071, 4071, 4071, 4072, 4072, 4072, 4072, 4072, 4072, + 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, + 4072, 4072, 4073, 234, 4073, 4073, 229, 216, 4073, 4073, + 4073, 4073, 4073, 194, 4073, 4073, 4073, 4073, 4073, 4073, + 4074, 182, 4074, 4074, 175, 172, 4074, 4074, 4074, 4074, + + 4074, 165, 4074, 4074, 4074, 4074, 4074, 4074, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, - 4075, 4075, 4075, 4076, 4076, 0, 4076, 4076, 4076, 4076, - 4076, 4076, 4076, 4076, 4076, 4076, 4076, 4076, 4076, 4076, - 4076, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, - 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4078, - 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, - 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4079, 0, 0, - 4079, 0, 0, 4079, 4080, 0, 0, 0, 0, 0, - 4080, 4080, 4080, 0, 4080, 4080, 4080, 4080, 4080, 4080, - 4080, 4080, 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, - - 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, - 4082, 0, 0, 4082, 0, 4082, 4083, 4083, 4083, 4083, - 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, - 4083, 4083, 4083, 4083, 4084, 0, 0, 4084, 4084, 0, - 0, 4084, 0, 4084, 0, 4084, 4084, 4084, 4084, 4085, - 4085, 4085, 4085, 4086, 4086, 0, 4086, 4086, 4086, 4086, + 4075, 4075, 4075, 4075, 4075, 4075, 4076, 164, 4076, 4076, + 163, 154, 4076, 4076, 4076, 4076, 4076, 152, 4076, 4076, + 4076, 4076, 4076, 4076, 4077, 4077, 4077, 4077, 4077, 4077, + 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, + 4077, 4077, 4078, 146, 4078, 4078, 141, 117, 4078, 4078, + 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4079, + 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4079, + 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4080, 4080, 4080, + + 4080, 4080, 4080, 4080, 4080, 4080, 4080, 4080, 4080, 4080, + 4080, 4080, 4080, 4080, 4080, 4081, 75, 4081, 4081, 64, + 63, 4081, 4081, 4081, 58, 4081, 4081, 4081, 4081, 4081, + 4081, 4081, 4081, 4082, 4082, 4082, 4082, 4082, 4082, 4082, + 57, 4082, 56, 4082, 4082, 4082, 4082, 4082, 4082, 4082, + 4082, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4084, + 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, + 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4085, 4085, 4085, + 4085, 4085, 4085, 4085, 4085, 4085, 4085, 4085, 4085, 4085, + + 4085, 4085, 4085, 4085, 4085, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, - 4086, 4087, 4087, 0, 4087, 4087, 4087, 4087, 4087, 4087, - 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4088, - 0, 4088, 0, 4088, 4088, 4088, 4088, 4089, 4089, 4089, - + 4086, 4086, 4086, 4087, 4087, 55, 4087, 4087, 4087, 4087, + 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, + 4087, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, + 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, - 4089, 4089, 4089, 4089, 4089, 4090, 4090, 4090, 4090, 4090, - 4090, 4090, 4090, 4090, 4090, 4090, 4090, 4090, 4090, 4090, - 4090, 4090, 4090, 4091, 4091, 4091, 4091, 4091, 4091, 4091, - 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, - 4091, 4092, 4092, 0, 0, 4092, 4092, 4092, 4092, 4092, - 0, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4093, - 0, 0, 4093, 4093, 0, 0, 4093, 0, 4093, 0, - 4093, 4093, 4093, 4093, 4094, 4094, 4094, 4094, 4094, 4094, - 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, + 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4090, 54, 53, + 4090, 52, 51, 4090, 4091, 26, 25, 24, 23, 0, + 4091, 4091, 4091, 0, 4091, 4091, 4091, 4091, 4091, 4091, - 4094, 4094, 4095, 0, 4095, 4095, 0, 0, 4095, 4095, - 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4097, 0, - 0, 0, 0, 0, 4097, 4097, 4097, 0, 4097, 4097, - 4097, 4097, 4097, 4097, 4097, 4097, 4098, 4098, 0, 4098, - 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, - 4098, 4098, 4098, 4098, 4099, 4099, 0, 4099, 4099, 4099, - 4099, 4099, 4099, 4099, 4099, 4099, 4099, 4099, 4099, 4099, - 4099, 4099, 4100, 0, 0, 4100, 4100, 0, 0, 4100, - - 0, 4100, 0, 4100, 4100, 4100, 4100, 4101, 0, 0, - 0, 0, 0, 4101, 4101, 4101, 0, 4101, 4101, 4101, - 4101, 4101, 4101, 4101, 4101, 4102, 4102, 0, 4102, 4102, - 0, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, - 4102, 4102, 4103, 0, 4103, 0, 4103, 4103, 4103, 4103, - 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, - 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4105, 0, - 4105, 4105, 0, 0, 4105, 4105, 4105, 4105, 4105, 4105, - 4105, 4105, 4105, 4105, 4105, 4105, 4106, 4106, 4106, 4106, + 4091, 4091, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, + 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, + 4093, 0, 0, 4093, 0, 4093, 4094, 4094, 4094, 4094, + 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, + 4094, 4094, 4094, 4094, 4095, 0, 0, 4095, 4095, 0, + 0, 4095, 0, 4095, 0, 4095, 4095, 4095, 4095, 4096, + 4096, 4096, 4096, 4097, 4097, 0, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4098, 4098, 0, 4098, 4098, 4098, 4098, 4098, 4098, + 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4099, + + 0, 4099, 0, 4099, 4099, 4099, 4099, 4100, 4100, 4100, + 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, + 4100, 4100, 4100, 4100, 4100, 4101, 4101, 4101, 4101, 4101, + 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, + 4101, 4101, 4101, 4102, 4102, 4102, 4102, 4102, 4102, 4102, + 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, + 4102, 4103, 4103, 0, 0, 4103, 4103, 4103, 4103, 4103, + 0, 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4104, + 0, 0, 4104, 4104, 0, 0, 4104, 0, 4104, 0, + 4104, 4104, 4104, 4104, 4105, 4105, 4105, 4105, 4105, 4105, + + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4106, 0, 4106, 4106, 0, 0, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, - - 4106, 4106, 4106, 4106, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, - 4107, 4107, 4108, 0, 0, 4108, 4108, 0, 0, 4108, - 0, 4108, 0, 4108, 4108, 4108, 4108, 4109, 0, 4109, - 0, 4109, 4109, 4109, 4109, 4110, 0, 0, 4110, 4110, - 0, 0, 4110, 0, 4110, 0, 4110, 4110, 4110, 4110, - 4111, 4111, 0, 4111, 4111, 4111, 4111, 4111, 4111, 4111, - 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4112, 0, 4112, - 4112, 0, 0, 4112, 4112, 4112, 4112, 4112, 4112, 4112, - 4112, 4112, 4112, 4112, 4112, 4113, 4113, 4113, 4113, 4113, - - 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, - 4113, 4113, 4113, 4114, 4114, 4114, 4114, 4114, 4114, 4114, - 4114, 4114, 4114, 4114, 4114, 4114, 4114, 4114, 4114, 4114, - 4114, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, - 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4116, - 0, 4116, 4116, 0, 0, 4116, 4116, 4116, 4116, 4116, - 4116, 4116, 4116, 4116, 4116, 4116, 4116, 4117, 4117, 4117, + 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4108, 0, + 0, 0, 0, 0, 4108, 4108, 4108, 0, 4108, 4108, + 4108, 4108, 4108, 4108, 4108, 4108, 4109, 4109, 0, 4109, + 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109, + 4109, 4109, 4109, 4109, 4110, 4110, 0, 4110, 4110, 4110, + 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, + + 4110, 4110, 4111, 0, 0, 4111, 4111, 0, 0, 4111, + 0, 4111, 0, 4111, 4111, 4111, 4111, 4112, 0, 0, + 0, 0, 0, 4112, 4112, 4112, 0, 4112, 4112, 4112, + 4112, 4112, 4112, 4112, 4112, 4113, 4113, 0, 4113, 4113, + 0, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, + 4113, 4113, 4114, 0, 4114, 0, 4114, 4114, 4114, 4114, + 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, + 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4116, 0, + 4116, 4116, 0, 0, 4116, 4116, 4116, 4116, 4116, 4116, + 4116, 4116, 4116, 4116, 4116, 4116, 4117, 4117, 4117, 4117, + 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, - 4117, 4117, 4117, 4117, 4117, 4118, 4118, 4118, 4118, 4118, + 4117, 4117, 4117, 4117, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, - - 4118, 4118, 4118, 4119, 4119, 0, 4119, 4119, 4119, 4119, - 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, - 4119, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, - 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4121, - 4121, 0, 4121, 4121, 4121, 4121, 4121, 4121, 4121, 4121, - 4121, 4121, 4121, 4121, 4121, 4121, 4121, 4122, 4122, 4122, - 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4122, - 4122, 4122, 4122, 4122, 4122, 4123, 0, 4123, 0, 4123, - 4123, 4123, 4123, 4124, 0, 4124, 0, 4124, 4124, 4124, - 4124, 4125, 0, 0, 4125, 0, 0, 0, 4125, 0, - - 4125, 0, 4125, 4125, 4125, 4125, 4126, 0, 0, 4126, - 4126, 0, 0, 4126, 0, 4126, 0, 4126, 4126, 4126, - 4126, 4127, 0, 0, 4127, 0, 4127, 0, 4127, 4127, - 4127, 4127, 4128, 0, 4128, 0, 4128, 4128, 4128, 4128, - 4129, 0, 4129, 0, 4129, 4129, 4129, 4129, 4130, 4130, - 0, 4130, 4130, 0, 4130, 4130, 4130, 4130, 4130, 4130, - 4130, 4130, 4130, 4130, 4130, 4131, 0, 0, 4131, 4131, - 0, 0, 4131, 0, 4131, 0, 4131, 4131, 4131, 4131, - 4132, 4132, 0, 4132, 4132, 0, 4132, 4132, 4132, 4132, + 4118, 4118, 4119, 0, 0, 4119, 4119, 0, 0, 4119, + 0, 4119, 0, 4119, 4119, 4119, 4119, 4120, 0, 4120, + 0, 4120, 4120, 4120, 4120, 4121, 0, 0, 4121, 4121, + 0, 0, 4121, 0, 4121, 0, 4121, 4121, 4121, 4121, + 4122, 4122, 0, 4122, 4122, 4122, 4122, 4122, 4122, 4122, + 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4123, 0, 4123, + 4123, 0, 0, 4123, 4123, 4123, 4123, 4123, 4123, 4123, + + 4123, 4123, 4123, 4123, 4123, 4124, 4124, 4124, 4124, 4124, + 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, + 4124, 4124, 4124, 4125, 4125, 4125, 4125, 4125, 4125, 4125, + 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, + 4125, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, + 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4127, + 0, 4127, 4127, 0, 0, 4127, 4127, 4127, 4127, 4127, + 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4128, 4128, 4128, + 4128, 4128, 4128, 4128, 4128, 4128, 4128, 4128, 4128, 4128, + 4128, 4128, 4128, 4128, 4128, 4129, 4129, 4129, 4129, 4129, + + 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, + 4129, 4129, 4129, 4130, 4130, 0, 4130, 4130, 4130, 4130, + 4130, 4130, 4130, 4130, 4130, 4130, 4130, 4130, 4130, 4130, + 4130, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, + 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4132, + 4132, 0, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4133, 4133, 4133, - 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133, - 4133, 4133, 4133, 4133, 4133, 4134, 4134, 4134, 4134, 4134, - 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, - 4134, 4134, 4134, 4135, 4135, 4135, 4135, 4135, 4135, 4135, - 4135, 4135, 4135, 4135, 4135, 4135, 4135, 4135, 4135, 4135, - 4135, 4136, 0, 4136, 4136, 0, 0, 4136, 4136, 4136, - 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4137, - 0, 4137, 4137, 0, 0, 4137, 4137, 4137, 4137, 4137, - 4137, 4137, 4137, 4137, 4137, 4137, 4137, 4138, 4138, 4138, - 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, - - 4138, 4138, 4138, 4138, 4138, 4139, 4139, 4139, 4139, 4139, - 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, - 4139, 4139, 4139, 4140, 4140, 4140, 4140, 4140, 4140, 4140, - 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, - 4140, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, - 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4142, - 0, 4142, 4142, 0, 0, 4142, 4142, 4142, 4142, 4142, - 4142, 4142, 4142, 4142, 4142, 4142, 4142, 4143, 4143, 4143, - 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, - 4143, 4143, 4143, 4143, 4143, 4144, 4144, 4144, 4144, 4144, - + 4133, 4133, 4133, 4133, 4133, 4134, 0, 4134, 0, 4134, + 4134, 4134, 4134, 4135, 0, 4135, 0, 4135, 4135, 4135, + + 4135, 4136, 0, 0, 4136, 0, 0, 0, 4136, 0, + 4136, 0, 4136, 4136, 4136, 4136, 4137, 0, 0, 4137, + 4137, 0, 0, 4137, 0, 4137, 0, 4137, 4137, 4137, + 4137, 4138, 0, 0, 4138, 0, 4138, 0, 4138, 4138, + 4138, 4138, 4139, 0, 4139, 0, 4139, 4139, 4139, 4139, + 4140, 0, 4140, 0, 4140, 4140, 4140, 4140, 4141, 4141, + 0, 4141, 4141, 0, 4141, 4141, 4141, 4141, 4141, 4141, + 4141, 4141, 4141, 4141, 4141, 4142, 0, 0, 4142, 4142, + 0, 0, 4142, 0, 4142, 0, 4142, 4142, 4142, 4142, + 4143, 4143, 0, 4143, 4143, 0, 4143, 4143, 4143, 4143, + + 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, - 4144, 4144, 4144, 4145, 4145, 4145, 4145, 4145, 4145, 4145, + 4144, 4144, 4144, 4144, 4144, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, - 4145, 4146, 0, 4146, 4146, 0, 0, 4146, 4146, 4146, - 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4147, - 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, - 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4148, 4148, 4148, - 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, - 4148, 4148, 4148, 4148, 4148, 4149, 0, 0, 4149, 0, - 4149, 0, 4149, 4149, 4149, 4149, 4150, 0, 4150, 0, - - 4150, 4150, 4150, 4150, 4151, 0, 4151, 0, 4151, 4151, - 4151, 4151, 4152, 0, 4152, 0, 4152, 4152, 4152, 4152, - 4153, 0, 0, 4153, 0, 4153, 0, 4153, 4153, 4153, - 4153, 4154, 4154, 0, 4154, 4154, 0, 4154, 4154, 4154, - 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4155, 0, - 0, 4155, 4155, 0, 0, 4155, 0, 4155, 0, 4155, - 4155, 4155, 4155, 4156, 0, 4156, 0, 4156, 4156, 4156, - 4156, 4157, 0, 4157, 0, 4157, 4157, 4157, 4157, 4158, + 4145, 4145, 4145, 4146, 4146, 4146, 4146, 4146, 4146, 4146, + 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, + 4146, 4147, 0, 4147, 4147, 0, 0, 4147, 4147, 4147, + 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4148, + 0, 4148, 4148, 0, 0, 4148, 4148, 4148, 4148, 4148, + 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4149, 4149, 4149, + + 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, + 4149, 4149, 4149, 4149, 4149, 4150, 4150, 4150, 4150, 4150, + 4150, 4150, 4150, 4150, 4150, 4150, 4150, 4150, 4150, 4150, + 4150, 4150, 4150, 4151, 4151, 4151, 4151, 4151, 4151, 4151, + 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, + 4151, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, + 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4153, + 0, 4153, 4153, 0, 0, 4153, 4153, 4153, 4153, 4153, + 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4154, 4154, 4154, + 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, + + 4154, 4154, 4154, 4154, 4154, 4155, 4155, 4155, 4155, 4155, + 4155, 4155, 4155, 4155, 4155, 4155, 4155, 4155, 4155, 4155, + 4155, 4155, 4155, 4156, 4156, 4156, 4156, 4156, 4156, 4156, + 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, + 4156, 4157, 0, 4157, 4157, 0, 0, 4157, 4157, 4157, + 4157, 4157, 4157, 4157, 4157, 4157, 4157, 4157, 4157, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4159, 4159, 4159, - 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159, - 4159, 4159, 4159, 4159, 4159, 4160, 4160, 4160, 4160, 4160, - 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, - 4160, 4160, 4160, 4161, 4161, 4161, 4161, 4161, 4161, 4161, - 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, - 4161, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, - 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4163, - 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, - 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4164, 0, 4164, - 4164, 0, 0, 4164, 4164, 4164, 4164, 4164, 4164, 4164, - - 4164, 4164, 4164, 4164, 4164, 4165, 4165, 4165, 4165, 4165, - 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, - 4165, 4165, 4165, 4166, 4166, 4166, 4166, 4166, 4166, 4166, - 4166, 4166, 4166, 4166, 4166, 4166, 4166, 4166, 4166, 4166, - 4166, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, - 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4168, - 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, - 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4169, 4169, 0, - 4169, 4169, 0, 4169, 4169, 4169, 4169, 4169, 4169, 4169, - 4169, 4169, 4169, 4169, 4170, 0, 0, 4170, 4170, 0, - - 0, 4170, 0, 4170, 0, 4170, 4170, 4170, 4170, 4171, - 4171, 4171, 4171, 0, 4171, 4171, 4171, 4171, 4171, 4171, - 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4172, 0, 0, - 0, 0, 0, 4172, 4172, 4172, 0, 4172, 4172, 4172, - 4172, 4172, 4172, 4172, 4172, 4173, 4173, 4173, 4173, 4173, - 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, - 4173, 4173, 4173, 4174, 0, 4174, 0, 4174, 4174, 4174, - 4174, 4175, 4175, 0, 4175, 4175, 0, 4175, 4175, 4175, - 4175, 4175, 4175, 4175, 4175, 4175, 4175, 4175, 4176, 0, - 0, 4176, 4176, 0, 0, 0, 0, 0, 0, 4176, - - 4177, 4177, 0, 0, 0, 4177, 4177, 4177, 4177, 4177, - 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4178, 4178, - 0, 4178, 4178, 0, 4178, 4178, 4178, 4178, 4178, 4178, - 4178, 4178, 4178, 4178, 4178, 4179, 4179, 0, 4179, 4179, - 0, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, - 4179, 4179, 4180, 4180, 0, 4180, 4180, 4180, 4180, 4180, - 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4181, - 4181, 0, 4181, 4181, 4181, 4181, 4181, 4181, 4181, 4181, - 4181, 4181, 4181, 4181, 4181, 4181, 4182, 0, 4182, 0, - 4182, 0, 4182, 4182, 4182, 4182, 4183, 4183, 0, 4183, - - 4183, 0, 4183, 4183, 4183, 4183, 4183, 4183, 4183, 4183, - 4183, 4183, 4183, 4184, 4184, 0, 4184, 4184, 0, 4184, + 4159, 4159, 4159, 4159, 4159, 4160, 0, 0, 4160, 0, + + 4160, 0, 4160, 4160, 4160, 4160, 4161, 0, 4161, 0, + 4161, 4161, 4161, 4161, 4162, 0, 4162, 0, 4162, 4162, + 4162, 4162, 4163, 0, 4163, 0, 4163, 4163, 4163, 4163, + 4164, 0, 0, 4164, 0, 4164, 0, 4164, 4164, 4164, + 4164, 4165, 4165, 0, 4165, 4165, 0, 4165, 4165, 4165, + 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4166, 0, + 0, 4166, 4166, 0, 0, 4166, 0, 4166, 0, 4166, + 4166, 4166, 4166, 4167, 0, 4167, 0, 4167, 4167, 4167, + 4167, 4168, 0, 4168, 0, 4168, 4168, 4168, 4168, 4169, + 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4169, + + 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4170, 4170, 4170, + 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, + 4170, 4170, 4170, 4170, 4170, 4171, 4171, 4171, 4171, 4171, + 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, + 4171, 4171, 4171, 4172, 4172, 4172, 4172, 4172, 4172, 4172, + 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, + 4172, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, + 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4174, + 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4174, + 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4175, 0, 4175, + + 4175, 0, 0, 4175, 4175, 4175, 4175, 4175, 4175, 4175, + 4175, 4175, 4175, 4175, 4175, 4176, 4176, 4176, 4176, 4176, + 4176, 4176, 4176, 4176, 4176, 4176, 4176, 4176, 4176, 4176, + 4176, 4176, 4176, 4177, 4177, 4177, 4177, 4177, 4177, 4177, + 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, + 4177, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, + 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4179, + 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, + 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4180, 4180, 0, + 4180, 4180, 0, 4180, 4180, 4180, 4180, 4180, 4180, 4180, + + 4180, 4180, 4180, 4180, 4181, 0, 0, 4181, 4181, 0, + 0, 4181, 0, 4181, 0, 4181, 4181, 4181, 4181, 4182, + 4182, 4182, 4182, 0, 4182, 4182, 4182, 4182, 4182, 4182, + 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4183, 0, 0, + 0, 0, 0, 4183, 4183, 4183, 0, 4183, 4183, 4183, + 4183, 4183, 4183, 4183, 4183, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, - 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, - 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4186, 0, - 4186, 0, 4186, 0, 4186, 4186, 4186, 4186, 4187, 4187, - 0, 4187, 4187, 4187, 4187, 4187, 4187, 4187, 4187, 4187, - 4187, 4187, 4187, 4187, 4187, 4187, 4188, 4188, 0, 4188, - 4188, 0, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, - 4188, 4188, 4188, 4189, 4189, 0, 0, 4189, 4189, 4189, - - 4189, 4189, 0, 4189, 4189, 4189, 4189, 4189, 4189, 4189, - 4189, 4190, 4190, 0, 4190, 4190, 0, 4190, 4190, 4190, - 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4191, 0, - 0, 0, 0, 0, 4191, 4191, 4191, 0, 4191, 4191, - 4191, 4191, 4191, 4191, 4191, 4191, 4192, 0, 0, 0, - 0, 0, 4192, 4192, 4192, 0, 4192, 4192, 4192, 4192, - 4192, 4192, 4192, 4192, 4193, 0, 0, 4193, 4193, 0, - 0, 4193, 0, 4193, 0, 4193, 4193, 4193, 4193, 4194, - 4194, 0, 4194, 4194, 0, 4194, 4194, 4194, 4194, 4194, - 4194, 4194, 4194, 4194, 4194, 4194, 4195, 0, 0, 0, - - 0, 0, 4195, 4195, 4195, 0, 4195, 4195, 4195, 4195, - 4195, 4195, 4195, 4195, 4196, 0, 4196, 0, 4196, 4196, - 4196, 4196, 4197, 4197, 0, 4197, 4197, 0, 4197, 4197, - 4197, 4197, 4197, 4197, 4197, 4197, 4197, 4197, 4197, 4198, - 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, - 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4199, 4199, 0, - 4199, 4199, 0, 4199, 4199, 4199, 4199, 4199, 4199, 4199, - 4199, 4199, 4199, 4199, 4200, 4200, 0, 0, 4200, 4200, - 4200, 4200, 4200, 0, 4200, 4200, 4200, 4200, 4200, 4200, - 4200, 4200, 4201, 4201, 0, 0, 4201, 4201, 4201, 4201, - - 4201, 0, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, - 4202, 4202, 0, 4202, 4202, 0, 4202, 4202, 4202, 4202, - 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4203, 4203, 0, - 4203, 4203, 0, 4203, 4203, 4203, 4203, 4203, 4203, 4203, - 4203, 4203, 4203, 4203, 4204, 4204, 0, 0, 4204, 4204, - 4204, 4204, 4204, 0, 4204, 4204, 4204, 4204, 4204, 4204, - 4204, 4204, 4205, 4205, 0, 0, 4205, 4205, 4205, 4205, - 4205, 0, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, - 4206, 0, 4206, 0, 4206, 0, 4206, 4206, 4206, 4206, - 4207, 4207, 0, 4207, 4207, 4207, 4207, 4207, 4207, 4207, - - 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4208, 4208, 0, - 4208, 4208, 0, 4208, 4208, 4208, 4208, 4208, 4208, 4208, - 4208, 4208, 4208, 4208, 4209, 4209, 0, 4209, 4209, 0, + 4184, 4184, 4184, 4185, 0, 4185, 0, 4185, 4185, 4185, + 4185, 4186, 4186, 0, 4186, 4186, 0, 4186, 4186, 4186, + 4186, 4186, 4186, 4186, 4186, 4186, 4186, 4186, 4187, 0, + + 0, 4187, 4187, 0, 0, 0, 0, 0, 0, 4187, + 4188, 4188, 0, 0, 0, 4188, 4188, 4188, 4188, 4188, + 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4189, 4189, + 0, 4189, 4189, 0, 4189, 4189, 4189, 4189, 4189, 4189, + 4189, 4189, 4189, 4189, 4189, 4190, 4190, 0, 4190, 4190, + 0, 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4190, + 4190, 4190, 4191, 4191, 0, 4191, 4191, 4191, 4191, 4191, + 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4192, + 4192, 0, 4192, 4192, 4192, 4192, 4192, 4192, 4192, 4192, + 4192, 4192, 4192, 4192, 4192, 4192, 4193, 0, 4193, 0, + + 4193, 0, 4193, 4193, 4193, 4193, 4194, 4194, 0, 4194, + 4194, 0, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, + 4194, 4194, 4194, 4195, 4195, 0, 4195, 4195, 0, 4195, + 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, + 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, + 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4197, 0, + 4197, 0, 4197, 0, 4197, 4197, 4197, 4197, 4198, 4198, + 0, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, + 4198, 4198, 4198, 4198, 4198, 4198, 4199, 4199, 0, 4199, + 4199, 0, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, + + 4199, 4199, 4199, 4200, 4200, 0, 0, 4200, 4200, 4200, + 4200, 4200, 0, 4200, 4200, 4200, 4200, 4200, 4200, 4200, + 4200, 4201, 4201, 0, 4201, 4201, 0, 4201, 4201, 4201, + 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4202, 0, + 0, 0, 0, 0, 4202, 4202, 4202, 0, 4202, 4202, + 4202, 4202, 4202, 4202, 4202, 4202, 4203, 0, 0, 0, + 0, 0, 4203, 4203, 4203, 0, 4203, 4203, 4203, 4203, + 4203, 4203, 4203, 4203, 4204, 0, 0, 4204, 4204, 0, + 0, 4204, 0, 4204, 0, 4204, 4204, 4204, 4204, 4205, + 4205, 0, 4205, 4205, 0, 4205, 4205, 4205, 4205, 4205, + + 4205, 4205, 4205, 4205, 4205, 4205, 4206, 0, 0, 0, + 0, 0, 4206, 4206, 4206, 0, 4206, 4206, 4206, 4206, + 4206, 4206, 4206, 4206, 4207, 0, 4207, 0, 4207, 4207, + 4207, 4207, 4208, 4208, 0, 4208, 4208, 0, 4208, 4208, + 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, - 4209, 4210, 0, 4210, 0, 4210, 0, 4210, 4210, 4210, - 4210, 4211, 0, 0, 0, 0, 0, 4211, 4211, 4211, - 0, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926 + 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4210, 4210, 0, + 4210, 4210, 0, 4210, 4210, 4210, 4210, 4210, 4210, 4210, + 4210, 4210, 4210, 4210, 4211, 4211, 0, 0, 4211, 4211, + 4211, 4211, 4211, 0, 4211, 4211, 4211, 4211, 4211, 4211, + + 4211, 4211, 4212, 4212, 0, 0, 4212, 4212, 4212, 4212, + 4212, 0, 4212, 4212, 4212, 4212, 4212, 4212, 4212, 4212, + 4213, 4213, 0, 4213, 4213, 0, 4213, 4213, 4213, 4213, + 4213, 4213, 4213, 4213, 4213, 4213, 4213, 4214, 4214, 0, + 4214, 4214, 0, 4214, 4214, 4214, 4214, 4214, 4214, 4214, + 4214, 4214, 4214, 4214, 4215, 4215, 0, 0, 4215, 4215, + 4215, 4215, 4215, 0, 4215, 4215, 4215, 4215, 4215, 4215, + 4215, 4215, 4216, 4216, 0, 0, 4216, 4216, 4216, 4216, + 4216, 0, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, + 4217, 0, 4217, 0, 4217, 0, 4217, 4217, 4217, 4217, + + 4218, 4218, 0, 4218, 4218, 4218, 4218, 4218, 4218, 4218, + 4218, 4218, 4218, 4218, 4218, 4218, 4218, 4219, 4219, 0, + 4219, 4219, 0, 4219, 4219, 4219, 4219, 4219, 4219, 4219, + 4219, 4219, 4219, 4219, 4220, 4220, 0, 4220, 4220, 0, + 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, + 4220, 4221, 0, 4221, 0, 4221, 0, 4221, 4221, 4221, + 4221, 4222, 0, 0, 0, 0, 0, 4222, 4222, 4222, + 0, 4222, 4222, 4222, 4222, 4222, 4222, 4222, 4222, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937 } ; static yy_state_type yy_last_accepting_state; @@ -5009,67 +5014,67 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[540] = +static const flex_int16_t yy_rule_linenum[541] = { 0, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 563, 564, 567, 568, - 569, 570, 571, 572, 573, 575, 576, 577, 578, 579, - 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - - 610, 611, 613, 614, 615, 616, 617, 621, 626, 627, - 632, 633, 634, 639, 640, 641, 646, 651, 652, 653, - 658, 659, 663, 664, 665, 669, 670, 674, 675, 679, - 680, 681, 685, 686, 690, 691, 696, 697, 698, 702, - 706, 707, 715, 720, 721, 726, 727, 728, 737, 740, - 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, - 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, - 761, 762, 763, 766, 767, 768, 769, 770, 771, 772, - 773, 775, 776, 777, 778, 779, 780, 781, 782, 783, - 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, - - 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, - 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, - 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, - 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, - 844, 845, 846, 847, 848, 849, 850, 852, 853, 854, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, - 868, 872, 873, 874, 875, 876, 880, 881, 882, 883, - 884, 885, 889, 890, 891, 892, 897, 898, 899, 900, - 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, - - 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, - 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, - 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, - 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, - 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1020, 1021, 1022, - 1023, 1024, 1025, 1026, 1027, 1028, 1032, 1033, 1034, 1035, - 1036, 1037, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1052, 1053, 1054, 1055, 1056, 1061, 1062, 1063, 1064, - 1065, 1066, 1068, 1069, 1071, 1072, 1078, 1079, 1080, 1081, - 1082, 1083, 1086, 1087, 1088, 1089, 1090, 1091, 1095, 1096, - 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, - 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, - 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1127, - 1128, 1133, 1137, 1141, 1142, 1146, 1147, 1150, 1151, 1155, - - 1156, 1160, 1161, 1165, 1166, 1171, 1173, 1174, 1175, 1176, - 1178, 1179, 1180, 1181, 1183, 1184, 1185, 1186, 1188, 1190, - 1191, 1193, 1194, 1195, 1196, 1198, 1203, 1204, 1205, 1209, - 1210, 1211, 1216, 1218, 1219, 1220, 1239, 1266, 1296 + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 564, 565, 568, 569, + 570, 571, 572, 573, 574, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + + 611, 612, 613, 615, 616, 617, 618, 619, 623, 628, + 629, 634, 635, 636, 641, 642, 643, 648, 653, 654, + 655, 660, 661, 665, 666, 667, 671, 672, 676, 677, + 681, 682, 683, 687, 688, 692, 693, 698, 699, 700, + 704, 708, 709, 717, 722, 723, 728, 729, 730, 739, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, + 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 768, 769, 770, 771, 772, 773, + 774, 775, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, + 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 854, 855, + 856, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 870, 874, 875, 876, 877, 878, 882, 883, 884, + 885, 886, 887, 891, 892, 893, 894, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, + 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1034, 1035, 1036, + 1037, 1038, 1039, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1063, 1064, 1065, + 1066, 1067, 1068, 1070, 1071, 1073, 1074, 1080, 1081, 1082, + 1083, 1084, 1085, 1088, 1089, 1090, 1091, 1092, 1093, 1097, + 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, + 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, + 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, + 1129, 1130, 1135, 1139, 1143, 1144, 1148, 1149, 1152, 1153, + + 1157, 1158, 1162, 1163, 1167, 1168, 1173, 1175, 1176, 1177, + 1178, 1180, 1181, 1182, 1183, 1185, 1186, 1187, 1188, 1190, + 1192, 1193, 1195, 1196, 1197, 1198, 1200, 1205, 1206, 1207, + 1211, 1212, 1213, 1218, 1220, 1221, 1222, 1241, 1268, 1298 } ; /* The intent behind this definition is that it'll catch @@ -5155,15 +5160,15 @@ static std::stack YY_PREVIOUS_STATE; #define BEGIN_PREVIOUS() { BEGIN(YY_PREVIOUS_STATE.top()); YY_PREVIOUS_STATE.pop(); } // The location of the current token. -#line 5158 "seclang-scanner.cc" +#line 5164 "seclang-scanner.cc" #define YY_NO_INPUT 1 -#line 492 "seclang-scanner.ll" +#line 493 "seclang-scanner.ll" // Code run each time a pattern is matched. # define YY_USER_ACTION driver.loc.back()->columns (yyleng); -#line 5165 "seclang-scanner.cc" -#line 5166 "seclang-scanner.cc" +#line 5171 "seclang-scanner.cc" +#line 5172 "seclang-scanner.cc" #define INITIAL 0 #define EXPECTING_ACTION_PREDICATE_VARIABLE 1 @@ -5477,15 +5482,15 @@ YY_DECL { /* %% [7.0] user's declarations go here */ -#line 497 "seclang-scanner.ll" +#line 498 "seclang-scanner.ll" -#line 501 "seclang-scanner.ll" +#line 502 "seclang-scanner.ll" // Code run each time yylex is called. driver.loc.back()->step(); -#line 5488 "seclang-scanner.cc" +#line 5494 "seclang-scanner.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -5514,13 +5519,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3927 ) + if ( yy_current_state >= 3938 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 3926 ); + while ( yy_current_state != 3937 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -5539,13 +5544,13 @@ YY_DECL { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 540 ) + else if ( yy_act < 541 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 540 ) + else if ( yy_act == 541 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 541 ) + else if ( yy_act == 542 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -5563,2770 +5568,2769 @@ YY_DECL case 1: YY_RULE_SETUP -#line 505 "seclang-scanner.ll" +#line 506 "seclang-scanner.ll" { return p::make_ACTION_APPEND(yytext, *driver.loc.back()); } YY_BREAK case 2: YY_RULE_SETUP -#line 506 "seclang-scanner.ll" +#line 507 "seclang-scanner.ll" { return p::make_ACTION_BLOCK(yytext, *driver.loc.back()); } YY_BREAK case 3: YY_RULE_SETUP -#line 507 "seclang-scanner.ll" +#line 508 "seclang-scanner.ll" { return p::make_ACTION_CAPTURE(yytext, *driver.loc.back()); } YY_BREAK case 4: YY_RULE_SETUP -#line 508 "seclang-scanner.ll" +#line 509 "seclang-scanner.ll" { return p::make_ACTION_CHAIN(yytext, *driver.loc.back()); } YY_BREAK case 5: YY_RULE_SETUP -#line 509 "seclang-scanner.ll" +#line 510 "seclang-scanner.ll" { return p::make_ACTION_DENY(yytext, *driver.loc.back()); } YY_BREAK case 6: YY_RULE_SETUP -#line 510 "seclang-scanner.ll" +#line 511 "seclang-scanner.ll" { return p::make_ACTION_DEPRECATE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 7: YY_RULE_SETUP -#line 511 "seclang-scanner.ll" +#line 512 "seclang-scanner.ll" { return p::make_ACTION_DROP(yytext, *driver.loc.back()); } YY_BREAK case 8: YY_RULE_SETUP -#line 512 "seclang-scanner.ll" +#line 513 "seclang-scanner.ll" { return p::make_ACTION_ID(yytext, *driver.loc.back()); } YY_BREAK case 9: YY_RULE_SETUP -#line 513 "seclang-scanner.ll" +#line 514 "seclang-scanner.ll" { return p::make_ACTION_LOG(yytext, *driver.loc.back()); } YY_BREAK case 10: YY_RULE_SETUP -#line 514 "seclang-scanner.ll" +#line 515 "seclang-scanner.ll" { return p::make_ACTION_MULTI_MATCH(yytext, *driver.loc.back()); } YY_BREAK case 11: YY_RULE_SETUP -#line 515 "seclang-scanner.ll" +#line 516 "seclang-scanner.ll" { return p::make_ACTION_NO_AUDIT_LOG(yytext, *driver.loc.back()); } YY_BREAK case 12: YY_RULE_SETUP -#line 516 "seclang-scanner.ll" +#line 517 "seclang-scanner.ll" { return p::make_ACTION_NO_LOG(yytext, *driver.loc.back()); } YY_BREAK case 13: YY_RULE_SETUP -#line 517 "seclang-scanner.ll" +#line 518 "seclang-scanner.ll" { return p::make_ACTION_PASS(yytext, *driver.loc.back()); } YY_BREAK case 14: YY_RULE_SETUP -#line 518 "seclang-scanner.ll" +#line 519 "seclang-scanner.ll" { return p::make_ACTION_PAUSE(yytext, *driver.loc.back()); } YY_BREAK case 15: YY_RULE_SETUP -#line 519 "seclang-scanner.ll" +#line 520 "seclang-scanner.ll" { return p::make_ACTION_PREPEND(yytext, *driver.loc.back()); } YY_BREAK case 16: YY_RULE_SETUP -#line 520 "seclang-scanner.ll" +#line 521 "seclang-scanner.ll" { return p::make_ACTION_PROXY(yytext, *driver.loc.back()); } YY_BREAK case 17: YY_RULE_SETUP -#line 521 "seclang-scanner.ll" +#line 522 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_ARG(yytext, *driver.loc.back()); } YY_BREAK case 18: YY_RULE_SETUP -#line 522 "seclang-scanner.ll" +#line 523 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_MATCHED(yytext, *driver.loc.back()); } YY_BREAK case 19: YY_RULE_SETUP -#line 523 "seclang-scanner.ll" +#line 524 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_MATCHED_BYTES(yytext, *driver.loc.back()); } YY_BREAK case 20: YY_RULE_SETUP -#line 524 "seclang-scanner.ll" +#line 525 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_REQUEST_HEADER(yytext, *driver.loc.back()); } YY_BREAK case 21: YY_RULE_SETUP -#line 525 "seclang-scanner.ll" +#line 526 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_RESPONSE_HEADER(yytext, *driver.loc.back()); } YY_BREAK case 22: YY_RULE_SETUP -#line 526 "seclang-scanner.ll" +#line 527 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETRSC(yytext, *driver.loc.back()); } YY_BREAK case 23: YY_RULE_SETUP -#line 528 "seclang-scanner.ll" +#line 529 "seclang-scanner.ll" { return p::make_ACTION_STATUS(yytext, *driver.loc.back()); } YY_BREAK case 24: /* rule 24 can match eol */ YY_RULE_SETUP -#line 529 "seclang-scanner.ll" +#line 530 "seclang-scanner.ll" { return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } YY_BREAK case 25: /* rule 25 can match eol */ YY_RULE_SETUP -#line 530 "seclang-scanner.ll" +#line 531 "seclang-scanner.ll" { return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } YY_BREAK case 26: YY_RULE_SETUP -#line 531 "seclang-scanner.ll" +#line 532 "seclang-scanner.ll" { return p::make_ACTION_ALLOW(yytext, *driver.loc.back()); } YY_BREAK case 27: YY_RULE_SETUP -#line 532 "seclang-scanner.ll" +#line 533 "seclang-scanner.ll" { return p::make_ACTION_AUDIT_LOG(yytext, *driver.loc.back()); } YY_BREAK case 28: YY_RULE_SETUP -#line 533 "seclang-scanner.ll" +#line 534 "seclang-scanner.ll" { return p::make_ACTION_CTL_AUDIT_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 29: YY_RULE_SETUP -#line 534 "seclang-scanner.ll" +#line 535 "seclang-scanner.ll" { return p::make_ACTION_CTL_AUDIT_LOG_PARTS(yytext, *driver.loc.back()); } YY_BREAK case 30: YY_RULE_SETUP -#line 535 "seclang-scanner.ll" +#line 536 "seclang-scanner.ll" { return p::make_ACTION_CTL_BDY_JSON(yytext, *driver.loc.back()); } YY_BREAK case 31: YY_RULE_SETUP -#line 536 "seclang-scanner.ll" +#line 537 "seclang-scanner.ll" { return p::make_ACTION_CTL_BDY_XML(yytext, *driver.loc.back()); } YY_BREAK case 32: YY_RULE_SETUP -#line 537 "seclang-scanner.ll" +#line 538 "seclang-scanner.ll" { return p::make_ACTION_CTL_BDY_URLENCODED(yytext, *driver.loc.back()); } YY_BREAK case 33: YY_RULE_SETUP -#line 538 "seclang-scanner.ll" +#line 539 "seclang-scanner.ll" { return p::make_ACTION_CTL_FORCE_REQ_BODY_VAR(yytext, *driver.loc.back()); } YY_BREAK case 34: YY_RULE_SETUP -#line 539 "seclang-scanner.ll" +#line 540 "seclang-scanner.ll" { return p::make_ACTION_CTL_REQUEST_BODY_ACCESS(yytext, *driver.loc.back()); } YY_BREAK case 35: YY_RULE_SETUP -#line 540 "seclang-scanner.ll" +#line 541 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_ENGINE(*driver.loc.back()); } YY_BREAK case 36: YY_RULE_SETUP -#line 541 "seclang-scanner.ll" +#line 542 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_BY_ID(yytext, *driver.loc.back()); } YY_BREAK case 37: YY_RULE_SETUP -#line 542 "seclang-scanner.ll" +#line 543 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_BY_TAG(yytext, *driver.loc.back()); } YY_BREAK case 38: YY_RULE_SETUP -#line 543 "seclang-scanner.ll" +#line 544 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID(yytext, *driver.loc.back()); } YY_BREAK case 39: YY_RULE_SETUP -#line 544 "seclang-scanner.ll" +#line 545 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG(yytext, *driver.loc.back()); } YY_BREAK case 40: /* rule 40 can match eol */ YY_RULE_SETUP -#line 545 "seclang-scanner.ll" +#line 546 "seclang-scanner.ll" { return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } YY_BREAK case 41: /* rule 41 can match eol */ YY_RULE_SETUP -#line 546 "seclang-scanner.ll" +#line 547 "seclang-scanner.ll" { return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } YY_BREAK case 42: /* rule 42 can match eol */ YY_RULE_SETUP -#line 547 "seclang-scanner.ll" +#line 548 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 43: /* rule 43 can match eol */ YY_RULE_SETUP -#line 548 "seclang-scanner.ll" +#line 549 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 44: /* rule 44 can match eol */ YY_RULE_SETUP -#line 549 "seclang-scanner.ll" +#line 550 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 45: /* rule 45 can match eol */ YY_RULE_SETUP -#line 550 "seclang-scanner.ll" +#line 551 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 46: YY_RULE_SETUP -#line 551 "seclang-scanner.ll" +#line 552 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_INITCOL(yytext, *driver.loc.back()); } YY_BREAK case 47: /* rule 47 can match eol */ YY_RULE_SETUP -#line 552 "seclang-scanner.ll" +#line 553 "seclang-scanner.ll" { return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP -#line 553 "seclang-scanner.ll" +#line 554 "seclang-scanner.ll" { return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } YY_BREAK case 49: YY_RULE_SETUP -#line 554 "seclang-scanner.ll" +#line 555 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_MSG(yytext, *driver.loc.back()); } YY_BREAK case 50: YY_RULE_SETUP -#line 555 "seclang-scanner.ll" +#line 556 "seclang-scanner.ll" { return p::make_ACTION_PHASE(yytext, *driver.loc.back()); } YY_BREAK case 51: YY_RULE_SETUP -#line 556 "seclang-scanner.ll" +#line 557 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_REDIRECT(yytext, *driver.loc.back()); } YY_BREAK case 52: /* rule 52 can match eol */ YY_RULE_SETUP -#line 557 "seclang-scanner.ll" +#line 558 "seclang-scanner.ll" { return p::make_ACTION_REV(yytext, *driver.loc.back()); } YY_BREAK case 53: /* rule 53 can match eol */ YY_RULE_SETUP -#line 558 "seclang-scanner.ll" +#line 559 "seclang-scanner.ll" { return p::make_ACTION_REV(yytext, *driver.loc.back()); } YY_BREAK case 54: YY_RULE_SETUP -#line 559 "seclang-scanner.ll" +#line 560 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETENV(yytext, *driver.loc.back()); } YY_BREAK case 55: YY_RULE_SETUP -#line 560 "seclang-scanner.ll" +#line 561 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETSID(yytext, *driver.loc.back()); } YY_BREAK case 56: YY_RULE_SETUP -#line 561 "seclang-scanner.ll" +#line 562 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETUID(yytext, *driver.loc.back()); } YY_BREAK case 57: YY_RULE_SETUP -#line 563 "seclang-scanner.ll" +#line 564 "seclang-scanner.ll" { BEGIN(SETVAR_ACTION_QUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } YY_BREAK case 58: YY_RULE_SETUP -#line 564 "seclang-scanner.ll" +#line 565 "seclang-scanner.ll" { BEGIN(SETVAR_ACTION_NONQUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } YY_BREAK case 59: YY_RULE_SETUP -#line 567 "seclang-scanner.ll" +#line 568 "seclang-scanner.ll" { return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } YY_BREAK case 60: YY_RULE_SETUP -#line 568 "seclang-scanner.ll" +#line 569 "seclang-scanner.ll" { return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } YY_BREAK case 61: YY_RULE_SETUP -#line 569 "seclang-scanner.ll" +#line 570 "seclang-scanner.ll" { return p::make_ACTION_SKIP_AFTER(yytext, *driver.loc.back()); } YY_BREAK case 62: YY_RULE_SETUP -#line 570 "seclang-scanner.ll" +#line 571 "seclang-scanner.ll" { return p::make_ACTION_SKIP(yytext, *driver.loc.back()); } YY_BREAK case 63: YY_RULE_SETUP -#line 571 "seclang-scanner.ll" +#line 572 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_TAG(yytext, *driver.loc.back()); } YY_BREAK case 64: /* rule 64 can match eol */ YY_RULE_SETUP -#line 572 "seclang-scanner.ll" +#line 573 "seclang-scanner.ll" { return p::make_ACTION_VER(yytext, *driver.loc.back()); } YY_BREAK case 65: YY_RULE_SETUP -#line 573 "seclang-scanner.ll" +#line 574 "seclang-scanner.ll" { return p::make_ACTION_XMLNS(yytext, *driver.loc.back()); } YY_BREAK case 66: YY_RULE_SETUP -#line 575 "seclang-scanner.ll" +#line 576 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT(yytext, *driver.loc.back()); } YY_BREAK case 67: YY_RULE_SETUP -#line 576 "seclang-scanner.ll" +#line 577 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT(yytext, *driver.loc.back()); } YY_BREAK case 68: YY_RULE_SETUP -#line 577 "seclang-scanner.ll" +#line 578 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT(yytext, *driver.loc.back()); } YY_BREAK case 69: YY_RULE_SETUP -#line 578 "seclang-scanner.ll" +#line 579 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_SQL_HEX_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 70: YY_RULE_SETUP -#line 579 "seclang-scanner.ll" +#line 580 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_BASE_64_ENCODE(yytext, *driver.loc.back()); } YY_BREAK case 71: YY_RULE_SETUP -#line 580 "seclang-scanner.ll" +#line 581 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 72: YY_RULE_SETUP -#line 581 "seclang-scanner.ll" +#line 582 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT(yytext, *driver.loc.back()); } YY_BREAK case 73: YY_RULE_SETUP -#line 582 "seclang-scanner.ll" +#line 583 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_CMD_LINE(yytext, *driver.loc.back()); } YY_BREAK case 74: YY_RULE_SETUP -#line 583 "seclang-scanner.ll" +#line 584 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_SHA1(yytext, *driver.loc.back()); } YY_BREAK case 75: YY_RULE_SETUP -#line 584 "seclang-scanner.ll" +#line 585 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_MD5(yytext, *driver.loc.back()); } YY_BREAK case 76: YY_RULE_SETUP -#line 585 "seclang-scanner.ll" +#line 586 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 77: YY_RULE_SETUP -#line 586 "seclang-scanner.ll" +#line 587 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.loc.back()); } YY_BREAK case 78: YY_RULE_SETUP -#line 587 "seclang-scanner.ll" +#line 588 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 79: YY_RULE_SETUP -#line 588 "seclang-scanner.ll" +#line 589 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.loc.back()); } YY_BREAK case 80: YY_RULE_SETUP -#line 589 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } +#line 590 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.loc.back()); } YY_BREAK case 81: YY_RULE_SETUP -#line 590 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } +#line 591 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } YY_BREAK case 82: YY_RULE_SETUP -#line 591 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } +#line 592 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } YY_BREAK case 83: YY_RULE_SETUP -#line 592 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.loc.back()); } +#line 593 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } YY_BREAK case 84: YY_RULE_SETUP -#line 593 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.loc.back()); } +#line 594 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 85: YY_RULE_SETUP -#line 594 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.loc.back()); } +#line 595 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.loc.back()); } YY_BREAK case 86: YY_RULE_SETUP -#line 595 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.loc.back()); } +#line 596 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.loc.back()); } YY_BREAK case 87: YY_RULE_SETUP -#line 596 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.loc.back()); } +#line 597 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.loc.back()); } YY_BREAK case 88: YY_RULE_SETUP -#line 597 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.loc.back()); } +#line 598 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.loc.back()); } YY_BREAK case 89: YY_RULE_SETUP -#line 598 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.loc.back()); } +#line 599 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.loc.back()); } YY_BREAK case 90: YY_RULE_SETUP -#line 599 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.loc.back()); } +#line 600 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 91: YY_RULE_SETUP -#line 600 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.loc.back()); } +#line 601 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 92: YY_RULE_SETUP -#line 601 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.loc.back()); } +#line 602 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 93: YY_RULE_SETUP -#line 602 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.loc.back()); } +#line 603 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.loc.back()); } YY_BREAK case 94: YY_RULE_SETUP -#line 603 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.loc.back()); } +#line 604 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.loc.back()); } YY_BREAK case 95: YY_RULE_SETUP -#line 604 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.loc.back()); } +#line 605 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.loc.back()); } YY_BREAK case 96: YY_RULE_SETUP -#line 605 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.loc.back()); } +#line 606 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.loc.back()); } YY_BREAK case 97: YY_RULE_SETUP -#line 606 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.loc.back()); } +#line 607 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.loc.back()); } YY_BREAK case 98: YY_RULE_SETUP -#line 607 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.loc.back()); } +#line 608 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.loc.back()); } YY_BREAK case 99: YY_RULE_SETUP -#line 608 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.loc.back()); } +#line 609 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.loc.back()); } YY_BREAK case 100: YY_RULE_SETUP -#line 609 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.loc.back()); } +#line 610 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.loc.back()); } YY_BREAK case 101: YY_RULE_SETUP -#line 610 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.loc.back()); } +#line 611 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.loc.back()); } YY_BREAK case 102: YY_RULE_SETUP -#line 611 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.loc.back()); } +#line 612 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.loc.back()); } YY_BREAK case 103: YY_RULE_SETUP #line 613 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.loc.back()); } YY_BREAK case 104: YY_RULE_SETUP -#line 614 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } +#line 615 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } YY_BREAK case 105: YY_RULE_SETUP -#line 615 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } +#line 616 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } YY_BREAK case 106: -/* rule 106 can match eol */ YY_RULE_SETUP -#line 616 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 617 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } YY_BREAK case 107: /* rule 107 can match eol */ YY_RULE_SETUP -#line 617 "seclang-scanner.ll" +#line 618 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - - case 108: +/* rule 108 can match eol */ YY_RULE_SETUP -#line 621 "seclang-scanner.ll" -{ return p::make_COMMA(*driver.loc.back()); } +#line 619 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK case 109: -/* rule 109 can match eol */ YY_RULE_SETUP -#line 626 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 623 "seclang-scanner.ll" +{ return p::make_COMMA(*driver.loc.back()); } YY_BREAK + + case 110: /* rule 110 can match eol */ YY_RULE_SETUP -#line 627 "seclang-scanner.ll" +#line 628 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - - case 111: +/* rule 111 can match eol */ YY_RULE_SETUP -#line 632 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); } +#line 629 "seclang-scanner.ll" +{ BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK + + case 112: -/* rule 112 can match eol */ YY_RULE_SETUP -#line 633 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(1); } +#line 634 "seclang-scanner.ll" +{ BEGIN(INITIAL); yyless(yyleng); } YY_BREAK case 113: /* rule 113 can match eol */ YY_RULE_SETUP -#line 634 "seclang-scanner.ll" +#line 635 "seclang-scanner.ll" +{ BEGIN(INITIAL); yyless(1); } + YY_BREAK +case 114: +/* rule 114 can match eol */ +YY_RULE_SETUP +#line 636 "seclang-scanner.ll" { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 639 "seclang-scanner.ll" +#line 641 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(yyleng); p::make_NEW_LINE(*driver.loc.back()); } YY_BREAK -case 115: -/* rule 115 can match eol */ +case 116: +/* rule 116 can match eol */ YY_RULE_SETUP -#line 640 "seclang-scanner.ll" +#line 642 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(1); } YY_BREAK -case 116: -/* rule 116 can match eol */ +case 117: +/* rule 117 can match eol */ YY_RULE_SETUP -#line 641 "seclang-scanner.ll" +#line 643 "seclang-scanner.ll" { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 646 "seclang-scanner.ll" +#line 648 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_ACTION); yyless(0); } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 651 "seclang-scanner.ll" +#line 653 "seclang-scanner.ll" { BEGIN(ACTION_PREDICATE_ENDS_WITH_QUOTE); } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 652 "seclang-scanner.ll" +#line 654 "seclang-scanner.ll" { BEGIN(ACTION_PREDICATE_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 653 "seclang-scanner.ll" +#line 655 "seclang-scanner.ll" { BEGIN(ACTION_PREDICATE_ENDS_WITH_COMMA_OR_DOUBLE_QUOTE); yyless(0); } YY_BREAK -case 121: -/* rule 121 can match eol */ +case 122: +/* rule 122 can match eol */ YY_RULE_SETUP -#line 658 "seclang-scanner.ll" +#line 660 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 122: -/* rule 122 can match eol */ +case 123: +/* rule 123 can match eol */ YY_RULE_SETUP -#line 659 "seclang-scanner.ll" +#line 661 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 663 "seclang-scanner.ll" +#line 665 "seclang-scanner.ll" { yyless(1); BEGIN_PREVIOUS(); } YY_BREAK -case 124: +case 125: YY_RULE_SETUP -#line 664 "seclang-scanner.ll" +#line 666 "seclang-scanner.ll" { BEGIN_PREVIOUS(); } YY_BREAK -case 125: +case 126: YY_RULE_SETUP -#line 665 "seclang-scanner.ll" +#line 667 "seclang-scanner.ll" { BEGIN_PREVIOUS(); } YY_BREAK -case 126: +case 127: YY_RULE_SETUP -#line 669 "seclang-scanner.ll" +#line 671 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(yyleng); } YY_BREAK -case 127: -/* rule 127 can match eol */ +case 128: +/* rule 128 can match eol */ YY_RULE_SETUP -#line 670 "seclang-scanner.ll" +#line 672 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 674 "seclang-scanner.ll" +#line 676 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(yyleng); } YY_BREAK -case 129: -/* rule 129 can match eol */ +case 130: +/* rule 130 can match eol */ YY_RULE_SETUP -#line 675 "seclang-scanner.ll" +#line 677 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 679 "seclang-scanner.ll" +#line 681 "seclang-scanner.ll" { yyless(0); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 680 "seclang-scanner.ll" +#line 682 "seclang-scanner.ll" { yyless(0); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE);} YY_BREAK -case 132: -/* rule 132 can match eol */ +case 133: +/* rule 133 can match eol */ YY_RULE_SETUP -#line 681 "seclang-scanner.ll" +#line 683 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 133: +case 134: YY_RULE_SETUP -#line 685 "seclang-scanner.ll" +#line 687 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 134: +case 135: YY_RULE_SETUP -#line 686 "seclang-scanner.ll" +#line 688 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } YY_BREAK -case 135: +case 136: YY_RULE_SETUP -#line 690 "seclang-scanner.ll" +#line 692 "seclang-scanner.ll" { return p::make_NOT(*driver.loc.back()); } YY_BREAK -case 136: -/* rule 136 can match eol */ +case 137: +/* rule 137 can match eol */ YY_RULE_SETUP -#line 691 "seclang-scanner.ll" +#line 693 "seclang-scanner.ll" { BEGIN_ACTION_OPERATION(); yyless(0); } YY_BREAK -case 137: +case 138: YY_RULE_SETUP -#line 696 "seclang-scanner.ll" +#line 698 "seclang-scanner.ll" { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } YY_BREAK -case 138: +case 139: YY_RULE_SETUP -#line 697 "seclang-scanner.ll" +#line 699 "seclang-scanner.ll" { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } YY_BREAK -case 139: +case 140: YY_RULE_SETUP -#line 698 "seclang-scanner.ll" +#line 700 "seclang-scanner.ll" { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } YY_BREAK -case 140: -/* rule 140 can match eol */ +case 141: +/* rule 141 can match eol */ YY_RULE_SETUP -#line 702 "seclang-scanner.ll" +#line 704 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0);} YY_BREAK -case 141: +case 142: YY_RULE_SETUP -#line 706 "seclang-scanner.ll" +#line 708 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 142: -/* rule 142 can match eol */ +case 143: +/* rule 143 can match eol */ YY_RULE_SETUP -#line 707 "seclang-scanner.ll" +#line 709 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_ACTION); yyless(0); } YY_BREAK -case 143: +case 144: YY_RULE_SETUP -#line 715 "seclang-scanner.ll" +#line 717 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 144: -/* rule 144 can match eol */ +case 145: +/* rule 145 can match eol */ YY_RULE_SETUP -#line 720 "seclang-scanner.ll" +#line 722 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 145: -/* rule 145 can match eol */ +case 146: +/* rule 146 can match eol */ YY_RULE_SETUP -#line 721 "seclang-scanner.ll" +#line 723 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); } YY_BREAK -case 146: +case 147: YY_RULE_SETUP -#line 726 "seclang-scanner.ll" +#line 728 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 147: -/* rule 147 can match eol */ +case 148: +/* rule 148 can match eol */ YY_RULE_SETUP -#line 727 "seclang-scanner.ll" +#line 729 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 148: -/* rule 148 can match eol */ +case 149: +/* rule 149 can match eol */ YY_RULE_SETUP -#line 728 "seclang-scanner.ll" +#line 730 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); } YY_BREAK case YY_STATE_EOF(FINISH_ACTIONS): -#line 736 "seclang-scanner.ll" +#line 738 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.loc.back()); } YY_BREAK -case 149: +case 150: YY_RULE_SETUP -#line 737 "seclang-scanner.ll" +#line 739 "seclang-scanner.ll" { BEGIN(INITIAL); } YY_BREAK -case 150: -/* rule 150 can match eol */ -YY_RULE_SETUP -#line 740 "seclang-scanner.ll" -{ return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } - YY_BREAK case 151: /* rule 151 can match eol */ YY_RULE_SETUP -#line 741 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } +#line 742 "seclang-scanner.ll" +{ return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } YY_BREAK case 152: /* rule 152 can match eol */ YY_RULE_SETUP -#line 742 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.loc.back()); } +#line 743 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } YY_BREAK case 153: +/* rule 153 can match eol */ YY_RULE_SETUP -#line 743 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 744 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.loc.back()); } YY_BREAK case 154: YY_RULE_SETUP -#line 744 "seclang-scanner.ll" -{ return p::make_CONFIG_CONTENT_INJECTION(*driver.loc.back()); } +#line 745 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 155: YY_RULE_SETUP -#line 745 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 746 "seclang-scanner.ll" +{ return p::make_CONFIG_CONTENT_INJECTION(*driver.loc.back()); } YY_BREAK case 156: YY_RULE_SETUP -#line 746 "seclang-scanner.ll" +#line 747 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 157: YY_RULE_SETUP -#line 747 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 748 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 158: YY_RULE_SETUP -#line 748 "seclang-scanner.ll" +#line 749 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 159: YY_RULE_SETUP -#line 749 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 750 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 160: YY_RULE_SETUP -#line 750 "seclang-scanner.ll" +#line 751 "seclang-scanner.ll" { return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 161: YY_RULE_SETUP -#line 751 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.loc.back()); } +#line 752 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 162: YY_RULE_SETUP -#line 752 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 753 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.loc.back()); } YY_BREAK case 163: YY_RULE_SETUP -#line 753 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 754 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 164: YY_RULE_SETUP -#line 754 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 755 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 165: YY_RULE_SETUP -#line 755 "seclang-scanner.ll" +#line 756 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 166: YY_RULE_SETUP -#line 756 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 757 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 167: YY_RULE_SETUP -#line 757 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.loc.back()); } +#line 758 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 168: YY_RULE_SETUP -#line 758 "seclang-scanner.ll" -{ return p::make_JSON(*driver.loc.back()); } +#line 759 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.loc.back()); } YY_BREAK case 169: YY_RULE_SETUP -#line 759 "seclang-scanner.ll" -{ return p::make_NATIVE(*driver.loc.back()); } +#line 760 "seclang-scanner.ll" +{ return p::make_JSON(*driver.loc.back()); } YY_BREAK case 170: YY_RULE_SETUP -#line 760 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 761 "seclang-scanner.ll" +{ return p::make_NATIVE(*driver.loc.back()); } YY_BREAK case 171: YY_RULE_SETUP -#line 761 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 762 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 172: YY_RULE_SETUP -#line 762 "seclang-scanner.ll" +#line 763 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 173: YY_RULE_SETUP -#line 763 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.loc.back()); } +#line 764 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 174: YY_RULE_SETUP -#line 766 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 765 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.loc.back()); } YY_BREAK case 175: YY_RULE_SETUP -#line 767 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 768 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 176: YY_RULE_SETUP -#line 768 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 769 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 177: YY_RULE_SETUP -#line 769 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 770 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 178: YY_RULE_SETUP -#line 770 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 771 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 179: YY_RULE_SETUP -#line 771 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 772 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 180: YY_RULE_SETUP -#line 772 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 773 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 181: YY_RULE_SETUP -#line 773 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 774 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 182: YY_RULE_SETUP #line 775 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 183: YY_RULE_SETUP -#line 776 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 777 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 184: YY_RULE_SETUP -#line 777 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 778 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 185: YY_RULE_SETUP -#line 778 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.loc.back()); } +#line 779 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 186: YY_RULE_SETUP -#line 779 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } +#line 780 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.loc.back()); } YY_BREAK case 187: YY_RULE_SETUP -#line 780 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 781 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 188: YY_RULE_SETUP -#line 781 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.loc.back()); } +#line 782 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 189: YY_RULE_SETUP -#line 782 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.loc.back()); } +#line 783 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.loc.back()); } YY_BREAK case 190: YY_RULE_SETUP -#line 783 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 784 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.loc.back()); } YY_BREAK case 191: YY_RULE_SETUP -#line 784 "seclang-scanner.ll" +#line 785 "seclang-scanner.ll" { return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 192: YY_RULE_SETUP -#line 785 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 786 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 193: YY_RULE_SETUP -#line 786 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 787 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 194: YY_RULE_SETUP -#line 787 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 788 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 195: YY_RULE_SETUP -#line 788 "seclang-scanner.ll" +#line 789 "seclang-scanner.ll" { return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 196: YY_RULE_SETUP -#line 789 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 790 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 197: YY_RULE_SETUP -#line 790 "seclang-scanner.ll" +#line 791 "seclang-scanner.ll" { return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 198: YY_RULE_SETUP -#line 791 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 792 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 199: YY_RULE_SETUP -#line 792 "seclang-scanner.ll" +#line 793 "seclang-scanner.ll" { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 200: YY_RULE_SETUP -#line 793 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 794 "seclang-scanner.ll" +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 201: YY_RULE_SETUP -#line 794 "seclang-scanner.ll" +#line 795 "seclang-scanner.ll" { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 202: YY_RULE_SETUP -#line 795 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 796 "seclang-scanner.ll" +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 203: YY_RULE_SETUP -#line 796 "seclang-scanner.ll" +#line 797 "seclang-scanner.ll" { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 204: YY_RULE_SETUP -#line 797 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 798 "seclang-scanner.ll" +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 205: YY_RULE_SETUP -#line 798 "seclang-scanner.ll" +#line 799 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 206: YY_RULE_SETUP -#line 799 "seclang-scanner.ll" -{ return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.loc.back()); } +#line 800 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 207: YY_RULE_SETUP -#line 800 "seclang-scanner.ll" -{ return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.loc.back()); } +#line 801 "seclang-scanner.ll" +{ return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.loc.back()); } YY_BREAK case 208: YY_RULE_SETUP -#line 801 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 802 "seclang-scanner.ll" +{ return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.loc.back()); } YY_BREAK case 209: YY_RULE_SETUP -#line 802 "seclang-scanner.ll" +#line 803 "seclang-scanner.ll" { return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 210: YY_RULE_SETUP -#line 803 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 804 "seclang-scanner.ll" +{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 211: YY_RULE_SETUP -#line 804 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 805 "seclang-scanner.ll" +{ return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 212: YY_RULE_SETUP -#line 805 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ABORT(yytext, *driver.loc.back()); } +#line 806 "seclang-scanner.ll" +{ return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 213: YY_RULE_SETUP -#line 806 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } +#line 807 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_ABORT(yytext, *driver.loc.back()); } YY_BREAK case 214: YY_RULE_SETUP -#line 807 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.loc.back()); } +#line 808 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } YY_BREAK case 215: YY_RULE_SETUP -#line 808 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } +#line 809 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.loc.back()); } YY_BREAK case 216: YY_RULE_SETUP -#line 809 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } +#line 810 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } YY_BREAK case 217: YY_RULE_SETUP -#line 810 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.loc.back()); } +#line 811 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } YY_BREAK case 218: YY_RULE_SETUP -#line 811 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.loc.back()); } +#line 812 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.loc.back()); } YY_BREAK case 219: YY_RULE_SETUP -#line 812 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_REJECT(yytext, *driver.loc.back()); } +#line 813 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.loc.back()); } YY_BREAK case 220: YY_RULE_SETUP -#line 813 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.loc.back()); } +#line 814 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_REJECT(yytext, *driver.loc.back()); } YY_BREAK case 221: YY_RULE_SETUP -#line 814 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.loc.back()); } +#line 815 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.loc.back()); } YY_BREAK case 222: YY_RULE_SETUP -#line 815 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_WARN(yytext, *driver.loc.back()); } +#line 816 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.loc.back()); } YY_BREAK case 223: YY_RULE_SETUP -#line 816 "seclang-scanner.ll" -{ return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.loc.back()); } +#line 817 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_WARN(yytext, *driver.loc.back()); } YY_BREAK case 224: YY_RULE_SETUP -#line 817 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 818 "seclang-scanner.ll" +{ return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.loc.back()); } YY_BREAK case 225: YY_RULE_SETUP -#line 818 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.loc.back()); } +#line 819 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 226: YY_RULE_SETUP -#line 819 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.loc.back()); } +#line 820 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.loc.back()); } YY_BREAK case 227: YY_RULE_SETUP -#line 820 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 821 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.loc.back()); } YY_BREAK case 228: YY_RULE_SETUP -#line 821 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 822 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 229: YY_RULE_SETUP -#line 822 "seclang-scanner.ll" +#line 823 "seclang-scanner.ll" { return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 230: YY_RULE_SETUP -#line 823 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 824 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 231: YY_RULE_SETUP -#line 824 "seclang-scanner.ll" +#line 825 "seclang-scanner.ll" { return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 232: YY_RULE_SETUP -#line 825 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.loc.back()); } +#line 826 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 233: YY_RULE_SETUP -#line 826 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 827 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 234: YY_RULE_SETUP -#line 827 "seclang-scanner.ll" +#line 828 "seclang-scanner.ll" { return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 235: YY_RULE_SETUP -#line 828 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 829 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 236: YY_RULE_SETUP -#line 829 "seclang-scanner.ll" +#line 830 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 237: YY_RULE_SETUP -#line 830 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.loc.back()); } +#line 831 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 238: YY_RULE_SETUP -#line 831 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 832 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.loc.back()); } YY_BREAK case 239: YY_RULE_SETUP -#line 832 "seclang-scanner.ll" +#line 833 "seclang-scanner.ll" { return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 240: YY_RULE_SETUP -#line 833 "seclang-scanner.ll" -{ return p::make_CONFIG_CONN_ENGINE(yytext, *driver.loc.back()); } +#line 834 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 241: YY_RULE_SETUP -#line 834 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.loc.back()); } +#line 835 "seclang-scanner.ll" +{ return p::make_CONFIG_CONN_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 242: YY_RULE_SETUP -#line 835 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.loc.back()); } +#line 836 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 243: YY_RULE_SETUP -#line 836 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.loc.back()); } +#line 837 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.loc.back()); } YY_BREAK case 244: YY_RULE_SETUP -#line 837 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.loc.back()); } +#line 838 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.loc.back()); } YY_BREAK case 245: YY_RULE_SETUP -#line 838 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.loc.back()); } +#line 839 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.loc.back()); } YY_BREAK case 246: YY_RULE_SETUP -#line 839 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 840 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.loc.back()); } YY_BREAK case 247: YY_RULE_SETUP -#line 840 "seclang-scanner.ll" +#line 841 "seclang-scanner.ll" { return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 248: YY_RULE_SETUP -#line 841 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.loc.back()); } +#line 842 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 249: YY_RULE_SETUP -#line 842 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.loc.back()); } +#line 843 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.loc.back()); } YY_BREAK case 250: YY_RULE_SETUP -#line 843 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.loc.back()); } +#line 844 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.loc.back()); } YY_BREAK case 251: YY_RULE_SETUP -#line 844 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.loc.back()); } +#line 845 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.loc.back()); } YY_BREAK case 252: YY_RULE_SETUP -#line 845 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.loc.back()); } +#line 846 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.loc.back()); } YY_BREAK case 253: YY_RULE_SETUP -#line 846 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.loc.back()); } +#line 847 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.loc.back()); } YY_BREAK case 254: YY_RULE_SETUP -#line 847 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 848 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.loc.back()); } YY_BREAK case 255: YY_RULE_SETUP -#line 848 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.loc.back()); } +#line 849 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 256: YY_RULE_SETUP -#line 849 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.loc.back()); } +#line 850 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.loc.back()); } YY_BREAK case 257: YY_RULE_SETUP -#line 850 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.loc.back()); } +#line 851 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.loc.back()); } YY_BREAK case 258: YY_RULE_SETUP #line 852 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.loc.back()); } YY_BREAK case 259: YY_RULE_SETUP -#line 853 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.loc.back()); } +#line 854 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.loc.back()); } YY_BREAK case 260: YY_RULE_SETUP -#line 854 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.loc.back()); } +#line 855 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 261: YY_RULE_SETUP #line 856 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 262: YY_RULE_SETUP -#line 857 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 858 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 263: YY_RULE_SETUP -#line 858 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 859 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 264: -/* rule 264 can match eol */ YY_RULE_SETUP -#line 859 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 860 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 265: /* rule 265 can match eol */ YY_RULE_SETUP -#line 860 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } +#line 861 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK case 266: /* rule 266 can match eol */ YY_RULE_SETUP -#line 861 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } +#line 862 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } YY_BREAK case 267: +/* rule 267 can match eol */ YY_RULE_SETUP -#line 862 "seclang-scanner.ll" -{ driver.loc.back()->step(); /* comment, just ignore. */ } +#line 863 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } YY_BREAK case 268: YY_RULE_SETUP -#line 863 "seclang-scanner.ll" -{ driver.loc.back()->step(); /* carriage return, just ignore. */} +#line 864 "seclang-scanner.ll" +{ driver.loc.back()->step(); /* comment, just ignore. */ } YY_BREAK case 269: YY_RULE_SETUP -#line 864 "seclang-scanner.ll" -{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } +#line 865 "seclang-scanner.ll" +{ driver.loc.back()->step(); /* carriage return, just ignore. */} YY_BREAK case 270: YY_RULE_SETUP -#line 865 "seclang-scanner.ll" +#line 866 "seclang-scanner.ll" +{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } + YY_BREAK +case 271: +YY_RULE_SETUP +#line 867 "seclang-scanner.ll" { return p::make_COMMA(*driver.loc.back()); } YY_BREAK -case 271: +case 272: YY_RULE_SETUP -#line 868 "seclang-scanner.ll" +#line 870 "seclang-scanner.ll" { BEGIN(EXPECTING_VARIABLE); } YY_BREAK -case 272: +case 273: YY_RULE_SETUP -#line 872 "seclang-scanner.ll" +#line 874 "seclang-scanner.ll" { return p::make_PIPE(*driver.loc.back()); } YY_BREAK -case 273: +case 274: YY_RULE_SETUP -#line 873 "seclang-scanner.ll" +#line 875 "seclang-scanner.ll" { return p::make_PIPE(*driver.loc.back()); } YY_BREAK -case 274: +case 275: YY_RULE_SETUP -#line 874 "seclang-scanner.ll" +#line 876 "seclang-scanner.ll" { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } YY_BREAK -case 275: +case 276: YY_RULE_SETUP -#line 875 "seclang-scanner.ll" +#line 877 "seclang-scanner.ll" { return p::make_VAR_EXCLUSION(*driver.loc.back()); } YY_BREAK -case 276: +case 277: YY_RULE_SETUP -#line 876 "seclang-scanner.ll" +#line 878 "seclang-scanner.ll" { return p::make_VAR_COUNT(*driver.loc.back()); } YY_BREAK -case 277: -YY_RULE_SETUP -#line 880 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } - YY_BREAK case 278: YY_RULE_SETUP -#line 881 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 882 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 279: -/* rule 279 can match eol */ YY_RULE_SETUP -#line 882 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 883 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 280: /* rule 280 can match eol */ YY_RULE_SETUP -#line 883 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 884 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 281: /* rule 281 can match eol */ YY_RULE_SETUP -#line 884 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 885 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 282: /* rule 282 can match eol */ YY_RULE_SETUP -#line 885 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 886 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK - - case 283: +/* rule 283 can match eol */ YY_RULE_SETUP -#line 889 "seclang-scanner.ll" -{ } +#line 887 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK + + case 284: YY_RULE_SETUP -#line 890 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +#line 891 "seclang-scanner.ll" +{ } YY_BREAK case 285: -/* rule 285 can match eol */ YY_RULE_SETUP -#line 891 "seclang-scanner.ll" +#line 892 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 286: /* rule 286 can match eol */ YY_RULE_SETUP -#line 892 "seclang-scanner.ll" +#line 893 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK - - case 287: +/* rule 287 can match eol */ YY_RULE_SETUP -#line 897 "seclang-scanner.ll" -{ BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } +#line 894 "seclang-scanner.ll" +{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK + + case 288: YY_RULE_SETUP -#line 898 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } +#line 899 "seclang-scanner.ll" +{ BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } YY_BREAK case 289: YY_RULE_SETUP -#line 899 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } +#line 900 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } YY_BREAK case 290: YY_RULE_SETUP -#line 900 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } +#line 901 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } YY_BREAK case 291: YY_RULE_SETUP -#line 901 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } +#line 902 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } YY_BREAK case 292: YY_RULE_SETUP -#line 902 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } +#line 903 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } YY_BREAK case 293: YY_RULE_SETUP -#line 903 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } +#line 904 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } YY_BREAK case 294: YY_RULE_SETUP -#line 904 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } +#line 905 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } YY_BREAK case 295: YY_RULE_SETUP -#line 905 "seclang-scanner.ll" -{ return p::make_VARIABLE_AUTH_TYPE(*driver.loc.back()); } +#line 906 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } YY_BREAK case 296: YY_RULE_SETUP -#line 906 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.loc.back()); } +#line 907 "seclang-scanner.ll" +{ return p::make_VARIABLE_AUTH_TYPE(*driver.loc.back()); } YY_BREAK case 297: YY_RULE_SETUP -#line 907 "seclang-scanner.ll" -{ return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.loc.back()); } +#line 908 "seclang-scanner.ll" +{ return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.loc.back()); } YY_BREAK case 298: YY_RULE_SETUP -#line 908 "seclang-scanner.ll" -{ return p::make_VARIABLE_FULL_REQUEST(*driver.loc.back()); } +#line 909 "seclang-scanner.ll" +{ return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.loc.back()); } YY_BREAK case 299: YY_RULE_SETUP -#line 909 "seclang-scanner.ll" -{ return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.loc.back()); } +#line 910 "seclang-scanner.ll" +{ return p::make_VARIABLE_FULL_REQUEST(*driver.loc.back()); } YY_BREAK case 300: YY_RULE_SETUP -#line 910 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.loc.back()); } +#line 911 "seclang-scanner.ll" +{ return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.loc.back()); } YY_BREAK case 301: YY_RULE_SETUP -#line 911 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VAR(*driver.loc.back()); } +#line 912 "seclang-scanner.ll" +{ return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.loc.back()); } YY_BREAK case 302: YY_RULE_SETUP -#line 912 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.loc.back()); } +#line 913 "seclang-scanner.ll" +{ return p::make_VARIABLE_MATCHED_VAR(*driver.loc.back()); } YY_BREAK case 303: YY_RULE_SETUP -#line 913 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.loc.back()); } +#line 914 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.loc.back()); } YY_BREAK case 304: YY_RULE_SETUP -#line 914 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.loc.back()); } +#line 915 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.loc.back()); } YY_BREAK case 305: YY_RULE_SETUP -#line 915 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.loc.back()); } +#line 916 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.loc.back()); } YY_BREAK case 306: YY_RULE_SETUP -#line 916 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.loc.back()); } +#line 917 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.loc.back()); } YY_BREAK case 307: YY_RULE_SETUP -#line 917 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.loc.back()); } +#line 918 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.loc.back()); } YY_BREAK case 308: YY_RULE_SETUP -#line 918 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } +#line 919 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.loc.back()); } YY_BREAK case 309: YY_RULE_SETUP -#line 919 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } +#line 920 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } YY_BREAK case 310: YY_RULE_SETUP -#line 920 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } +#line 921 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } YY_BREAK case 311: YY_RULE_SETUP -#line 921 "seclang-scanner.ll" +#line 922 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } YY_BREAK case 312: YY_RULE_SETUP -#line 922 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.loc.back()); } +#line 923 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } YY_BREAK case 313: YY_RULE_SETUP -#line 923 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.loc.back()); } +#line 924 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.loc.back()); } YY_BREAK case 314: YY_RULE_SETUP -#line 924 "seclang-scanner.ll" +#line 925 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.loc.back()); } + YY_BREAK +case 315: +YY_RULE_SETUP +#line 926 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_INVALID_QUOTING(*driver.loc.back()); } YY_BREAK -case 315: +case 316: YY_RULE_SETUP -#line 925 "seclang-scanner.ll" +#line 927 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_LF_LINE(*driver.loc.back()); } YY_BREAK -case 316: +case 317: YY_RULE_SETUP -#line 926 "seclang-scanner.ll" +#line 928 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_MISSING_SEMICOLON(*driver.loc.back()); } YY_BREAK -case 317: +case 318: YY_RULE_SETUP -#line 927 "seclang-scanner.ll" +#line 929 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_SEMICOLON_MISSING(*driver.loc.back()); } YY_BREAK -case 318: +case 319: YY_RULE_SETUP -#line 928 "seclang-scanner.ll" +#line 930 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } YY_BREAK -case 319: +case 320: YY_RULE_SETUP -#line 929 "seclang-scanner.ll" +#line 931 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } YY_BREAK -case 320: +case 321: YY_RULE_SETUP -#line 930 "seclang-scanner.ll" +#line 932 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_STRICT_ERROR(*driver.loc.back()); } YY_BREAK -case 321: +case 322: YY_RULE_SETUP -#line 931 "seclang-scanner.ll" +#line 933 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY(*driver.loc.back()); } YY_BREAK -case 322: +case 323: YY_RULE_SETUP -#line 932 "seclang-scanner.ll" +#line 934 "seclang-scanner.ll" { return p::make_VARIABLE_OUTBOUND_DATA_ERROR(*driver.loc.back()); } YY_BREAK -case 323: +case 324: YY_RULE_SETUP -#line 933 "seclang-scanner.ll" +#line 935 "seclang-scanner.ll" { return p::make_VARIABLE_PATH_INFO(*driver.loc.back()); } YY_BREAK -case 324: +case 325: YY_RULE_SETUP -#line 934 "seclang-scanner.ll" +#line 936 "seclang-scanner.ll" { return p::make_VARIABLE_QUERY_STRING(*driver.loc.back()); } YY_BREAK -case 325: +case 326: YY_RULE_SETUP -#line 935 "seclang-scanner.ll" +#line 937 "seclang-scanner.ll" { return p::make_VARIABLE_REMOTE_ADDR(*driver.loc.back()); } YY_BREAK -case 326: +case 327: YY_RULE_SETUP -#line 936 "seclang-scanner.ll" +#line 938 "seclang-scanner.ll" { return p::make_VARIABLE_REMOTE_HOST(*driver.loc.back()); } YY_BREAK -case 327: +case 328: YY_RULE_SETUP -#line 937 "seclang-scanner.ll" +#line 939 "seclang-scanner.ll" { return p::make_VARIABLE_REMOTE_PORT(*driver.loc.back()); } YY_BREAK -case 328: +case 329: YY_RULE_SETUP -#line 938 "seclang-scanner.ll" +#line 940 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_ERROR_MSG(*driver.loc.back()); } YY_BREAK -case 329: +case 330: YY_RULE_SETUP -#line 939 "seclang-scanner.ll" +#line 941 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_ERROR(*driver.loc.back()); } YY_BREAK -case 330: +case 331: YY_RULE_SETUP -#line 940 "seclang-scanner.ll" +#line 942 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG(*driver.loc.back()); } YY_BREAK -case 331: +case 332: YY_RULE_SETUP -#line 941 "seclang-scanner.ll" +#line 943 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR(*driver.loc.back()); } YY_BREAK -case 332: +case 333: YY_RULE_SETUP -#line 942 "seclang-scanner.ll" +#line 944 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_PROCESSOR(*driver.loc.back()); } YY_BREAK -case 333: +case 334: YY_RULE_SETUP -#line 943 "seclang-scanner.ll" +#line 945 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_BASENAME(*driver.loc.back()); } YY_BREAK -case 334: +case 335: YY_RULE_SETUP -#line 944 "seclang-scanner.ll" +#line 946 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_BODY_LENGTH(*driver.loc.back()); } YY_BREAK -case 335: +case 336: YY_RULE_SETUP -#line 945 "seclang-scanner.ll" +#line 947 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_BODY(*driver.loc.back()); } YY_BREAK -case 336: +case 337: YY_RULE_SETUP -#line 946 "seclang-scanner.ll" +#line 948 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_FILE_NAME(*driver.loc.back()); } YY_BREAK -case 337: +case 338: YY_RULE_SETUP -#line 947 "seclang-scanner.ll" +#line 949 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 338: +case 339: YY_RULE_SETUP -#line 948 "seclang-scanner.ll" +#line 950 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 339: +case 340: YY_RULE_SETUP -#line 949 "seclang-scanner.ll" +#line 951 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_LINE(*driver.loc.back()); } YY_BREAK -case 340: +case 341: YY_RULE_SETUP -#line 950 "seclang-scanner.ll" +#line 952 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_METHOD(*driver.loc.back()); } YY_BREAK -case 341: +case 342: YY_RULE_SETUP -#line 951 "seclang-scanner.ll" +#line 953 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.loc.back()); } YY_BREAK -case 342: +case 343: YY_RULE_SETUP -#line 952 "seclang-scanner.ll" +#line 954 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_URI_RAW(*driver.loc.back()); } YY_BREAK -case 343: +case 344: YY_RULE_SETUP -#line 953 "seclang-scanner.ll" +#line 955 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_URI(*driver.loc.back()); } YY_BREAK -case 344: +case 345: YY_RULE_SETUP -#line 954 "seclang-scanner.ll" +#line 956 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_BODY(*driver.loc.back()); } YY_BREAK -case 345: +case 346: YY_RULE_SETUP -#line 955 "seclang-scanner.ll" +#line 957 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.loc.back()); } YY_BREAK -case 346: +case 347: YY_RULE_SETUP -#line 956 "seclang-scanner.ll" +#line 958 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.loc.back()); } YY_BREAK -case 347: +case 348: YY_RULE_SETUP -#line 957 "seclang-scanner.ll" +#line 959 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 348: +case 349: YY_RULE_SETUP -#line 958 "seclang-scanner.ll" +#line 960 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 349: +case 350: YY_RULE_SETUP -#line 959 "seclang-scanner.ll" +#line 961 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_PROTOCOL(*driver.loc.back()); } YY_BREAK -case 350: +case 351: YY_RULE_SETUP -#line 960 "seclang-scanner.ll" +#line 962 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_STATUS(*driver.loc.back()); } YY_BREAK -case 351: +case 352: YY_RULE_SETUP -#line 961 "seclang-scanner.ll" +#line 963 "seclang-scanner.ll" { return p::make_VARIABLE_SERVER_ADDR(*driver.loc.back()); } YY_BREAK -case 352: +case 353: YY_RULE_SETUP -#line 962 "seclang-scanner.ll" +#line 964 "seclang-scanner.ll" { return p::make_VARIABLE_SERVER_NAME(*driver.loc.back()); } YY_BREAK -case 353: +case 354: YY_RULE_SETUP -#line 963 "seclang-scanner.ll" +#line 965 "seclang-scanner.ll" { return p::make_VARIABLE_SERVER_PORT(*driver.loc.back()); } YY_BREAK -case 354: +case 355: YY_RULE_SETUP -#line 964 "seclang-scanner.ll" +#line 966 "seclang-scanner.ll" { return p::make_VARIABLE_SESSION_ID(*driver.loc.back()); } YY_BREAK -case 355: +case 356: YY_RULE_SETUP -#line 965 "seclang-scanner.ll" +#line 967 "seclang-scanner.ll" { return p::make_VARIABLE_UNIQUE_ID(*driver.loc.back()); } YY_BREAK -case 356: +case 357: YY_RULE_SETUP -#line 966 "seclang-scanner.ll" +#line 968 "seclang-scanner.ll" { return p::make_VARIABLE_URL_ENCODED_ERROR(*driver.loc.back()); } YY_BREAK -case 357: +case 358: YY_RULE_SETUP -#line 967 "seclang-scanner.ll" +#line 969 "seclang-scanner.ll" { return p::make_VARIABLE_USER_ID(*driver.loc.back()); } YY_BREAK -case 358: +case 359: YY_RULE_SETUP -#line 968 "seclang-scanner.ll" +#line 970 "seclang-scanner.ll" { return p::make_VARIABLE_WEB_APP_ID(*driver.loc.back()); } YY_BREAK -case 359: +case 360: YY_RULE_SETUP -#line 969 "seclang-scanner.ll" +#line 971 "seclang-scanner.ll" { return p::make_VARIABLE_ARGS(*driver.loc.back()); } YY_BREAK -case 360: +case 361: YY_RULE_SETUP -#line 970 "seclang-scanner.ll" +#line 972 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS(*driver.loc.back()); } YY_BREAK -case 361: +case 362: YY_RULE_SETUP -#line 971 "seclang-scanner.ll" +#line 973 "seclang-scanner.ll" { return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } YY_BREAK -case 362: +case 363: YY_RULE_SETUP -#line 972 "seclang-scanner.ll" +#line 974 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } YY_BREAK -case 363: +case 364: YY_RULE_SETUP -#line 973 "seclang-scanner.ll" +#line 975 "seclang-scanner.ll" { return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } YY_BREAK -case 364: +case 365: YY_RULE_SETUP -#line 974 "seclang-scanner.ll" +#line 976 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } YY_BREAK -case 365: +case 366: YY_RULE_SETUP -#line 975 "seclang-scanner.ll" +#line 977 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } YY_BREAK -case 366: +case 367: YY_RULE_SETUP -#line 976 "seclang-scanner.ll" +#line 978 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } YY_BREAK -case 367: +case 368: YY_RULE_SETUP -#line 977 "seclang-scanner.ll" +#line 979 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } YY_BREAK -case 368: +case 369: YY_RULE_SETUP -#line 978 "seclang-scanner.ll" +#line 980 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } YY_BREAK -case 369: +case 370: YY_RULE_SETUP -#line 979 "seclang-scanner.ll" +#line 981 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } YY_BREAK -case 370: +case 371: YY_RULE_SETUP -#line 980 "seclang-scanner.ll" +#line 982 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } YY_BREAK -case 371: +case 372: YY_RULE_SETUP -#line 981 "seclang-scanner.ll" +#line 983 "seclang-scanner.ll" { return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } YY_BREAK -case 372: +case 373: YY_RULE_SETUP -#line 982 "seclang-scanner.ll" +#line 984 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } YY_BREAK -case 373: +case 374: YY_RULE_SETUP -#line 983 "seclang-scanner.ll" +#line 985 "seclang-scanner.ll" { return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } YY_BREAK -case 374: +case 375: YY_RULE_SETUP -#line 984 "seclang-scanner.ll" +#line 986 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } YY_BREAK -case 375: +case 376: YY_RULE_SETUP -#line 985 "seclang-scanner.ll" +#line 987 "seclang-scanner.ll" { return p::make_VARIABLE_FILES(*driver.loc.back()); } YY_BREAK -case 376: +case 377: YY_RULE_SETUP -#line 986 "seclang-scanner.ll" +#line 988 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES(*driver.loc.back()); } YY_BREAK -case 377: +case 378: YY_RULE_SETUP -#line 987 "seclang-scanner.ll" +#line 989 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } YY_BREAK -case 378: +case 379: YY_RULE_SETUP -#line 988 "seclang-scanner.ll" +#line 990 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } YY_BREAK -case 379: +case 380: YY_RULE_SETUP -#line 989 "seclang-scanner.ll" +#line 991 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } YY_BREAK -case 380: +case 381: YY_RULE_SETUP -#line 990 "seclang-scanner.ll" +#line 992 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } YY_BREAK -case 381: +case 382: YY_RULE_SETUP -#line 991 "seclang-scanner.ll" +#line 993 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } YY_BREAK -case 382: +case 383: YY_RULE_SETUP -#line 992 "seclang-scanner.ll" +#line 994 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } YY_BREAK -case 383: +case 384: YY_RULE_SETUP -#line 993 "seclang-scanner.ll" +#line 995 "seclang-scanner.ll" { return p::make_VARIABLE_GEO(*driver.loc.back()); } YY_BREAK -case 384: +case 385: YY_RULE_SETUP -#line 994 "seclang-scanner.ll" +#line 996 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GEO(*driver.loc.back()); } YY_BREAK -case 385: +case 386: YY_RULE_SETUP -#line 995 "seclang-scanner.ll" +#line 997 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } YY_BREAK -case 386: +case 387: YY_RULE_SETUP -#line 996 "seclang-scanner.ll" +#line 998 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } YY_BREAK -case 387: +case 388: YY_RULE_SETUP -#line 997 "seclang-scanner.ll" +#line 999 "seclang-scanner.ll" { return p::make_VARIABLE_RULE(*driver.loc.back()); } YY_BREAK -case 388: +case 389: YY_RULE_SETUP -#line 998 "seclang-scanner.ll" +#line 1000 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RULE(*driver.loc.back()); } YY_BREAK -case 389: +case 390: YY_RULE_SETUP -#line 999 "seclang-scanner.ll" +#line 1001 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } YY_BREAK -case 390: +case 391: YY_RULE_SETUP -#line 1000 "seclang-scanner.ll" +#line 1002 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } YY_BREAK -case 391: +case 392: YY_RULE_SETUP -#line 1001 "seclang-scanner.ll" +#line 1003 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } YY_BREAK -case 392: +case 393: YY_RULE_SETUP -#line 1002 "seclang-scanner.ll" +#line 1004 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } YY_BREAK -case 393: +case 394: YY_RULE_SETUP -#line 1003 "seclang-scanner.ll" +#line 1005 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } YY_BREAK -case 394: +case 395: YY_RULE_SETUP -#line 1004 "seclang-scanner.ll" +#line 1006 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } YY_BREAK -case 395: +case 396: YY_RULE_SETUP -#line 1005 "seclang-scanner.ll" +#line 1007 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_BLD(yytext, *driver.loc.back()); } YY_BREAK -case 396: +case 397: YY_RULE_SETUP -#line 1006 "seclang-scanner.ll" +#line 1008 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_DUR(yytext, *driver.loc.back()); } YY_BREAK -case 397: +case 398: YY_RULE_SETUP -#line 1007 "seclang-scanner.ll" +#line 1009 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_HSV(yytext, *driver.loc.back()); } YY_BREAK -case 398: +case 399: YY_RULE_SETUP -#line 1008 "seclang-scanner.ll" +#line 1010 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_REMOTE_USER(yytext, *driver.loc.back()); } YY_BREAK -case 399: +case 400: YY_RULE_SETUP -#line 1009 "seclang-scanner.ll" +#line 1011 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_DAY(yytext, *driver.loc.back()); } YY_BREAK -case 400: +case 401: YY_RULE_SETUP -#line 1010 "seclang-scanner.ll" +#line 1012 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_EPOCH(yytext, *driver.loc.back()); } YY_BREAK -case 401: +case 402: YY_RULE_SETUP -#line 1011 "seclang-scanner.ll" +#line 1013 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_HOUR(yytext, *driver.loc.back()); } YY_BREAK -case 402: +case 403: YY_RULE_SETUP -#line 1012 "seclang-scanner.ll" +#line 1014 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_MIN(yytext, *driver.loc.back()); } YY_BREAK -case 403: +case 404: YY_RULE_SETUP -#line 1013 "seclang-scanner.ll" +#line 1015 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_MON(yytext, *driver.loc.back()); } YY_BREAK -case 404: +case 405: YY_RULE_SETUP -#line 1014 "seclang-scanner.ll" +#line 1016 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_SEC(yytext, *driver.loc.back()); } YY_BREAK -case 405: +case 406: YY_RULE_SETUP -#line 1015 "seclang-scanner.ll" +#line 1017 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_YEAR(yytext, *driver.loc.back()); } YY_BREAK -case 406: +case 407: YY_RULE_SETUP -#line 1016 "seclang-scanner.ll" +#line 1018 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME(yytext, *driver.loc.back()); } YY_BREAK -case 407: +case 408: YY_RULE_SETUP -#line 1017 "seclang-scanner.ll" +#line 1019 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_WDAY(yytext, *driver.loc.back()); } YY_BREAK -case 408: +case 409: YY_RULE_SETUP -#line 1020 "seclang-scanner.ll" +#line 1022 "seclang-scanner.ll" { driver.error (*driver.loc.back(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.loc.back(), "");} YY_BREAK -case 409: +case 410: YY_RULE_SETUP -#line 1021 "seclang-scanner.ll" +#line 1023 "seclang-scanner.ll" { return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } YY_BREAK -case 410: +case 411: YY_RULE_SETUP -#line 1022 "seclang-scanner.ll" +#line 1024 "seclang-scanner.ll" { return p::make_VARIABLE_IP(*driver.loc.back()); } YY_BREAK -case 411: +case 412: YY_RULE_SETUP -#line 1023 "seclang-scanner.ll" +#line 1025 "seclang-scanner.ll" { return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } YY_BREAK -case 412: +case 413: YY_RULE_SETUP -#line 1024 "seclang-scanner.ll" +#line 1026 "seclang-scanner.ll" { return p::make_VARIABLE_SESSION(*driver.loc.back()); } YY_BREAK -case 413: +case 414: YY_RULE_SETUP -#line 1025 "seclang-scanner.ll" +#line 1027 "seclang-scanner.ll" { return p::make_VARIABLE_STATUS(*driver.loc.back()); } YY_BREAK -case 414: +case 415: YY_RULE_SETUP -#line 1026 "seclang-scanner.ll" +#line 1028 "seclang-scanner.ll" { return p::make_VARIABLE_STATUS_LINE(*driver.loc.back()); } YY_BREAK -case 415: +case 416: YY_RULE_SETUP -#line 1027 "seclang-scanner.ll" +#line 1029 "seclang-scanner.ll" { return p::make_VARIABLE_TX(*driver.loc.back()); } YY_BREAK -case 416: +case 417: YY_RULE_SETUP -#line 1028 "seclang-scanner.ll" +#line 1030 "seclang-scanner.ll" { return p::make_VARIABLE_USER(*driver.loc.back()); } YY_BREAK -case 417: +case 418: YY_RULE_SETUP -#line 1032 "seclang-scanner.ll" +#line 1034 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } YY_BREAK -case 418: +case 419: YY_RULE_SETUP -#line 1033 "seclang-scanner.ll" +#line 1035 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_IP(*driver.loc.back()); } YY_BREAK -case 419: +case 420: YY_RULE_SETUP -#line 1034 "seclang-scanner.ll" +#line 1036 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } YY_BREAK -case 420: +case 421: YY_RULE_SETUP -#line 1035 "seclang-scanner.ll" +#line 1037 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_SESSION(*driver.loc.back()); } YY_BREAK -case 421: +case 422: YY_RULE_SETUP -#line 1036 "seclang-scanner.ll" +#line 1038 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_TX(*driver.loc.back()); } YY_BREAK -case 422: +case 423: YY_RULE_SETUP -#line 1037 "seclang-scanner.ll" +#line 1039 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_USER(*driver.loc.back()); } YY_BREAK -case 423: -YY_RULE_SETUP -#line 1042 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } - YY_BREAK case 424: YY_RULE_SETUP -#line 1043 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } +#line 1044 "seclang-scanner.ll" +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } YY_BREAK case 425: YY_RULE_SETUP -#line 1044 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } +#line 1045 "seclang-scanner.ll" +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } YY_BREAK case 426: -/* rule 426 can match eol */ YY_RULE_SETUP -#line 1045 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +#line 1046 "seclang-scanner.ll" +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } YY_BREAK case 427: /* rule 427 can match eol */ YY_RULE_SETUP -#line 1046 "seclang-scanner.ll" +#line 1047 "seclang-scanner.ll" { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 428: /* rule 428 can match eol */ YY_RULE_SETUP -#line 1047 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1048 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 429: /* rule 429 can match eol */ YY_RULE_SETUP -#line 1048 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1049 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 430: /* rule 430 can match eol */ YY_RULE_SETUP -#line 1049 "seclang-scanner.ll" -{ yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +#line 1050 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 431: /* rule 431 can match eol */ YY_RULE_SETUP -#line 1050 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +#line 1051 "seclang-scanner.ll" +{ yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK case 432: /* rule 432 can match eol */ YY_RULE_SETUP #line 1052 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK case 433: /* rule 433 can match eol */ YY_RULE_SETUP -#line 1053 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1054 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 434: +/* rule 434 can match eol */ YY_RULE_SETUP -#line 1054 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(0); } +#line 1055 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 435: YY_RULE_SETUP -#line 1055 "seclang-scanner.ll" +#line 1056 "seclang-scanner.ll" { BEGIN_PREVIOUS(); yyless(0); } YY_BREAK case 436: YY_RULE_SETUP -#line 1056 "seclang-scanner.ll" -{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } +#line 1057 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(0); } YY_BREAK - - case 437: -/* rule 437 can match eol */ YY_RULE_SETUP -#line 1061 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +#line 1058 "seclang-scanner.ll" +{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } YY_BREAK + + case 438: /* rule 438 can match eol */ YY_RULE_SETUP -#line 1062 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +#line 1063 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 439: /* rule 439 can match eol */ YY_RULE_SETUP -#line 1063 "seclang-scanner.ll" +#line 1064 "seclang-scanner.ll" { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 440: /* rule 440 can match eol */ YY_RULE_SETUP -#line 1064 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1065 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 441: /* rule 441 can match eol */ YY_RULE_SETUP -#line 1065 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1066 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 442: /* rule 442 can match eol */ YY_RULE_SETUP -#line 1066 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); } +#line 1067 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 443: /* rule 443 can match eol */ YY_RULE_SETUP #line 1068 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); } YY_BREAK case 444: /* rule 444 can match eol */ YY_RULE_SETUP -#line 1069 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1070 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 445: +/* rule 445 can match eol */ YY_RULE_SETUP #line 1071 "seclang-scanner.ll" -{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 446: YY_RULE_SETUP -#line 1072 "seclang-scanner.ll" +#line 1073 "seclang-scanner.ll" +{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } + YY_BREAK +case 447: +YY_RULE_SETUP +#line 1074 "seclang-scanner.ll" { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } YY_BREAK -case 447: +case 448: YY_RULE_SETUP -#line 1078 "seclang-scanner.ll" +#line 1080 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } YY_BREAK -case 448: +case 449: YY_RULE_SETUP -#line 1079 "seclang-scanner.ll" +#line 1081 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } YY_BREAK -case 449: +case 450: YY_RULE_SETUP -#line 1080 "seclang-scanner.ll" +#line 1082 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } YY_BREAK -case 450: +case 451: YY_RULE_SETUP -#line 1081 "seclang-scanner.ll" +#line 1083 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } YY_BREAK -case 451: +case 452: YY_RULE_SETUP -#line 1082 "seclang-scanner.ll" +#line 1084 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } YY_BREAK -case 452: +case 453: YY_RULE_SETUP -#line 1083 "seclang-scanner.ll" +#line 1085 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } YY_BREAK -case 453: +case 454: YY_RULE_SETUP -#line 1086 "seclang-scanner.ll" +#line 1088 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } YY_BREAK -case 454: +case 455: YY_RULE_SETUP -#line 1087 "seclang-scanner.ll" +#line 1089 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } YY_BREAK -case 455: +case 456: YY_RULE_SETUP -#line 1088 "seclang-scanner.ll" +#line 1090 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } YY_BREAK -case 456: +case 457: YY_RULE_SETUP -#line 1089 "seclang-scanner.ll" +#line 1091 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } YY_BREAK -case 457: +case 458: YY_RULE_SETUP -#line 1090 "seclang-scanner.ll" +#line 1092 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } YY_BREAK -case 458: +case 459: YY_RULE_SETUP -#line 1091 "seclang-scanner.ll" +#line 1093 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } YY_BREAK -case 459: +case 460: YY_RULE_SETUP -#line 1095 "seclang-scanner.ll" +#line 1097 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_WITHIN(*driver.loc.back()); } YY_BREAK -case 460: +case 461: YY_RULE_SETUP -#line 1096 "seclang-scanner.ll" +#line 1098 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS_WORD(*driver.loc.back()); } YY_BREAK -case 461: +case 462: YY_RULE_SETUP -#line 1097 "seclang-scanner.ll" +#line 1099 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS(*driver.loc.back()); } YY_BREAK -case 462: +case 463: YY_RULE_SETUP -#line 1098 "seclang-scanner.ll" +#line 1100 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_ENDS_WITH(*driver.loc.back()); } YY_BREAK -case 463: +case 464: YY_RULE_SETUP -#line 1099 "seclang-scanner.ll" +#line 1101 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_EQ(*driver.loc.back()); } YY_BREAK -case 464: +case 465: YY_RULE_SETUP -#line 1100 "seclang-scanner.ll" +#line 1102 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_GE(*driver.loc.back()); } YY_BREAK -case 465: +case 466: YY_RULE_SETUP -#line 1101 "seclang-scanner.ll" +#line 1103 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_GT(*driver.loc.back()); } YY_BREAK -case 466: +case 467: YY_RULE_SETUP -#line 1102 "seclang-scanner.ll" +#line 1104 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH_FROM_FILE(*driver.loc.back()); } YY_BREAK -case 467: +case 468: YY_RULE_SETUP -#line 1103 "seclang-scanner.ll" +#line 1105 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH(*driver.loc.back()); } YY_BREAK -case 468: +case 469: YY_RULE_SETUP -#line 1104 "seclang-scanner.ll" +#line 1106 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_LE(*driver.loc.back()); } YY_BREAK -case 469: +case 470: YY_RULE_SETUP -#line 1105 "seclang-scanner.ll" +#line 1107 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_LT(*driver.loc.back()); } YY_BREAK -case 470: +case 471: YY_RULE_SETUP -#line 1106 "seclang-scanner.ll" +#line 1108 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_PM_FROM_FILE(*driver.loc.back()); } YY_BREAK -case 471: +case 472: YY_RULE_SETUP -#line 1107 "seclang-scanner.ll" +#line 1109 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_PM(*driver.loc.back()); } YY_BREAK -case 472: +case 473: YY_RULE_SETUP -#line 1108 "seclang-scanner.ll" +#line 1110 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RBL( *driver.loc.back()); } YY_BREAK -case 473: +case 474: YY_RULE_SETUP -#line 1109 "seclang-scanner.ll" +#line 1111 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RX(*driver.loc.back()); } YY_BREAK -case 474: +case 475: YY_RULE_SETUP -#line 1110 "seclang-scanner.ll" +#line 1112 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RX_GLOBAL(*driver.loc.back()); } YY_BREAK -case 475: +case 476: YY_RULE_SETUP -#line 1111 "seclang-scanner.ll" +#line 1113 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_EQ(*driver.loc.back()); } YY_BREAK -case 476: +case 477: YY_RULE_SETUP -#line 1112 "seclang-scanner.ll" +#line 1114 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_MATCH(*driver.loc.back()); } YY_BREAK -case 477: +case 478: YY_RULE_SETUP -#line 1113 "seclang-scanner.ll" +#line 1115 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_BEGINS_WITH(*driver.loc.back()); } YY_BREAK -case 478: +case 479: YY_RULE_SETUP -#line 1114 "seclang-scanner.ll" +#line 1116 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_INSPECT_FILE(*driver.loc.back()); } YY_BREAK -case 479: +case 480: YY_RULE_SETUP -#line 1115 "seclang-scanner.ll" +#line 1117 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_FUZZY_HASH(*driver.loc.back()); } YY_BREAK -case 480: +case 481: YY_RULE_SETUP -#line 1116 "seclang-scanner.ll" +#line 1118 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_BYTE_RANGE(*driver.loc.back()); } YY_BREAK -case 481: +case 482: YY_RULE_SETUP -#line 1117 "seclang-scanner.ll" +#line 1119 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_DTD(*driver.loc.back()); } YY_BREAK -case 482: +case 483: YY_RULE_SETUP -#line 1118 "seclang-scanner.ll" +#line 1120 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_HASH(*driver.loc.back()); } YY_BREAK -case 483: +case 484: YY_RULE_SETUP -#line 1119 "seclang-scanner.ll" +#line 1121 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_SCHEMA(*driver.loc.back()); } YY_BREAK -case 484: +case 485: YY_RULE_SETUP -#line 1120 "seclang-scanner.ll" +#line 1122 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CC(*driver.loc.back()); } YY_BREAK -case 485: +case 486: YY_RULE_SETUP -#line 1121 "seclang-scanner.ll" +#line 1123 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CPF(*driver.loc.back()); } YY_BREAK -case 486: +case 487: YY_RULE_SETUP -#line 1122 "seclang-scanner.ll" +#line 1124 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SSN(*driver.loc.back()); } YY_BREAK -case 487: +case 488: YY_RULE_SETUP -#line 1123 "seclang-scanner.ll" +#line 1125 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SVNR(*driver.loc.back()); } YY_BREAK -case 488: +case 489: YY_RULE_SETUP -#line 1124 "seclang-scanner.ll" +#line 1126 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_GSB_LOOKUP(*driver.loc.back()); } YY_BREAK -case 489: +case 490: YY_RULE_SETUP -#line 1125 "seclang-scanner.ll" +#line 1127 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RSUB(*driver.loc.back()); } YY_BREAK -case 490: +case 491: YY_RULE_SETUP -#line 1127 "seclang-scanner.ll" +#line 1129 "seclang-scanner.ll" { return p::make_NOT(*driver.loc.back()); } YY_BREAK -case 491: +case 492: YY_RULE_SETUP -#line 1128 "seclang-scanner.ll" +#line 1130 "seclang-scanner.ll" { BEGIN_NO_OP_INFORMED(); yyless(0); } YY_BREAK -case 492: +case 493: YY_RULE_SETUP -#line 1133 "seclang-scanner.ll" +#line 1135 "seclang-scanner.ll" { BEGIN(EXPECTING_PARAMETER_ENDS_WITH_SPACE); } YY_BREAK -case 493: +case 494: YY_RULE_SETUP -#line 1137 "seclang-scanner.ll" +#line 1139 "seclang-scanner.ll" { BEGIN(EXPECTING_PARAMETER_ENDS_WITH_QUOTE); } YY_BREAK -case 494: +case 495: YY_RULE_SETUP -#line 1141 "seclang-scanner.ll" +#line 1143 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 495: -/* rule 495 can match eol */ +case 496: +/* rule 496 can match eol */ YY_RULE_SETUP -#line 1142 "seclang-scanner.ll" +#line 1144 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 496: +case 497: YY_RULE_SETUP -#line 1146 "seclang-scanner.ll" +#line 1148 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 497: -/* rule 497 can match eol */ +case 498: +/* rule 498 can match eol */ YY_RULE_SETUP -#line 1147 "seclang-scanner.ll" +#line 1149 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 498: +case 499: YY_RULE_SETUP -#line 1150 "seclang-scanner.ll" +#line 1152 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 499: +case 500: YY_RULE_SETUP -#line 1151 "seclang-scanner.ll" +#line 1153 "seclang-scanner.ll" { BEGIN(LEXING_ERROR); yyless(0); } YY_BREAK -case 500: +case 501: YY_RULE_SETUP -#line 1155 "seclang-scanner.ll" +#line 1157 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 501: -/* rule 501 can match eol */ +case 502: +/* rule 502 can match eol */ YY_RULE_SETUP -#line 1156 "seclang-scanner.ll" +#line 1158 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 502: +case 503: YY_RULE_SETUP -#line 1160 "seclang-scanner.ll" +#line 1162 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 503: -/* rule 503 can match eol */ +case 504: +/* rule 504 can match eol */ YY_RULE_SETUP -#line 1161 "seclang-scanner.ll" +#line 1163 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 504: +case 505: YY_RULE_SETUP -#line 1165 "seclang-scanner.ll" +#line 1167 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 505: +case 506: YY_RULE_SETUP -#line 1166 "seclang-scanner.ll" +#line 1168 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } YY_BREAK -case 506: -YY_RULE_SETUP -#line 1171 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } - YY_BREAK case 507: -/* rule 507 can match eol */ YY_RULE_SETUP #line 1173 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 508: /* rule 508 can match eol */ YY_RULE_SETUP -#line 1174 "seclang-scanner.ll" +#line 1175 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 509: /* rule 509 can match eol */ YY_RULE_SETUP -#line 1175 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +#line 1176 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 510: /* rule 510 can match eol */ YY_RULE_SETUP -#line 1176 "seclang-scanner.ll" +#line 1177 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 511: /* rule 511 can match eol */ YY_RULE_SETUP #line 1178 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 512: /* rule 512 can match eol */ YY_RULE_SETUP -#line 1179 "seclang-scanner.ll" +#line 1180 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 513: /* rule 513 can match eol */ YY_RULE_SETUP -#line 1180 "seclang-scanner.ll" +#line 1181 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 514: /* rule 514 can match eol */ YY_RULE_SETUP -#line 1181 "seclang-scanner.ll" +#line 1182 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 515: /* rule 515 can match eol */ YY_RULE_SETUP #line 1183 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 516: /* rule 516 can match eol */ YY_RULE_SETUP -#line 1184 "seclang-scanner.ll" +#line 1185 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 517: /* rule 517 can match eol */ YY_RULE_SETUP -#line 1185 "seclang-scanner.ll" +#line 1186 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 518: /* rule 518 can match eol */ YY_RULE_SETUP -#line 1186 "seclang-scanner.ll" +#line 1187 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 519: +/* rule 519 can match eol */ YY_RULE_SETUP #line 1188 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 520: -/* rule 520 can match eol */ YY_RULE_SETUP #line 1190 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 521: /* rule 521 can match eol */ YY_RULE_SETUP -#line 1191 "seclang-scanner.ll" +#line 1192 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 522: @@ -8338,84 +8342,90 @@ YY_RULE_SETUP case 523: /* rule 523 can match eol */ YY_RULE_SETUP -#line 1194 "seclang-scanner.ll" +#line 1195 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 524: /* rule 524 can match eol */ YY_RULE_SETUP -#line 1195 "seclang-scanner.ll" +#line 1196 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 525: /* rule 525 can match eol */ YY_RULE_SETUP -#line 1196 "seclang-scanner.ll" +#line 1197 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 526: +/* rule 526 can match eol */ YY_RULE_SETUP #line 1198 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK - - case 527: YY_RULE_SETUP -#line 1203 "seclang-scanner.ll" -{ } +#line 1200 "seclang-scanner.ll" +{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK + + case 528: -/* rule 528 can match eol */ YY_RULE_SETUP -#line 1204 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 1205 "seclang-scanner.ll" +{ } YY_BREAK case 529: /* rule 529 can match eol */ YY_RULE_SETUP -#line 1205 "seclang-scanner.ll" +#line 1206 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - - case 530: /* rule 530 can match eol */ YY_RULE_SETUP -#line 1209 "seclang-scanner.ll" +#line 1207 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK + + case 531: /* rule 531 can match eol */ YY_RULE_SETUP -#line 1210 "seclang-scanner.ll" +#line 1211 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK case 532: /* rule 532 can match eol */ YY_RULE_SETUP -#line 1211 "seclang-scanner.ll" -{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 1212 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - case 533: +/* rule 533 can match eol */ YY_RULE_SETUP -#line 1216 "seclang-scanner.ll" -{ BEGIN(LEXING_ERROR); yyless(0); } +#line 1213 "seclang-scanner.ll" +{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK + case 534: YY_RULE_SETUP #line 1218 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +{ BEGIN(LEXING_ERROR); yyless(0); } YY_BREAK case 535: YY_RULE_SETUP -#line 1219 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +#line 1220 "seclang-scanner.ll" +{ driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } YY_BREAK case 536: YY_RULE_SETUP -#line 1220 "seclang-scanner.ll" +#line 1221 "seclang-scanner.ll" +{ driver.error (*driver.loc.back(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } + YY_BREAK +case 537: +YY_RULE_SETUP +#line 1222 "seclang-scanner.ll" { driver.error (*driver.loc.back(), "Expecting a variable, got: : ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } YY_BREAK case YY_STATE_EOF(INITIAL): @@ -8454,7 +8464,7 @@ case YY_STATE_EOF(SETVAR_ACTION_QUOTED): case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_COLLECTION_ELEM): case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_OPERATION): case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_CONTENT): -#line 1223 "seclang-scanner.ll" +#line 1225 "seclang-scanner.ll" { if (yyin) { fclose(yyin); @@ -8470,9 +8480,9 @@ case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_CONTENT): delete l; } YY_BREAK -case 537: +case 538: YY_RULE_SETUP -#line 1239 "seclang-scanner.ll" +#line 1241 "seclang-scanner.ll" { std::string err; const char *file = strchr(yytext, ' ') + 1; @@ -8500,9 +8510,9 @@ YY_RULE_SETUP } } YY_BREAK -case 538: +case 539: YY_RULE_SETUP -#line 1266 "seclang-scanner.ll" +#line 1268 "seclang-scanner.ll" { std::string err; const char *file = strchr(yytext, ' ') + 1; @@ -8533,10 +8543,10 @@ YY_RULE_SETUP free(f); } YY_BREAK -case 539: -/* rule 539 can match eol */ +case 540: +/* rule 540 can match eol */ YY_RULE_SETUP -#line 1296 "seclang-scanner.ll" +#line 1298 "seclang-scanner.ll" { HttpsClient c; std::string key; @@ -8572,12 +8582,12 @@ YY_RULE_SETUP yy_scan_string(c.content.c_str()); } YY_BREAK -case 540: +case 541: YY_RULE_SETUP -#line 1332 "seclang-scanner.ll" +#line 1334 "seclang-scanner.ll" ECHO; YY_BREAK -#line 8580 "seclang-scanner.cc" +#line 8591 "seclang-scanner.cc" case YY_END_OF_BUFFER: { @@ -8896,7 +8906,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3927 ) + if ( yy_current_state >= 3938 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -8929,11 +8939,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3927 ) + if ( yy_current_state >= 3938 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3926); + yy_is_jam = (yy_current_state == 3937); return yy_is_jam ? 0 : yy_current_state; } @@ -9682,7 +9692,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 1332 "seclang-scanner.ll" +#line 1334 "seclang-scanner.ll" namespace modsecurity { diff --git a/src/parser/seclang-scanner.ll b/src/parser/seclang-scanner.ll index 9686027ba7..2383106d95 100755 --- a/src/parser/seclang-scanner.ll +++ b/src/parser/seclang-scanner.ll @@ -148,6 +148,7 @@ ACTION_TRANSFORMATION_HTML_ENTITY_DECODE (?i:t:htmlEntityDecode) ACTION_TRANSFORMATION_JS_DECODE (?i:t:jsDecode) ACTION_TRANSFORMATION_LENGTH (?i:t:length) ACTION_TRANSFORMATION_LOWERCASE (?i:t:lowercase) +ACTION_TRANSFORMATION_PHP_ARGS_NAMES (?i:t:phpArgsNames) ACTION_TRANSFORMATION_MD5 (?i:t:md5) ACTION_TRANSFORMATION_NONE (?i:t:none) ACTION_TRANSFORMATION_NORMALISE_PATH (?i:t:(normalisePath|normalizePath)) @@ -585,6 +586,7 @@ EQUALS_MINUS (?i:=\-) {ACTION_TRANSFORMATION_HEX_ENCODE} { return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_HEX_DECODE} { return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_LOWERCASE} { return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.loc.back()); } +{ACTION_TRANSFORMATION_PHP_ARGS_NAMES} { return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_UPPERCASE} { return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_URL_ENCODE} { return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_URL_DECODE_UNI} { return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } diff --git a/src/parser/stack.hh b/src/parser/stack.hh index 8a74ee5c1b..c15d84c73d 100644 --- a/src/parser/stack.hh +++ b/src/parser/stack.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined with the parser itself. diff --git a/headers/modsecurity/rule_marker.h b/src/rule_marker.h similarity index 86% rename from headers/modsecurity/rule_marker.h rename to src/rule_marker.h index b8b835efda..48942b9224 100644 --- a/headers/modsecurity/rule_marker.h +++ b/src/rule_marker.h @@ -47,7 +47,12 @@ class RuleMarker : public Rule { RuleMarker(const RuleMarker& r) : Rule(r), m_name(r.m_name) - { } + { }; + + RuleMarker(RuleMarker &&r) : + Rule(r), + m_name(std::move(r.m_name)) + { }; RuleMarker &operator =(const RuleMarker& r) { Rule::operator = (r); @@ -55,11 +60,6 @@ class RuleMarker : public Rule { return *this; } - virtual bool evaluate(Transaction *transaction, - std::shared_ptr rm) override { - return evaluate(transaction); - } - virtual bool evaluate(Transaction *transaction) override { if (transaction->isInsideAMarker()) { if (*transaction->getCurrentMarker() == *m_name) { @@ -73,11 +73,14 @@ class RuleMarker : public Rule { }; - std::shared_ptr getName() { + std::shared_ptr getName() const { return m_name; } - bool isMarker() override { return true; } + virtual void dump(std::stringstream &out) override { + Rule::dump(out); + out << "SecMarker \"" << *getName() << "\"" << std::endl; + } private: std::shared_ptr m_name; diff --git a/src/rule_message.cc b/src/rule_message.cc index eb67955487..7b71d43231 100644 --- a/src/rule_message.cc +++ b/src/rule_message.cc @@ -19,6 +19,9 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/utils/string.h" +#include "src/actions/tag.h" +#include "src/rule_with_actions.h" + namespace modsecurity { @@ -26,27 +29,25 @@ namespace modsecurity { std::string RuleMessage::_details(const RuleMessage *rm) { std::string msg; - msg.append(" [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]"); - msg.append(" [line \"" + std::to_string(rm->m_ruleLine) + "\"]"); - msg.append(" [id \"" + std::to_string(rm->m_ruleId) + "\"]"); - msg.append(" [rev \"" + rm->m_rev + "\"]"); + msg.append(" [file \"" + rm->getFileName() + "\"]"); + msg.append(" [line \"" + std::to_string(rm->getLineNumber()) + "\"]"); + msg.append(" [id \"" + std::to_string(rm->getRuleId()) + "\"]"); + msg.append(" [rev \"" + rm->getRev() + "\"]"); msg.append(" [msg \"" + rm->m_message + "\"]"); msg.append(" [data \"" + utils::string::limitTo(200, rm->m_data) + "\"]"); msg.append(" [severity \"" + std::to_string(rm->m_severity) + "\"]"); - msg.append(" [ver \"" + rm->m_ver + "\"]"); - msg.append(" [maturity \"" + std::to_string(rm->m_maturity) + "\"]"); - msg.append(" [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]"); + msg.append(" [ver \"" + rm->getVer() + "\"]"); + msg.append(" [maturity \"" + std::to_string(rm->getMaturity()) + "\"]"); + msg.append(" [accuracy \"" + std::to_string(rm->getAccuracy()) + "\"]"); for (auto &a : rm->m_tags) { msg.append(" [tag \"" + a + "\"]"); } - - msg.append(" [hostname \"" + *rm->m_serverIpAddress.get() \ - + "\"]"); - msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]"); - msg.append(" [unique_id \"" + *rm->m_id + "\"]"); - msg.append(" [ref \"" + utils::string::limitTo(200, rm->m_reference) + "\"]"); + msg.append(" [hostname \"" + rm->getServerIpAddress() + "\"]"); + msg.append(" [uri \"" + utils::string::limitTo(200, rm->getUri()) + "\"]"); + msg.append(" [unique_id \"" + rm->getRequestId() + "\"]"); + msg.append(" [ref \"" + rm->m_reference + "\"]"); return msg; } @@ -55,9 +56,9 @@ std::string RuleMessage::_details(const RuleMessage *rm) { std::string RuleMessage::_errorLogTail(const RuleMessage *rm) { std::string msg; - msg.append("[hostname \"" + *rm->m_serverIpAddress.get() + "\"]"); - msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]"); - msg.append(" [unique_id \"" + *rm->m_id + "\"]"); + msg.append("[hostname \"" + rm->getServerIpAddress() + "\"]"); + msg.append(" [uri \"" + rm->getUri() + "\"]"); + msg.append(" [unique_id \"" + rm->getRequestId() + "\"]"); return msg; } @@ -68,10 +69,11 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { msg.reserve(2048); if (props & ClientLogMessageInfo) { - msg.append("[client " + std::string(*rm->m_clientIpAddress.get()) + "] "); + msg.append("[client " + rm->getClientIpAddress() + "] "); } - if (rm->m_isDisruptive) { + if (rm->isDisruptive() + && (rm->m_transaction->getRuleEngineState() == RulesSet::EnabledRuleEngine)) { msg.append("ModSecurity: Access denied with code "); if (code == -1) { msg.append("%d"); @@ -79,7 +81,7 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { msg.append(std::to_string(code)); } msg.append(" (phase "); - msg.append(std::to_string(rm->m_rule->getPhase() - 1) + "). "); + msg.append(std::to_string(rm->getPhase() - 1) + "). "); } else { msg.append("ModSecurity: Warning. "); } @@ -95,4 +97,123 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { } -} // namespace modsecurity +RuleWithActions *RuleMessage::getRule() const { + return m_rule; +} + + +void RuleMessage::setRule(RuleWithActions *rule) { + m_rule = rule; +} + + +bool RuleMessage::isSettle() const { + return m_rule != nullptr; +} + + +int RuleMessage::getRuleId() const { + if (m_rule) { + return m_rule->getId(); + } + return -1; +} + + +int RuleMessage::getPhase() const { + if (m_rule) { + return m_rule->getPhase(); + } + return 0; +} + + +std::string RuleMessage::getFileName() const { + if (m_rule) { + return *m_rule->getFileName().get(); + } + return ""; +} + + +int RuleMessage::getLineNumber() const { + if (m_rule) { + return m_rule->getLineNumber(); + } + return 0; +} + + +std::string RuleMessage::getRev() const { + if (m_rule) { + return m_rule->getRevision(); + } + return ""; +} + + +std::string RuleMessage::getVer() const { + if (m_rule) { + return m_rule->getVersion(); + } + return ""; +} + + +int RuleMessage::getMaturity() const { + if (m_rule) { + return m_rule->getMaturity(); + } + return 0; +} + + +int RuleMessage::getAccuracy() const { + if (m_rule) { + return m_rule->getAccuracy(); + } + return 0; +} + + +std::string RuleMessage::getClientIpAddress() const { + if (m_transaction) { + return *m_transaction->m_clientIpAddress.get(); + } + return ""; +} + + +std::string RuleMessage::getServerIpAddress() const { + if (m_transaction) { + return *m_transaction->m_serverIpAddress.get(); + } + return ""; +} + + +std::string RuleMessage::getRequestId() const { + if (m_transaction) { + return *m_transaction->m_id.get(); + } + return ""; +} + + +std::string RuleMessage::getUri() const { + if (m_transaction) { + return *m_transaction->m_uri_no_query_string_decoded.get(); + } + return ""; +} + + +bool RuleMessage::isDisruptive() const { + if (m_rule) { + return m_rule->hasDisruptiveAction(); + } + return 0; +} + + +} // namespace modsecurity diff --git a/src/rule_script.cc b/src/rule_script.cc index c74497d3fd..b4d2aa9413 100644 --- a/src/rule_script.cc +++ b/src/rule_script.cc @@ -19,23 +19,19 @@ namespace modsecurity { bool RuleScript::init(std::string *err) { - return m_lua.load(m_name, err); + return m_lua->load(m_name, err); } -bool RuleScript::evaluate(Transaction *trans, - std::shared_ptr ruleMessage) { +bool RuleScript::evaluate(Transaction *trans) { ms_dbg_a(trans, 4, " Executing script: " + m_name + "."); - bool containsDisruptive = false; + executeActionsIndependentOfChainedRuleResult(trans); - executeActionsIndependentOfChainedRuleResult(trans, - &containsDisruptive, ruleMessage); - - bool ret = m_lua.run(trans); + bool ret = m_lua->run(trans); if (ret) { - executeActionsAfterFullMatch(trans, containsDisruptive, ruleMessage); + executeActionsAfterFullMatch(trans); } return ret; diff --git a/src/rule_script.h b/src/rule_script.h index 237ad6ab80..8b8434d597 100644 --- a/src/rule_script.h +++ b/src/rule_script.h @@ -32,6 +32,8 @@ #include "src/actions/log_data.h" #include "src/actions/severity.h" #include "src/variables/variable.h" +#include "src/rule_with_actions.h" + #ifndef SRC_RULE_SCRIPT_H_ #define SRC_RULE_SCRIPT_H_ @@ -51,17 +53,19 @@ class RuleScript : public RuleWithActions { int lineNumber) : RuleWithActions(actions, t, std::move(fileName), lineNumber), m_name(name), - m_lua() { } + m_lua(std::unique_ptr(new engine::Lua())) { } - RuleScript(const RuleWithActions& r) = delete; + RuleScript(const RuleScript &rs) + : RuleWithActions(rs), + m_name(rs.m_name), + m_lua(rs.m_lua) { } - bool init(std::string *err); - bool evaluate(Transaction *trans, - std::shared_ptr ruleMessage) override; + bool init(std::string *err); + bool evaluate(Transaction *trans) override; std::string m_name; - engine::Lua m_lua; + std::shared_ptr m_lua; }; } // namespace modsecurity diff --git a/src/rule_unconditional.cc b/src/rule_unconditional.cc index e6bacd666a..592d6666f4 100644 --- a/src/rule_unconditional.cc +++ b/src/rule_unconditional.cc @@ -13,28 +13,23 @@ * */ -#include "modsecurity/rule_unconditional.h" +#include "src/rule_unconditional.h" namespace modsecurity { -bool RuleUnconditional::evaluate(Transaction *trans, - std::shared_ptr ruleMessage) { - RuleWithActions::evaluate(trans, ruleMessage); +bool RuleUnconditional::evaluate(Transaction *trans) { + RuleWithActions::evaluate(trans); - // FIXME: This needs to be romeved on the runtime exeption review. - bool containsBlock = false; - - ms_dbg_a(trans, 4, "(Rule: " + std::to_string(m_ruleId) \ + ms_dbg_a(trans, 4, "(Rule: " + std::to_string(getId()) \ + ") Executing unconditional rule..."); - executeActionsIndependentOfChainedRuleResult(trans, - &containsBlock, ruleMessage); + executeActionsIndependentOfChainedRuleResult(trans); - executeActionsAfterFullMatch(trans, containsBlock, ruleMessage); + executeActionsAfterFullMatch(trans); - performLogging(trans, ruleMessage); + trans->logMatchLastRuleOnTheChain(this); return true; } diff --git a/headers/modsecurity/rule_unconditional.h b/src/rule_unconditional.h similarity index 83% rename from headers/modsecurity/rule_unconditional.h rename to src/rule_unconditional.h index c66fa7c1ea..c249e3cac1 100644 --- a/headers/modsecurity/rule_unconditional.h +++ b/src/rule_unconditional.h @@ -22,15 +22,15 @@ #include #endif -#ifndef HEADERS_MODSECURITY_RULE_UNCONDITIONAL_H_ -#define HEADERS_MODSECURITY_RULE_UNCONDITIONAL_H_ +#ifndef SRC_RULE_UNCONDITIONAL_H_ +#define SRC_RULE_UNCONDITIONAL_H_ #include "modsecurity/modsecurity.h" #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" #include "modsecurity/rules_set.h" -#include "modsecurity/rule_with_actions.h" #include "modsecurity/actions/action.h" +#include "src/rule_with_actions.h" #ifdef __cplusplus @@ -55,7 +55,7 @@ class RuleUnconditional : public RuleWithActions { return *this; } - virtual bool evaluate(Transaction *transaction, std::shared_ptr ruleMessage) override; + virtual bool evaluate(Transaction *transaction) override; private: }; @@ -65,4 +65,4 @@ class RuleUnconditional : public RuleWithActions { #endif -#endif // HEADERS_MODSECURITY_RULE_UNCONDITIONAL_H_ +#endif // SRC_RULE_UNCONDITIONAL_H_ diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 5ac17a2673..e6a87d92ab 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -18,170 +18,214 @@ #include #include -#include -#include #include +#include #include -#include #include +#include +#include -#include "modsecurity/rules_set.h" -#include "src/operators/operator.h" #include "modsecurity/actions/action.h" #include "modsecurity/modsecurity.h" -#include "src/actions/transformations/none.h" -#include "src/actions/tag.h" -#include "src/utils/string.h" #include "modsecurity/rule_message.h" -#include "modsecurity/rule_with_actions.h" -#include "src/actions/msg.h" -#include "src/actions/log_data.h" -#include "src/actions/severity.h" +#include "modsecurity/rules_set.h" +#include "src/rule_with_actions.h" +#include "src/actions/accuracy.h" +#include "src/actions/block.h" #include "src/actions/capture.h" +#include "src/actions/log_data.h" +#include "src/actions/msg.h" +#include "src/actions/maturity.h" #include "src/actions/multi_match.h" +#include "src/actions/rev.h" +#include "src/actions/log.h" +#include "src/actions/no_log.h" #include "src/actions/set_var.h" -#include "src/actions/block.h" -#include "src/variables/variable.h" +#include "src/actions/severity.h" +#include "src/actions/tag.h" +#include "src/actions/transformations/transformation.h" +#include "src/actions/xmlns.h" +#include "src/utils/string.h" namespace modsecurity { -using operators::Operator; -using actions::Action; -using variables::Variable; -using actions::transformations::None; -using actions::transformations::Transformation; - - - RuleWithActions::RuleWithActions( Actions *actions, Transformations *transformations, std::unique_ptr fileName, int lineNumber) : Rule(std::move(fileName), lineNumber), - m_rev(""), - m_ver(""), - m_accuracy(0), - m_maturity(0), m_ruleId(0), m_chainedRuleChild(nullptr), m_chainedRuleParent(nullptr), m_disruptiveAction(nullptr), m_logData(nullptr), m_msg(nullptr), - m_severity(nullptr), m_actionsRuntimePos(), m_actionsSetVar(), m_actionsTag(), - m_transformations(transformations != NULL ? *transformations : Transformations()), + m_XmlNSs(), + m_defaultActionDisruptiveAction(nullptr), + m_defaultActionLogData(nullptr), + m_defaultActionMsg(nullptr), + m_defaultActionActionsRuntimePos(), + m_defaultActionActionsSetVar(), + m_defaultActionActionsTag(), + m_transformations(transformations != nullptr ? *transformations : Transformations()), + m_defaultTransformations(), + m_severity(SEVERITY_NOT_SET), + m_revision(""), + m_version(""), + m_accuracy(ACCURACY_NOT_SET), + m_maturity(MATURITY_NOT_SET), m_containsCaptureAction(false), + m_containsLogAction(false), + m_containsNoLogAction(false), m_containsMultiMatchAction(false), m_containsStaticBlockAction(false), + m_defaultSeverity(SEVERITY_NOT_SET), + m_defaultRevision(""), + m_defaultVersion(""), + m_defaultAccuracy(ACCURACY_NOT_SET), + m_defaultMaturity(MATURITY_NOT_SET), + m_defaultContainsCaptureAction(false), + m_defaultContainsLogAction(false), + m_defaultContainsNoLogAction(false), + m_defaultContainsMultiMatchAction(false), + m_defaultContainsStaticBlockAction(false), m_isChained(false) { if (actions) { - for (Action *a : *actions) { - if (a->action_kind == Action::ConfigurationKind) { - a->evaluate(this, NULL); - delete a; - - } else if (a->action_kind == Action::RunTimeOnlyIfMatchKind) { - if (dynamic_cast(a)) { - m_containsCaptureAction = true; - delete a; - } else if (dynamic_cast(a)) { - m_containsMultiMatchAction = true; - delete a; - } else if (dynamic_cast(a)) { - m_severity = dynamic_cast(a); - } else if (dynamic_cast(a)) { - m_logData = dynamic_cast(a); - } else if (dynamic_cast(a)) { - m_msg = dynamic_cast(a); - } else if (dynamic_cast(a)) { - m_actionsSetVar.push_back( - dynamic_cast(a)); - } else if (dynamic_cast(a)) { - m_actionsTag.push_back(dynamic_cast(a)); - } else if (dynamic_cast(a)) { - m_actionsRuntimePos.push_back(a); - m_containsStaticBlockAction = true; - } else if (a->isDisruptive() == true) { - if (m_disruptiveAction != nullptr) { - delete m_disruptiveAction; - m_disruptiveAction = nullptr; - } - m_disruptiveAction = a; - } else { - m_actionsRuntimePos.push_back(a); - } - } else { - delete a; - std::cout << "General failure, action: " << a->m_name; - std::cout << " has an unknown type." << std::endl; - throw; - } + for (actions::Action *a : *actions) { + addAction(a); } - delete actions; } } -RuleWithActions::~RuleWithActions() { - if (m_severity) { - delete m_severity; - m_severity = nullptr; - } - if (m_logData) { - delete m_logData; - m_logData = nullptr; - } - if (m_msg) { - delete m_msg; - m_msg = nullptr; - } - while (m_transformations.empty() == false) { - auto *a = m_transformations.back(); - m_transformations.pop_back(); - delete a; - } - while (m_actionsRuntimePos.empty() == false) { - auto *a = m_actionsRuntimePos.back(); - m_actionsRuntimePos.pop_back(); - delete a; +void RuleWithActions::addDefaultAction(std::shared_ptr a) { + if (a->m_actionKind == Action::ConfigurationKind) { + if (dynamic_cast(a.get())) { + actions::Accuracy *accuracy = dynamic_cast(a.get()); + m_defaultAccuracy = accuracy->getAccuracy(); + } else if (dynamic_cast(a.get())) { + actions::Rev *rev = dynamic_cast(a.get()); + m_defaultRevision = rev->getRevision(); + } else { + a->execute(this, NULL); + } + return; } - while (m_actionsSetVar.empty() == false) { - auto *a = m_actionsSetVar.back(); - m_actionsSetVar.pop_back(); - delete a; + + if (a->m_actionKind == Action::RunTimeOnlyIfMatchKind) { + if (dynamic_cast(a.get())) { + m_defaultContainsCaptureAction = true; + } else if (dynamic_cast(a.get())) { + m_defaultContainsMultiMatchAction = true; + } else if (dynamic_cast(a.get())) { + actions::Severity *severity = dynamic_cast(a.get()); + setDefaultActionSeverity(severity->m_severity); + } else if (dynamic_cast(a.get())) { + actions::Maturity *maturity = dynamic_cast(a.get()); + setDefaultActionMaturity(maturity->getMaturity()); + } else if (dynamic_cast(a.get())) { + m_defaultActionLogData = std::static_pointer_cast(a); + } else if (dynamic_cast(a.get())) { + m_defaultActionMsg = std::static_pointer_cast(a); + } else if (dynamic_cast(a.get())) { + m_defaultActionActionsSetVar.push_back(std::static_pointer_cast(a)); + } else if (dynamic_cast(a.get())) { + m_defaultActionActionsTag.push_back(std::static_pointer_cast(a)); + } else if (dynamic_cast(a.get())) { + m_defaultContainsLogAction = true; + } else if (dynamic_cast(a.get())) { + m_defaultContainsNoLogAction = true; + } else if (dynamic_cast(a.get())) { + m_defaultActionActionsRuntimePos.push_back(a); + m_defaultContainsStaticBlockAction = true; + } else if (a->isDisruptive() == true) { + m_defaultActionDisruptiveAction = a; + } else { + m_defaultActionActionsRuntimePos.push_back(a); + } + return; } - while (m_actionsTag.empty() == false) { - auto *a = m_actionsTag.back(); - m_actionsTag.pop_back(); + + std::cout << "General failure, action: " << *a->m_name; + std::cout << " has an unknown type." << std::endl; + throw std::invalid_argument("action type not found."); + +} + +void RuleWithActions::addAction(actions::Action *a) { + if (a->m_actionKind == Action::ConfigurationKind) { + if (dynamic_cast(a)) { + actions::Accuracy *accuracy = dynamic_cast(a); + m_accuracy = accuracy->getAccuracy(); + } else if (dynamic_cast(a)) { + actions::Rev *rev = dynamic_cast(a); + m_revision = rev->getRevision(); + } else { + a->execute(this, NULL); + } delete a; + return; } - if (m_disruptiveAction != nullptr) { - delete m_disruptiveAction; - m_disruptiveAction = nullptr; + + if (a->m_actionKind == Action::RunTimeOnlyIfMatchKind) { + if (dynamic_cast(a)) { + m_containsCaptureAction = true; + delete a; + } else if (dynamic_cast(a)) { + m_containsMultiMatchAction = true; + delete a; + } else if (dynamic_cast(a)) { + actions::Severity *severity = dynamic_cast(a); + setSeverity(severity->m_severity); + delete a; + } else if (dynamic_cast(a)) { + m_logData = std::unique_ptr(dynamic_cast(a)); + } else if (dynamic_cast(a)) { + m_msg = std::unique_ptr(dynamic_cast(a)); + } else if (dynamic_cast(a)) { + m_actionsSetVar.push_back(std::unique_ptr(dynamic_cast(a))); + } else if (dynamic_cast(a)) { + actions::Maturity *maturity = dynamic_cast(a); + m_maturity = maturity->getMaturity(); + delete a; + } else if (dynamic_cast(a)) { + m_containsLogAction = true; + delete a; + } else if (dynamic_cast(a)) { + m_containsNoLogAction = true; + delete a; + } else if (dynamic_cast(a)) { + m_actionsTag.push_back(std::unique_ptr(dynamic_cast(a))); + } else if (dynamic_cast(a)) { + m_actionsRuntimePos.push_back(std::unique_ptr(dynamic_cast(a))); + m_containsStaticBlockAction = true; + } else if (dynamic_cast(a)) { + m_XmlNSs.push_back(std::unique_ptr(dynamic_cast(a))); + } else if (a->isDisruptive() == true) { + m_disruptiveAction = std::unique_ptr(a); + } else { + m_actionsRuntimePos.push_back(std::unique_ptr(a)); + } + return; } -} + std::cout << "General failure, action: " << *a->m_name; + std::cout << " has an unknown type." << std::endl; + delete a; + throw std::invalid_argument("action type not found."); -bool RuleWithActions::evaluate(Transaction *transaction) { - RuleMessage rm(this, transaction); - std::shared_ptr rm2 = std::make_shared(&rm); - return evaluate(transaction, rm2); } -bool RuleWithActions::evaluate(Transaction *transaction, - std::shared_ptr ruleMessage) { +RuleWithActions::~RuleWithActions() { } - /* Rule evaluate is pure virtual. - * - * Rule::evaluate(transaction, ruleMessage); - */ +bool RuleWithActions::evaluate(Transaction *transaction) { /* Matched vars needs to be clear at every new rule execution */ transaction->m_matched.clear(); @@ -189,14 +233,13 @@ bool RuleWithActions::evaluate(Transaction *transaction, } -void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction *trans, - bool *containsBlock, std::shared_ptr ruleMessage) { +void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction *trans) { - for (actions::SetVar *a : m_actionsSetVar) { + for (actions::SetVar *a : getSetVarsActionsPtr()) { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans); + a->execute(this, trans); } for (auto &b : @@ -207,90 +250,101 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * actions::Action *a = dynamic_cast(b.second.get()); if (a->isDisruptive() == true && *a->m_name.get() == "block") { ms_dbg_a(trans, 9, "Rule contains a `block' action"); - *containsBlock = true; } else if (*a->m_name.get() == "setvar") { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans, ruleMessage); + a->execute(this, trans); } } - } -void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, - bool containsBlock, std::shared_ptr ruleMessage) { +void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { bool disruptiveAlreadyExecuted = false; +#if 0 for (auto &a : trans->m_rules->m_defaultActions[getPhase()]) { - if (a.get()->action_kind != actions::Action::RunTimeOnlyIfMatchKind) { + if (a.get()->m_actionKind != actions::Action::RunTimeOnlyIfMatchKind) { continue; } if (!a.get()->isDisruptive()) { - executeAction(trans, containsBlock, ruleMessage, a.get(), true); + executeAction(trans, a.get(), true); + } } +#endif - for (actions::Tag *a : this->m_actionsTag) { + for (actions::Tag *a : getTagsActionPtr()) { ms_dbg_a(trans, 4, "Running (non-disruptive) action: " \ + *a->m_name.get()); - a->evaluate(this, trans, ruleMessage); + a->execute(this, trans); } + /** + * + * FIXME: SecRuleUpdateActionBy should be runtime + * + */ for (auto &b : trans->m_rules->m_exceptions.m_action_pos_update_target_by_id) { if (m_ruleId != b.first) { continue; } actions::Action *a = dynamic_cast(b.second.get()); - executeAction(trans, containsBlock, ruleMessage, a, false); + executeAction(trans, a, false); disruptiveAlreadyExecuted = true; } - if (m_severity) { - m_severity->evaluate(this, trans, ruleMessage); - } if (m_logData) { - m_logData->evaluate(this, trans, ruleMessage); + m_logData->execute(this, trans); + } else if (m_defaultActionLogData) { + m_defaultActionLogData->execute(this, trans); } if (m_msg) { - m_msg->evaluate(this, trans, ruleMessage); + m_msg->execute(this, trans); + } else if (m_defaultActionMsg) { + m_defaultActionMsg->execute(this, trans); } - for (Action *a : this->m_actionsRuntimePos) { + + for (auto &a : getMatchActionsPtr()) { if (!a->isDisruptive() && !(disruptiveAlreadyExecuted && dynamic_cast(a))) { - executeAction(trans, containsBlock, ruleMessage, a, false); + executeAction(trans, a, false); } } + if (!disruptiveAlreadyExecuted && m_disruptiveAction != nullptr) { - executeAction(trans, containsBlock, ruleMessage, - m_disruptiveAction, false); + executeAction(trans, + m_disruptiveAction.get(), false); + } else if (!disruptiveAlreadyExecuted && hasBlockAction() + && m_defaultActionDisruptiveAction != nullptr) { + executeAction(trans, + m_defaultActionDisruptiveAction.get(), false); } } void RuleWithActions::executeAction(Transaction *trans, - bool containsBlock, std::shared_ptr ruleMessage, Action *a, bool defaultContext) { if (a->isDisruptive() == false && *a->m_name.get() != "block") { ms_dbg_a(trans, 9, "Running " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans, ruleMessage); + a->execute(this, trans); return; } - if (defaultContext && !containsBlock) { + if (defaultContext && !hasBlockAction()) { ms_dbg_a(trans, 4, "Ignoring action: " + *a->m_name.get() + \ " (rule does not cotains block)"); return; } if (trans->getRuleEngineState() == RulesSet::EnabledRuleEngine) { - ms_dbg_a(trans, 4, "Running (disruptive) action: " + *a->m_name.get() + \ - "."); - a->evaluate(this, trans, ruleMessage); + ms_dbg_a(trans, 4, "Running (disruptive) action: " + + *a->m_name.get() + "."); + a->execute(this, trans); return; } @@ -299,83 +353,32 @@ void RuleWithActions::executeAction(Transaction *trans, } -inline void RuleWithActions::executeTransformation( - actions::transformations::Transformation *a, - std::shared_ptr *value, +void RuleWithActions::executeTransformations( Transaction *trans, - TransformationResults *ret, - std::string *path, - int *nth) const { - - std::string *oldValue = (*value).get(); - std::string newValue = a->evaluate(*oldValue, trans); - - if (newValue != *oldValue) { - std::shared_ptr u(new std::string(newValue)); - if (m_containsMultiMatchAction) { - ret->push_back(std::make_pair(u, a->m_name)); - (*nth)++; - } - *value = u; - } + const std::string &in, + TransformationsResults &results) { + int none = 0; - if (path->empty()) { - path->append(*a->m_name.get()); - } else { - path->append("," + *a->m_name.get()); - } + ModSecString ssin; + ssin.assign(in.c_str(), in.size()); + results.push_back(TransformationResult(&ssin)); - ms_dbg_a(trans, 9, " T (" + \ - std::to_string(*nth) + ") " + \ - *a->m_name.get() + ": \"" + \ - utils::string::limitTo(80, newValue) +"\""); -} -void RuleWithActions::executeTransformations( - Transaction *trans, const std::string &in, TransformationResults &ret) { - int none = 0; - int transformations = 0; std::string path(""); std::shared_ptr value = std::shared_ptr(new std::string(in)); - if (m_containsMultiMatchAction == true) { - /* keep the original value */ - ret.push_back(std::make_pair( - std::shared_ptr(new std::string(*value)), - std::shared_ptr(new std::string(path)))); - } - - for (Action *a : m_transformations) { - if (a->m_isNone) { + for (Transformation *action : getTransformationPtr()) { + if (action->isNone()) { none++; } } - // Check for transformations on the SecDefaultAction - // Notice that first we make sure that won't be a t:none - // on the target rule. - if (none == 0) { - for (auto &a : trans->m_rules->m_defaultActions[getPhase()]) { - if (a->action_kind \ - != actions::Action::RunTimeBeforeMatchAttemptKind) { - continue; - } - - // FIXME: here the object needs to be a transformation already. - Transformation *t = dynamic_cast(a.get()); - executeTransformation(t, &value, trans, &ret, &path, - &transformations); - } - } - - for (Transformation *a : m_transformations) { + for (Transformation *t : getTransformationPtr()) { if (none == 0) { - Transformation *t = dynamic_cast(a); - executeTransformation(t, &value, trans, &ret, &path, - &transformations); + executeTransformation(trans, &results, t); } - if (a->m_isNone) { + if (t->isNone()) { none--; } } @@ -387,8 +390,8 @@ void RuleWithActions::executeTransformations( if (m_ruleId != b.first) { continue; } - Transformation *a = dynamic_cast(b.second.get()); - if (a->m_isNone) { + Transformation *t = dynamic_cast(b.second.get()); + if (t->isNone()) { none++; } } @@ -398,33 +401,66 @@ void RuleWithActions::executeTransformations( if (m_ruleId != b.first) { continue; } - Transformation *a = dynamic_cast(b.second.get()); + Transformation *t = dynamic_cast(b.second.get()); if (none == 0) { - Transformation *t = dynamic_cast(a); - executeTransformation(t, &value, trans, &ret, &path, - &transformations); + executeTransformation(trans, &results, t); } - if (a->m_isNone) { + if (t->isNone()) { none--; } } - if (m_containsMultiMatchAction == true) { +/* + if (hasMultimatchAction() == true) { ms_dbg_a(trans, 9, "multiMatch is enabled. " \ - + std::to_string(ret.size()) + \ + + std::to_string(results.size()) + \ " values to be tested."); + } else { + //results.push_back(TransformationResult(nullptr, ssin)); + //results.pop_front(); } +*/ +} - if (!m_containsMultiMatchAction) { - ret.push_back(std::make_pair( - std::shared_ptr(new std::string(*value)), - std::shared_ptr(new std::string(path)))); - } + + +void RuleWithActions::executeTransformation( + Transaction *transaction, + TransformationsResults *ret, + Transformation *transformation) { + executeTransformation( + transaction, + *ret->back().getAfter(), + ret, + transformation + ); +} + + +void RuleWithActions::executeTransformation( + Transaction *transaction, + ModSecString &in, + TransformationsResults *ret, + Transformation *transformation) { + + ModSecString out; + transformation->execute(transaction, in, out); + + ms_dbg_a(transaction, 9, " T (" + std::to_string(ret->size() - 1) + ") " + \ + *transformation->m_name.get() + ": \"" + \ + utils::string::limitTo(80, out) + "\""); + + ret->push_back( + TransformationResult( + &out, + transformation->m_name.get() + ) + ); } -bool RuleWithActions::containsTag(const std::string& name, Transaction *t) { - for (auto &tag : m_actionsTag) { +bool RuleWithActions::containsTag(const std::string& name, Transaction *t) const { + for (auto &tag : getTagsAction()) { if (tag != NULL && tag->getName(t) == name) { return true; } @@ -438,112 +474,9 @@ bool RuleWithActions::containsMsg(const std::string& name, Transaction *t) { } -std::vector RuleWithActions::getActionsByName(const std::string& name, - Transaction *trans) { - std::vector ret; - for (auto &z : m_actionsRuntimePos) { - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - for (auto &z : m_transformations) { - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - for (auto &b : - trans->m_rules->m_exceptions.m_action_pre_update_target_by_id) { - if (m_ruleId != b.first) { - continue; - } - actions::Action *z = dynamic_cast(b.second.get()); - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - for (auto &b : - trans->m_rules->m_exceptions.m_action_pos_update_target_by_id) { - if (m_ruleId != b.first) { - continue; - } - actions::Action *z = dynamic_cast(b.second.get()); - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - return ret; -} - -void RuleWithActions::performLogging(Transaction *trans, - std::shared_ptr ruleMessage, - bool lastLog, - bool chainedParentNull) { - - /* last rule in the chain. */ - bool isItToBeLogged = ruleMessage->m_saveMessage; - - /** - * - * RuleMessage is stacked allocated for the rule execution, - * anything beyond this may lead to invalid pointer access. - * - * In case of a warning, o set of messages is saved to be read - * at audit log generation. Therefore demands a copy here. - * - * FIXME: Study an way to avoid the copy. - * - **/ - if (lastLog) { - if (chainedParentNull) { - isItToBeLogged = (ruleMessage->m_saveMessage && (m_chainedRuleParent == nullptr)); - if (isItToBeLogged && !hasMultimatch()) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage); - - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - } - } else if (hasBlockAction() && !hasMultimatch()) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage); - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - } else { - if (isItToBeLogged && !hasMultimatch() - && !ruleMessage->m_message.empty()) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage); - - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - } - } - } else { - if (hasMultimatch() && isItToBeLogged) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage.get()); - - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - - RuleMessage *rm = new RuleMessage(this, trans); - rm->m_saveMessage = ruleMessage->m_saveMessage; - ruleMessage.reset(rm); - } - } -} +std::string RuleWithActions::getLogData(Transaction *t) { return m_logData->data(t); } +std::string RuleWithActions::getMessage(Transaction *t) { return m_msg->data(t); } -std::string RuleWithActions::logData(Transaction *t) { return m_logData->data(t); } -std::string RuleWithActions::msg(Transaction *t) { return m_msg->data(t); } -int RuleWithActions::severity() const { return m_severity->m_severity; } } // namespace modsecurity diff --git a/src/rule_with_actions.h b/src/rule_with_actions.h new file mode 100644 index 0000000000..0e69556ded --- /dev/null +++ b/src/rule_with_actions.h @@ -0,0 +1,542 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 - 2021 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#ifdef __cplusplus +#include +#include +#include +#include +#include +#include +#endif + +#ifndef SRC_RULE_WITH_ACTIONS_H_ +#define SRC_RULE_WITH_ACTIONS_H_ + +#include "modsecurity/transaction.h" +#include "modsecurity/modsecurity.h" +#include "modsecurity/variable_value.h" +#include "modsecurity/rule.h" + + +#ifdef __cplusplus + +namespace modsecurity { + +namespace actions { +class Action; +class Severity; +class LogData; +class Msg; +class Rev; +class SetVar; +class Tag; +class XmlNS; +namespace transformations { +class Transformation; +} +} + +using Transformation = actions::transformations::Transformation; +using Transformations = std::vector >; +using TransformationsPtr = std::vector; +using Action = actions::Action; +using Actions = std::vector; +using Tags = std::vector >; +using TagsPtr = std::vector; +using SetVars = std::vector >; +using SetVarsPtr = std::vector; +using MatchActions = std::vector >; +using MatchActionsPtr = std::vector; + +using XmlNSs = std::vector >; +using XmlNSsPtr = std::vector; + + +class TransformationResult { + public: + TransformationResult( + ModSecString *after, + std::string *transformation) + : m_after(*after), + m_transformation(transformation) { }; + + explicit TransformationResult( + ModSecString *after) + : m_after(*after), + m_transformation(nullptr) { }; + + TransformationResult(const TransformationResult &t2) + : m_after(t2.m_after), + m_transformation(t2.m_transformation) { }; + + + ModSecString *getAfter() { + return &m_after; + } + + + std::string *getTransformationName() { + return m_transformation; + } + + + private: + ModSecString m_after; + std::string *m_transformation; +}; + +using TransformationsResults = std::list; + + +class RuleWithActions : public Rule { + public: + int SEVERITY_NOT_SET = 10; + int ACCURACY_NOT_SET = 10; + int MATURITY_NOT_SET = 10; + + + RuleWithActions( + Actions *a, + Transformations *t, + std::unique_ptr fileName, + int lineNumber); + ~RuleWithActions(); + + RuleWithActions(const RuleWithActions &r) + : Rule(r), + m_ruleId(r.m_ruleId), + m_chainedRuleChild(r.m_chainedRuleChild), + m_chainedRuleParent(r.m_chainedRuleParent), + m_disruptiveAction(r.m_disruptiveAction), + m_logData(r.m_logData), + m_msg(r.m_msg), + m_actionsRuntimePos(r.m_actionsRuntimePos), + m_actionsSetVar(r.m_actionsSetVar), + m_actionsTag(r.m_actionsTag), + m_XmlNSs(r.m_XmlNSs), + m_defaultActionDisruptiveAction(r.m_defaultActionDisruptiveAction), + m_defaultActionLogData(r.m_defaultActionLogData), + m_defaultActionMsg(r.m_defaultActionMsg), + m_defaultActionActionsRuntimePos(r.m_defaultActionActionsRuntimePos), + m_defaultActionActionsSetVar(r.m_defaultActionActionsSetVar), + m_defaultActionActionsTag(r.m_defaultActionActionsTag), + m_transformations(r.m_transformations), + m_defaultTransformations(r.m_defaultTransformations), + m_severity(r.m_severity), + m_revision(r.m_revision), + m_version(r.m_version), + m_accuracy(r.m_accuracy), + m_maturity(r.m_maturity), + m_containsCaptureAction(r.m_containsCaptureAction), + m_containsLogAction(r.m_containsLogAction), + m_containsNoLogAction(r.m_containsNoLogAction), + m_containsMultiMatchAction(r.m_containsMultiMatchAction), + m_containsStaticBlockAction(r.m_containsStaticBlockAction), + m_defaultSeverity(r.m_defaultSeverity), + m_defaultRevision(r.m_defaultRevision), + m_defaultVersion(r.m_defaultVersion), + m_defaultAccuracy(r.m_defaultAccuracy), + m_defaultMaturity(r.m_defaultMaturity), + m_defaultContainsCaptureAction(r.m_defaultContainsCaptureAction), + m_defaultContainsLogAction(r.m_defaultContainsLogAction), + m_defaultContainsNoLogAction(r.m_defaultContainsNoLogAction), + m_defaultContainsMultiMatchAction(r.m_defaultContainsMultiMatchAction), + m_defaultContainsStaticBlockAction(r.m_defaultContainsStaticBlockAction), + m_isChained(r.m_isChained) { }; + + virtual bool evaluate(Transaction *transaction) override; + +/* + RuleWithActions &operator=(const RuleWithActions& r) { + Rule::operator = (r); + //m_rev = r.m_rev; + //m_ver = r.m_ver; + m_accuracy = r.m_accuracy; + m_maturity = r.m_maturity; + m_ruleId = r.m_ruleId; + m_chainedRuleChild = r.m_chainedRuleChild; + m_chainedRuleParent = r.m_chainedRuleParent; + + m_disruptiveAction = r.m_disruptiveAction; + m_logData = r.m_logData; + m_msg = r.m_msg; + m_severity = r.m_severity; + m_actionsRuntimePos = r.m_actionsRuntimePos; + m_actionsSetVar = r.m_actionsSetVar; + m_actionsTag = r.m_actionsTag; + + m_transformations = r.m_transformations; + + m_containsCaptureAction = r.m_containsCaptureAction; + m_containsMultiMatchAction = r.m_containsMultiMatchAction; + m_containsStaticBlockAction = r.m_containsStaticBlockAction; + m_isChained = r.m_isChained; + + return *this; + } + + //virtual bool evaluate(Transaction *transaction, std::shared_ptr ruleMessage) override; + + virtual bool evaluate(Transaction *transaction) override; + +*/ + void executeActionsIndependentOfChainedRuleResult( + Transaction *trasn); + + void executeActionsAfterFullMatch( + Transaction *trasn); + + void executeAction(Transaction *trans, + Action *a, + bool context); + + + static void executeTransformation( + Transaction *transaction, + TransformationsResults *ret, + Transformation *transformation); + + static void executeTransformation( + Transaction *transaction, + ModSecString &in, + TransformationsResults *ret, + Transformation *transformation); + + void executeTransformations( + Transaction *transaction, + const std::string &value, + TransformationsResults &results); + + void addAction(actions::Action *a); + void addTransformation(std::shared_ptr t) { + m_transformations.push_back(t); + } + void addDefaultAction(std::shared_ptr); + void addDefaultTransformation(std::shared_ptr t) { + m_defaultTransformations.push_back(t); + } + + + std::vector getActionsByName(const std::string& name, + Transaction *t); + bool containsTag(const std::string& name, Transaction *t) const; + bool containsMsg(const std::string& name, Transaction *t); + + + void clearDefaultActions() { + m_defaultSeverity = SEVERITY_NOT_SET; + m_defaultRevision = ""; + m_defaultVersion = ""; + m_defaultAccuracy = ACCURACY_NOT_SET; + m_defaultMaturity = MATURITY_NOT_SET; + m_defaultContainsCaptureAction = false; + m_defaultContainsLogAction = false; + m_defaultContainsNoLogAction = false; + m_defaultContainsMultiMatchAction = false; + m_defaultContainsStaticBlockAction = false; + m_defaultActionLogData = nullptr; + m_defaultActionMsg = nullptr; + m_defaultActionActionsSetVar.clear(); + m_defaultActionActionsTag.clear(); + m_defaultActionActionsRuntimePos.clear(); + m_defaultActionDisruptiveAction = nullptr; + m_defaultActionActionsRuntimePos.clear(); + m_defaultTransformations.clear(); + } + + Transformations getTransformation() const { + Transformations dst; + for (auto &a : m_defaultTransformations) { + dst.push_back(a); + } + for (auto &a : m_transformations) { + dst.push_back(a); + } + return dst; + } + + TransformationsPtr getTransformationPtr() const { + TransformationsPtr dst; + for (auto &a : m_defaultTransformations) { + dst.push_back(a.get()); + } + for (auto &a : m_transformations) { + dst.push_back(a.get()); + } + return dst; + } + + SetVars getSetVarsActions() const { + SetVars dst; + for (auto &a : m_defaultActionActionsSetVar) { + dst.push_back(a); + } + for (auto &a : m_actionsSetVar) { + dst.push_back(a); + } + return dst; + } + + SetVarsPtr getSetVarsActionsPtr() const { + SetVarsPtr dst; + for (auto &a : m_defaultActionActionsSetVar) { + dst.push_back(a.get()); + } + for (auto &a : m_actionsSetVar) { + dst.push_back(a.get()); + } + return dst; + } + + MatchActionsPtr getMatchActionsPtr() const { + MatchActionsPtr dst; + for (auto &a : m_defaultActionActionsRuntimePos) { + dst.push_back(a.get()); + } + for (auto &a : m_actionsRuntimePos) { + dst.push_back(a.get()); + } + return dst; + } + + MatchActions getMatchActions() const { + MatchActions dst; + for (auto &a : m_defaultActionActionsRuntimePos) { + dst.push_back(a); + } + for (auto &a : m_actionsRuntimePos) { + dst.push_back(a); + } + return dst; + } + + inline bool hasChainAction() const { return m_isChained == true; } + inline void setHasChainAction(bool b) { m_isChained = b; } + inline bool hasChainedParent() const { return m_chainedRuleParent != nullptr; } + inline bool hasChainedChild() const { return m_chainedRuleChild.get() != nullptr; } + + inline bool hasCaptureAction() const { return m_containsCaptureAction || m_defaultContainsCaptureAction; } + + inline bool hasDisruptiveAction() const { return m_disruptiveAction != nullptr || m_defaultActionDisruptiveAction != nullptr; } + inline void setDisruptiveAction(std::shared_ptr a) { m_disruptiveAction = a; } + inline std::shared_ptr getDisruptiveAction() const { return m_disruptiveAction; } + + inline bool hasBlockAction() const { return m_containsStaticBlockAction || m_defaultContainsStaticBlockAction; } + inline void setHasBlockAction(bool b) { m_containsStaticBlockAction = b; } + + inline bool hasMultimatchAction() const { return m_containsMultiMatchAction || m_defaultContainsMultiMatchAction; } + + inline bool hasLogAction() const { return m_containsLogAction == true; } + inline void setHasLogAction(bool b) { m_containsLogAction = b; } + inline bool hasNoLogAction() const { return m_containsNoLogAction == true; } + inline void setHasNoLogAction(bool b) { m_containsNoLogAction = b; } + + inline bool hasLogDataAction() const { return m_logData != nullptr || m_defaultActionLogData != nullptr; } + inline std::shared_ptr getLogDataAction() const { return m_logData; } + std::string getLogData(/*const */Transaction *t); + inline void setLogDataAction(std::shared_ptr data) { m_logData = data; } + + inline bool hasMessageAction() const { return m_msg != nullptr || m_defaultActionMsg != nullptr; } + inline std::shared_ptr getMessageAction() const { return m_msg; } + inline void setMessageAction(std::shared_ptr msg) { m_msg = msg; } + std::string getMessage(/*const */Transaction *t); + + + inline bool hasSeverityAction() const { return m_severity != SEVERITY_NOT_SET || m_defaultSeverity != SEVERITY_NOT_SET; } + inline int getSeverity() const { return (m_severity != SEVERITY_NOT_SET)?m_severity:m_defaultSeverity; } + inline void setDefaultActionSeverity(unsigned int severity) { m_defaultSeverity = severity; } + inline void setSeverity(unsigned int severity) { m_severity = severity; } + + inline bool hasRevisionAction() const { return m_revision != ""; } + inline std::string getRevision() const { return m_revision; }; + inline void setRevision(const std::string &revision) { m_revision.assign(revision); } + + inline bool hasVersionAction() const { return m_version != ""; } + inline std::string getVersion() const { return m_version; }; + inline void setVersion(const std::string &version) { m_version.assign(version); } + + inline bool hasAccuracyAction() const { return m_accuracy != ACCURACY_NOT_SET || m_defaultAccuracy != ACCURACY_NOT_SET; } + inline int getAccuracy() const { return m_accuracy; } + inline void setAccuracy(unsigned int accuracy) { m_accuracy = accuracy; } + + inline bool hasMaturityAction() const { return m_maturity != MATURITY_NOT_SET || m_defaultMaturity != MATURITY_NOT_SET; } + inline int getMaturity() const { return m_maturity; } + inline void setDefaultActionMaturity(unsigned int maturity) { m_defaultMaturity = maturity; } + inline void setMaturity(unsigned int maturity) { m_maturity = maturity; } + + inline bool hasTagAction() const { return m_actionsTag.size() > 0; } + inline void setTags(Tags tags) { + for (auto tag : tags) { + m_actionsTag.push_back(tag); + } + } + inline void cleanTags() { + m_actionsTag.clear(); + } + Tags getTagsAction() const { + Tags dst; + for (auto &a : m_defaultActionActionsTag) { + dst.push_back(a); + } + for (auto &a : m_actionsTag) { + dst.push_back(a); + } + return dst; + } + + TagsPtr getTagsActionPtr() const { + TagsPtr dst; + for (auto &a : m_defaultActionActionsTag) { + dst.push_back(a.get()); + } + for (auto &a : m_actionsTag) { + dst.push_back(a.get()); + } + return dst; + } + + inline RuleId getId() const { return m_ruleId; } + void setId(int id) { + m_ruleId = id; + } + + void setChainedNext(std::unique_ptr r) { + m_chainedRuleChild = std::move(r); + } + + inline RuleWithActions *getChainedNext() const { + return m_chainedRuleChild.get(); + } + + void setChainedParent(RuleWithActions *r) { + m_chainedRuleParent = r; + } + + inline RuleWithActions *getChainedParent() { + return m_chainedRuleParent; + } + + XmlNSsPtr getXmlNSsPtr() const { + /** + * FIXME: this is not conteplating SecRuleUpdateActionBy* yet. + * + */ + XmlNSsPtr dst; + for (auto &a : m_XmlNSs) { + dst.push_back(a.get()); + } + + return dst; + } + + + virtual void dump(std::stringstream &out) override { + out << "RuleWithActions" << std::endl; + } + + private: + RuleId m_ruleId; + + std::shared_ptr m_chainedRuleChild; + RuleWithActions *m_chainedRuleParent; + + /* actions */ + std::shared_ptr m_disruptiveAction; + std::shared_ptr m_logData; + std::shared_ptr m_msg; + MatchActions m_actionsRuntimePos; + SetVars m_actionsSetVar; + Tags m_actionsTag; + XmlNSs m_XmlNSs; + + /* actions || SecDefaultAction */ + std::shared_ptr m_defaultActionDisruptiveAction; + std::shared_ptr m_defaultActionLogData; + std::shared_ptr m_defaultActionMsg; + MatchActions m_defaultActionActionsRuntimePos; + SetVars m_defaultActionActionsSetVar; + Tags m_defaultActionActionsTag; + + /* actions > transformations */ + Transformations m_transformations; + + /* actions > transformations || SecDefaultAction */ + Transformations m_defaultTransformations; + + + /* || */ + /** + * 0 - EMERGENCY: is generated from correlation of anomaly + * scoring data where there is an inbound + * attack and an outbound leakage. + * 1 - ALERT: is generated from correlation where there is + * an inbound attack and an outbound application + * level error. + * 2 - CRITICAL: Anomaly Score of 5. Is the highest severity + * level possible without correlation. It is + * normally generated by the web attack rules + * (40 level files). + * 3 - ERROR: Error - Anomaly Score of 4. Is generated mostly + * from outbound leakage rules (50 level files). + * 4 - WARNING: Anomaly Score of 3. Is generated by malicious + * client rules (35 level files). + * 5 - NOTICE: Anomaly Score of 2. Is generated by the Protocol + * policy and anomaly files. + * 6 - INFO + * 7 - DEBUG + **/ + unsigned int m_severity:3; + + std::string m_revision; + std::string m_version; + + /** + * 1-9 where 9 is very strong and 1 has many false positives + */ + unsigned int m_accuracy:3; + /** + * 1-9 where 9 is extensively tested and 1 is a brand new experimental rule + */ + unsigned int m_maturity:3; + + + bool m_containsCaptureAction:1; + bool m_containsLogAction:1; + bool m_containsNoLogAction:1; + bool m_containsMultiMatchAction:1; + bool m_containsStaticBlockAction:1; + + /* || SecDefaultAction */ + unsigned int m_defaultSeverity:3; + std::string m_defaultRevision; + std::string m_defaultVersion; + unsigned int m_defaultAccuracy:3; + unsigned int m_defaultMaturity:3; + bool m_defaultContainsCaptureAction:1; + bool m_defaultContainsLogAction:1; + bool m_defaultContainsNoLogAction:1; + bool m_defaultContainsMultiMatchAction:1; + bool m_defaultContainsStaticBlockAction:1; + + bool m_isChained:1; +}; + +} // namespace modsecurity +#endif + + +#endif // SRC_RULE_WITH_ACTIONS_H_ + diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index 8cb322e678..cb6667d249 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -13,7 +13,6 @@ * */ -#include "modsecurity/rule_with_operator.h" #include @@ -41,6 +40,8 @@ #include "src/actions/set_var.h" #include "src/actions/block.h" #include "src/variables/variable.h" +#include "src/rule_with_operator.h" +#include "modsecurity/string_view.hpp" namespace modsecurity { @@ -58,29 +59,19 @@ RuleWithOperator::RuleWithOperator(Operator *op, std::unique_ptr fileName, int lineNumber) : RuleWithActions(actions, transformations, std::move(fileName), lineNumber), - m_variables(_variables), - m_operator(op) { /* */ } + m_variables(std::unique_ptr(_variables)), + m_operator(std::unique_ptr(op)) { /* */ } -RuleWithOperator::~RuleWithOperator() { - if (m_operator != NULL) { - delete m_operator; - } - while (m_variables != NULL && m_variables->empty() == false) { - auto *a = m_variables->back(); - m_variables->pop_back(); - delete a; - } - if (m_variables != NULL) { - delete m_variables; - } +RuleWithOperator::~RuleWithOperator() { } -void RuleWithOperator::updateMatchedVars(Transaction *trans, const std::string &key, - const std::string &value) { +void RuleWithOperator::updateMatchedVars(Transaction *trans, + const std::string &key, + const bpstd::string_view &value) { ms_dbg_a(trans, 9, "Matched vars updated."); trans->m_variableMatchedVar.set(value, trans->m_variableOffset); trans->m_variableMatchedVarName.set(key, trans->m_variableOffset); @@ -99,9 +90,9 @@ void RuleWithOperator::cleanMatchedVars(Transaction *trans) { } - -bool RuleWithOperator::executeOperatorAt(Transaction *trans, const std::string &key, - std::string value, std::shared_ptr ruleMessage) { +bool RuleWithOperator::executeOperatorAt(Transaction *trans, + const std::string &key, + const bpstd::string_view &value) { #if MSC_EXEC_CLOCK_ENABLED clock_t begin = clock(); clock_t end; @@ -109,15 +100,12 @@ bool RuleWithOperator::executeOperatorAt(Transaction *trans, const std::string & #endif bool ret; - ms_dbg_a(trans, 9, "Target value: \"" + utils::string::limitTo(80, - utils::string::toHexIfNeeded(value)) \ + ms_dbg_a(trans, 9, "Target value: \"" \ + + utils::string::limitTo(80, + utils::string::toHexIfNeeded(value.to_string())) \ + "\" (Variable: " + key + ")"); - ret = this->m_operator->evaluateInternal(trans, this, value, ruleMessage); - - if (ret == false) { - return false; - } + ret = m_operator->evaluateInternal(trans, this, value, trans->messageGetLast()); #if MSC_EXEC_CLOCK_ENABLED end = clock(); @@ -161,7 +149,7 @@ void RuleWithOperator::getVariablesExceptions(Transaction *t, } for (auto &a : t->m_rules->m_exceptions.m_variable_update_target_by_id) { - if (m_ruleId != a.first) { + if (getId() != a.first) { continue; } Variable *b = a.second.get(); @@ -189,7 +177,7 @@ inline void RuleWithOperator::getFinalVars(variables::Variables *vars, if (std::find_if(trans->m_ruleRemoveTargetById.begin(), trans->m_ruleRemoveTargetById.end(), [&, variable, this](std::pair &m) -> bool { - return m.first == m_ruleId + return m.first == getId() && m.second == *variable->m_fullName.get(); }) != trans->m_ruleRemoveTargetById.end()) { continue; @@ -213,10 +201,9 @@ inline void RuleWithOperator::getFinalVars(variables::Variables *vars, } -bool RuleWithOperator::evaluate(Transaction *trans, - std::shared_ptr ruleMessage) { +bool RuleWithOperator::evaluate(Transaction *trans) { bool globalRet = false; - variables::Variables *variables = this->m_variables; + variables::Variables *variables = m_variables.get(); bool recursiveGlobalRet; bool containsBlock = hasBlockAction(); std::string eparam; @@ -224,23 +211,22 @@ bool RuleWithOperator::evaluate(Transaction *trans, vars.reserve(4); variables::Variables exclusion; - RuleWithActions::evaluate(trans, ruleMessage); - + RuleWithActions::evaluate(trans); // FIXME: Make a class runTimeException to handle this cases. for (auto &i : trans->m_ruleRemoveById) { - if (m_ruleId != i) { + if (getId() != i) { continue; } - ms_dbg_a(trans, 9, "Rule id: " + std::to_string(m_ruleId) + + ms_dbg_a(trans, 9, "Rule id: " + std::to_string(getId()) + " was skipped due to a ruleRemoveById action..."); return true; } for (auto &i : trans->m_ruleRemoveByIdRange) { - if (!(i.first <= m_ruleId && i.second >= m_ruleId)) { + if (!(i.first <= getId() && i.second >= getId())) { continue; } - ms_dbg_a(trans, 9, "Rule id: " + std::to_string(m_ruleId) + + ms_dbg_a(trans, 9, "Rule id: " + std::to_string(getId()) + " was skipped due to a ruleRemoveById action..."); return true; } @@ -254,14 +240,15 @@ bool RuleWithOperator::evaluate(Transaction *trans, } else { eparam = "\"" + eparam + "\""; } - ms_dbg_a(trans, 4, "(Rule: " + std::to_string(m_ruleId) \ + ms_dbg_a(trans, 4, "(Rule: " + std::to_string(getId()) \ + ") Executing operator \"" + getOperatorName() \ + "\" with param " \ + eparam \ + " against " \ + variables + "."); } else { - ms_dbg_a(trans, 4, "(Rule: " + std::to_string(m_ruleId) \ + ms_dbg_a(trans, 4, "(Rule: " + std::to_string(getId() +) \ + ") Executing operator \"" + getOperatorName() \ + " against " \ + variables + "."); @@ -277,6 +264,7 @@ bool RuleWithOperator::evaluate(Transaction *trans, } var->evaluate(trans, this, &e); for (const VariableValue *v : e) { + TransformationsResults transformationsResults; const std::string &value = v->getValue(); const std::string &key = v->getKeyWithCollection(); @@ -284,7 +272,7 @@ bool RuleWithOperator::evaluate(Transaction *trans, std::find_if(trans->m_ruleRemoveTargetById.begin(), trans->m_ruleRemoveTargetById.end(), [&, v, this](std::pair &m) -> bool { - return m.first == m_ruleId && m.second == v->getKeyWithCollection(); + return m.first == getId() && m.second == v->getKeyWithCollection(); }) != trans->m_ruleRemoveTargetById.end() ) { delete v; @@ -303,32 +291,50 @@ bool RuleWithOperator::evaluate(Transaction *trans, continue; } - TransformationResults values; - - executeTransformations(trans, value, values); + executeTransformations(trans, value, transformationsResults); - for (const auto &valueTemp : values) { + auto iter = transformationsResults.begin(); + if (!hasMultimatchAction()) { + iter = transformationsResults.end(); + std::advance(iter, -1); + } + while (iter != transformationsResults.end()) { bool ret; - std::string valueAfterTrans = std::move(*valueTemp.first); + auto &valueTemp = *iter; + bpstd::string_view view = *valueTemp.getAfter(); - ret = executeOperatorAt(trans, key, valueAfterTrans, ruleMessage); + ret = executeOperatorAt(trans, key, view); if (ret == true) { - ruleMessage->m_match = m_operator->resolveMatchMessage(trans, + trans->messageGetLast()->m_match = m_operator->resolveMatchMessage(trans, key, value); + for (auto &i : v->getOrigin()) { - ruleMessage->m_reference.append(i->toText()); + trans->messageGetLast()->m_reference.append(i->toText()); } - ruleMessage->m_reference.append(*valueTemp.second); - updateMatchedVars(trans, key, valueAfterTrans); - executeActionsIndependentOfChainedRuleResult(trans, - &containsBlock, ruleMessage); + auto iter2 = transformationsResults.begin(); + while (iter2 != transformationsResults.end()) { + if (iter2->getTransformationName()) { + trans->messageGetLast()->m_reference.append(*iter2->getTransformationName()); + } + /* + if (iter == iter2) { + break; + } else if (iter2->getTransformationName()) { + trans->messageGetLast()->m_reference.append(","); + } + */ + iter2++; + } - performLogging(trans, ruleMessage, false); + updateMatchedVars(trans, key, view); + executeActionsIndependentOfChainedRuleResult(trans); globalRet = true; } + + iter++; } delete v; v = NULL; @@ -344,19 +350,19 @@ bool RuleWithOperator::evaluate(Transaction *trans, } ms_dbg_a(trans, 4, "Rule returned 1."); - if (this->isChained() == false) { + if (this->hasChainAction() == false) { goto end_exec; } /* FIXME: this check should happens on the parser. */ - if (this->m_chainedRuleChild == nullptr) { + if (getChainedNext() == nullptr) { ms_dbg_a(trans, 4, "Rule is marked as chained but there " \ "isn't a subsequent rule."); goto end_clean; } ms_dbg_a(trans, 4, "Executing chained rule."); - recursiveGlobalRet = m_chainedRuleChild->evaluate(trans, ruleMessage); + recursiveGlobalRet = getChainedNext()->evaluate(trans); if (recursiveGlobalRet == true) { goto end_exec; @@ -366,10 +372,21 @@ bool RuleWithOperator::evaluate(Transaction *trans, return false; end_exec: - executeActionsAfterFullMatch(trans, containsBlock, ruleMessage); + executeActionsAfterFullMatch(trans); /* last rule in the chain. */ - performLogging(trans, ruleMessage, true, true); + trans->logMatchLastRuleOnTheChain(this); + + if (hasSeverityAction()) { + ms_dbg_a(trans, 9, "This rule severity is: " + \ + std::to_string(getSeverity()) + " current transaction is: " + \ + std::to_string(trans->m_highestSeverityAction)); + + if (trans->m_highestSeverityAction > getSeverity()) { + trans->m_highestSeverityAction = getSeverity(); + } + } + return true; } diff --git a/headers/modsecurity/rule_with_operator.h b/src/rule_with_operator.h similarity index 57% rename from headers/modsecurity/rule_with_operator.h rename to src/rule_with_operator.h index a8868bcbaa..f9990a509d 100644 --- a/headers/modsecurity/rule_with_operator.h +++ b/src/rule_with_operator.h @@ -22,14 +22,17 @@ #include #endif -#ifndef HEADERS_MODSECURITY_RULE_WITH_OPERATOR_H_ -#define HEADERS_MODSECURITY_RULE_WITH_OPERATOR_H_ +#ifndef SRC_RULE_WITH_OPERATOR_H_ +#define SRC_RULE_WITH_OPERATOR_H_ #include "modsecurity/transaction.h" #include "modsecurity/modsecurity.h" #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" +#include "src/variables/variable.h" +#include "src/operators/operator.h" +#include "modsecurity/string_view.hpp" #ifdef __cplusplus @@ -45,33 +48,49 @@ class RuleWithOperator : public RuleWithActions { std::unique_ptr fileName, int lineNumber); + RuleWithOperator(const RuleWithOperator &op) + : RuleWithActions(op), + m_variables(op.m_variables), + m_operator(op.m_operator) { }; + virtual ~RuleWithOperator(); - bool evaluate(Transaction *transaction, - std::shared_ptr rm) override; + bool evaluate(Transaction *transaction) override; void getVariablesExceptions(Transaction *t, variables::Variables *exclusion, variables::Variables *addition); inline void getFinalVars(variables::Variables *vars, variables::Variables *eclusion, Transaction *trans); - bool executeOperatorAt(Transaction *trasn, const std::string &key, - std::string value, std::shared_ptr rm); + bool executeOperatorAt(Transaction *transaction, + const std::string &key, + const bpstd::string_view &value); + + static void updateMatchedVars(Transaction *transaction, + const std::string &key, + const bpstd::string_view &value); - static void updateMatchedVars(Transaction *trasn, const std::string &key, - const std::string &value); static void cleanMatchedVars(Transaction *trasn); std::string getOperatorName() const; virtual std::string getReference() override { - return std::to_string(m_ruleId); + return std::to_string(getId()); + } + + virtual void dump(std::stringstream &out) override { + Rule::dump(out); + out << "# RuleWithOperator" << std::endl; + out << "SecRule "; + out << m_variables->getVariableNames() << " "; + out << "\"" << "@" << m_operator->m_op << " " << m_operator->m_param << "\""; + out << std::endl; } private: - modsecurity::variables::Variables *m_variables; - operators::Operator *m_operator; + std::shared_ptr m_variables; + std::shared_ptr m_operator; }; @@ -79,4 +98,5 @@ class RuleWithOperator : public RuleWithActions { #endif -#endif // HEADERS_MODSECURITY_RULE_WITH_OPERATOR_H_ +#endif // SRC_RULE_WITH_OPERATOR_H_ + diff --git a/src/rules.cc b/src/rules.cc new file mode 100644 index 0000000000..ff91e8b4f9 --- /dev/null +++ b/src/rules.cc @@ -0,0 +1,67 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include "modsecurity/rules.h" +#include "src/rule_with_actions.h" + + +namespace modsecurity { + + +int Rules::append(Rules *from) { + m_rules.insert(m_rules.end(), from->m_rules.begin(), from->m_rules.end()); + if (!from->m_defaultActions.empty() || !from->m_defaultTransformations.empty()) { + m_defaultActions.clear(); + m_defaultTransformations.clear(); + for (auto &a : from->m_defaultActions) { + m_defaultActions.push_back(a); + } + for (auto &a : from->m_defaultTransformations) { + m_defaultTransformations.push_back(a); + } + } + return from->size(); +} + + +bool Rules::insert(const std::shared_ptr &rule) { + m_rules.push_back(rule); + return true; +} + + +size_t Rules::size() const { + return m_rules.size(); +} + + +std::shared_ptr Rules::operator[](int index) const { + return m_rules[index]; +} + + +std::shared_ptr Rules::at(int index) const { + return m_rules[index]; +} + + +void Rules::dump(std::stringstream &out) { + for (auto &r : m_rules) { + r->dump(out); + } +} + +} // namespace modsecurity + diff --git a/src/rules_exceptions.cc b/src/rules_exceptions.cc index 2c22d16fc9..a5ab968938 100644 --- a/src/rules_exceptions.cc +++ b/src/rules_exceptions.cc @@ -36,15 +36,15 @@ bool RulesExceptions::loadUpdateActionById(double id, std::string *error) { for (auto &a : *actions) { - if (a->action_kind == actions::Action::ConfigurationKind) { + if (a->m_actionKind == actions::Action::ConfigurationKind) { std::cout << "General failure, action: " << a->m_name; std::cout << " has not expected to be used with UpdateActionByID."; std::cout << std::endl; - } else if (a->action_kind + } else if (a->m_actionKind == actions::Action::RunTimeBeforeMatchAttemptKind) { m_action_pre_update_target_by_id.emplace(std::pair>(id , std::move(a))); - } else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind) { + } else if (a->m_actionKind == actions::Action::RunTimeOnlyIfMatchKind) { m_action_pos_update_target_by_id.emplace(std::pair>(id , std::move(a))); } else { diff --git a/src/rules_set.cc b/src/rules_set.cc index 40d26e05db..f091c4be96 100644 --- a/src/rules_set.cc +++ b/src/rules_set.cc @@ -18,8 +18,10 @@ #include #include #include +#include #include "modsecurity/rules_set.h" +#include "src/rule_marker.h" #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/parser/driver.h" @@ -31,6 +33,46 @@ using modsecurity::Utils::HttpsClient; namespace modsecurity { + void Rules::fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors) { + for (size_t i = 0; i < m_rules.size(); i++) { + auto &rule = m_rules[i]; + + RuleWithActions *r = dynamic_cast(rule.get()); + if (!r) { + continue; + } + + if (dynamic_cast(rule.get())) { + RuleWithOperator *op = new RuleWithOperator(*dynamic_cast(rule.get())); + std::unique_ptr nrp(op); + m_rules[i] = std::move(nrp); + } else if (dynamic_cast(rule.get())) { + RuleUnconditional *un = new RuleUnconditional(*dynamic_cast(rule.get())); + std::unique_ptr nrp(un); + m_rules[i] = std::move(nrp); + } else if (dynamic_cast(rule.get())) { + RuleScript *rs = new RuleScript(*dynamic_cast(rule.get())); + std::unique_ptr nrp(rs); + m_rules[i] = std::move(nrp); + } else { + RuleWithActions *nr = new RuleWithActions(*dynamic_cast(rule.get())); + std::unique_ptr nrp(nr); + m_rules[i] = std::move(nrp); + } + + RuleWithActions *nr = dynamic_cast(m_rules[i].get()); + nr->clearDefaultActions(); + for (auto a : m_defaultActions) { + nr->addDefaultAction(a); + } + for (auto a : m_defaultTransformations) { + nr->addDefaultTransformation(a); + } + + + } + } + /** * @name loadFromUri @@ -101,6 +143,52 @@ int RulesSet::load(const char *plainRules) { } +bool RulesSet::containsDuplicatedIds(RulesWarnings *warning, RulesErrors *error) { + std::multimap allIds; + std::set duplicatedIds; + for (auto &rules : m_rulesSetPhases) { + for (auto &j : rules) { + RuleWithActions *rule = dynamic_cast(j.get()); + if (rule) { + allIds.insert(std::pair(rule->getId(), rule)); + } + } + } + + auto id = allIds.begin(); + auto next = id; + if (id != allIds.end()) { + next++; + } + while (id != allIds.end() && next != allIds.end()) { + if (id->first == next->first) { + duplicatedIds.insert(id->first); + } + id++; + next++; + } + + for (auto i : duplicatedIds) { + auto ret = allIds.equal_range(i); + std::stringstream ss; + + ss << "There are multiple rules defined with "; + ss << "same id. The ID " << i << " is defined at: " << std::endl; + for (auto it = ret.first; it != ret.second; ++it) { + auto rule = it->second; + ss << " " << *rule->getFileName() << ":"; + ss << rule->getLineNumber() << std::endl; + } + + std::unique_ptr e(new std::string(ss.str())); + error->push_back(std::move(e)); + } + + return !duplicatedIds.empty(); +} + + + std::string RulesSet::getParserError() { return this->m_parserError.str(); } @@ -136,12 +224,14 @@ int RulesSet::evaluate(int phase, Transaction *t) { // FIXME: This is not meant to be here. At the end of this refactoring, // the shared pointer won't be used. auto rule = rules->at(i); - if (t->isInsideAMarker() && !rule->isMarker()) { - ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ - + "' due to a SecMarker: " + *t->getCurrentMarker()); - - } else if (rule->isMarker()) { - rule->evaluate(t); + if (t->isInsideAMarker()) { + RuleMarker *ruleMarker = dynamic_cast(rule.get()); + if (!ruleMarker) { + ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ + + "' due to a SecMarker: " + *t->getCurrentMarker()); + } else { + rule->evaluate(t); + } } else if (t->m_skip_next > 0) { t->m_skip_next--; ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ @@ -155,7 +245,7 @@ int RulesSet::evaluate(int phase, Transaction *t) { Rule *base = rule.get(); RuleWithActions *ruleWithActions = dynamic_cast(base); // FIXME: Those should be treated inside the rule itself - if (ruleWithActions && m_exceptions.contains(ruleWithActions->m_ruleId)) { + if (ruleWithActions && m_exceptions.contains(ruleWithActions->getId())) { ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ + "'. Removed by an SecRuleRemove directive."); continue; @@ -222,13 +312,24 @@ int RulesSet::evaluate(int phase, Transaction *t) { int RulesSet::merge(Driver *from) { int amount_of_rules = 0; + RulesErrors errors; + RulesWarnings warnings; - amount_of_rules = m_rulesSetPhases.append(&from->m_rulesSetPhases, - &m_parserError); + m_rulesSetPhases.append(&from->m_rulesSetPhases); mergeProperties( dynamic_cast(from), dynamic_cast(this), - &m_parserError); + &warnings, &errors); + + m_rulesSetPhases.fixDefaultActions(&warnings, &errors); + containsDuplicatedIds(&warnings, &errors); + + if (!errors.empty()) { + for (auto &i : errors) { + m_parserError << "*** Error: " << *i << std::endl; + } + return -1; + } return amount_of_rules; } @@ -236,13 +337,24 @@ int RulesSet::merge(Driver *from) { int RulesSet::merge(RulesSet *from) { int amount_of_rules = 0; + RulesErrors errors; + RulesWarnings warnings; - amount_of_rules = m_rulesSetPhases.append(&from->m_rulesSetPhases, - &m_parserError); + m_rulesSetPhases.append(&from->m_rulesSetPhases); mergeProperties( dynamic_cast(from), dynamic_cast(this), - &m_parserError); + &warnings, &errors); + + m_rulesSetPhases.fixDefaultActions(&warnings, &errors); + containsDuplicatedIds(&warnings, &errors); + + if (!errors.empty()) { + for (auto &i : errors) { + m_parserError << "*** Error: " << *i << std::endl; + } + return -1; + } return amount_of_rules; } @@ -256,7 +368,7 @@ void RulesSet::debug(int level, const std::string &id, } -void RulesSet::dump() const { +void RulesSet::dump() { m_rulesSetPhases.dump(); } diff --git a/src/rules_set_phases.cc b/src/rules_set_phases.cc index 1d93330caa..69bfa0e86e 100644 --- a/src/rules_set_phases.cc +++ b/src/rules_set_phases.cc @@ -13,68 +13,48 @@ * */ -#include -#include -#include -#include -#include - #include "modsecurity/rules_set_phases.h" -#include "modsecurity/rule.h" -#include "modsecurity/rules.h" -#include "modsecurity/modsecurity.h" - - +#include "src/rule_with_operator.h" +#include namespace modsecurity { -bool RulesSetPhases::insert(std::shared_ptr rule) { - if (rule->getPhase() >= modsecurity::Phases::NUMBER_OF_PHASES) { - return false; +void RulesSetPhases::insert(std::shared_ptr rule) { + if (rule->getPhase() >= size()) { + return; } m_rulesAtPhase[rule->getPhase()].insert(rule); - - return true; } -int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { - int amount_of_rules = 0; - std::vector v; - - for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - v.reserve(m_rulesAtPhase[i].size()); - for (size_t z = 0; z < m_rulesAtPhase[i].size(); z++) { - RuleWithOperator *rule_ckc = dynamic_cast(m_rulesAtPhase[i].at(z).get()); - if (!rule_ckc) { - continue; - } - v.push_back(rule_ckc->m_ruleId); - } +void RulesSetPhases::append(RulesSetPhases *from) { + int phase = 0; + for (auto &a : *from) { + m_rulesAtPhase[phase++].append(&a); } - std::sort (v.begin(), v.end()); +} + - for (int phase = 0; phase < modsecurity::Phases::NUMBER_OF_PHASES; phase++) { - int res = m_rulesAtPhase[phase].append(from->at(phase), v, err); - if (res < 0) { - return res; - } - amount_of_rules = amount_of_rules + res; +void RulesSetPhases::dump() { + int phase = 0; + for (auto &rules : m_rulesAtPhase) { + std::cout << "Phase: " << std::to_string(phase++); + std::cout << " (" << std::to_string(rules.size()); + std::cout << " rules)" << std::endl; + rules.dump(); } +} - return amount_of_rules; + +Rules *RulesSetPhases::operator[](int index) { + return &m_rulesAtPhase[index]; } -void RulesSetPhases::dump() const { - for (int i = 0; i <= modsecurity::Phases::NUMBER_OF_PHASES; i++) { - std::cout << "Phase: " << std::to_string(i); - std::cout << " (" << std::to_string(m_rulesAtPhase[i].size()); - std::cout << " rules)" << std::endl; - m_rulesAtPhase[i].dump(); - } + +Rules *RulesSetPhases::at(int index) { + return &m_rulesAtPhase[index]; } } // namespace modsecurity - diff --git a/src/run_time_string.cc b/src/run_time_string.cc index f2dfa686f2..ec5c76c94f 100644 --- a/src/run_time_string.cc +++ b/src/run_time_string.cc @@ -25,6 +25,7 @@ #include "src/variables/highest_severity.h" #include "src/utils/string.h" #include "src/variables/variable.h" +#include "src/rule_with_operator.h" namespace modsecurity { diff --git a/src/transaction.cc b/src/transaction.cc index bae7c4ca7d..cf7dc8be3f 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -52,6 +52,7 @@ #include "modsecurity/rules_set_properties.h" #include "src/actions/disruptive/allow.h" #include "src/variables/remote_user.h" +#include "src/rule_with_actions.h" @@ -61,6 +62,33 @@ using modsecurity::RequestBodyProcessor::XML; namespace modsecurity { + +RuleMessage *TransactionRuleMessageManagement::messageGetLast() { + return m_rulesMessages.back(); +} + +void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(RuleWithActions *rule) { + RuleMessage *rm = m_rulesMessages.back(); + + rm->setRule(rule); + + if (rule->hasDisruptiveAction() && + (m_transaction->getRuleEngineState() == RulesSet::DetectionOnlyRuleEngine)) { + /* error */ + // The error goes over the disruptive massage. We don't need it here. + //m_transaction->serverLog(rm); + } else if (rule->hasBlockAction() && (!rule->hasNoLogAction()) || rule->hasLogAction()) { + /* Log as warning. */ + m_transaction->serverLog(rm); + messageNew(); + } +} + +void TransactionRuleMessageManagement::messageNew() { + m_rulesMessages.push_back(new RuleMessage(m_transaction)); +} + + /** * @name Transaction * @brief Represents the inspection on an entire request. @@ -122,7 +150,6 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, void *logCbData) m_ruleRemoveTargetById(), m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean), m_auditLogModifier(), - m_rulesMessages(), m_requestBody(), m_responseBody(), /* m_id(), */ @@ -160,7 +187,8 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, void *logCbData) m_variableTimeWDay(""), m_variableTimeYear(""), m_logCbData(logCbData), - TransactionAnchoredVariables(this) { + TransactionAnchoredVariables(this), + TransactionRuleMessageManagement(this) { m_id = std::unique_ptr( new std::string( std::to_string(m_timeStamp))); @@ -195,7 +223,6 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCb m_ruleRemoveTargetById(), m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean), m_auditLogModifier(), - m_rulesMessages(), m_requestBody(), m_responseBody(), m_id(std::unique_ptr(new std::string(id))), @@ -233,7 +260,8 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCb m_variableTimeWDay(""), m_variableTimeYear(""), m_logCbData(logCbData), - TransactionAnchoredVariables(this) { + TransactionAnchoredVariables(this), + TransactionRuleMessageManagement(this) { m_variableUrlEncodedError.set("0", 0); @@ -250,7 +278,7 @@ Transaction::~Transaction() { m_requestBody.str(std::string()); m_requestBody.clear(); - m_rulesMessages.clear(); + messageClear(); intervention::free(&m_it); intervention::clean(&m_it); @@ -1593,8 +1621,8 @@ std::string Transaction::toOldAuditLogFormat(int parts, } if (parts & audit_log::AuditLog::HAuditLogPart) { audit_log << "--" << trailer << "-" << "H--" << std::endl; - for (auto a : m_rulesMessages) { - audit_log << a.log(0, m_httpCodeReturned) << std::endl; + for (auto a : messageGetAll()) { + audit_log << a->log(0, m_httpCodeReturned) << std::endl; } audit_log << std::endl; /** TODO: write audit_log H part. */ @@ -1756,36 +1784,36 @@ std::string Transaction::toJSON(int parts) { reinterpret_cast("messages"), strlen("messages")); yajl_gen_array_open(g); - for (auto a : m_rulesMessages) { + for (auto a : messageGetAll()) { yajl_gen_map_open(g); - LOGFY_ADD("message", a.m_message.c_str()); + LOGFY_ADD("message", a->m_message.c_str()); yajl_gen_string(g, reinterpret_cast("details"), strlen("details")); yajl_gen_map_open(g); - LOGFY_ADD("match", a.m_match.c_str()); - LOGFY_ADD("reference", a.m_reference.c_str()); - LOGFY_ADD("ruleId", std::to_string(a.m_ruleId).c_str()); - LOGFY_ADD("file", a.m_ruleFile->c_str()); - LOGFY_ADD("lineNumber", std::to_string(a.m_ruleLine).c_str()); - LOGFY_ADD("data", a.m_data.c_str()); - LOGFY_ADD("severity", std::to_string(a.m_severity).c_str()); - LOGFY_ADD("ver", a.m_ver.c_str()); - LOGFY_ADD("rev", a.m_rev.c_str()); + LOGFY_ADD("match", a->m_match.c_str()); + LOGFY_ADD("reference", a->m_reference.c_str()); + LOGFY_ADD("ruleId", std::to_string(a->getRuleId()).c_str()); + LOGFY_ADD("file", a->getFileName().c_str()); + LOGFY_ADD("lineNumber", std::to_string(a->getLineNumber()).c_str()); + LOGFY_ADD("data", a->m_data.c_str()); + LOGFY_ADD("severity", std::to_string(a->m_severity).c_str()); + LOGFY_ADD("ver", a->getVer().c_str()); + LOGFY_ADD("rev", a->getRev().c_str()); yajl_gen_string(g, reinterpret_cast("tags"), strlen("tags")); yajl_gen_array_open(g); - for (auto b : a.m_tags) { + for (auto b : a->m_tags) { yajl_gen_string(g, reinterpret_cast(b.c_str()), strlen(b.c_str())); } yajl_gen_array_close(g); - LOGFY_ADD("maturity", std::to_string(a.m_maturity).c_str()); - LOGFY_ADD("accuracy", std::to_string(a.m_accuracy).c_str()); + LOGFY_ADD("maturity", std::to_string(a->getMaturity()).c_str()); + LOGFY_ADD("accuracy", std::to_string(a->getAccuracy()).c_str()); yajl_gen_map_close(g); yajl_gen_map_close(g); } @@ -1814,7 +1842,7 @@ std::string Transaction::toJSON(int parts) { } -void Transaction::serverLog(std::shared_ptr rm) { +void Transaction::serverLog(RuleMessage *rm) { m_ms->serverLog(m_logCbData, rm); } diff --git a/src/variables/rule.h b/src/variables/rule.h index f9e2f989d2..bec5a3ba2a 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -24,6 +24,7 @@ #include "src/actions/severity.h" #include "src/actions/log_data.h" #include "src/actions/msg.h" +#include "src/rule_with_actions.h" namespace modsecurity { @@ -42,15 +43,11 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && r->m_ruleId == 0) { - r = r->m_chainedRuleParent; - } - - if (!r || r->m_ruleId == 0) { + if (!r || r->getId() == 0) { return; } std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(std::to_string(r->m_ruleId)); + std::string *a = new std::string(std::to_string(r->getId())); VariableValue *var = new VariableValue(&m_rule, &m_rule_id, a ); @@ -67,24 +64,22 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && r->m_rev.empty()) { - r = r->m_chainedRuleParent; - } - if (!r) { return; } - std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(r->m_rev); - VariableValue *var = new VariableValue(&m_rule, &m_rule_rev, - a - ); - delete a; - origin->m_offset = 0; - origin->m_length = 0; - var->addOrigin(std::move(origin)); - l->push_back(var); + if (r->hasRevisionAction()) { + std::unique_ptr origin(new VariableOrigin()); + std::string *a = new std::string(r->getRevision()); + VariableValue *var = new VariableValue(&m_rule, &m_rule_rev, + a + ); + delete a; + origin->m_offset = 0; + origin->m_length = 0; + var->addOrigin(std::move(origin)); + l->push_back(var); + } } @@ -93,13 +88,13 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && !r->hasSeverity()) { - r = r->m_chainedRuleParent; + if (!r) { + return; } - if (r && r->hasSeverity()) { + if (r->hasSeverityAction()) { std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(std::to_string(r->severity())); + std::string *a = new std::string(std::to_string(r->getSeverity())); VariableValue *var = new VariableValue(&m_rule, &m_rule_severity, a ); @@ -117,13 +112,13 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && !r->hasLogData()) { - r = r->m_chainedRuleParent; + if (!r) { + return; } - if (r && r->hasLogData()) { + if (r->hasLogDataAction()) { std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(r->logData(t)); + std::string *a = new std::string(r->getLogData(t)); VariableValue *var = new VariableValue(&m_rule, &m_rule_logdata, a ); @@ -140,13 +135,13 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && !r->hasMsg()) { - r = r->m_chainedRuleParent; + if (!r) { + return; } - if (r && r->hasMsg()) { + if (r->hasMessageAction()) { std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(r->msg(t)); + std::string *a = new std::string(r->getMessage(t)); VariableValue *var = new VariableValue(&m_rule, &m_rule_msg, a ); @@ -165,11 +160,11 @@ class Rule_DictElement : public VariableDictElement { \ id(t, rule, l); return; } - if (rule && m_dictElement == "rev") { + if (m_dictElement == "rev") { rev(t, rule, l); return; } - if (rule && m_dictElement == "severity") { + if (m_dictElement == "severity") { severity(t, rule, l); return; } diff --git a/src/variables/variable.h b/src/variables/variable.h index 492df4bd91..570e0aefa4 100644 --- a/src/variables/variable.h +++ b/src/variables/variable.h @@ -610,6 +610,7 @@ class Variables : public std::vector { return std::find_if(begin(), end(), [v](Variable *m) -> bool { return *v == *m; }) != end(); }; + bool contains(const VariableValue *v) { return std::find_if(begin(), end(), [v](Variable *m) -> bool { @@ -620,6 +621,19 @@ class Variables : public std::vector { return v->getKeyWithCollection() == *m->m_fullName.get(); }) != end(); }; + + + std::string getVariableNames(const std::string &sep = ",") { + std::string names; + for (auto a : *this) { + if (names.length() > 0) { + names = names + sep + *a->m_fullName; + } else { + names = *a->m_fullName; + } + } + return names; + } }; diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 9b3d8ff96e..377e716332 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -42,6 +42,8 @@ #include "src/request_body_processor/xml.h" #include "modsecurity/actions/action.h" #include "src/actions/xmlns.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace variables { @@ -89,9 +91,8 @@ void XML::evaluate(Transaction *t, if (rule == NULL) { ms_dbg_a(t, 2, "XML: Can't look for xmlns, internal error."); } else { - std::vector acts = rule->getActionsByName("xmlns", t); - for (auto &x : acts) { - actions::XmlNS *z = (actions::XmlNS *)x; + std::vector acts = rule->getXmlNSsPtr(); + for (auto &z : acts) { if (xmlXPathRegisterNs(xpathCtx, (const xmlChar*)z->m_scope.c_str(), (const xmlChar*)z->m_href.c_str()) != 0) { ms_dbg_a(t, 1, "Failed to register XML namespace href \"" + \ diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 281540f061..de6b1b66a3 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -19,6 +19,12 @@ *:others/mbedtls/sha1.c +// +// 3rd party string view +// +*:headers/modsecurity/string_view.hpp + + // // Code imported from ModSecurity v2... // @@ -27,15 +33,16 @@ shiftNegative:src/utils/msc_tree.cc *:src/utils/msc_tree.cc invalidScanfArgType_int:src/rules_set_properties.cc:101 invalidScanfArgType_int:src/rules_set_properties.cc:102 +redundantAssignment:src/operators/pm.cc:94 // // ModSecurity v3 code... // -unmatchedSuppression:src/utils/geo_lookup.cc:82 +functionStatic:src/operators/geo_lookup.h:39 useInitializationList:src/utils/shared_files.h:87 unmatchedSuppression:src/utils/msc_tree.cc -functionStatic:headers/modsecurity/transaction.h:407 +functionStatic:headers/modsecurity/transaction.h:455 duplicateBranch:src/audit_log/audit_log.cc:223 unreadVariable:src/request_body_processor/multipart.cc:435 stlcstrParam:src/audit_log/writer/parallel.cc:145 @@ -52,11 +59,14 @@ syntaxError:src/transaction.cc:62 noConstructor:src/variables/variable.h:152 duplicateBranch:src/request_body_processor/multipart.cc:93 danglingTempReference:src/modsecurity.cc:206 -knownConditionTrueFalse:src/operators/validate_url_encoding.cc:77 -knownConditionTrueFalse:src/operators/verify_svnr.cc:87 +knownConditionTrueFalse:src/operators/validate_url_encoding.cc:79 +knownConditionTrueFalse:src/operators/verify_svnr.cc:90 +noConstructor:src/actions/rule_id.h:33 +functionStatic:src/actions/rule_id.h:35 noExplicitConstructor:seclang-parser.hh constParameter:seclang-parser.hh +accessMoved:seclang-parser.hh unusedFunction missingIncludeSystem @@ -72,3 +82,7 @@ purgedConfiguration // Examples memleak:examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h:147 memleak:examples/using_bodies_in_chunks/simple_request.cc + + +// others +uninitDerivedMemberVar \ No newline at end of file diff --git a/test/fuzzer/afl_fuzzer.cc b/test/fuzzer/afl_fuzzer.cc index 6b19a18f09..f6b9ff4f07 100644 --- a/test/fuzzer/afl_fuzzer.cc +++ b/test/fuzzer/afl_fuzzer.cc @@ -121,7 +121,7 @@ using namespace modsecurity; inline void op_test(const std::string &opName, const std::string &s) { Operator *op = Operator::instantiate(opName, ""); op->init("", nullptr); - op->evaluate(nullptr, nullptr, s, nullptr); + op->execute(nullptr, nullptr, s, nullptr); delete op; } @@ -154,52 +154,52 @@ int main(int argc, char** argv) { /** * Transformations, generated by: * - * for i in $(grep "class " -Ri src/actions/transformations/* | grep " :" | grep -v "InstantCache" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\"\)\; $(echo $i | awk '{print tolower($0)}')-\>evaluate\(s, NULL\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; + * for i in $(grep "class " -Ri src/actions/transformations/* | grep " :" | grep -v "InstantCache" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\"\)\; $(echo $i | awk '{print tolower($0)}')-\>execute\(s, NULL\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; * */ -Base64Decode *base64decode = new Base64Decode("Base64Decode"); base64decode->evaluate(s, NULL); delete base64decode; -Base64DecodeExt *base64decodeext = new Base64DecodeExt("Base64DecodeExt"); base64decodeext->evaluate(s, NULL); delete base64decodeext; -Base64Encode *base64encode = new Base64Encode("Base64Encode"); base64encode->evaluate(s, NULL); delete base64encode; -CmdLine *cmdline = new CmdLine("CmdLine"); cmdline->evaluate(s, NULL); delete cmdline; -CompressWhitespace *compresswhitespace = new CompressWhitespace("CompressWhitespace"); compresswhitespace->evaluate(s, NULL); delete compresswhitespace; -CssDecode *cssdecode = new CssDecode("CssDecode"); cssdecode->evaluate(s, NULL); delete cssdecode; -EscapeSeqDecode *escapeseqdecode = new EscapeSeqDecode("EscapeSeqDecode"); escapeseqdecode->evaluate(s, NULL); delete escapeseqdecode; -HexDecode *hexdecode = new HexDecode("HexDecode"); hexdecode->evaluate(s, NULL); delete hexdecode; -HexEncode *hexencode = new HexEncode("HexEncode"); hexencode->evaluate(s, NULL); delete hexencode; -HtmlEntityDecode *htmlentitydecode = new HtmlEntityDecode("HtmlEntityDecode"); htmlentitydecode->evaluate(s, NULL); delete htmlentitydecode; -JsDecode *jsdecode = new JsDecode("JsDecode"); jsdecode->evaluate(s, NULL); delete jsdecode; -Length *length = new Length("Length"); length->evaluate(s, NULL); delete length; -LowerCase *lowercase = new LowerCase("LowerCase"); lowercase->evaluate(s, NULL); delete lowercase; -Md5 *md5 = new Md5("Md5"); md5->evaluate(s, NULL); delete md5; -None *none = new None("None"); none->evaluate(s, NULL); delete none; -NormalisePath *normalisepath = new NormalisePath("NormalisePath"); normalisepath->evaluate(s, NULL); delete normalisepath; -NormalisePathWin *normalisepathwin = new NormalisePathWin("NormalisePathWin"); normalisepathwin->evaluate(s, NULL); delete normalisepathwin; -ParityEven7bit *parityeven7bit = new ParityEven7bit("ParityEven7bit"); parityeven7bit->evaluate(s, NULL); delete parityeven7bit; -ParityOdd7bit *parityodd7bit = new ParityOdd7bit("ParityOdd7bit"); parityodd7bit->evaluate(s, NULL); delete parityodd7bit; -ParityZero7bit *parityzero7bit = new ParityZero7bit("ParityZero7bit"); parityzero7bit->evaluate(s, NULL); delete parityzero7bit; -RemoveComments *removecomments = new RemoveComments("RemoveComments"); removecomments->evaluate(s, NULL); delete removecomments; -RemoveCommentsChar *removecommentschar = new RemoveCommentsChar("RemoveCommentsChar"); removecommentschar->evaluate(s, NULL); delete removecommentschar; -RemoveNulls *removenulls = new RemoveNulls("RemoveNulls"); removenulls->evaluate(s, NULL); delete removenulls; -RemoveWhitespace *removewhitespace = new RemoveWhitespace("RemoveWhitespace"); removewhitespace->evaluate(s, NULL); delete removewhitespace; -ReplaceComments *replacecomments = new ReplaceComments("ReplaceComments"); replacecomments->evaluate(s, NULL); delete replacecomments; -ReplaceNulls *replacenulls = new ReplaceNulls("ReplaceNulls"); replacenulls->evaluate(s, NULL); delete replacenulls; -Sha1 *sha1 = new Sha1("Sha1"); sha1->evaluate(s, NULL); delete sha1; -SqlHexDecode *sqlhexdecode = new SqlHexDecode("SqlHexDecode"); sqlhexdecode->evaluate(s, NULL); delete sqlhexdecode; -Transformation *transformation = new Transformation("Transformation"); transformation->evaluate(s, NULL); delete transformation; -Trim *trim = new Trim("Trim"); trim->evaluate(s, NULL); delete trim; -TrimLeft *trimleft = new TrimLeft("TrimLeft"); trimleft->evaluate(s, NULL); delete trimleft; -TrimRight *trimright = new TrimRight("TrimRight"); trimright->evaluate(s, NULL); delete trimright; -UpperCase *uppercase = new UpperCase("UpperCase"); uppercase->evaluate(s, NULL); delete uppercase; -UrlDecode *urldecode = new UrlDecode("UrlDecode"); urldecode->evaluate(s, NULL); delete urldecode; -UrlDecodeUni *urldecodeuni = new UrlDecodeUni("UrlDecodeUni"); urldecodeuni->evaluate(s, NULL); delete urldecodeuni; -UrlEncode *urlencode = new UrlEncode("UrlEncode"); urlencode->evaluate(s, NULL); delete urlencode; -Utf8ToUnicode *utf8tounicode = new Utf8ToUnicode("Utf8ToUnicode"); utf8tounicode->evaluate(s, NULL); delete utf8tounicode; +Base64Decode *base64decode = new Base64Decode("Base64Decode"); base64decode->execute(s, NULL); delete base64decode; +Base64DecodeExt *base64decodeext = new Base64DecodeExt("Base64DecodeExt"); base64decodeext->execute(s, NULL); delete base64decodeext; +Base64Encode *base64encode = new Base64Encode("Base64Encode"); base64encode->execute(s, NULL); delete base64encode; +CmdLine *cmdline = new CmdLine("CmdLine"); cmdline->execute(s, NULL); delete cmdline; +CompressWhitespace *compresswhitespace = new CompressWhitespace("CompressWhitespace"); compresswhitespace->execute(s, NULL); delete compresswhitespace; +CssDecode *cssdecode = new CssDecode("CssDecode"); cssdecode->execute(s, NULL); delete cssdecode; +EscapeSeqDecode *escapeseqdecode = new EscapeSeqDecode("EscapeSeqDecode"); escapeseqdecode->execute(s, NULL); delete escapeseqdecode; +HexDecode *hexdecode = new HexDecode("HexDecode"); hexdecode->execute(s, NULL); delete hexdecode; +HexEncode *hexencode = new HexEncode("HexEncode"); hexencode->execute(s, NULL); delete hexencode; +HtmlEntityDecode *htmlentitydecode = new HtmlEntityDecode("HtmlEntityDecode"); htmlentitydecode->execute(s, NULL); delete htmlentitydecode; +JsDecode *jsdecode = new JsDecode("JsDecode"); jsdecode->execute(s, NULL); delete jsdecode; +Length *length = new Length("Length"); length->execute(s, NULL); delete length; +LowerCase *lowercase = new LowerCase("LowerCase"); lowercase->execute(s, NULL); delete lowercase; +Md5 *md5 = new Md5("Md5"); md5->execute(s, NULL); delete md5; +None *none = new None("None"); none->execute(s, NULL); delete none; +NormalisePath *normalisepath = new NormalisePath("NormalisePath"); normalisepath->execute(s, NULL); delete normalisepath; +NormalisePathWin *normalisepathwin = new NormalisePathWin("NormalisePathWin"); normalisepathwin->execute(s, NULL); delete normalisepathwin; +ParityEven7bit *parityeven7bit = new ParityEven7bit("ParityEven7bit"); parityeven7bit->execute(s, NULL); delete parityeven7bit; +ParityOdd7bit *parityodd7bit = new ParityOdd7bit("ParityOdd7bit"); parityodd7bit->execute(s, NULL); delete parityodd7bit; +ParityZero7bit *parityzero7bit = new ParityZero7bit("ParityZero7bit"); parityzero7bit->execute(s, NULL); delete parityzero7bit; +RemoveComments *removecomments = new RemoveComments("RemoveComments"); removecomments->execute(s, NULL); delete removecomments; +RemoveCommentsChar *removecommentschar = new RemoveCommentsChar("RemoveCommentsChar"); removecommentschar->execute(s, NULL); delete removecommentschar; +RemoveNulls *removenulls = new RemoveNulls("RemoveNulls"); removenulls->execute(s, NULL); delete removenulls; +RemoveWhitespace *removewhitespace = new RemoveWhitespace("RemoveWhitespace"); removewhitespace->execute(s, NULL); delete removewhitespace; +ReplaceComments *replacecomments = new ReplaceComments("ReplaceComments"); replacecomments->execute(s, NULL); delete replacecomments; +ReplaceNulls *replacenulls = new ReplaceNulls("ReplaceNulls"); replacenulls->execute(s, NULL); delete replacenulls; +Sha1 *sha1 = new Sha1("Sha1"); sha1->execute(s, NULL); delete sha1; +SqlHexDecode *sqlhexdecode = new SqlHexDecode("SqlHexDecode"); sqlhexdecode->execute(s, NULL); delete sqlhexdecode; +Transformation *transformation = new Transformation("Transformation"); transformation->execute(s, NULL); delete transformation; +Trim *trim = new Trim("Trim"); trim->execute(s, NULL); delete trim; +TrimLeft *trimleft = new TrimLeft("TrimLeft"); trimleft->execute(s, NULL); delete trimleft; +TrimRight *trimright = new TrimRight("TrimRight"); trimright->execute(s, NULL); delete trimright; +UpperCase *uppercase = new UpperCase("UpperCase"); uppercase->execute(s, NULL); delete uppercase; +UrlDecode *urldecode = new UrlDecode("UrlDecode"); urldecode->execute(s, NULL); delete urldecode; +UrlDecodeUni *urldecodeuni = new UrlDecodeUni("UrlDecodeUni"); urldecodeuni->execute(s, NULL); delete urldecodeuni; +UrlEncode *urlencode = new UrlEncode("UrlEncode"); urlencode->execute(s, NULL); delete urlencode; +Utf8ToUnicode *utf8tounicode = new Utf8ToUnicode("Utf8ToUnicode"); utf8tounicode->execute(s, NULL); delete utf8tounicode; /** * Operators, generated by: * - * for i in $(grep "class " -Ri src/operators/* | grep " :" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\", z, false\)\; $(echo $i | awk '{print tolower($0)}')-\>evaluate\(t, s\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; + * for i in $(grep "class " -Ri src/operators/* | grep " :" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\", z, false\)\; $(echo $i | awk '{print tolower($0)}')-\>execute\(t, s\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; * */ op_test("BeginsWith", s); diff --git a/test/optimization/optimization.cc b/test/optimization/optimization.cc index 081853bc9c..7ad4ae570e 100644 --- a/test/optimization/optimization.cc +++ b/test/optimization/optimization.cc @@ -27,8 +27,8 @@ #include "src/parser/driver.h" #include "src/utils/https_client.h" #include "modsecurity/transaction.h" -#include "modsecurity/rule_unconditional.h" -#include "modsecurity/rule_with_operator.h" +#include "src/rule_unconditional.h" +#include "src/rule_with_operator.h" void print_help() { diff --git a/test/test-cases/regression/config-include-bad.json b/test/test-cases/regression/config-include-bad.json index 76797552d7..ed8b0156e0 100644 --- a/test/test-cases/regression/config-include-bad.json +++ b/test/test-cases/regression/config-include-bad.json @@ -43,7 +43,7 @@ "version_min":300000, "title":"Include - duplicate id", "expected":{ - "parser_error": "Rule id: 40 is duplicated" + "parser_error": "There are multiple rules defined with same id. The ID 40 is defined at" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/config-update-action-by-id.json b/test/test-cases/regression/config-update-action-by-id.json index 4e1a3fc24e..6e343be5fb 100644 --- a/test/test-cases/regression/config-update-action-by-id.json +++ b/test/test-cases/regression/config-update-action-by-id.json @@ -122,7 +122,7 @@ }, "expected":{ "http_code": 200, - "debug_log": "Running action: log" + "debug_log": "Rule returned 1" }, "rules":[ "SecRuleEngine On", @@ -167,7 +167,7 @@ }, "expected":{ "http_code": 200, - "debug_log": "Running action: log" + "debug_log": "Rule returned 1" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/issue-1528.json b/test/test-cases/regression/issue-1528.json index f2257055c2..74f2c3db9e 100644 --- a/test/test-cases/regression/issue-1528.json +++ b/test/test-cases/regression/issue-1528.json @@ -31,8 +31,8 @@ }, "rules": [ "SecRuleEngine On", - "SecAction \"id:1, nolog, setvar:tx.bad_value=attack\"", - "SecRule ARGS:param \"@rx ^%{tx.bad_value}$\" \"id:2,block\"" + "SecAction \"id:1, setvar:tx.bad_value=attack\"", + "SecRule ARGS:param \"@rx ^%{tx.bad_value}$\" \"id:2,log\"" ] } ] diff --git a/test/test-cases/regression/issue-1844.json b/test/test-cases/regression/issue-1844.json index 6ccb1f5e8a..df1a4ec624 100644 --- a/test/test-cases/regression/issue-1844.json +++ b/test/test-cases/regression/issue-1844.json @@ -37,10 +37,12 @@ ] }, "expected":{ - "error_log":"line \"29\"" + "error_log":"line \"29\"", + "http_code": 403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test1\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/big-file.conf" ] @@ -129,10 +131,12 @@ ] }, "expected":{ - "error_log":"line \"84\"" + "error_log":"line \"84\"", + "http_code": 403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/big-file.conf" ] @@ -175,11 +179,13 @@ ] }, "expected":{ - "error_log":"line \"116\"" + "error_log":"line \"116\"", + "http_code":403 }, "rules":[ "SecRuleEngine On", - "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", + "SecDefaultAction \"phase:request,deny\"", + "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,deny,t:trim\"", "Include test-cases/data/big-file.conf" ] }, @@ -221,10 +227,12 @@ ] }, "expected":{ - "error_log":"line \"174\"" + "error_log":"line \"174\"", + "http_code":403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/big-file.conf" ] @@ -267,10 +275,12 @@ ] }, "expected":{ - "error_log":"line \"174\"" + "error_log":"line \"174\"", + "http_code":403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/not-so-big-file.conf" ] diff --git a/test/test-cases/regression/issue-2296.json b/test/test-cases/regression/issue-2296.json index bc64d19bd2..bfb0356ab6 100644 --- a/test/test-cases/regression/issue-2296.json +++ b/test/test-cases/regression/issue-2296.json @@ -33,13 +33,13 @@ ] }, "expected":{ - "http_code":200, + "http_code":300, "debug_log":"Target value: \"is a simple test\"", "error_log":"Operator `Rx' with parameter `test' against variable `ARGS:THIS'" }, "rules":[ "SecRuleEngine On", - "SecRule ARGS:/^ThIs$/ \"test\" \"id:1\"" + "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,deny,status:300\"" ] }, { @@ -119,13 +119,13 @@ ] }, "expected":{ - "http_code":200, + "http_code":300, "debug_log":"Target value: \"is a simple test\"", "error_log":"msg \"Testing is a simple test\"" }, "rules":[ "SecRuleEngine On", - "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}'\"" + "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}',deny,status:300\"" ] }, { @@ -162,13 +162,13 @@ ] }, "expected":{ - "http_code":200, + "http_code":300, "debug_log":"Target value: \"is a simple test\"", "error_log":"msg \"Testing is a simple test\"" }, "rules":[ "SecRuleEngine On", - "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}',chain\"", + "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}',chain,deny,status:300\"", "SecRule MATCHED_VARS:/thIs/ \"is a simple test\" \"log\"" ] }, diff --git a/test/test-cases/regression/offset-variable.json b/test/test-cases/regression/offset-variable.json index de633167d6..bd7b3803a2 100644 --- a/test/test-cases/regression/offset-variable.json +++ b/test/test-cases/regression/offset-variable.json @@ -22,10 +22,12 @@ ] }, "expected":{ - "error_log":"o0,3v23,6t:trim" + "error_log":"o0,3v23,6t:trim", + "http_code": 403 }, "rules":[ - "SecRule ARGS \"@rx val\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS \"@rx val\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny,log\"" ] }, { @@ -51,10 +53,12 @@ ] }, "expected":{ - "error_log":"o3,3v37,6t:trim" + "error_log":"o3,3v37,6t:trim", + "http_code":403 }, "rules":[ - "SecRule ARGS_GET \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_GET \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -83,11 +87,13 @@ ] }, "expected":{ - "error_log":"o3,3v142,6t:trim" + "error_log":"o3,3v142,6t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_POST \"@rx ue1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_POST \"@rx ue1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -116,11 +122,13 @@ ] }, "expected":{ - "error_log":"o3,3v156,6t:trim" + "error_log":"o3,3v156,6t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_POST \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_POST \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -149,11 +157,13 @@ ] }, "expected":{ - "error_log":"o0,6v17,6t:trim" + "error_log":"o0,6v17,6t:trim", + "http_code":403 }, "rules":[ + "SecRuleEngine On", "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -182,11 +192,13 @@ ] }, "expected":{ - "error_log":"o0,6v31,6t:trim" + "error_log":"o0,6v31,6t:trim", + "http_code":403 }, "rules":[ + "SecRuleEngine On", "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx param2\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx param2\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -219,7 +231,7 @@ }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx am1 par\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx am1 par\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -252,7 +264,7 @@ }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx am1 param2 par\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx am1 param2 par\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -281,11 +293,13 @@ ] }, "expected":{ - "error_log": "0,6v149,6t:trim" + "error_log": "0,6v149,6t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_POST_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_POST_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -314,11 +328,13 @@ ] }, "expected":{ - "error_log":"o0,6v17,6t:trim" + "error_log":"o0,6v17,6t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -344,11 +360,13 @@ ] }, "expected":{ - "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim" + "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -374,11 +392,13 @@ ] }, "expected":{ - "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim" + "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -405,11 +425,13 @@ ] }, "expected":{ - "error_log":"o23,6v0,63t:trim" + "error_log":"o23,6v0,63t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_LINE \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_LINE \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -437,11 +459,13 @@ ] }, "expected":{ - "error_log":"o0,3v0,3t:trim" + "error_log":"o0,3v0,3t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_METHOD \"GET\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_METHOD \"GET\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -469,11 +493,13 @@ ] }, "expected":{ - "error_log":"o5,3v58,8t:trim" + "error_log":"o5,3v58,8t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_PROTOCOL \"1.1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_PROTOCOL \"1.1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -501,11 +527,13 @@ ] }, "expected":{ - "error_log":"o1,5v4,11t:trim" + "error_log":"o1,5v4,11t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule PATH_INFO \"index\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule PATH_INFO \"index\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -533,11 +561,13 @@ ] }, "expected":{ - "error_log":"o7,6v16,41t:trim" + "error_log":"o7,6v16,41t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule QUERY_STRING \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule QUERY_STRING \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -565,11 +595,13 @@ ] }, "expected":{ - "error_log":"o6,4v5,10t:trim" + "error_log":"o6,4v5,10t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BASENAME \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_BASENAME \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -597,11 +629,13 @@ ] }, "expected":{ - "error_log":"o7,4v4,59t:trim" + "error_log":"o7,4v4,59t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_URI \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_URI \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -629,11 +663,14 @@ ] }, "expected":{ - "error_log":"o7,4v4,59t:trim" + "error_log":"o7,4v4,59t:trim", + "http_code": 403 + }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_URI_RAW \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_URI_RAW \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, @@ -661,11 +698,13 @@ ] }, "expected":{ - "error_log":"o0,9v89,9t:trim" + "error_log":"o0,9v89,9t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_HEADERS \"localhost\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_HEADERS \"localhost\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, @@ -693,11 +732,13 @@ ] }, "expected":{ - "error_log":"o14,3v163,33t:trim" + "error_log":"o14,3v163,33t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_HEADERS \"www\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_HEADERS \"www\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -724,11 +765,13 @@ ] }, "expected":{ - "error_log":"o0,5v162,5t:trim" + "error_log":"o0,5v162,5t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -755,11 +798,13 @@ ] }, "expected":{ - "error_log":"o0,5v79,5t:trim" + "error_log":"o0,5v79,5t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -786,11 +831,13 @@ ] }, "expected":{ - "error_log":"o0,4v64,13t:lowercase" + "error_log":"o0,4v64,13t:lowercase", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_HEADERS_NAMES \"auth\" \"id:1,phase:2,pass,t:lowercase,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_HEADERS_NAMES \"auth\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -818,11 +865,13 @@ ] }, "expected":{ - "error_log":"o1,2v216,3t:lowercase" + "error_log":"o1,2v216,3t:lowercase", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES \"es\" \"id:1,phase:2,pass,t:lowercase,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES \"es\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -850,11 +899,13 @@ ] }, "expected":{ - "error_log":"o0,1v223,1t:lowercase" + "error_log":"o0,1v223,1t:lowercase", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES \"z\" \"id:1,phase:2,pass,t:lowercase,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES \"z\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -882,11 +933,13 @@ ] }, "expected":{ - "error_log":"o0,1v228,1t:lowercase,t:trim" + "error_log":"o0,1v228,1t:lowercase", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES \"b\" \"id:1,phase:2,pass,t:lowercase,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES \"b\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -914,11 +967,13 @@ ] }, "expected":{ - "error_log":"o0,1v226,1" + "error_log":"o0,1v226,1", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES_NAMES \"t\" \"id:1,phase:2,pass,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES_NAMES \"t\" \"id:1,phase:2,pass,msg:'ops',deny\"" ] }, { @@ -956,11 +1011,12 @@ ] }, "expected":{ - "error_log":"o0,7v198,30t:trim" + "error_log":"o0,7v198,30t:trim", + "http_code":403 }, "rules":[ "SecRuleEngine On", - "SecRule REMOTE_USER \"Aladdin\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule REMOTE_USER \"Aladdin\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1005,11 +1061,13 @@ ] }, "expected":{ - "error_log":"o45,30v193,516t:trim" + "error_log":"o45,30v193,516t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1054,11 +1112,13 @@ ] }, "expected":{ - "error_log":"o45,30v193,516t:trim" + "error_log":"o45,30v193,516t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1103,11 +1163,13 @@ ] }, "expected":{ - "error_log":"v193,516t:trim" + "error_log":"v193,516t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BODY_LENGTH \"@gt 5\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_BODY_LENGTH \"@gt 5\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1152,11 +1214,13 @@ ] }, "expected":{ - "error_log":"o6,5v5,11t:trim" + "error_log":"o6,5v5,11t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_FILENAME \"/file\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_FILENAME \"/file\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1201,11 +1265,13 @@ ] }, "expected":{ - "error_log":"o6,8v5,23t:trim" + "error_log":"o6,8v5,23t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1250,11 +1316,13 @@ ] }, "expected":{ - "error_log":"o6,8v5,23t:trim" + "error_log":"o6,8v5,23t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1299,11 +1367,13 @@ ] }, "expected":{ - "error_log":"o0,4v306,4t:trim" + "error_log":"o0,4v306,4t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS \"test\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule ARGS \"test\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1352,11 +1422,13 @@ ] }, "expected":{ - "error_log":"o0,5v402,5t:trim" + "error_log":"o0,5v402,5t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS \"test2\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule ARGS \"test2\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1405,11 +1477,13 @@ ] }, "expected":{ - "error_log":"o0,16v680,20t:trim" + "error_log":"o0,16v680,20t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES \"small_text_file2\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES \"small_text_file2\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1458,11 +1532,13 @@ ] }, "expected":{ - "error_log":"o0,16v512,20t:trim" + "error_log":"o0,16v512,20t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES \"small_text_file1\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES \"small_text_file1\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1511,11 +1587,13 @@ ] }, "expected":{ - "error_log":"o0,8o0,8v491,8t:trimo0,16o0,16v709,16t:trim" + "error_log":"o0,8o0,8v491,8t:trimo0,16o0,16v709,16t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_NAMES \"(fiasdfasdfledata|filedata)\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_NAMES \"(fiasdfasdfledata|filedata)\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1564,11 +1642,13 @@ ] }, "expected":{ - "error_log":"v560,32t:trim" + "error_log":"v560,32t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_SIZES:filedata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_SIZES:filedata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1617,11 +1697,13 @@ ] }, "expected":{ - "error_log":"v754,38t:trim" + "error_log":"v754,38t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_SIZES:fiasdfasdfledata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_SIZES:fiasdfasdfledata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1670,11 +1752,13 @@ ] }, "expected":{ - "error_log":"v560,32v754,38t:trim" + "error_log":"v560,32v754,38t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_COMBINED_SIZE \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_COMBINED_SIZE \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1723,13 +1807,15 @@ ] }, "expected":{ - "error_log":"o8,7v754,38t:trim" + "error_log":"o8,7v754,38t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule FILES_TMP_CONTENT \"another\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule FILES_TMP_CONTENT \"another\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1778,13 +1864,15 @@ ] }, "expected":{ - "error_log":"o15,5v560,32t:trim" + "error_log":"o15,5v560,32t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule FILES_TMP_CONTENT:small_text_file1.txt \"small\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule FILES_TMP_CONTENT:small_text_file1.txt \"small\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1833,13 +1921,15 @@ ] }, "expected":{ - "error_log":"o6,4v5,23t:trim" + "error_log":"o6,4v5,23t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule PATH_INFO \"/f i\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule PATH_INFO \"/f i\" \"id:1,phase:3,t:trim,msg:'s',deny\"" ] }, { @@ -1888,13 +1978,15 @@ ] }, "expected":{ - "error_log":"o0,20v680,20t:trim" + "error_log":"o0,20v680,20t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule MULTIPART_FILENAME \"small_text_file2.txt\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule MULTIPART_FILENAME \"small_text_file2.txt\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1943,13 +2035,15 @@ ] }, "expected":{ - "error_log":"o0,16v709,16t:trim" + "error_log":"o0,16v709,16t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule MULTIPART_NAME \"fiasdfasdfledata\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule MULTIPART_NAME \"fiasdfasdfledata\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { diff --git a/test/test-cases/regression/operator-rx.json b/test/test-cases/regression/operator-rx.json index d6b9839fe5..e077157341 100644 --- a/test/test-cases/regression/operator-rx.json +++ b/test/test-cases/regression/operator-rx.json @@ -79,11 +79,12 @@ }, "expected":{ "debug_log":"Executing operator \"Rx\" with param \"\\^0\\$\"", - "error_log":"Matched \"Operator `Rx' with parameter `\\^0\\$'" + "error_log":"Matched \"Operator `Rx' with parameter `\\^0\\$'", + "http_code": 403 }, "rules":[ "SecRuleEngine On", - "SecRule REQUEST_HEADERS:Content-Length \"!^0$\" \"id:1,phase:2,pass,t:trim,block\"" + "SecRule REQUEST_HEADERS:Content-Length \"!^0$\" \"id:1,phase:2,pass,t:trim,deny\"" ] } ] diff --git a/test/test-cases/regression/transformations.json b/test/test-cases/regression/transformations.json index dcb328f16c..049ee6b9fe 100644 --- a/test/test-cases/regression/transformations.json +++ b/test/test-cases/regression/transformations.json @@ -114,5 +114,64 @@ "SecRuleEngine On", "SecRule ARGS \"@contains test \" \"id:1,pass,t:trim,t:lowercase\"" ] + }, + { + "enabled": 1, + "version_min": 300000, + "version_max": 0, + "title": "Testing transformations :: block,t:none,t:phpArgsNames", + "client": { + "ip": "200.249.12.31", + "port": 2313 + }, + "server": { + "ip": "200.249.12.31", + "port": 80 + }, + "request": { + "headers": { + "Host": "net.tutsplus.com", + "User-Agent": "Mozilla\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko\/20091102 Firefox\/3.5.5 (.NET CLR 3.5.30729)", + "Accept": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8", + "Accept-Language": "en-us,en;q=0.5", + "Accept-Encoding": "gzip,deflate", + "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7", + "Keep-Alive": "300", + "Connection": "keep-alive", + "Cookie": "PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120", + "Pragma": "no-cache", + "Cache-Control": "no-cache" + }, + "uri": "\/test.pl?param1=fdsfsd&s%252bc%20r.%2b+ipt._[a[_xss]]iaaa=1", + "method": "GET", + "http_version": 1.1, + "body": "" + }, + "response": { + "headers": { + "Content-Type": "text\/xml; charset=utf-8\n\r", + "Content-Length": "length\n\r" + }, + "body": [ + "\n\r", + "\n\r", + " \n\r", + " \n\r", + " string<\/EnlightenResult>\n\r", + " <\/EnlightenResponse>\n\r", + " <\/soap:Body>\n\r", + "<\/soap:Envelope>\n\r" + ] + }, + "expected": { + "audit_log": "", + "debug_log": "phpArgsNames: \"s%2bc_r_[+]_ipt__[a[_xss]", + "error_log": "", + "http_code": 403 + }, + "rules": [ + "SecRuleEngine On", + "SecRule ARGS_NAMES \"@streq s%2bc_r_+_ipt__[a[_xss]\" \"id:1,phase:2,deny,status:403,t:none,t:phpArgsNames\"" + ] } ] diff --git a/test/test-cases/regression/variable-ARGS_POST_NAMES.json b/test/test-cases/regression/variable-ARGS_POST_NAMES.json index fb0964f35c..d6902826f3 100644 --- a/test/test-cases/regression/variable-ARGS_POST_NAMES.json +++ b/test/test-cases/regression/variable-ARGS_POST_NAMES.json @@ -183,12 +183,13 @@ ] }, "expected":{ + "http_code": 403, "error_log":"o0,5v206,5t:trim" }, "rules":[ "SecRuleEngine On", "SecRequestBodyAccess On", - "SecRule ARGS_POST_NAMES \"@contains name1\" \"id:1,phase:3,pass,t:trim\"" + "SecRule ARGS_POST_NAMES \"@contains name1\" \"id:1,phase:3,pass,t:trim,deny\"" ] } ] diff --git a/test/unit/unit.cc b/test/unit/unit.cc index 49aeabd204..db5718edda 100644 --- a/test/unit/unit.cc +++ b/test/unit/unit.cc @@ -90,8 +90,14 @@ void perform_unit_test(ModSecurityTest *test, UnitTest *t, } delete op; } else if (t->type == "tfn") { + modsecurity::ModSecString in; + modsecurity::ModSecString out; + std::string ret; + in.assign(t->input.c_str(), t->input.size()); Transformation *tfn = Transformation::instantiate("t:" + t->name); - std::string ret = tfn->evaluate(t->input, NULL); + tfn->execute(NULL, in, out); + ret.assign(out.c_str(), out.size()); + t->obtained = 1; t->obtainedOutput = ret; if (ret != t->output) { diff --git a/tools/rules-check/rules-check.cc b/tools/rules-check/rules-check.cc index f59439ee9f..7c9f40dfe3 100644 --- a/tools/rules-check/rules-check.cc +++ b/tools/rules-check/rules-check.cc @@ -91,6 +91,7 @@ int main(int argc, char **argv) { if (err.empty() == false) { std::cerr << " " << err << std::endl; } + rules->dump(); next: args++; }