diff --git a/redis/command_action.gen.go b/redis/command_action.gen.go index 3597e95a..e3603fc0 100644 --- a/redis/command_action.gen.go +++ b/redis/command_action.gen.go @@ -3,60 +3,72 @@ package redis var ( - actionWatch = &commandAction{ - Action: func(state *connectionState) { - *state |= stateWatch - }, - } - actionUnwatch = &commandAction{ - Action: func(state *connectionState) { - *state &^= stateWatch + actionClientNoEvictOn = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateClientNoEvict }, } - actionMulti = &commandAction{ - Action: func(state *connectionState) { - *state |= stateMulti - }, - } - actionExec = &commandAction{ - Action: func(state *connectionState) { - *state &^= stateWatch | stateMulti + actionClientNoEvictOff = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateClientNoEvict }, } - actionDiscard = &commandAction{ - Action: func(state *connectionState) { - *state &^= stateWatch | stateMulti + actionClientNoEvict = &commandAction{ + Next: map[string]*commandAction{ + "ON": actionClientNoEvictOn, + "On": actionClientNoEvictOn, + "oN": actionClientNoEvictOn, + "on": actionClientNoEvictOn, + "OFF": actionClientNoEvictOff, + "OFf": actionClientNoEvictOff, + "OfF": actionClientNoEvictOff, + "Off": actionClientNoEvictOff, + "oFF": actionClientNoEvictOff, + "oFf": actionClientNoEvictOff, + "ofF": actionClientNoEvictOff, + "off": actionClientNoEvictOff, }, } - actionPsubscribe = &commandAction{ - Action: func(state *connectionState) { - *state |= stateSubscribe + actionClientNoTouchOn = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateClientNoTouch }, } - actionSubscribe = &commandAction{ - Action: func(state *connectionState) { - *state |= stateSubscribe + actionClientNoTouchOff = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateClientNoTouch }, } - actionMonitor = &commandAction{ - Action: func(state *connectionState) { - *state |= stateMonitor + actionClientNoTouch = &commandAction{ + Next: map[string]*commandAction{ + "ON": actionClientNoTouchOn, + "On": actionClientNoTouchOn, + "oN": actionClientNoTouchOn, + "on": actionClientNoTouchOn, + "OFF": actionClientNoTouchOff, + "OFf": actionClientNoTouchOff, + "OfF": actionClientNoTouchOff, + "Off": actionClientNoTouchOff, + "oFF": actionClientNoTouchOff, + "oFf": actionClientNoTouchOff, + "ofF": actionClientNoTouchOff, + "off": actionClientNoTouchOff, }, } actionClientReplyOff = &commandAction{ - Action: func(state *connectionState) { - *state |= stateClientReplyOff + Action: func(cs *connectionState) { + *cs |= stateClientReplyOff }, } actionClientReplyOn = &commandAction{ - Action: func(state *connectionState) { - *state &^= stateClientReplyOff | stateClientReplySkip + Action: func(cs *connectionState) { + *cs &^= stateClientReplyOff | stateClientReplySkipNext | stateClientReplySkip }, } actionClientReplySkip = &commandAction{ - Action: func(state *connectionState) { - if *state&stateClientReplyOff == 0 { - *state |= stateClientReplySkipNext + Action: func(cs *connectionState) { + if *cs&stateClientReplyOff == 0 { + *cs |= stateClientReplySkipNext } }, } @@ -92,251 +104,705 @@ var ( "skip": actionClientReplySkip, }, } + actionClientTrackingOn = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateClientTracking + }, + } + actionClientTrackingOff = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateClientTracking + }, + } + actionClientTracking = &commandAction{ + Next: map[string]*commandAction{ + "ON": actionClientTrackingOn, + "On": actionClientTrackingOn, + "oN": actionClientTrackingOn, + "on": actionClientTrackingOn, + "OFF": actionClientTrackingOff, + "OFf": actionClientTrackingOff, + "OfF": actionClientTrackingOff, + "Off": actionClientTrackingOff, + "oFF": actionClientTrackingOff, + "oFf": actionClientTrackingOff, + "ofF": actionClientTrackingOff, + "off": actionClientTrackingOff, + }, + } actionClient = &commandAction{ Next: map[string]*commandAction{ - "REPLY": actionClientReply, - "REPLy": actionClientReply, - "REPlY": actionClientReply, - "REPly": actionClientReply, - "REpLY": actionClientReply, - "REpLy": actionClientReply, - "REplY": actionClientReply, - "REply": actionClientReply, - "RePLY": actionClientReply, - "RePLy": actionClientReply, - "RePlY": actionClientReply, - "RePly": actionClientReply, - "RepLY": actionClientReply, - "RepLy": actionClientReply, - "ReplY": actionClientReply, - "Reply": actionClientReply, - "rEPLY": actionClientReply, - "rEPLy": actionClientReply, - "rEPlY": actionClientReply, - "rEPly": actionClientReply, - "rEpLY": actionClientReply, - "rEpLy": actionClientReply, - "rEplY": actionClientReply, - "rEply": actionClientReply, - "rePLY": actionClientReply, - "rePLy": actionClientReply, - "rePlY": actionClientReply, - "rePly": actionClientReply, - "repLY": actionClientReply, - "repLy": actionClientReply, - "replY": actionClientReply, - "reply": actionClientReply, + "NO-EVICT": actionClientNoEvict, + "NO-EVICt": actionClientNoEvict, + "NO-EVIcT": actionClientNoEvict, + "NO-EVIct": actionClientNoEvict, + "NO-EViCT": actionClientNoEvict, + "NO-EViCt": actionClientNoEvict, + "NO-EVicT": actionClientNoEvict, + "NO-EVict": actionClientNoEvict, + "NO-EvICT": actionClientNoEvict, + "NO-EvICt": actionClientNoEvict, + "NO-EvIcT": actionClientNoEvict, + "NO-EvIct": actionClientNoEvict, + "NO-EviCT": actionClientNoEvict, + "NO-EviCt": actionClientNoEvict, + "NO-EvicT": actionClientNoEvict, + "NO-Evict": actionClientNoEvict, + "NO-eVICT": actionClientNoEvict, + "NO-eVICt": actionClientNoEvict, + "NO-eVIcT": actionClientNoEvict, + "NO-eVIct": actionClientNoEvict, + "NO-eViCT": actionClientNoEvict, + "NO-eViCt": actionClientNoEvict, + "NO-eVicT": actionClientNoEvict, + "NO-eVict": actionClientNoEvict, + "NO-evICT": actionClientNoEvict, + "NO-evICt": actionClientNoEvict, + "NO-evIcT": actionClientNoEvict, + "NO-evIct": actionClientNoEvict, + "NO-eviCT": actionClientNoEvict, + "NO-eviCt": actionClientNoEvict, + "NO-evicT": actionClientNoEvict, + "NO-evict": actionClientNoEvict, + "No-EVICT": actionClientNoEvict, + "No-EVICt": actionClientNoEvict, + "No-EVIcT": actionClientNoEvict, + "No-EVIct": actionClientNoEvict, + "No-EViCT": actionClientNoEvict, + "No-EViCt": actionClientNoEvict, + "No-EVicT": actionClientNoEvict, + "No-EVict": actionClientNoEvict, + "No-EvICT": actionClientNoEvict, + "No-EvICt": actionClientNoEvict, + "No-EvIcT": actionClientNoEvict, + "No-EvIct": actionClientNoEvict, + "No-EviCT": actionClientNoEvict, + "No-EviCt": actionClientNoEvict, + "No-EvicT": actionClientNoEvict, + "No-Evict": actionClientNoEvict, + "No-eVICT": actionClientNoEvict, + "No-eVICt": actionClientNoEvict, + "No-eVIcT": actionClientNoEvict, + "No-eVIct": actionClientNoEvict, + "No-eViCT": actionClientNoEvict, + "No-eViCt": actionClientNoEvict, + "No-eVicT": actionClientNoEvict, + "No-eVict": actionClientNoEvict, + "No-evICT": actionClientNoEvict, + "No-evICt": actionClientNoEvict, + "No-evIcT": actionClientNoEvict, + "No-evIct": actionClientNoEvict, + "No-eviCT": actionClientNoEvict, + "No-eviCt": actionClientNoEvict, + "No-evicT": actionClientNoEvict, + "No-evict": actionClientNoEvict, + "nO-EVICT": actionClientNoEvict, + "nO-EVICt": actionClientNoEvict, + "nO-EVIcT": actionClientNoEvict, + "nO-EVIct": actionClientNoEvict, + "nO-EViCT": actionClientNoEvict, + "nO-EViCt": actionClientNoEvict, + "nO-EVicT": actionClientNoEvict, + "nO-EVict": actionClientNoEvict, + "nO-EvICT": actionClientNoEvict, + "nO-EvICt": actionClientNoEvict, + "nO-EvIcT": actionClientNoEvict, + "nO-EvIct": actionClientNoEvict, + "nO-EviCT": actionClientNoEvict, + "nO-EviCt": actionClientNoEvict, + "nO-EvicT": actionClientNoEvict, + "nO-Evict": actionClientNoEvict, + "nO-eVICT": actionClientNoEvict, + "nO-eVICt": actionClientNoEvict, + "nO-eVIcT": actionClientNoEvict, + "nO-eVIct": actionClientNoEvict, + "nO-eViCT": actionClientNoEvict, + "nO-eViCt": actionClientNoEvict, + "nO-eVicT": actionClientNoEvict, + "nO-eVict": actionClientNoEvict, + "nO-evICT": actionClientNoEvict, + "nO-evICt": actionClientNoEvict, + "nO-evIcT": actionClientNoEvict, + "nO-evIct": actionClientNoEvict, + "nO-eviCT": actionClientNoEvict, + "nO-eviCt": actionClientNoEvict, + "nO-evicT": actionClientNoEvict, + "nO-evict": actionClientNoEvict, + "no-EVICT": actionClientNoEvict, + "no-EVICt": actionClientNoEvict, + "no-EVIcT": actionClientNoEvict, + "no-EVIct": actionClientNoEvict, + "no-EViCT": actionClientNoEvict, + "no-EViCt": actionClientNoEvict, + "no-EVicT": actionClientNoEvict, + "no-EVict": actionClientNoEvict, + "no-EvICT": actionClientNoEvict, + "no-EvICt": actionClientNoEvict, + "no-EvIcT": actionClientNoEvict, + "no-EvIct": actionClientNoEvict, + "no-EviCT": actionClientNoEvict, + "no-EviCt": actionClientNoEvict, + "no-EvicT": actionClientNoEvict, + "no-Evict": actionClientNoEvict, + "no-eVICT": actionClientNoEvict, + "no-eVICt": actionClientNoEvict, + "no-eVIcT": actionClientNoEvict, + "no-eVIct": actionClientNoEvict, + "no-eViCT": actionClientNoEvict, + "no-eViCt": actionClientNoEvict, + "no-eVicT": actionClientNoEvict, + "no-eVict": actionClientNoEvict, + "no-evICT": actionClientNoEvict, + "no-evICt": actionClientNoEvict, + "no-evIcT": actionClientNoEvict, + "no-evIct": actionClientNoEvict, + "no-eviCT": actionClientNoEvict, + "no-eviCt": actionClientNoEvict, + "no-evicT": actionClientNoEvict, + "no-evict": actionClientNoEvict, + "NO-TOUCH": actionClientNoTouch, + "NO-TOUCh": actionClientNoTouch, + "NO-TOUcH": actionClientNoTouch, + "NO-TOUch": actionClientNoTouch, + "NO-TOuCH": actionClientNoTouch, + "NO-TOuCh": actionClientNoTouch, + "NO-TOucH": actionClientNoTouch, + "NO-TOuch": actionClientNoTouch, + "NO-ToUCH": actionClientNoTouch, + "NO-ToUCh": actionClientNoTouch, + "NO-ToUcH": actionClientNoTouch, + "NO-ToUch": actionClientNoTouch, + "NO-TouCH": actionClientNoTouch, + "NO-TouCh": actionClientNoTouch, + "NO-ToucH": actionClientNoTouch, + "NO-Touch": actionClientNoTouch, + "NO-tOUCH": actionClientNoTouch, + "NO-tOUCh": actionClientNoTouch, + "NO-tOUcH": actionClientNoTouch, + "NO-tOUch": actionClientNoTouch, + "NO-tOuCH": actionClientNoTouch, + "NO-tOuCh": actionClientNoTouch, + "NO-tOucH": actionClientNoTouch, + "NO-tOuch": actionClientNoTouch, + "NO-toUCH": actionClientNoTouch, + "NO-toUCh": actionClientNoTouch, + "NO-toUcH": actionClientNoTouch, + "NO-toUch": actionClientNoTouch, + "NO-touCH": actionClientNoTouch, + "NO-touCh": actionClientNoTouch, + "NO-toucH": actionClientNoTouch, + "NO-touch": actionClientNoTouch, + "No-TOUCH": actionClientNoTouch, + "No-TOUCh": actionClientNoTouch, + "No-TOUcH": actionClientNoTouch, + "No-TOUch": actionClientNoTouch, + "No-TOuCH": actionClientNoTouch, + "No-TOuCh": actionClientNoTouch, + "No-TOucH": actionClientNoTouch, + "No-TOuch": actionClientNoTouch, + "No-ToUCH": actionClientNoTouch, + "No-ToUCh": actionClientNoTouch, + "No-ToUcH": actionClientNoTouch, + "No-ToUch": actionClientNoTouch, + "No-TouCH": actionClientNoTouch, + "No-TouCh": actionClientNoTouch, + "No-ToucH": actionClientNoTouch, + "No-Touch": actionClientNoTouch, + "No-tOUCH": actionClientNoTouch, + "No-tOUCh": actionClientNoTouch, + "No-tOUcH": actionClientNoTouch, + "No-tOUch": actionClientNoTouch, + "No-tOuCH": actionClientNoTouch, + "No-tOuCh": actionClientNoTouch, + "No-tOucH": actionClientNoTouch, + "No-tOuch": actionClientNoTouch, + "No-toUCH": actionClientNoTouch, + "No-toUCh": actionClientNoTouch, + "No-toUcH": actionClientNoTouch, + "No-toUch": actionClientNoTouch, + "No-touCH": actionClientNoTouch, + "No-touCh": actionClientNoTouch, + "No-toucH": actionClientNoTouch, + "No-touch": actionClientNoTouch, + "nO-TOUCH": actionClientNoTouch, + "nO-TOUCh": actionClientNoTouch, + "nO-TOUcH": actionClientNoTouch, + "nO-TOUch": actionClientNoTouch, + "nO-TOuCH": actionClientNoTouch, + "nO-TOuCh": actionClientNoTouch, + "nO-TOucH": actionClientNoTouch, + "nO-TOuch": actionClientNoTouch, + "nO-ToUCH": actionClientNoTouch, + "nO-ToUCh": actionClientNoTouch, + "nO-ToUcH": actionClientNoTouch, + "nO-ToUch": actionClientNoTouch, + "nO-TouCH": actionClientNoTouch, + "nO-TouCh": actionClientNoTouch, + "nO-ToucH": actionClientNoTouch, + "nO-Touch": actionClientNoTouch, + "nO-tOUCH": actionClientNoTouch, + "nO-tOUCh": actionClientNoTouch, + "nO-tOUcH": actionClientNoTouch, + "nO-tOUch": actionClientNoTouch, + "nO-tOuCH": actionClientNoTouch, + "nO-tOuCh": actionClientNoTouch, + "nO-tOucH": actionClientNoTouch, + "nO-tOuch": actionClientNoTouch, + "nO-toUCH": actionClientNoTouch, + "nO-toUCh": actionClientNoTouch, + "nO-toUcH": actionClientNoTouch, + "nO-toUch": actionClientNoTouch, + "nO-touCH": actionClientNoTouch, + "nO-touCh": actionClientNoTouch, + "nO-toucH": actionClientNoTouch, + "nO-touch": actionClientNoTouch, + "no-TOUCH": actionClientNoTouch, + "no-TOUCh": actionClientNoTouch, + "no-TOUcH": actionClientNoTouch, + "no-TOUch": actionClientNoTouch, + "no-TOuCH": actionClientNoTouch, + "no-TOuCh": actionClientNoTouch, + "no-TOucH": actionClientNoTouch, + "no-TOuch": actionClientNoTouch, + "no-ToUCH": actionClientNoTouch, + "no-ToUCh": actionClientNoTouch, + "no-ToUcH": actionClientNoTouch, + "no-ToUch": actionClientNoTouch, + "no-TouCH": actionClientNoTouch, + "no-TouCh": actionClientNoTouch, + "no-ToucH": actionClientNoTouch, + "no-Touch": actionClientNoTouch, + "no-tOUCH": actionClientNoTouch, + "no-tOUCh": actionClientNoTouch, + "no-tOUcH": actionClientNoTouch, + "no-tOUch": actionClientNoTouch, + "no-tOuCH": actionClientNoTouch, + "no-tOuCh": actionClientNoTouch, + "no-tOucH": actionClientNoTouch, + "no-tOuch": actionClientNoTouch, + "no-toUCH": actionClientNoTouch, + "no-toUCh": actionClientNoTouch, + "no-toUcH": actionClientNoTouch, + "no-toUch": actionClientNoTouch, + "no-touCH": actionClientNoTouch, + "no-touCh": actionClientNoTouch, + "no-toucH": actionClientNoTouch, + "no-touch": actionClientNoTouch, + "REPLY": actionClientReply, + "REPLy": actionClientReply, + "REPlY": actionClientReply, + "REPly": actionClientReply, + "REpLY": actionClientReply, + "REpLy": actionClientReply, + "REplY": actionClientReply, + "REply": actionClientReply, + "RePLY": actionClientReply, + "RePLy": actionClientReply, + "RePlY": actionClientReply, + "RePly": actionClientReply, + "RepLY": actionClientReply, + "RepLy": actionClientReply, + "ReplY": actionClientReply, + "Reply": actionClientReply, + "rEPLY": actionClientReply, + "rEPLy": actionClientReply, + "rEPlY": actionClientReply, + "rEPly": actionClientReply, + "rEpLY": actionClientReply, + "rEpLy": actionClientReply, + "rEplY": actionClientReply, + "rEply": actionClientReply, + "rePLY": actionClientReply, + "rePLy": actionClientReply, + "rePlY": actionClientReply, + "rePly": actionClientReply, + "repLY": actionClientReply, + "repLy": actionClientReply, + "replY": actionClientReply, + "reply": actionClientReply, + "TRACKING": actionClientTracking, + "TRACKINg": actionClientTracking, + "TRACKInG": actionClientTracking, + "TRACKIng": actionClientTracking, + "TRACKiNG": actionClientTracking, + "TRACKiNg": actionClientTracking, + "TRACKinG": actionClientTracking, + "TRACKing": actionClientTracking, + "TRACkING": actionClientTracking, + "TRACkINg": actionClientTracking, + "TRACkInG": actionClientTracking, + "TRACkIng": actionClientTracking, + "TRACkiNG": actionClientTracking, + "TRACkiNg": actionClientTracking, + "TRACkinG": actionClientTracking, + "TRACking": actionClientTracking, + "TRAcKING": actionClientTracking, + "TRAcKINg": actionClientTracking, + "TRAcKInG": actionClientTracking, + "TRAcKIng": actionClientTracking, + "TRAcKiNG": actionClientTracking, + "TRAcKiNg": actionClientTracking, + "TRAcKinG": actionClientTracking, + "TRAcKing": actionClientTracking, + "TRAckING": actionClientTracking, + "TRAckINg": actionClientTracking, + "TRAckInG": actionClientTracking, + "TRAckIng": actionClientTracking, + "TRAckiNG": actionClientTracking, + "TRAckiNg": actionClientTracking, + "TRAckinG": actionClientTracking, + "TRAcking": actionClientTracking, + "TRaCKING": actionClientTracking, + "TRaCKINg": actionClientTracking, + "TRaCKInG": actionClientTracking, + "TRaCKIng": actionClientTracking, + "TRaCKiNG": actionClientTracking, + "TRaCKiNg": actionClientTracking, + "TRaCKinG": actionClientTracking, + "TRaCKing": actionClientTracking, + "TRaCkING": actionClientTracking, + "TRaCkINg": actionClientTracking, + "TRaCkInG": actionClientTracking, + "TRaCkIng": actionClientTracking, + "TRaCkiNG": actionClientTracking, + "TRaCkiNg": actionClientTracking, + "TRaCkinG": actionClientTracking, + "TRaCking": actionClientTracking, + "TRacKING": actionClientTracking, + "TRacKINg": actionClientTracking, + "TRacKInG": actionClientTracking, + "TRacKIng": actionClientTracking, + "TRacKiNG": actionClientTracking, + "TRacKiNg": actionClientTracking, + "TRacKinG": actionClientTracking, + "TRacKing": actionClientTracking, + "TRackING": actionClientTracking, + "TRackINg": actionClientTracking, + "TRackInG": actionClientTracking, + "TRackIng": actionClientTracking, + "TRackiNG": actionClientTracking, + "TRackiNg": actionClientTracking, + "TRackinG": actionClientTracking, + "TRacking": actionClientTracking, + "TrACKING": actionClientTracking, + "TrACKINg": actionClientTracking, + "TrACKInG": actionClientTracking, + "TrACKIng": actionClientTracking, + "TrACKiNG": actionClientTracking, + "TrACKiNg": actionClientTracking, + "TrACKinG": actionClientTracking, + "TrACKing": actionClientTracking, + "TrACkING": actionClientTracking, + "TrACkINg": actionClientTracking, + "TrACkInG": actionClientTracking, + "TrACkIng": actionClientTracking, + "TrACkiNG": actionClientTracking, + "TrACkiNg": actionClientTracking, + "TrACkinG": actionClientTracking, + "TrACking": actionClientTracking, + "TrAcKING": actionClientTracking, + "TrAcKINg": actionClientTracking, + "TrAcKInG": actionClientTracking, + "TrAcKIng": actionClientTracking, + "TrAcKiNG": actionClientTracking, + "TrAcKiNg": actionClientTracking, + "TrAcKinG": actionClientTracking, + "TrAcKing": actionClientTracking, + "TrAckING": actionClientTracking, + "TrAckINg": actionClientTracking, + "TrAckInG": actionClientTracking, + "TrAckIng": actionClientTracking, + "TrAckiNG": actionClientTracking, + "TrAckiNg": actionClientTracking, + "TrAckinG": actionClientTracking, + "TrAcking": actionClientTracking, + "TraCKING": actionClientTracking, + "TraCKINg": actionClientTracking, + "TraCKInG": actionClientTracking, + "TraCKIng": actionClientTracking, + "TraCKiNG": actionClientTracking, + "TraCKiNg": actionClientTracking, + "TraCKinG": actionClientTracking, + "TraCKing": actionClientTracking, + "TraCkING": actionClientTracking, + "TraCkINg": actionClientTracking, + "TraCkInG": actionClientTracking, + "TraCkIng": actionClientTracking, + "TraCkiNG": actionClientTracking, + "TraCkiNg": actionClientTracking, + "TraCkinG": actionClientTracking, + "TraCking": actionClientTracking, + "TracKING": actionClientTracking, + "TracKINg": actionClientTracking, + "TracKInG": actionClientTracking, + "TracKIng": actionClientTracking, + "TracKiNG": actionClientTracking, + "TracKiNg": actionClientTracking, + "TracKinG": actionClientTracking, + "TracKing": actionClientTracking, + "TrackING": actionClientTracking, + "TrackINg": actionClientTracking, + "TrackInG": actionClientTracking, + "TrackIng": actionClientTracking, + "TrackiNG": actionClientTracking, + "TrackiNg": actionClientTracking, + "TrackinG": actionClientTracking, + "Tracking": actionClientTracking, + "tRACKING": actionClientTracking, + "tRACKINg": actionClientTracking, + "tRACKInG": actionClientTracking, + "tRACKIng": actionClientTracking, + "tRACKiNG": actionClientTracking, + "tRACKiNg": actionClientTracking, + "tRACKinG": actionClientTracking, + "tRACKing": actionClientTracking, + "tRACkING": actionClientTracking, + "tRACkINg": actionClientTracking, + "tRACkInG": actionClientTracking, + "tRACkIng": actionClientTracking, + "tRACkiNG": actionClientTracking, + "tRACkiNg": actionClientTracking, + "tRACkinG": actionClientTracking, + "tRACking": actionClientTracking, + "tRAcKING": actionClientTracking, + "tRAcKINg": actionClientTracking, + "tRAcKInG": actionClientTracking, + "tRAcKIng": actionClientTracking, + "tRAcKiNG": actionClientTracking, + "tRAcKiNg": actionClientTracking, + "tRAcKinG": actionClientTracking, + "tRAcKing": actionClientTracking, + "tRAckING": actionClientTracking, + "tRAckINg": actionClientTracking, + "tRAckInG": actionClientTracking, + "tRAckIng": actionClientTracking, + "tRAckiNG": actionClientTracking, + "tRAckiNg": actionClientTracking, + "tRAckinG": actionClientTracking, + "tRAcking": actionClientTracking, + "tRaCKING": actionClientTracking, + "tRaCKINg": actionClientTracking, + "tRaCKInG": actionClientTracking, + "tRaCKIng": actionClientTracking, + "tRaCKiNG": actionClientTracking, + "tRaCKiNg": actionClientTracking, + "tRaCKinG": actionClientTracking, + "tRaCKing": actionClientTracking, + "tRaCkING": actionClientTracking, + "tRaCkINg": actionClientTracking, + "tRaCkInG": actionClientTracking, + "tRaCkIng": actionClientTracking, + "tRaCkiNG": actionClientTracking, + "tRaCkiNg": actionClientTracking, + "tRaCkinG": actionClientTracking, + "tRaCking": actionClientTracking, + "tRacKING": actionClientTracking, + "tRacKINg": actionClientTracking, + "tRacKInG": actionClientTracking, + "tRacKIng": actionClientTracking, + "tRacKiNG": actionClientTracking, + "tRacKiNg": actionClientTracking, + "tRacKinG": actionClientTracking, + "tRacKing": actionClientTracking, + "tRackING": actionClientTracking, + "tRackINg": actionClientTracking, + "tRackInG": actionClientTracking, + "tRackIng": actionClientTracking, + "tRackiNG": actionClientTracking, + "tRackiNg": actionClientTracking, + "tRackinG": actionClientTracking, + "tRacking": actionClientTracking, + "trACKING": actionClientTracking, + "trACKINg": actionClientTracking, + "trACKInG": actionClientTracking, + "trACKIng": actionClientTracking, + "trACKiNG": actionClientTracking, + "trACKiNg": actionClientTracking, + "trACKinG": actionClientTracking, + "trACKing": actionClientTracking, + "trACkING": actionClientTracking, + "trACkINg": actionClientTracking, + "trACkInG": actionClientTracking, + "trACkIng": actionClientTracking, + "trACkiNG": actionClientTracking, + "trACkiNg": actionClientTracking, + "trACkinG": actionClientTracking, + "trACking": actionClientTracking, + "trAcKING": actionClientTracking, + "trAcKINg": actionClientTracking, + "trAcKInG": actionClientTracking, + "trAcKIng": actionClientTracking, + "trAcKiNG": actionClientTracking, + "trAcKiNg": actionClientTracking, + "trAcKinG": actionClientTracking, + "trAcKing": actionClientTracking, + "trAckING": actionClientTracking, + "trAckINg": actionClientTracking, + "trAckInG": actionClientTracking, + "trAckIng": actionClientTracking, + "trAckiNG": actionClientTracking, + "trAckiNg": actionClientTracking, + "trAckinG": actionClientTracking, + "trAcking": actionClientTracking, + "traCKING": actionClientTracking, + "traCKINg": actionClientTracking, + "traCKInG": actionClientTracking, + "traCKIng": actionClientTracking, + "traCKiNG": actionClientTracking, + "traCKiNg": actionClientTracking, + "traCKinG": actionClientTracking, + "traCKing": actionClientTracking, + "traCkING": actionClientTracking, + "traCkINg": actionClientTracking, + "traCkInG": actionClientTracking, + "traCkIng": actionClientTracking, + "traCkiNG": actionClientTracking, + "traCkiNg": actionClientTracking, + "traCkinG": actionClientTracking, + "traCking": actionClientTracking, + "tracKING": actionClientTracking, + "tracKINg": actionClientTracking, + "tracKInG": actionClientTracking, + "tracKIng": actionClientTracking, + "tracKiNG": actionClientTracking, + "tracKiNg": actionClientTracking, + "tracKinG": actionClientTracking, + "tracKing": actionClientTracking, + "trackING": actionClientTracking, + "trackINg": actionClientTracking, + "trackInG": actionClientTracking, + "trackIng": actionClientTracking, + "trackiNG": actionClientTracking, + "trackiNg": actionClientTracking, + "trackinG": actionClientTracking, + "tracking": actionClientTracking, + }, + } + actionDiscard = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateWatch | stateMulti + }, + } + actionExec = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateWatch | stateMulti + }, + } + actionMonitor = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateMonitor + }, + } + actionMulti = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateMulti + }, + } + actionPsubscribe = &commandAction{ + Action: func(cs *connectionState) { + *cs |= statePsubscribe + }, + } + actionSsubscribe = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateSsubscribe + }, + } + actionSubscribe = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateSubscribe + }, + } + actionUnwatch = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateWatch + }, + } + actionReadonly = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateReadOnly + }, + } + actionReadwrite = &commandAction{ + Action: func(cs *connectionState) { + *cs &^= stateReadOnly + }, + } + actionReset = &commandAction{ + Action: func(cs *connectionState) { + *cs = 0 + }, + } + actionWatch = &commandAction{ + Action: func(cs *connectionState) { + *cs |= stateWatch }, } activeConnActions = map[string]*commandAction{ - "WATCH": actionWatch, - "WATCh": actionWatch, - "WATcH": actionWatch, - "WATch": actionWatch, - "WAtCH": actionWatch, - "WAtCh": actionWatch, - "WAtcH": actionWatch, - "WAtch": actionWatch, - "WaTCH": actionWatch, - "WaTCh": actionWatch, - "WaTcH": actionWatch, - "WaTch": actionWatch, - "WatCH": actionWatch, - "WatCh": actionWatch, - "WatcH": actionWatch, - "Watch": actionWatch, - "wATCH": actionWatch, - "wATCh": actionWatch, - "wATcH": actionWatch, - "wATch": actionWatch, - "wAtCH": actionWatch, - "wAtCh": actionWatch, - "wAtcH": actionWatch, - "wAtch": actionWatch, - "waTCH": actionWatch, - "waTCh": actionWatch, - "waTcH": actionWatch, - "waTch": actionWatch, - "watCH": actionWatch, - "watCh": actionWatch, - "watcH": actionWatch, - "watch": actionWatch, - "UNWATCH": actionUnwatch, - "UNWATCh": actionUnwatch, - "UNWATcH": actionUnwatch, - "UNWATch": actionUnwatch, - "UNWAtCH": actionUnwatch, - "UNWAtCh": actionUnwatch, - "UNWAtcH": actionUnwatch, - "UNWAtch": actionUnwatch, - "UNWaTCH": actionUnwatch, - "UNWaTCh": actionUnwatch, - "UNWaTcH": actionUnwatch, - "UNWaTch": actionUnwatch, - "UNWatCH": actionUnwatch, - "UNWatCh": actionUnwatch, - "UNWatcH": actionUnwatch, - "UNWatch": actionUnwatch, - "UNwATCH": actionUnwatch, - "UNwATCh": actionUnwatch, - "UNwATcH": actionUnwatch, - "UNwATch": actionUnwatch, - "UNwAtCH": actionUnwatch, - "UNwAtCh": actionUnwatch, - "UNwAtcH": actionUnwatch, - "UNwAtch": actionUnwatch, - "UNwaTCH": actionUnwatch, - "UNwaTCh": actionUnwatch, - "UNwaTcH": actionUnwatch, - "UNwaTch": actionUnwatch, - "UNwatCH": actionUnwatch, - "UNwatCh": actionUnwatch, - "UNwatcH": actionUnwatch, - "UNwatch": actionUnwatch, - "UnWATCH": actionUnwatch, - "UnWATCh": actionUnwatch, - "UnWATcH": actionUnwatch, - "UnWATch": actionUnwatch, - "UnWAtCH": actionUnwatch, - "UnWAtCh": actionUnwatch, - "UnWAtcH": actionUnwatch, - "UnWAtch": actionUnwatch, - "UnWaTCH": actionUnwatch, - "UnWaTCh": actionUnwatch, - "UnWaTcH": actionUnwatch, - "UnWaTch": actionUnwatch, - "UnWatCH": actionUnwatch, - "UnWatCh": actionUnwatch, - "UnWatcH": actionUnwatch, - "UnWatch": actionUnwatch, - "UnwATCH": actionUnwatch, - "UnwATCh": actionUnwatch, - "UnwATcH": actionUnwatch, - "UnwATch": actionUnwatch, - "UnwAtCH": actionUnwatch, - "UnwAtCh": actionUnwatch, - "UnwAtcH": actionUnwatch, - "UnwAtch": actionUnwatch, - "UnwaTCH": actionUnwatch, - "UnwaTCh": actionUnwatch, - "UnwaTcH": actionUnwatch, - "UnwaTch": actionUnwatch, - "UnwatCH": actionUnwatch, - "UnwatCh": actionUnwatch, - "UnwatcH": actionUnwatch, - "Unwatch": actionUnwatch, - "uNWATCH": actionUnwatch, - "uNWATCh": actionUnwatch, - "uNWATcH": actionUnwatch, - "uNWATch": actionUnwatch, - "uNWAtCH": actionUnwatch, - "uNWAtCh": actionUnwatch, - "uNWAtcH": actionUnwatch, - "uNWAtch": actionUnwatch, - "uNWaTCH": actionUnwatch, - "uNWaTCh": actionUnwatch, - "uNWaTcH": actionUnwatch, - "uNWaTch": actionUnwatch, - "uNWatCH": actionUnwatch, - "uNWatCh": actionUnwatch, - "uNWatcH": actionUnwatch, - "uNWatch": actionUnwatch, - "uNwATCH": actionUnwatch, - "uNwATCh": actionUnwatch, - "uNwATcH": actionUnwatch, - "uNwATch": actionUnwatch, - "uNwAtCH": actionUnwatch, - "uNwAtCh": actionUnwatch, - "uNwAtcH": actionUnwatch, - "uNwAtch": actionUnwatch, - "uNwaTCH": actionUnwatch, - "uNwaTCh": actionUnwatch, - "uNwaTcH": actionUnwatch, - "uNwaTch": actionUnwatch, - "uNwatCH": actionUnwatch, - "uNwatCh": actionUnwatch, - "uNwatcH": actionUnwatch, - "uNwatch": actionUnwatch, - "unWATCH": actionUnwatch, - "unWATCh": actionUnwatch, - "unWATcH": actionUnwatch, - "unWATch": actionUnwatch, - "unWAtCH": actionUnwatch, - "unWAtCh": actionUnwatch, - "unWAtcH": actionUnwatch, - "unWAtch": actionUnwatch, - "unWaTCH": actionUnwatch, - "unWaTCh": actionUnwatch, - "unWaTcH": actionUnwatch, - "unWaTch": actionUnwatch, - "unWatCH": actionUnwatch, - "unWatCh": actionUnwatch, - "unWatcH": actionUnwatch, - "unWatch": actionUnwatch, - "unwATCH": actionUnwatch, - "unwATCh": actionUnwatch, - "unwATcH": actionUnwatch, - "unwATch": actionUnwatch, - "unwAtCH": actionUnwatch, - "unwAtCh": actionUnwatch, - "unwAtcH": actionUnwatch, - "unwAtch": actionUnwatch, - "unwaTCH": actionUnwatch, - "unwaTCh": actionUnwatch, - "unwaTcH": actionUnwatch, - "unwaTch": actionUnwatch, - "unwatCH": actionUnwatch, - "unwatCh": actionUnwatch, - "unwatcH": actionUnwatch, - "unwatch": actionUnwatch, - "MULTI": actionMulti, - "MULTi": actionMulti, - "MULtI": actionMulti, - "MULti": actionMulti, - "MUlTI": actionMulti, - "MUlTi": actionMulti, - "MUltI": actionMulti, - "MUlti": actionMulti, - "MuLTI": actionMulti, - "MuLTi": actionMulti, - "MuLtI": actionMulti, - "MuLti": actionMulti, - "MulTI": actionMulti, - "MulTi": actionMulti, - "MultI": actionMulti, - "Multi": actionMulti, - "mULTI": actionMulti, - "mULTi": actionMulti, - "mULtI": actionMulti, - "mULti": actionMulti, - "mUlTI": actionMulti, - "mUlTi": actionMulti, - "mUltI": actionMulti, - "mUlti": actionMulti, - "muLTI": actionMulti, - "muLTi": actionMulti, - "muLtI": actionMulti, - "muLti": actionMulti, - "mulTI": actionMulti, - "mulTi": actionMulti, - "multI": actionMulti, - "multi": actionMulti, - "EXEC": actionExec, - "EXEc": actionExec, - "EXeC": actionExec, - "EXec": actionExec, - "ExEC": actionExec, - "ExEc": actionExec, - "ExeC": actionExec, - "Exec": actionExec, - "eXEC": actionExec, - "eXEc": actionExec, - "eXeC": actionExec, - "eXec": actionExec, - "exEC": actionExec, - "exEc": actionExec, - "exeC": actionExec, - "exec": actionExec, + "CLIENT": actionClient, + "CLIENt": actionClient, + "CLIEnT": actionClient, + "CLIEnt": actionClient, + "CLIeNT": actionClient, + "CLIeNt": actionClient, + "CLIenT": actionClient, + "CLIent": actionClient, + "CLiENT": actionClient, + "CLiENt": actionClient, + "CLiEnT": actionClient, + "CLiEnt": actionClient, + "CLieNT": actionClient, + "CLieNt": actionClient, + "CLienT": actionClient, + "CLient": actionClient, + "ClIENT": actionClient, + "ClIENt": actionClient, + "ClIEnT": actionClient, + "ClIEnt": actionClient, + "ClIeNT": actionClient, + "ClIeNt": actionClient, + "ClIenT": actionClient, + "ClIent": actionClient, + "CliENT": actionClient, + "CliENt": actionClient, + "CliEnT": actionClient, + "CliEnt": actionClient, + "ClieNT": actionClient, + "ClieNt": actionClient, + "ClienT": actionClient, + "Client": actionClient, + "cLIENT": actionClient, + "cLIENt": actionClient, + "cLIEnT": actionClient, + "cLIEnt": actionClient, + "cLIeNT": actionClient, + "cLIeNt": actionClient, + "cLIenT": actionClient, + "cLIent": actionClient, + "cLiENT": actionClient, + "cLiENt": actionClient, + "cLiEnT": actionClient, + "cLiEnt": actionClient, + "cLieNT": actionClient, + "cLieNt": actionClient, + "cLienT": actionClient, + "cLient": actionClient, + "clIENT": actionClient, + "clIENt": actionClient, + "clIEnT": actionClient, + "clIEnt": actionClient, + "clIeNT": actionClient, + "clIeNt": actionClient, + "clIenT": actionClient, + "clIent": actionClient, + "cliENT": actionClient, + "cliENt": actionClient, + "cliEnT": actionClient, + "cliEnt": actionClient, + "clieNT": actionClient, + "clieNt": actionClient, + "clienT": actionClient, + "client": actionClient, "DISCARD": actionDiscard, "DISCARd": actionDiscard, "DISCArD": actionDiscard, @@ -465,6 +931,182 @@ var ( "discaRd": actionDiscard, "discarD": actionDiscard, "discard": actionDiscard, + "EXEC": actionExec, + "EXEc": actionExec, + "EXeC": actionExec, + "EXec": actionExec, + "ExEC": actionExec, + "ExEc": actionExec, + "ExeC": actionExec, + "Exec": actionExec, + "eXEC": actionExec, + "eXEc": actionExec, + "eXeC": actionExec, + "eXec": actionExec, + "exEC": actionExec, + "exEc": actionExec, + "exeC": actionExec, + "exec": actionExec, + "MONITOR": actionMonitor, + "MONITOr": actionMonitor, + "MONIToR": actionMonitor, + "MONITor": actionMonitor, + "MONItOR": actionMonitor, + "MONItOr": actionMonitor, + "MONItoR": actionMonitor, + "MONItor": actionMonitor, + "MONiTOR": actionMonitor, + "MONiTOr": actionMonitor, + "MONiToR": actionMonitor, + "MONiTor": actionMonitor, + "MONitOR": actionMonitor, + "MONitOr": actionMonitor, + "MONitoR": actionMonitor, + "MONitor": actionMonitor, + "MOnITOR": actionMonitor, + "MOnITOr": actionMonitor, + "MOnIToR": actionMonitor, + "MOnITor": actionMonitor, + "MOnItOR": actionMonitor, + "MOnItOr": actionMonitor, + "MOnItoR": actionMonitor, + "MOnItor": actionMonitor, + "MOniTOR": actionMonitor, + "MOniTOr": actionMonitor, + "MOniToR": actionMonitor, + "MOniTor": actionMonitor, + "MOnitOR": actionMonitor, + "MOnitOr": actionMonitor, + "MOnitoR": actionMonitor, + "MOnitor": actionMonitor, + "MoNITOR": actionMonitor, + "MoNITOr": actionMonitor, + "MoNIToR": actionMonitor, + "MoNITor": actionMonitor, + "MoNItOR": actionMonitor, + "MoNItOr": actionMonitor, + "MoNItoR": actionMonitor, + "MoNItor": actionMonitor, + "MoNiTOR": actionMonitor, + "MoNiTOr": actionMonitor, + "MoNiToR": actionMonitor, + "MoNiTor": actionMonitor, + "MoNitOR": actionMonitor, + "MoNitOr": actionMonitor, + "MoNitoR": actionMonitor, + "MoNitor": actionMonitor, + "MonITOR": actionMonitor, + "MonITOr": actionMonitor, + "MonIToR": actionMonitor, + "MonITor": actionMonitor, + "MonItOR": actionMonitor, + "MonItOr": actionMonitor, + "MonItoR": actionMonitor, + "MonItor": actionMonitor, + "MoniTOR": actionMonitor, + "MoniTOr": actionMonitor, + "MoniToR": actionMonitor, + "MoniTor": actionMonitor, + "MonitOR": actionMonitor, + "MonitOr": actionMonitor, + "MonitoR": actionMonitor, + "Monitor": actionMonitor, + "mONITOR": actionMonitor, + "mONITOr": actionMonitor, + "mONIToR": actionMonitor, + "mONITor": actionMonitor, + "mONItOR": actionMonitor, + "mONItOr": actionMonitor, + "mONItoR": actionMonitor, + "mONItor": actionMonitor, + "mONiTOR": actionMonitor, + "mONiTOr": actionMonitor, + "mONiToR": actionMonitor, + "mONiTor": actionMonitor, + "mONitOR": actionMonitor, + "mONitOr": actionMonitor, + "mONitoR": actionMonitor, + "mONitor": actionMonitor, + "mOnITOR": actionMonitor, + "mOnITOr": actionMonitor, + "mOnIToR": actionMonitor, + "mOnITor": actionMonitor, + "mOnItOR": actionMonitor, + "mOnItOr": actionMonitor, + "mOnItoR": actionMonitor, + "mOnItor": actionMonitor, + "mOniTOR": actionMonitor, + "mOniTOr": actionMonitor, + "mOniToR": actionMonitor, + "mOniTor": actionMonitor, + "mOnitOR": actionMonitor, + "mOnitOr": actionMonitor, + "mOnitoR": actionMonitor, + "mOnitor": actionMonitor, + "moNITOR": actionMonitor, + "moNITOr": actionMonitor, + "moNIToR": actionMonitor, + "moNITor": actionMonitor, + "moNItOR": actionMonitor, + "moNItOr": actionMonitor, + "moNItoR": actionMonitor, + "moNItor": actionMonitor, + "moNiTOR": actionMonitor, + "moNiTOr": actionMonitor, + "moNiToR": actionMonitor, + "moNiTor": actionMonitor, + "moNitOR": actionMonitor, + "moNitOr": actionMonitor, + "moNitoR": actionMonitor, + "moNitor": actionMonitor, + "monITOR": actionMonitor, + "monITOr": actionMonitor, + "monIToR": actionMonitor, + "monITor": actionMonitor, + "monItOR": actionMonitor, + "monItOr": actionMonitor, + "monItoR": actionMonitor, + "monItor": actionMonitor, + "moniTOR": actionMonitor, + "moniTOr": actionMonitor, + "moniToR": actionMonitor, + "moniTor": actionMonitor, + "monitOR": actionMonitor, + "monitOr": actionMonitor, + "monitoR": actionMonitor, + "monitor": actionMonitor, + "MULTI": actionMulti, + "MULTi": actionMulti, + "MULtI": actionMulti, + "MULti": actionMulti, + "MUlTI": actionMulti, + "MUlTi": actionMulti, + "MUltI": actionMulti, + "MUlti": actionMulti, + "MuLTI": actionMulti, + "MuLTi": actionMulti, + "MuLtI": actionMulti, + "MuLti": actionMulti, + "MulTI": actionMulti, + "MulTi": actionMulti, + "MultI": actionMulti, + "Multi": actionMulti, + "mULTI": actionMulti, + "mULTi": actionMulti, + "mULtI": actionMulti, + "mULti": actionMulti, + "mUlTI": actionMulti, + "mUlTi": actionMulti, + "mUltI": actionMulti, + "mUlti": actionMulti, + "muLTI": actionMulti, + "muLTi": actionMulti, + "muLtI": actionMulti, + "muLti": actionMulti, + "mulTI": actionMulti, + "mulTi": actionMulti, + "multI": actionMulti, + "multi": actionMulti, "PSUBSCRIBE": actionPsubscribe, "PSUBSCRIBe": actionPsubscribe, "PSUBSCRIbE": actionPsubscribe, @@ -1489,6 +2131,1030 @@ var ( "psubscriBe": actionPsubscribe, "psubscribE": actionPsubscribe, "psubscribe": actionPsubscribe, + "SSUBSCRIBE": actionSsubscribe, + "SSUBSCRIBe": actionSsubscribe, + "SSUBSCRIbE": actionSsubscribe, + "SSUBSCRIbe": actionSsubscribe, + "SSUBSCRiBE": actionSsubscribe, + "SSUBSCRiBe": actionSsubscribe, + "SSUBSCRibE": actionSsubscribe, + "SSUBSCRibe": actionSsubscribe, + "SSUBSCrIBE": actionSsubscribe, + "SSUBSCrIBe": actionSsubscribe, + "SSUBSCrIbE": actionSsubscribe, + "SSUBSCrIbe": actionSsubscribe, + "SSUBSCriBE": actionSsubscribe, + "SSUBSCriBe": actionSsubscribe, + "SSUBSCribE": actionSsubscribe, + "SSUBSCribe": actionSsubscribe, + "SSUBScRIBE": actionSsubscribe, + "SSUBScRIBe": actionSsubscribe, + "SSUBScRIbE": actionSsubscribe, + "SSUBScRIbe": actionSsubscribe, + "SSUBScRiBE": actionSsubscribe, + "SSUBScRiBe": actionSsubscribe, + "SSUBScRibE": actionSsubscribe, + "SSUBScRibe": actionSsubscribe, + "SSUBScrIBE": actionSsubscribe, + "SSUBScrIBe": actionSsubscribe, + "SSUBScrIbE": actionSsubscribe, + "SSUBScrIbe": actionSsubscribe, + "SSUBScriBE": actionSsubscribe, + "SSUBScriBe": actionSsubscribe, + "SSUBScribE": actionSsubscribe, + "SSUBScribe": actionSsubscribe, + "SSUBsCRIBE": actionSsubscribe, + "SSUBsCRIBe": actionSsubscribe, + "SSUBsCRIbE": actionSsubscribe, + "SSUBsCRIbe": actionSsubscribe, + "SSUBsCRiBE": actionSsubscribe, + "SSUBsCRiBe": actionSsubscribe, + "SSUBsCRibE": actionSsubscribe, + "SSUBsCRibe": actionSsubscribe, + "SSUBsCrIBE": actionSsubscribe, + "SSUBsCrIBe": actionSsubscribe, + "SSUBsCrIbE": actionSsubscribe, + "SSUBsCrIbe": actionSsubscribe, + "SSUBsCriBE": actionSsubscribe, + "SSUBsCriBe": actionSsubscribe, + "SSUBsCribE": actionSsubscribe, + "SSUBsCribe": actionSsubscribe, + "SSUBscRIBE": actionSsubscribe, + "SSUBscRIBe": actionSsubscribe, + "SSUBscRIbE": actionSsubscribe, + "SSUBscRIbe": actionSsubscribe, + "SSUBscRiBE": actionSsubscribe, + "SSUBscRiBe": actionSsubscribe, + "SSUBscRibE": actionSsubscribe, + "SSUBscRibe": actionSsubscribe, + "SSUBscrIBE": actionSsubscribe, + "SSUBscrIBe": actionSsubscribe, + "SSUBscrIbE": actionSsubscribe, + "SSUBscrIbe": actionSsubscribe, + "SSUBscriBE": actionSsubscribe, + "SSUBscriBe": actionSsubscribe, + "SSUBscribE": actionSsubscribe, + "SSUBscribe": actionSsubscribe, + "SSUbSCRIBE": actionSsubscribe, + "SSUbSCRIBe": actionSsubscribe, + "SSUbSCRIbE": actionSsubscribe, + "SSUbSCRIbe": actionSsubscribe, + "SSUbSCRiBE": actionSsubscribe, + "SSUbSCRiBe": actionSsubscribe, + "SSUbSCRibE": actionSsubscribe, + "SSUbSCRibe": actionSsubscribe, + "SSUbSCrIBE": actionSsubscribe, + "SSUbSCrIBe": actionSsubscribe, + "SSUbSCrIbE": actionSsubscribe, + "SSUbSCrIbe": actionSsubscribe, + "SSUbSCriBE": actionSsubscribe, + "SSUbSCriBe": actionSsubscribe, + "SSUbSCribE": actionSsubscribe, + "SSUbSCribe": actionSsubscribe, + "SSUbScRIBE": actionSsubscribe, + "SSUbScRIBe": actionSsubscribe, + "SSUbScRIbE": actionSsubscribe, + "SSUbScRIbe": actionSsubscribe, + "SSUbScRiBE": actionSsubscribe, + "SSUbScRiBe": actionSsubscribe, + "SSUbScRibE": actionSsubscribe, + "SSUbScRibe": actionSsubscribe, + "SSUbScrIBE": actionSsubscribe, + "SSUbScrIBe": actionSsubscribe, + "SSUbScrIbE": actionSsubscribe, + "SSUbScrIbe": actionSsubscribe, + "SSUbScriBE": actionSsubscribe, + "SSUbScriBe": actionSsubscribe, + "SSUbScribE": actionSsubscribe, + "SSUbScribe": actionSsubscribe, + "SSUbsCRIBE": actionSsubscribe, + "SSUbsCRIBe": actionSsubscribe, + "SSUbsCRIbE": actionSsubscribe, + "SSUbsCRIbe": actionSsubscribe, + "SSUbsCRiBE": actionSsubscribe, + "SSUbsCRiBe": actionSsubscribe, + "SSUbsCRibE": actionSsubscribe, + "SSUbsCRibe": actionSsubscribe, + "SSUbsCrIBE": actionSsubscribe, + "SSUbsCrIBe": actionSsubscribe, + "SSUbsCrIbE": actionSsubscribe, + "SSUbsCrIbe": actionSsubscribe, + "SSUbsCriBE": actionSsubscribe, + "SSUbsCriBe": actionSsubscribe, + "SSUbsCribE": actionSsubscribe, + "SSUbsCribe": actionSsubscribe, + "SSUbscRIBE": actionSsubscribe, + "SSUbscRIBe": actionSsubscribe, + "SSUbscRIbE": actionSsubscribe, + "SSUbscRIbe": actionSsubscribe, + "SSUbscRiBE": actionSsubscribe, + "SSUbscRiBe": actionSsubscribe, + "SSUbscRibE": actionSsubscribe, + "SSUbscRibe": actionSsubscribe, + "SSUbscrIBE": actionSsubscribe, + "SSUbscrIBe": actionSsubscribe, + "SSUbscrIbE": actionSsubscribe, + "SSUbscrIbe": actionSsubscribe, + "SSUbscriBE": actionSsubscribe, + "SSUbscriBe": actionSsubscribe, + "SSUbscribE": actionSsubscribe, + "SSUbscribe": actionSsubscribe, + "SSuBSCRIBE": actionSsubscribe, + "SSuBSCRIBe": actionSsubscribe, + "SSuBSCRIbE": actionSsubscribe, + "SSuBSCRIbe": actionSsubscribe, + "SSuBSCRiBE": actionSsubscribe, + "SSuBSCRiBe": actionSsubscribe, + "SSuBSCRibE": actionSsubscribe, + "SSuBSCRibe": actionSsubscribe, + "SSuBSCrIBE": actionSsubscribe, + "SSuBSCrIBe": actionSsubscribe, + "SSuBSCrIbE": actionSsubscribe, + "SSuBSCrIbe": actionSsubscribe, + "SSuBSCriBE": actionSsubscribe, + "SSuBSCriBe": actionSsubscribe, + "SSuBSCribE": actionSsubscribe, + "SSuBSCribe": actionSsubscribe, + "SSuBScRIBE": actionSsubscribe, + "SSuBScRIBe": actionSsubscribe, + "SSuBScRIbE": actionSsubscribe, + "SSuBScRIbe": actionSsubscribe, + "SSuBScRiBE": actionSsubscribe, + "SSuBScRiBe": actionSsubscribe, + "SSuBScRibE": actionSsubscribe, + "SSuBScRibe": actionSsubscribe, + "SSuBScrIBE": actionSsubscribe, + "SSuBScrIBe": actionSsubscribe, + "SSuBScrIbE": actionSsubscribe, + "SSuBScrIbe": actionSsubscribe, + "SSuBScriBE": actionSsubscribe, + "SSuBScriBe": actionSsubscribe, + "SSuBScribE": actionSsubscribe, + "SSuBScribe": actionSsubscribe, + "SSuBsCRIBE": actionSsubscribe, + "SSuBsCRIBe": actionSsubscribe, + "SSuBsCRIbE": actionSsubscribe, + "SSuBsCRIbe": actionSsubscribe, + "SSuBsCRiBE": actionSsubscribe, + "SSuBsCRiBe": actionSsubscribe, + "SSuBsCRibE": actionSsubscribe, + "SSuBsCRibe": actionSsubscribe, + "SSuBsCrIBE": actionSsubscribe, + "SSuBsCrIBe": actionSsubscribe, + "SSuBsCrIbE": actionSsubscribe, + "SSuBsCrIbe": actionSsubscribe, + "SSuBsCriBE": actionSsubscribe, + "SSuBsCriBe": actionSsubscribe, + "SSuBsCribE": actionSsubscribe, + "SSuBsCribe": actionSsubscribe, + "SSuBscRIBE": actionSsubscribe, + "SSuBscRIBe": actionSsubscribe, + "SSuBscRIbE": actionSsubscribe, + "SSuBscRIbe": actionSsubscribe, + "SSuBscRiBE": actionSsubscribe, + "SSuBscRiBe": actionSsubscribe, + "SSuBscRibE": actionSsubscribe, + "SSuBscRibe": actionSsubscribe, + "SSuBscrIBE": actionSsubscribe, + "SSuBscrIBe": actionSsubscribe, + "SSuBscrIbE": actionSsubscribe, + "SSuBscrIbe": actionSsubscribe, + "SSuBscriBE": actionSsubscribe, + "SSuBscriBe": actionSsubscribe, + "SSuBscribE": actionSsubscribe, + "SSuBscribe": actionSsubscribe, + "SSubSCRIBE": actionSsubscribe, + "SSubSCRIBe": actionSsubscribe, + "SSubSCRIbE": actionSsubscribe, + "SSubSCRIbe": actionSsubscribe, + "SSubSCRiBE": actionSsubscribe, + "SSubSCRiBe": actionSsubscribe, + "SSubSCRibE": actionSsubscribe, + "SSubSCRibe": actionSsubscribe, + "SSubSCrIBE": actionSsubscribe, + "SSubSCrIBe": actionSsubscribe, + "SSubSCrIbE": actionSsubscribe, + "SSubSCrIbe": actionSsubscribe, + "SSubSCriBE": actionSsubscribe, + "SSubSCriBe": actionSsubscribe, + "SSubSCribE": actionSsubscribe, + "SSubSCribe": actionSsubscribe, + "SSubScRIBE": actionSsubscribe, + "SSubScRIBe": actionSsubscribe, + "SSubScRIbE": actionSsubscribe, + "SSubScRIbe": actionSsubscribe, + "SSubScRiBE": actionSsubscribe, + "SSubScRiBe": actionSsubscribe, + "SSubScRibE": actionSsubscribe, + "SSubScRibe": actionSsubscribe, + "SSubScrIBE": actionSsubscribe, + "SSubScrIBe": actionSsubscribe, + "SSubScrIbE": actionSsubscribe, + "SSubScrIbe": actionSsubscribe, + "SSubScriBE": actionSsubscribe, + "SSubScriBe": actionSsubscribe, + "SSubScribE": actionSsubscribe, + "SSubScribe": actionSsubscribe, + "SSubsCRIBE": actionSsubscribe, + "SSubsCRIBe": actionSsubscribe, + "SSubsCRIbE": actionSsubscribe, + "SSubsCRIbe": actionSsubscribe, + "SSubsCRiBE": actionSsubscribe, + "SSubsCRiBe": actionSsubscribe, + "SSubsCRibE": actionSsubscribe, + "SSubsCRibe": actionSsubscribe, + "SSubsCrIBE": actionSsubscribe, + "SSubsCrIBe": actionSsubscribe, + "SSubsCrIbE": actionSsubscribe, + "SSubsCrIbe": actionSsubscribe, + "SSubsCriBE": actionSsubscribe, + "SSubsCriBe": actionSsubscribe, + "SSubsCribE": actionSsubscribe, + "SSubsCribe": actionSsubscribe, + "SSubscRIBE": actionSsubscribe, + "SSubscRIBe": actionSsubscribe, + "SSubscRIbE": actionSsubscribe, + "SSubscRIbe": actionSsubscribe, + "SSubscRiBE": actionSsubscribe, + "SSubscRiBe": actionSsubscribe, + "SSubscRibE": actionSsubscribe, + "SSubscRibe": actionSsubscribe, + "SSubscrIBE": actionSsubscribe, + "SSubscrIBe": actionSsubscribe, + "SSubscrIbE": actionSsubscribe, + "SSubscrIbe": actionSsubscribe, + "SSubscriBE": actionSsubscribe, + "SSubscriBe": actionSsubscribe, + "SSubscribE": actionSsubscribe, + "SSubscribe": actionSsubscribe, + "SsUBSCRIBE": actionSsubscribe, + "SsUBSCRIBe": actionSsubscribe, + "SsUBSCRIbE": actionSsubscribe, + "SsUBSCRIbe": actionSsubscribe, + "SsUBSCRiBE": actionSsubscribe, + "SsUBSCRiBe": actionSsubscribe, + "SsUBSCRibE": actionSsubscribe, + "SsUBSCRibe": actionSsubscribe, + "SsUBSCrIBE": actionSsubscribe, + "SsUBSCrIBe": actionSsubscribe, + "SsUBSCrIbE": actionSsubscribe, + "SsUBSCrIbe": actionSsubscribe, + "SsUBSCriBE": actionSsubscribe, + "SsUBSCriBe": actionSsubscribe, + "SsUBSCribE": actionSsubscribe, + "SsUBSCribe": actionSsubscribe, + "SsUBScRIBE": actionSsubscribe, + "SsUBScRIBe": actionSsubscribe, + "SsUBScRIbE": actionSsubscribe, + "SsUBScRIbe": actionSsubscribe, + "SsUBScRiBE": actionSsubscribe, + "SsUBScRiBe": actionSsubscribe, + "SsUBScRibE": actionSsubscribe, + "SsUBScRibe": actionSsubscribe, + "SsUBScrIBE": actionSsubscribe, + "SsUBScrIBe": actionSsubscribe, + "SsUBScrIbE": actionSsubscribe, + "SsUBScrIbe": actionSsubscribe, + "SsUBScriBE": actionSsubscribe, + "SsUBScriBe": actionSsubscribe, + "SsUBScribE": actionSsubscribe, + "SsUBScribe": actionSsubscribe, + "SsUBsCRIBE": actionSsubscribe, + "SsUBsCRIBe": actionSsubscribe, + "SsUBsCRIbE": actionSsubscribe, + "SsUBsCRIbe": actionSsubscribe, + "SsUBsCRiBE": actionSsubscribe, + "SsUBsCRiBe": actionSsubscribe, + "SsUBsCRibE": actionSsubscribe, + "SsUBsCRibe": actionSsubscribe, + "SsUBsCrIBE": actionSsubscribe, + "SsUBsCrIBe": actionSsubscribe, + "SsUBsCrIbE": actionSsubscribe, + "SsUBsCrIbe": actionSsubscribe, + "SsUBsCriBE": actionSsubscribe, + "SsUBsCriBe": actionSsubscribe, + "SsUBsCribE": actionSsubscribe, + "SsUBsCribe": actionSsubscribe, + "SsUBscRIBE": actionSsubscribe, + "SsUBscRIBe": actionSsubscribe, + "SsUBscRIbE": actionSsubscribe, + "SsUBscRIbe": actionSsubscribe, + "SsUBscRiBE": actionSsubscribe, + "SsUBscRiBe": actionSsubscribe, + "SsUBscRibE": actionSsubscribe, + "SsUBscRibe": actionSsubscribe, + "SsUBscrIBE": actionSsubscribe, + "SsUBscrIBe": actionSsubscribe, + "SsUBscrIbE": actionSsubscribe, + "SsUBscrIbe": actionSsubscribe, + "SsUBscriBE": actionSsubscribe, + "SsUBscriBe": actionSsubscribe, + "SsUBscribE": actionSsubscribe, + "SsUBscribe": actionSsubscribe, + "SsUbSCRIBE": actionSsubscribe, + "SsUbSCRIBe": actionSsubscribe, + "SsUbSCRIbE": actionSsubscribe, + "SsUbSCRIbe": actionSsubscribe, + "SsUbSCRiBE": actionSsubscribe, + "SsUbSCRiBe": actionSsubscribe, + "SsUbSCRibE": actionSsubscribe, + "SsUbSCRibe": actionSsubscribe, + "SsUbSCrIBE": actionSsubscribe, + "SsUbSCrIBe": actionSsubscribe, + "SsUbSCrIbE": actionSsubscribe, + "SsUbSCrIbe": actionSsubscribe, + "SsUbSCriBE": actionSsubscribe, + "SsUbSCriBe": actionSsubscribe, + "SsUbSCribE": actionSsubscribe, + "SsUbSCribe": actionSsubscribe, + "SsUbScRIBE": actionSsubscribe, + "SsUbScRIBe": actionSsubscribe, + "SsUbScRIbE": actionSsubscribe, + "SsUbScRIbe": actionSsubscribe, + "SsUbScRiBE": actionSsubscribe, + "SsUbScRiBe": actionSsubscribe, + "SsUbScRibE": actionSsubscribe, + "SsUbScRibe": actionSsubscribe, + "SsUbScrIBE": actionSsubscribe, + "SsUbScrIBe": actionSsubscribe, + "SsUbScrIbE": actionSsubscribe, + "SsUbScrIbe": actionSsubscribe, + "SsUbScriBE": actionSsubscribe, + "SsUbScriBe": actionSsubscribe, + "SsUbScribE": actionSsubscribe, + "SsUbScribe": actionSsubscribe, + "SsUbsCRIBE": actionSsubscribe, + "SsUbsCRIBe": actionSsubscribe, + "SsUbsCRIbE": actionSsubscribe, + "SsUbsCRIbe": actionSsubscribe, + "SsUbsCRiBE": actionSsubscribe, + "SsUbsCRiBe": actionSsubscribe, + "SsUbsCRibE": actionSsubscribe, + "SsUbsCRibe": actionSsubscribe, + "SsUbsCrIBE": actionSsubscribe, + "SsUbsCrIBe": actionSsubscribe, + "SsUbsCrIbE": actionSsubscribe, + "SsUbsCrIbe": actionSsubscribe, + "SsUbsCriBE": actionSsubscribe, + "SsUbsCriBe": actionSsubscribe, + "SsUbsCribE": actionSsubscribe, + "SsUbsCribe": actionSsubscribe, + "SsUbscRIBE": actionSsubscribe, + "SsUbscRIBe": actionSsubscribe, + "SsUbscRIbE": actionSsubscribe, + "SsUbscRIbe": actionSsubscribe, + "SsUbscRiBE": actionSsubscribe, + "SsUbscRiBe": actionSsubscribe, + "SsUbscRibE": actionSsubscribe, + "SsUbscRibe": actionSsubscribe, + "SsUbscrIBE": actionSsubscribe, + "SsUbscrIBe": actionSsubscribe, + "SsUbscrIbE": actionSsubscribe, + "SsUbscrIbe": actionSsubscribe, + "SsUbscriBE": actionSsubscribe, + "SsUbscriBe": actionSsubscribe, + "SsUbscribE": actionSsubscribe, + "SsUbscribe": actionSsubscribe, + "SsuBSCRIBE": actionSsubscribe, + "SsuBSCRIBe": actionSsubscribe, + "SsuBSCRIbE": actionSsubscribe, + "SsuBSCRIbe": actionSsubscribe, + "SsuBSCRiBE": actionSsubscribe, + "SsuBSCRiBe": actionSsubscribe, + "SsuBSCRibE": actionSsubscribe, + "SsuBSCRibe": actionSsubscribe, + "SsuBSCrIBE": actionSsubscribe, + "SsuBSCrIBe": actionSsubscribe, + "SsuBSCrIbE": actionSsubscribe, + "SsuBSCrIbe": actionSsubscribe, + "SsuBSCriBE": actionSsubscribe, + "SsuBSCriBe": actionSsubscribe, + "SsuBSCribE": actionSsubscribe, + "SsuBSCribe": actionSsubscribe, + "SsuBScRIBE": actionSsubscribe, + "SsuBScRIBe": actionSsubscribe, + "SsuBScRIbE": actionSsubscribe, + "SsuBScRIbe": actionSsubscribe, + "SsuBScRiBE": actionSsubscribe, + "SsuBScRiBe": actionSsubscribe, + "SsuBScRibE": actionSsubscribe, + "SsuBScRibe": actionSsubscribe, + "SsuBScrIBE": actionSsubscribe, + "SsuBScrIBe": actionSsubscribe, + "SsuBScrIbE": actionSsubscribe, + "SsuBScrIbe": actionSsubscribe, + "SsuBScriBE": actionSsubscribe, + "SsuBScriBe": actionSsubscribe, + "SsuBScribE": actionSsubscribe, + "SsuBScribe": actionSsubscribe, + "SsuBsCRIBE": actionSsubscribe, + "SsuBsCRIBe": actionSsubscribe, + "SsuBsCRIbE": actionSsubscribe, + "SsuBsCRIbe": actionSsubscribe, + "SsuBsCRiBE": actionSsubscribe, + "SsuBsCRiBe": actionSsubscribe, + "SsuBsCRibE": actionSsubscribe, + "SsuBsCRibe": actionSsubscribe, + "SsuBsCrIBE": actionSsubscribe, + "SsuBsCrIBe": actionSsubscribe, + "SsuBsCrIbE": actionSsubscribe, + "SsuBsCrIbe": actionSsubscribe, + "SsuBsCriBE": actionSsubscribe, + "SsuBsCriBe": actionSsubscribe, + "SsuBsCribE": actionSsubscribe, + "SsuBsCribe": actionSsubscribe, + "SsuBscRIBE": actionSsubscribe, + "SsuBscRIBe": actionSsubscribe, + "SsuBscRIbE": actionSsubscribe, + "SsuBscRIbe": actionSsubscribe, + "SsuBscRiBE": actionSsubscribe, + "SsuBscRiBe": actionSsubscribe, + "SsuBscRibE": actionSsubscribe, + "SsuBscRibe": actionSsubscribe, + "SsuBscrIBE": actionSsubscribe, + "SsuBscrIBe": actionSsubscribe, + "SsuBscrIbE": actionSsubscribe, + "SsuBscrIbe": actionSsubscribe, + "SsuBscriBE": actionSsubscribe, + "SsuBscriBe": actionSsubscribe, + "SsuBscribE": actionSsubscribe, + "SsuBscribe": actionSsubscribe, + "SsubSCRIBE": actionSsubscribe, + "SsubSCRIBe": actionSsubscribe, + "SsubSCRIbE": actionSsubscribe, + "SsubSCRIbe": actionSsubscribe, + "SsubSCRiBE": actionSsubscribe, + "SsubSCRiBe": actionSsubscribe, + "SsubSCRibE": actionSsubscribe, + "SsubSCRibe": actionSsubscribe, + "SsubSCrIBE": actionSsubscribe, + "SsubSCrIBe": actionSsubscribe, + "SsubSCrIbE": actionSsubscribe, + "SsubSCrIbe": actionSsubscribe, + "SsubSCriBE": actionSsubscribe, + "SsubSCriBe": actionSsubscribe, + "SsubSCribE": actionSsubscribe, + "SsubSCribe": actionSsubscribe, + "SsubScRIBE": actionSsubscribe, + "SsubScRIBe": actionSsubscribe, + "SsubScRIbE": actionSsubscribe, + "SsubScRIbe": actionSsubscribe, + "SsubScRiBE": actionSsubscribe, + "SsubScRiBe": actionSsubscribe, + "SsubScRibE": actionSsubscribe, + "SsubScRibe": actionSsubscribe, + "SsubScrIBE": actionSsubscribe, + "SsubScrIBe": actionSsubscribe, + "SsubScrIbE": actionSsubscribe, + "SsubScrIbe": actionSsubscribe, + "SsubScriBE": actionSsubscribe, + "SsubScriBe": actionSsubscribe, + "SsubScribE": actionSsubscribe, + "SsubScribe": actionSsubscribe, + "SsubsCRIBE": actionSsubscribe, + "SsubsCRIBe": actionSsubscribe, + "SsubsCRIbE": actionSsubscribe, + "SsubsCRIbe": actionSsubscribe, + "SsubsCRiBE": actionSsubscribe, + "SsubsCRiBe": actionSsubscribe, + "SsubsCRibE": actionSsubscribe, + "SsubsCRibe": actionSsubscribe, + "SsubsCrIBE": actionSsubscribe, + "SsubsCrIBe": actionSsubscribe, + "SsubsCrIbE": actionSsubscribe, + "SsubsCrIbe": actionSsubscribe, + "SsubsCriBE": actionSsubscribe, + "SsubsCriBe": actionSsubscribe, + "SsubsCribE": actionSsubscribe, + "SsubsCribe": actionSsubscribe, + "SsubscRIBE": actionSsubscribe, + "SsubscRIBe": actionSsubscribe, + "SsubscRIbE": actionSsubscribe, + "SsubscRIbe": actionSsubscribe, + "SsubscRiBE": actionSsubscribe, + "SsubscRiBe": actionSsubscribe, + "SsubscRibE": actionSsubscribe, + "SsubscRibe": actionSsubscribe, + "SsubscrIBE": actionSsubscribe, + "SsubscrIBe": actionSsubscribe, + "SsubscrIbE": actionSsubscribe, + "SsubscrIbe": actionSsubscribe, + "SsubscriBE": actionSsubscribe, + "SsubscriBe": actionSsubscribe, + "SsubscribE": actionSsubscribe, + "Ssubscribe": actionSsubscribe, + "sSUBSCRIBE": actionSsubscribe, + "sSUBSCRIBe": actionSsubscribe, + "sSUBSCRIbE": actionSsubscribe, + "sSUBSCRIbe": actionSsubscribe, + "sSUBSCRiBE": actionSsubscribe, + "sSUBSCRiBe": actionSsubscribe, + "sSUBSCRibE": actionSsubscribe, + "sSUBSCRibe": actionSsubscribe, + "sSUBSCrIBE": actionSsubscribe, + "sSUBSCrIBe": actionSsubscribe, + "sSUBSCrIbE": actionSsubscribe, + "sSUBSCrIbe": actionSsubscribe, + "sSUBSCriBE": actionSsubscribe, + "sSUBSCriBe": actionSsubscribe, + "sSUBSCribE": actionSsubscribe, + "sSUBSCribe": actionSsubscribe, + "sSUBScRIBE": actionSsubscribe, + "sSUBScRIBe": actionSsubscribe, + "sSUBScRIbE": actionSsubscribe, + "sSUBScRIbe": actionSsubscribe, + "sSUBScRiBE": actionSsubscribe, + "sSUBScRiBe": actionSsubscribe, + "sSUBScRibE": actionSsubscribe, + "sSUBScRibe": actionSsubscribe, + "sSUBScrIBE": actionSsubscribe, + "sSUBScrIBe": actionSsubscribe, + "sSUBScrIbE": actionSsubscribe, + "sSUBScrIbe": actionSsubscribe, + "sSUBScriBE": actionSsubscribe, + "sSUBScriBe": actionSsubscribe, + "sSUBScribE": actionSsubscribe, + "sSUBScribe": actionSsubscribe, + "sSUBsCRIBE": actionSsubscribe, + "sSUBsCRIBe": actionSsubscribe, + "sSUBsCRIbE": actionSsubscribe, + "sSUBsCRIbe": actionSsubscribe, + "sSUBsCRiBE": actionSsubscribe, + "sSUBsCRiBe": actionSsubscribe, + "sSUBsCRibE": actionSsubscribe, + "sSUBsCRibe": actionSsubscribe, + "sSUBsCrIBE": actionSsubscribe, + "sSUBsCrIBe": actionSsubscribe, + "sSUBsCrIbE": actionSsubscribe, + "sSUBsCrIbe": actionSsubscribe, + "sSUBsCriBE": actionSsubscribe, + "sSUBsCriBe": actionSsubscribe, + "sSUBsCribE": actionSsubscribe, + "sSUBsCribe": actionSsubscribe, + "sSUBscRIBE": actionSsubscribe, + "sSUBscRIBe": actionSsubscribe, + "sSUBscRIbE": actionSsubscribe, + "sSUBscRIbe": actionSsubscribe, + "sSUBscRiBE": actionSsubscribe, + "sSUBscRiBe": actionSsubscribe, + "sSUBscRibE": actionSsubscribe, + "sSUBscRibe": actionSsubscribe, + "sSUBscrIBE": actionSsubscribe, + "sSUBscrIBe": actionSsubscribe, + "sSUBscrIbE": actionSsubscribe, + "sSUBscrIbe": actionSsubscribe, + "sSUBscriBE": actionSsubscribe, + "sSUBscriBe": actionSsubscribe, + "sSUBscribE": actionSsubscribe, + "sSUBscribe": actionSsubscribe, + "sSUbSCRIBE": actionSsubscribe, + "sSUbSCRIBe": actionSsubscribe, + "sSUbSCRIbE": actionSsubscribe, + "sSUbSCRIbe": actionSsubscribe, + "sSUbSCRiBE": actionSsubscribe, + "sSUbSCRiBe": actionSsubscribe, + "sSUbSCRibE": actionSsubscribe, + "sSUbSCRibe": actionSsubscribe, + "sSUbSCrIBE": actionSsubscribe, + "sSUbSCrIBe": actionSsubscribe, + "sSUbSCrIbE": actionSsubscribe, + "sSUbSCrIbe": actionSsubscribe, + "sSUbSCriBE": actionSsubscribe, + "sSUbSCriBe": actionSsubscribe, + "sSUbSCribE": actionSsubscribe, + "sSUbSCribe": actionSsubscribe, + "sSUbScRIBE": actionSsubscribe, + "sSUbScRIBe": actionSsubscribe, + "sSUbScRIbE": actionSsubscribe, + "sSUbScRIbe": actionSsubscribe, + "sSUbScRiBE": actionSsubscribe, + "sSUbScRiBe": actionSsubscribe, + "sSUbScRibE": actionSsubscribe, + "sSUbScRibe": actionSsubscribe, + "sSUbScrIBE": actionSsubscribe, + "sSUbScrIBe": actionSsubscribe, + "sSUbScrIbE": actionSsubscribe, + "sSUbScrIbe": actionSsubscribe, + "sSUbScriBE": actionSsubscribe, + "sSUbScriBe": actionSsubscribe, + "sSUbScribE": actionSsubscribe, + "sSUbScribe": actionSsubscribe, + "sSUbsCRIBE": actionSsubscribe, + "sSUbsCRIBe": actionSsubscribe, + "sSUbsCRIbE": actionSsubscribe, + "sSUbsCRIbe": actionSsubscribe, + "sSUbsCRiBE": actionSsubscribe, + "sSUbsCRiBe": actionSsubscribe, + "sSUbsCRibE": actionSsubscribe, + "sSUbsCRibe": actionSsubscribe, + "sSUbsCrIBE": actionSsubscribe, + "sSUbsCrIBe": actionSsubscribe, + "sSUbsCrIbE": actionSsubscribe, + "sSUbsCrIbe": actionSsubscribe, + "sSUbsCriBE": actionSsubscribe, + "sSUbsCriBe": actionSsubscribe, + "sSUbsCribE": actionSsubscribe, + "sSUbsCribe": actionSsubscribe, + "sSUbscRIBE": actionSsubscribe, + "sSUbscRIBe": actionSsubscribe, + "sSUbscRIbE": actionSsubscribe, + "sSUbscRIbe": actionSsubscribe, + "sSUbscRiBE": actionSsubscribe, + "sSUbscRiBe": actionSsubscribe, + "sSUbscRibE": actionSsubscribe, + "sSUbscRibe": actionSsubscribe, + "sSUbscrIBE": actionSsubscribe, + "sSUbscrIBe": actionSsubscribe, + "sSUbscrIbE": actionSsubscribe, + "sSUbscrIbe": actionSsubscribe, + "sSUbscriBE": actionSsubscribe, + "sSUbscriBe": actionSsubscribe, + "sSUbscribE": actionSsubscribe, + "sSUbscribe": actionSsubscribe, + "sSuBSCRIBE": actionSsubscribe, + "sSuBSCRIBe": actionSsubscribe, + "sSuBSCRIbE": actionSsubscribe, + "sSuBSCRIbe": actionSsubscribe, + "sSuBSCRiBE": actionSsubscribe, + "sSuBSCRiBe": actionSsubscribe, + "sSuBSCRibE": actionSsubscribe, + "sSuBSCRibe": actionSsubscribe, + "sSuBSCrIBE": actionSsubscribe, + "sSuBSCrIBe": actionSsubscribe, + "sSuBSCrIbE": actionSsubscribe, + "sSuBSCrIbe": actionSsubscribe, + "sSuBSCriBE": actionSsubscribe, + "sSuBSCriBe": actionSsubscribe, + "sSuBSCribE": actionSsubscribe, + "sSuBSCribe": actionSsubscribe, + "sSuBScRIBE": actionSsubscribe, + "sSuBScRIBe": actionSsubscribe, + "sSuBScRIbE": actionSsubscribe, + "sSuBScRIbe": actionSsubscribe, + "sSuBScRiBE": actionSsubscribe, + "sSuBScRiBe": actionSsubscribe, + "sSuBScRibE": actionSsubscribe, + "sSuBScRibe": actionSsubscribe, + "sSuBScrIBE": actionSsubscribe, + "sSuBScrIBe": actionSsubscribe, + "sSuBScrIbE": actionSsubscribe, + "sSuBScrIbe": actionSsubscribe, + "sSuBScriBE": actionSsubscribe, + "sSuBScriBe": actionSsubscribe, + "sSuBScribE": actionSsubscribe, + "sSuBScribe": actionSsubscribe, + "sSuBsCRIBE": actionSsubscribe, + "sSuBsCRIBe": actionSsubscribe, + "sSuBsCRIbE": actionSsubscribe, + "sSuBsCRIbe": actionSsubscribe, + "sSuBsCRiBE": actionSsubscribe, + "sSuBsCRiBe": actionSsubscribe, + "sSuBsCRibE": actionSsubscribe, + "sSuBsCRibe": actionSsubscribe, + "sSuBsCrIBE": actionSsubscribe, + "sSuBsCrIBe": actionSsubscribe, + "sSuBsCrIbE": actionSsubscribe, + "sSuBsCrIbe": actionSsubscribe, + "sSuBsCriBE": actionSsubscribe, + "sSuBsCriBe": actionSsubscribe, + "sSuBsCribE": actionSsubscribe, + "sSuBsCribe": actionSsubscribe, + "sSuBscRIBE": actionSsubscribe, + "sSuBscRIBe": actionSsubscribe, + "sSuBscRIbE": actionSsubscribe, + "sSuBscRIbe": actionSsubscribe, + "sSuBscRiBE": actionSsubscribe, + "sSuBscRiBe": actionSsubscribe, + "sSuBscRibE": actionSsubscribe, + "sSuBscRibe": actionSsubscribe, + "sSuBscrIBE": actionSsubscribe, + "sSuBscrIBe": actionSsubscribe, + "sSuBscrIbE": actionSsubscribe, + "sSuBscrIbe": actionSsubscribe, + "sSuBscriBE": actionSsubscribe, + "sSuBscriBe": actionSsubscribe, + "sSuBscribE": actionSsubscribe, + "sSuBscribe": actionSsubscribe, + "sSubSCRIBE": actionSsubscribe, + "sSubSCRIBe": actionSsubscribe, + "sSubSCRIbE": actionSsubscribe, + "sSubSCRIbe": actionSsubscribe, + "sSubSCRiBE": actionSsubscribe, + "sSubSCRiBe": actionSsubscribe, + "sSubSCRibE": actionSsubscribe, + "sSubSCRibe": actionSsubscribe, + "sSubSCrIBE": actionSsubscribe, + "sSubSCrIBe": actionSsubscribe, + "sSubSCrIbE": actionSsubscribe, + "sSubSCrIbe": actionSsubscribe, + "sSubSCriBE": actionSsubscribe, + "sSubSCriBe": actionSsubscribe, + "sSubSCribE": actionSsubscribe, + "sSubSCribe": actionSsubscribe, + "sSubScRIBE": actionSsubscribe, + "sSubScRIBe": actionSsubscribe, + "sSubScRIbE": actionSsubscribe, + "sSubScRIbe": actionSsubscribe, + "sSubScRiBE": actionSsubscribe, + "sSubScRiBe": actionSsubscribe, + "sSubScRibE": actionSsubscribe, + "sSubScRibe": actionSsubscribe, + "sSubScrIBE": actionSsubscribe, + "sSubScrIBe": actionSsubscribe, + "sSubScrIbE": actionSsubscribe, + "sSubScrIbe": actionSsubscribe, + "sSubScriBE": actionSsubscribe, + "sSubScriBe": actionSsubscribe, + "sSubScribE": actionSsubscribe, + "sSubScribe": actionSsubscribe, + "sSubsCRIBE": actionSsubscribe, + "sSubsCRIBe": actionSsubscribe, + "sSubsCRIbE": actionSsubscribe, + "sSubsCRIbe": actionSsubscribe, + "sSubsCRiBE": actionSsubscribe, + "sSubsCRiBe": actionSsubscribe, + "sSubsCRibE": actionSsubscribe, + "sSubsCRibe": actionSsubscribe, + "sSubsCrIBE": actionSsubscribe, + "sSubsCrIBe": actionSsubscribe, + "sSubsCrIbE": actionSsubscribe, + "sSubsCrIbe": actionSsubscribe, + "sSubsCriBE": actionSsubscribe, + "sSubsCriBe": actionSsubscribe, + "sSubsCribE": actionSsubscribe, + "sSubsCribe": actionSsubscribe, + "sSubscRIBE": actionSsubscribe, + "sSubscRIBe": actionSsubscribe, + "sSubscRIbE": actionSsubscribe, + "sSubscRIbe": actionSsubscribe, + "sSubscRiBE": actionSsubscribe, + "sSubscRiBe": actionSsubscribe, + "sSubscRibE": actionSsubscribe, + "sSubscRibe": actionSsubscribe, + "sSubscrIBE": actionSsubscribe, + "sSubscrIBe": actionSsubscribe, + "sSubscrIbE": actionSsubscribe, + "sSubscrIbe": actionSsubscribe, + "sSubscriBE": actionSsubscribe, + "sSubscriBe": actionSsubscribe, + "sSubscribE": actionSsubscribe, + "sSubscribe": actionSsubscribe, + "ssUBSCRIBE": actionSsubscribe, + "ssUBSCRIBe": actionSsubscribe, + "ssUBSCRIbE": actionSsubscribe, + "ssUBSCRIbe": actionSsubscribe, + "ssUBSCRiBE": actionSsubscribe, + "ssUBSCRiBe": actionSsubscribe, + "ssUBSCRibE": actionSsubscribe, + "ssUBSCRibe": actionSsubscribe, + "ssUBSCrIBE": actionSsubscribe, + "ssUBSCrIBe": actionSsubscribe, + "ssUBSCrIbE": actionSsubscribe, + "ssUBSCrIbe": actionSsubscribe, + "ssUBSCriBE": actionSsubscribe, + "ssUBSCriBe": actionSsubscribe, + "ssUBSCribE": actionSsubscribe, + "ssUBSCribe": actionSsubscribe, + "ssUBScRIBE": actionSsubscribe, + "ssUBScRIBe": actionSsubscribe, + "ssUBScRIbE": actionSsubscribe, + "ssUBScRIbe": actionSsubscribe, + "ssUBScRiBE": actionSsubscribe, + "ssUBScRiBe": actionSsubscribe, + "ssUBScRibE": actionSsubscribe, + "ssUBScRibe": actionSsubscribe, + "ssUBScrIBE": actionSsubscribe, + "ssUBScrIBe": actionSsubscribe, + "ssUBScrIbE": actionSsubscribe, + "ssUBScrIbe": actionSsubscribe, + "ssUBScriBE": actionSsubscribe, + "ssUBScriBe": actionSsubscribe, + "ssUBScribE": actionSsubscribe, + "ssUBScribe": actionSsubscribe, + "ssUBsCRIBE": actionSsubscribe, + "ssUBsCRIBe": actionSsubscribe, + "ssUBsCRIbE": actionSsubscribe, + "ssUBsCRIbe": actionSsubscribe, + "ssUBsCRiBE": actionSsubscribe, + "ssUBsCRiBe": actionSsubscribe, + "ssUBsCRibE": actionSsubscribe, + "ssUBsCRibe": actionSsubscribe, + "ssUBsCrIBE": actionSsubscribe, + "ssUBsCrIBe": actionSsubscribe, + "ssUBsCrIbE": actionSsubscribe, + "ssUBsCrIbe": actionSsubscribe, + "ssUBsCriBE": actionSsubscribe, + "ssUBsCriBe": actionSsubscribe, + "ssUBsCribE": actionSsubscribe, + "ssUBsCribe": actionSsubscribe, + "ssUBscRIBE": actionSsubscribe, + "ssUBscRIBe": actionSsubscribe, + "ssUBscRIbE": actionSsubscribe, + "ssUBscRIbe": actionSsubscribe, + "ssUBscRiBE": actionSsubscribe, + "ssUBscRiBe": actionSsubscribe, + "ssUBscRibE": actionSsubscribe, + "ssUBscRibe": actionSsubscribe, + "ssUBscrIBE": actionSsubscribe, + "ssUBscrIBe": actionSsubscribe, + "ssUBscrIbE": actionSsubscribe, + "ssUBscrIbe": actionSsubscribe, + "ssUBscriBE": actionSsubscribe, + "ssUBscriBe": actionSsubscribe, + "ssUBscribE": actionSsubscribe, + "ssUBscribe": actionSsubscribe, + "ssUbSCRIBE": actionSsubscribe, + "ssUbSCRIBe": actionSsubscribe, + "ssUbSCRIbE": actionSsubscribe, + "ssUbSCRIbe": actionSsubscribe, + "ssUbSCRiBE": actionSsubscribe, + "ssUbSCRiBe": actionSsubscribe, + "ssUbSCRibE": actionSsubscribe, + "ssUbSCRibe": actionSsubscribe, + "ssUbSCrIBE": actionSsubscribe, + "ssUbSCrIBe": actionSsubscribe, + "ssUbSCrIbE": actionSsubscribe, + "ssUbSCrIbe": actionSsubscribe, + "ssUbSCriBE": actionSsubscribe, + "ssUbSCriBe": actionSsubscribe, + "ssUbSCribE": actionSsubscribe, + "ssUbSCribe": actionSsubscribe, + "ssUbScRIBE": actionSsubscribe, + "ssUbScRIBe": actionSsubscribe, + "ssUbScRIbE": actionSsubscribe, + "ssUbScRIbe": actionSsubscribe, + "ssUbScRiBE": actionSsubscribe, + "ssUbScRiBe": actionSsubscribe, + "ssUbScRibE": actionSsubscribe, + "ssUbScRibe": actionSsubscribe, + "ssUbScrIBE": actionSsubscribe, + "ssUbScrIBe": actionSsubscribe, + "ssUbScrIbE": actionSsubscribe, + "ssUbScrIbe": actionSsubscribe, + "ssUbScriBE": actionSsubscribe, + "ssUbScriBe": actionSsubscribe, + "ssUbScribE": actionSsubscribe, + "ssUbScribe": actionSsubscribe, + "ssUbsCRIBE": actionSsubscribe, + "ssUbsCRIBe": actionSsubscribe, + "ssUbsCRIbE": actionSsubscribe, + "ssUbsCRIbe": actionSsubscribe, + "ssUbsCRiBE": actionSsubscribe, + "ssUbsCRiBe": actionSsubscribe, + "ssUbsCRibE": actionSsubscribe, + "ssUbsCRibe": actionSsubscribe, + "ssUbsCrIBE": actionSsubscribe, + "ssUbsCrIBe": actionSsubscribe, + "ssUbsCrIbE": actionSsubscribe, + "ssUbsCrIbe": actionSsubscribe, + "ssUbsCriBE": actionSsubscribe, + "ssUbsCriBe": actionSsubscribe, + "ssUbsCribE": actionSsubscribe, + "ssUbsCribe": actionSsubscribe, + "ssUbscRIBE": actionSsubscribe, + "ssUbscRIBe": actionSsubscribe, + "ssUbscRIbE": actionSsubscribe, + "ssUbscRIbe": actionSsubscribe, + "ssUbscRiBE": actionSsubscribe, + "ssUbscRiBe": actionSsubscribe, + "ssUbscRibE": actionSsubscribe, + "ssUbscRibe": actionSsubscribe, + "ssUbscrIBE": actionSsubscribe, + "ssUbscrIBe": actionSsubscribe, + "ssUbscrIbE": actionSsubscribe, + "ssUbscrIbe": actionSsubscribe, + "ssUbscriBE": actionSsubscribe, + "ssUbscriBe": actionSsubscribe, + "ssUbscribE": actionSsubscribe, + "ssUbscribe": actionSsubscribe, + "ssuBSCRIBE": actionSsubscribe, + "ssuBSCRIBe": actionSsubscribe, + "ssuBSCRIbE": actionSsubscribe, + "ssuBSCRIbe": actionSsubscribe, + "ssuBSCRiBE": actionSsubscribe, + "ssuBSCRiBe": actionSsubscribe, + "ssuBSCRibE": actionSsubscribe, + "ssuBSCRibe": actionSsubscribe, + "ssuBSCrIBE": actionSsubscribe, + "ssuBSCrIBe": actionSsubscribe, + "ssuBSCrIbE": actionSsubscribe, + "ssuBSCrIbe": actionSsubscribe, + "ssuBSCriBE": actionSsubscribe, + "ssuBSCriBe": actionSsubscribe, + "ssuBSCribE": actionSsubscribe, + "ssuBSCribe": actionSsubscribe, + "ssuBScRIBE": actionSsubscribe, + "ssuBScRIBe": actionSsubscribe, + "ssuBScRIbE": actionSsubscribe, + "ssuBScRIbe": actionSsubscribe, + "ssuBScRiBE": actionSsubscribe, + "ssuBScRiBe": actionSsubscribe, + "ssuBScRibE": actionSsubscribe, + "ssuBScRibe": actionSsubscribe, + "ssuBScrIBE": actionSsubscribe, + "ssuBScrIBe": actionSsubscribe, + "ssuBScrIbE": actionSsubscribe, + "ssuBScrIbe": actionSsubscribe, + "ssuBScriBE": actionSsubscribe, + "ssuBScriBe": actionSsubscribe, + "ssuBScribE": actionSsubscribe, + "ssuBScribe": actionSsubscribe, + "ssuBsCRIBE": actionSsubscribe, + "ssuBsCRIBe": actionSsubscribe, + "ssuBsCRIbE": actionSsubscribe, + "ssuBsCRIbe": actionSsubscribe, + "ssuBsCRiBE": actionSsubscribe, + "ssuBsCRiBe": actionSsubscribe, + "ssuBsCRibE": actionSsubscribe, + "ssuBsCRibe": actionSsubscribe, + "ssuBsCrIBE": actionSsubscribe, + "ssuBsCrIBe": actionSsubscribe, + "ssuBsCrIbE": actionSsubscribe, + "ssuBsCrIbe": actionSsubscribe, + "ssuBsCriBE": actionSsubscribe, + "ssuBsCriBe": actionSsubscribe, + "ssuBsCribE": actionSsubscribe, + "ssuBsCribe": actionSsubscribe, + "ssuBscRIBE": actionSsubscribe, + "ssuBscRIBe": actionSsubscribe, + "ssuBscRIbE": actionSsubscribe, + "ssuBscRIbe": actionSsubscribe, + "ssuBscRiBE": actionSsubscribe, + "ssuBscRiBe": actionSsubscribe, + "ssuBscRibE": actionSsubscribe, + "ssuBscRibe": actionSsubscribe, + "ssuBscrIBE": actionSsubscribe, + "ssuBscrIBe": actionSsubscribe, + "ssuBscrIbE": actionSsubscribe, + "ssuBscrIbe": actionSsubscribe, + "ssuBscriBE": actionSsubscribe, + "ssuBscriBe": actionSsubscribe, + "ssuBscribE": actionSsubscribe, + "ssuBscribe": actionSsubscribe, + "ssubSCRIBE": actionSsubscribe, + "ssubSCRIBe": actionSsubscribe, + "ssubSCRIbE": actionSsubscribe, + "ssubSCRIbe": actionSsubscribe, + "ssubSCRiBE": actionSsubscribe, + "ssubSCRiBe": actionSsubscribe, + "ssubSCRibE": actionSsubscribe, + "ssubSCRibe": actionSsubscribe, + "ssubSCrIBE": actionSsubscribe, + "ssubSCrIBe": actionSsubscribe, + "ssubSCrIbE": actionSsubscribe, + "ssubSCrIbe": actionSsubscribe, + "ssubSCriBE": actionSsubscribe, + "ssubSCriBe": actionSsubscribe, + "ssubSCribE": actionSsubscribe, + "ssubSCribe": actionSsubscribe, + "ssubScRIBE": actionSsubscribe, + "ssubScRIBe": actionSsubscribe, + "ssubScRIbE": actionSsubscribe, + "ssubScRIbe": actionSsubscribe, + "ssubScRiBE": actionSsubscribe, + "ssubScRiBe": actionSsubscribe, + "ssubScRibE": actionSsubscribe, + "ssubScRibe": actionSsubscribe, + "ssubScrIBE": actionSsubscribe, + "ssubScrIBe": actionSsubscribe, + "ssubScrIbE": actionSsubscribe, + "ssubScrIbe": actionSsubscribe, + "ssubScriBE": actionSsubscribe, + "ssubScriBe": actionSsubscribe, + "ssubScribE": actionSsubscribe, + "ssubScribe": actionSsubscribe, + "ssubsCRIBE": actionSsubscribe, + "ssubsCRIBe": actionSsubscribe, + "ssubsCRIbE": actionSsubscribe, + "ssubsCRIbe": actionSsubscribe, + "ssubsCRiBE": actionSsubscribe, + "ssubsCRiBe": actionSsubscribe, + "ssubsCRibE": actionSsubscribe, + "ssubsCRibe": actionSsubscribe, + "ssubsCrIBE": actionSsubscribe, + "ssubsCrIBe": actionSsubscribe, + "ssubsCrIbE": actionSsubscribe, + "ssubsCrIbe": actionSsubscribe, + "ssubsCriBE": actionSsubscribe, + "ssubsCriBe": actionSsubscribe, + "ssubsCribE": actionSsubscribe, + "ssubsCribe": actionSsubscribe, + "ssubscRIBE": actionSsubscribe, + "ssubscRIBe": actionSsubscribe, + "ssubscRIbE": actionSsubscribe, + "ssubscRIbe": actionSsubscribe, + "ssubscRiBE": actionSsubscribe, + "ssubscRiBe": actionSsubscribe, + "ssubscRibE": actionSsubscribe, + "ssubscRibe": actionSsubscribe, + "ssubscrIBE": actionSsubscribe, + "ssubscrIBe": actionSsubscribe, + "ssubscrIbE": actionSsubscribe, + "ssubscrIbe": actionSsubscribe, + "ssubscriBE": actionSsubscribe, + "ssubscriBe": actionSsubscribe, + "ssubscribE": actionSsubscribe, + "ssubscribe": actionSsubscribe, "SUBSCRIBE": actionSubscribe, "SUBSCRIBe": actionSubscribe, "SUBSCRIbE": actionSubscribe, @@ -2001,198 +3667,966 @@ var ( "subscriBe": actionSubscribe, "subscribE": actionSubscribe, "subscribe": actionSubscribe, - "MONITOR": actionMonitor, - "MONITOr": actionMonitor, - "MONIToR": actionMonitor, - "MONITor": actionMonitor, - "MONItOR": actionMonitor, - "MONItOr": actionMonitor, - "MONItoR": actionMonitor, - "MONItor": actionMonitor, - "MONiTOR": actionMonitor, - "MONiTOr": actionMonitor, - "MONiToR": actionMonitor, - "MONiTor": actionMonitor, - "MONitOR": actionMonitor, - "MONitOr": actionMonitor, - "MONitoR": actionMonitor, - "MONitor": actionMonitor, - "MOnITOR": actionMonitor, - "MOnITOr": actionMonitor, - "MOnIToR": actionMonitor, - "MOnITor": actionMonitor, - "MOnItOR": actionMonitor, - "MOnItOr": actionMonitor, - "MOnItoR": actionMonitor, - "MOnItor": actionMonitor, - "MOniTOR": actionMonitor, - "MOniTOr": actionMonitor, - "MOniToR": actionMonitor, - "MOniTor": actionMonitor, - "MOnitOR": actionMonitor, - "MOnitOr": actionMonitor, - "MOnitoR": actionMonitor, - "MOnitor": actionMonitor, - "MoNITOR": actionMonitor, - "MoNITOr": actionMonitor, - "MoNIToR": actionMonitor, - "MoNITor": actionMonitor, - "MoNItOR": actionMonitor, - "MoNItOr": actionMonitor, - "MoNItoR": actionMonitor, - "MoNItor": actionMonitor, - "MoNiTOR": actionMonitor, - "MoNiTOr": actionMonitor, - "MoNiToR": actionMonitor, - "MoNiTor": actionMonitor, - "MoNitOR": actionMonitor, - "MoNitOr": actionMonitor, - "MoNitoR": actionMonitor, - "MoNitor": actionMonitor, - "MonITOR": actionMonitor, - "MonITOr": actionMonitor, - "MonIToR": actionMonitor, - "MonITor": actionMonitor, - "MonItOR": actionMonitor, - "MonItOr": actionMonitor, - "MonItoR": actionMonitor, - "MonItor": actionMonitor, - "MoniTOR": actionMonitor, - "MoniTOr": actionMonitor, - "MoniToR": actionMonitor, - "MoniTor": actionMonitor, - "MonitOR": actionMonitor, - "MonitOr": actionMonitor, - "MonitoR": actionMonitor, - "Monitor": actionMonitor, - "mONITOR": actionMonitor, - "mONITOr": actionMonitor, - "mONIToR": actionMonitor, - "mONITor": actionMonitor, - "mONItOR": actionMonitor, - "mONItOr": actionMonitor, - "mONItoR": actionMonitor, - "mONItor": actionMonitor, - "mONiTOR": actionMonitor, - "mONiTOr": actionMonitor, - "mONiToR": actionMonitor, - "mONiTor": actionMonitor, - "mONitOR": actionMonitor, - "mONitOr": actionMonitor, - "mONitoR": actionMonitor, - "mONitor": actionMonitor, - "mOnITOR": actionMonitor, - "mOnITOr": actionMonitor, - "mOnIToR": actionMonitor, - "mOnITor": actionMonitor, - "mOnItOR": actionMonitor, - "mOnItOr": actionMonitor, - "mOnItoR": actionMonitor, - "mOnItor": actionMonitor, - "mOniTOR": actionMonitor, - "mOniTOr": actionMonitor, - "mOniToR": actionMonitor, - "mOniTor": actionMonitor, - "mOnitOR": actionMonitor, - "mOnitOr": actionMonitor, - "mOnitoR": actionMonitor, - "mOnitor": actionMonitor, - "moNITOR": actionMonitor, - "moNITOr": actionMonitor, - "moNIToR": actionMonitor, - "moNITor": actionMonitor, - "moNItOR": actionMonitor, - "moNItOr": actionMonitor, - "moNItoR": actionMonitor, - "moNItor": actionMonitor, - "moNiTOR": actionMonitor, - "moNiTOr": actionMonitor, - "moNiToR": actionMonitor, - "moNiTor": actionMonitor, - "moNitOR": actionMonitor, - "moNitOr": actionMonitor, - "moNitoR": actionMonitor, - "moNitor": actionMonitor, - "monITOR": actionMonitor, - "monITOr": actionMonitor, - "monIToR": actionMonitor, - "monITor": actionMonitor, - "monItOR": actionMonitor, - "monItOr": actionMonitor, - "monItoR": actionMonitor, - "monItor": actionMonitor, - "moniTOR": actionMonitor, - "moniTOr": actionMonitor, - "moniToR": actionMonitor, - "moniTor": actionMonitor, - "monitOR": actionMonitor, - "monitOr": actionMonitor, - "monitoR": actionMonitor, - "monitor": actionMonitor, - "CLIENT": actionClient, - "CLIENt": actionClient, - "CLIEnT": actionClient, - "CLIEnt": actionClient, - "CLIeNT": actionClient, - "CLIeNt": actionClient, - "CLIenT": actionClient, - "CLIent": actionClient, - "CLiENT": actionClient, - "CLiENt": actionClient, - "CLiEnT": actionClient, - "CLiEnt": actionClient, - "CLieNT": actionClient, - "CLieNt": actionClient, - "CLienT": actionClient, - "CLient": actionClient, - "ClIENT": actionClient, - "ClIENt": actionClient, - "ClIEnT": actionClient, - "ClIEnt": actionClient, - "ClIeNT": actionClient, - "ClIeNt": actionClient, - "ClIenT": actionClient, - "ClIent": actionClient, - "CliENT": actionClient, - "CliENt": actionClient, - "CliEnT": actionClient, - "CliEnt": actionClient, - "ClieNT": actionClient, - "ClieNt": actionClient, - "ClienT": actionClient, - "Client": actionClient, - "cLIENT": actionClient, - "cLIENt": actionClient, - "cLIEnT": actionClient, - "cLIEnt": actionClient, - "cLIeNT": actionClient, - "cLIeNt": actionClient, - "cLIenT": actionClient, - "cLIent": actionClient, - "cLiENT": actionClient, - "cLiENt": actionClient, - "cLiEnT": actionClient, - "cLiEnt": actionClient, - "cLieNT": actionClient, - "cLieNt": actionClient, - "cLienT": actionClient, - "cLient": actionClient, - "clIENT": actionClient, - "clIENt": actionClient, - "clIEnT": actionClient, - "clIEnt": actionClient, - "clIeNT": actionClient, - "clIeNt": actionClient, - "clIenT": actionClient, - "clIent": actionClient, - "cliENT": actionClient, - "cliENt": actionClient, - "cliEnT": actionClient, - "cliEnt": actionClient, - "clieNT": actionClient, - "clieNt": actionClient, - "clienT": actionClient, - "client": actionClient, + "UNWATCH": actionUnwatch, + "UNWATCh": actionUnwatch, + "UNWATcH": actionUnwatch, + "UNWATch": actionUnwatch, + "UNWAtCH": actionUnwatch, + "UNWAtCh": actionUnwatch, + "UNWAtcH": actionUnwatch, + "UNWAtch": actionUnwatch, + "UNWaTCH": actionUnwatch, + "UNWaTCh": actionUnwatch, + "UNWaTcH": actionUnwatch, + "UNWaTch": actionUnwatch, + "UNWatCH": actionUnwatch, + "UNWatCh": actionUnwatch, + "UNWatcH": actionUnwatch, + "UNWatch": actionUnwatch, + "UNwATCH": actionUnwatch, + "UNwATCh": actionUnwatch, + "UNwATcH": actionUnwatch, + "UNwATch": actionUnwatch, + "UNwAtCH": actionUnwatch, + "UNwAtCh": actionUnwatch, + "UNwAtcH": actionUnwatch, + "UNwAtch": actionUnwatch, + "UNwaTCH": actionUnwatch, + "UNwaTCh": actionUnwatch, + "UNwaTcH": actionUnwatch, + "UNwaTch": actionUnwatch, + "UNwatCH": actionUnwatch, + "UNwatCh": actionUnwatch, + "UNwatcH": actionUnwatch, + "UNwatch": actionUnwatch, + "UnWATCH": actionUnwatch, + "UnWATCh": actionUnwatch, + "UnWATcH": actionUnwatch, + "UnWATch": actionUnwatch, + "UnWAtCH": actionUnwatch, + "UnWAtCh": actionUnwatch, + "UnWAtcH": actionUnwatch, + "UnWAtch": actionUnwatch, + "UnWaTCH": actionUnwatch, + "UnWaTCh": actionUnwatch, + "UnWaTcH": actionUnwatch, + "UnWaTch": actionUnwatch, + "UnWatCH": actionUnwatch, + "UnWatCh": actionUnwatch, + "UnWatcH": actionUnwatch, + "UnWatch": actionUnwatch, + "UnwATCH": actionUnwatch, + "UnwATCh": actionUnwatch, + "UnwATcH": actionUnwatch, + "UnwATch": actionUnwatch, + "UnwAtCH": actionUnwatch, + "UnwAtCh": actionUnwatch, + "UnwAtcH": actionUnwatch, + "UnwAtch": actionUnwatch, + "UnwaTCH": actionUnwatch, + "UnwaTCh": actionUnwatch, + "UnwaTcH": actionUnwatch, + "UnwaTch": actionUnwatch, + "UnwatCH": actionUnwatch, + "UnwatCh": actionUnwatch, + "UnwatcH": actionUnwatch, + "Unwatch": actionUnwatch, + "uNWATCH": actionUnwatch, + "uNWATCh": actionUnwatch, + "uNWATcH": actionUnwatch, + "uNWATch": actionUnwatch, + "uNWAtCH": actionUnwatch, + "uNWAtCh": actionUnwatch, + "uNWAtcH": actionUnwatch, + "uNWAtch": actionUnwatch, + "uNWaTCH": actionUnwatch, + "uNWaTCh": actionUnwatch, + "uNWaTcH": actionUnwatch, + "uNWaTch": actionUnwatch, + "uNWatCH": actionUnwatch, + "uNWatCh": actionUnwatch, + "uNWatcH": actionUnwatch, + "uNWatch": actionUnwatch, + "uNwATCH": actionUnwatch, + "uNwATCh": actionUnwatch, + "uNwATcH": actionUnwatch, + "uNwATch": actionUnwatch, + "uNwAtCH": actionUnwatch, + "uNwAtCh": actionUnwatch, + "uNwAtcH": actionUnwatch, + "uNwAtch": actionUnwatch, + "uNwaTCH": actionUnwatch, + "uNwaTCh": actionUnwatch, + "uNwaTcH": actionUnwatch, + "uNwaTch": actionUnwatch, + "uNwatCH": actionUnwatch, + "uNwatCh": actionUnwatch, + "uNwatcH": actionUnwatch, + "uNwatch": actionUnwatch, + "unWATCH": actionUnwatch, + "unWATCh": actionUnwatch, + "unWATcH": actionUnwatch, + "unWATch": actionUnwatch, + "unWAtCH": actionUnwatch, + "unWAtCh": actionUnwatch, + "unWAtcH": actionUnwatch, + "unWAtch": actionUnwatch, + "unWaTCH": actionUnwatch, + "unWaTCh": actionUnwatch, + "unWaTcH": actionUnwatch, + "unWaTch": actionUnwatch, + "unWatCH": actionUnwatch, + "unWatCh": actionUnwatch, + "unWatcH": actionUnwatch, + "unWatch": actionUnwatch, + "unwATCH": actionUnwatch, + "unwATCh": actionUnwatch, + "unwATcH": actionUnwatch, + "unwATch": actionUnwatch, + "unwAtCH": actionUnwatch, + "unwAtCh": actionUnwatch, + "unwAtcH": actionUnwatch, + "unwAtch": actionUnwatch, + "unwaTCH": actionUnwatch, + "unwaTCh": actionUnwatch, + "unwaTcH": actionUnwatch, + "unwaTch": actionUnwatch, + "unwatCH": actionUnwatch, + "unwatCh": actionUnwatch, + "unwatcH": actionUnwatch, + "unwatch": actionUnwatch, + "READONLY": actionReadonly, + "READONLy": actionReadonly, + "READONlY": actionReadonly, + "READONly": actionReadonly, + "READOnLY": actionReadonly, + "READOnLy": actionReadonly, + "READOnlY": actionReadonly, + "READOnly": actionReadonly, + "READoNLY": actionReadonly, + "READoNLy": actionReadonly, + "READoNlY": actionReadonly, + "READoNly": actionReadonly, + "READonLY": actionReadonly, + "READonLy": actionReadonly, + "READonlY": actionReadonly, + "READonly": actionReadonly, + "REAdONLY": actionReadonly, + "REAdONLy": actionReadonly, + "REAdONlY": actionReadonly, + "REAdONly": actionReadonly, + "REAdOnLY": actionReadonly, + "REAdOnLy": actionReadonly, + "REAdOnlY": actionReadonly, + "REAdOnly": actionReadonly, + "REAdoNLY": actionReadonly, + "REAdoNLy": actionReadonly, + "REAdoNlY": actionReadonly, + "REAdoNly": actionReadonly, + "REAdonLY": actionReadonly, + "REAdonLy": actionReadonly, + "REAdonlY": actionReadonly, + "REAdonly": actionReadonly, + "REaDONLY": actionReadonly, + "REaDONLy": actionReadonly, + "REaDONlY": actionReadonly, + "REaDONly": actionReadonly, + "REaDOnLY": actionReadonly, + "REaDOnLy": actionReadonly, + "REaDOnlY": actionReadonly, + "REaDOnly": actionReadonly, + "REaDoNLY": actionReadonly, + "REaDoNLy": actionReadonly, + "REaDoNlY": actionReadonly, + "REaDoNly": actionReadonly, + "REaDonLY": actionReadonly, + "REaDonLy": actionReadonly, + "REaDonlY": actionReadonly, + "REaDonly": actionReadonly, + "REadONLY": actionReadonly, + "REadONLy": actionReadonly, + "REadONlY": actionReadonly, + "REadONly": actionReadonly, + "REadOnLY": actionReadonly, + "REadOnLy": actionReadonly, + "REadOnlY": actionReadonly, + "REadOnly": actionReadonly, + "REadoNLY": actionReadonly, + "REadoNLy": actionReadonly, + "REadoNlY": actionReadonly, + "REadoNly": actionReadonly, + "REadonLY": actionReadonly, + "REadonLy": actionReadonly, + "REadonlY": actionReadonly, + "REadonly": actionReadonly, + "ReADONLY": actionReadonly, + "ReADONLy": actionReadonly, + "ReADONlY": actionReadonly, + "ReADONly": actionReadonly, + "ReADOnLY": actionReadonly, + "ReADOnLy": actionReadonly, + "ReADOnlY": actionReadonly, + "ReADOnly": actionReadonly, + "ReADoNLY": actionReadonly, + "ReADoNLy": actionReadonly, + "ReADoNlY": actionReadonly, + "ReADoNly": actionReadonly, + "ReADonLY": actionReadonly, + "ReADonLy": actionReadonly, + "ReADonlY": actionReadonly, + "ReADonly": actionReadonly, + "ReAdONLY": actionReadonly, + "ReAdONLy": actionReadonly, + "ReAdONlY": actionReadonly, + "ReAdONly": actionReadonly, + "ReAdOnLY": actionReadonly, + "ReAdOnLy": actionReadonly, + "ReAdOnlY": actionReadonly, + "ReAdOnly": actionReadonly, + "ReAdoNLY": actionReadonly, + "ReAdoNLy": actionReadonly, + "ReAdoNlY": actionReadonly, + "ReAdoNly": actionReadonly, + "ReAdonLY": actionReadonly, + "ReAdonLy": actionReadonly, + "ReAdonlY": actionReadonly, + "ReAdonly": actionReadonly, + "ReaDONLY": actionReadonly, + "ReaDONLy": actionReadonly, + "ReaDONlY": actionReadonly, + "ReaDONly": actionReadonly, + "ReaDOnLY": actionReadonly, + "ReaDOnLy": actionReadonly, + "ReaDOnlY": actionReadonly, + "ReaDOnly": actionReadonly, + "ReaDoNLY": actionReadonly, + "ReaDoNLy": actionReadonly, + "ReaDoNlY": actionReadonly, + "ReaDoNly": actionReadonly, + "ReaDonLY": actionReadonly, + "ReaDonLy": actionReadonly, + "ReaDonlY": actionReadonly, + "ReaDonly": actionReadonly, + "ReadONLY": actionReadonly, + "ReadONLy": actionReadonly, + "ReadONlY": actionReadonly, + "ReadONly": actionReadonly, + "ReadOnLY": actionReadonly, + "ReadOnLy": actionReadonly, + "ReadOnlY": actionReadonly, + "ReadOnly": actionReadonly, + "ReadoNLY": actionReadonly, + "ReadoNLy": actionReadonly, + "ReadoNlY": actionReadonly, + "ReadoNly": actionReadonly, + "ReadonLY": actionReadonly, + "ReadonLy": actionReadonly, + "ReadonlY": actionReadonly, + "Readonly": actionReadonly, + "rEADONLY": actionReadonly, + "rEADONLy": actionReadonly, + "rEADONlY": actionReadonly, + "rEADONly": actionReadonly, + "rEADOnLY": actionReadonly, + "rEADOnLy": actionReadonly, + "rEADOnlY": actionReadonly, + "rEADOnly": actionReadonly, + "rEADoNLY": actionReadonly, + "rEADoNLy": actionReadonly, + "rEADoNlY": actionReadonly, + "rEADoNly": actionReadonly, + "rEADonLY": actionReadonly, + "rEADonLy": actionReadonly, + "rEADonlY": actionReadonly, + "rEADonly": actionReadonly, + "rEAdONLY": actionReadonly, + "rEAdONLy": actionReadonly, + "rEAdONlY": actionReadonly, + "rEAdONly": actionReadonly, + "rEAdOnLY": actionReadonly, + "rEAdOnLy": actionReadonly, + "rEAdOnlY": actionReadonly, + "rEAdOnly": actionReadonly, + "rEAdoNLY": actionReadonly, + "rEAdoNLy": actionReadonly, + "rEAdoNlY": actionReadonly, + "rEAdoNly": actionReadonly, + "rEAdonLY": actionReadonly, + "rEAdonLy": actionReadonly, + "rEAdonlY": actionReadonly, + "rEAdonly": actionReadonly, + "rEaDONLY": actionReadonly, + "rEaDONLy": actionReadonly, + "rEaDONlY": actionReadonly, + "rEaDONly": actionReadonly, + "rEaDOnLY": actionReadonly, + "rEaDOnLy": actionReadonly, + "rEaDOnlY": actionReadonly, + "rEaDOnly": actionReadonly, + "rEaDoNLY": actionReadonly, + "rEaDoNLy": actionReadonly, + "rEaDoNlY": actionReadonly, + "rEaDoNly": actionReadonly, + "rEaDonLY": actionReadonly, + "rEaDonLy": actionReadonly, + "rEaDonlY": actionReadonly, + "rEaDonly": actionReadonly, + "rEadONLY": actionReadonly, + "rEadONLy": actionReadonly, + "rEadONlY": actionReadonly, + "rEadONly": actionReadonly, + "rEadOnLY": actionReadonly, + "rEadOnLy": actionReadonly, + "rEadOnlY": actionReadonly, + "rEadOnly": actionReadonly, + "rEadoNLY": actionReadonly, + "rEadoNLy": actionReadonly, + "rEadoNlY": actionReadonly, + "rEadoNly": actionReadonly, + "rEadonLY": actionReadonly, + "rEadonLy": actionReadonly, + "rEadonlY": actionReadonly, + "rEadonly": actionReadonly, + "reADONLY": actionReadonly, + "reADONLy": actionReadonly, + "reADONlY": actionReadonly, + "reADONly": actionReadonly, + "reADOnLY": actionReadonly, + "reADOnLy": actionReadonly, + "reADOnlY": actionReadonly, + "reADOnly": actionReadonly, + "reADoNLY": actionReadonly, + "reADoNLy": actionReadonly, + "reADoNlY": actionReadonly, + "reADoNly": actionReadonly, + "reADonLY": actionReadonly, + "reADonLy": actionReadonly, + "reADonlY": actionReadonly, + "reADonly": actionReadonly, + "reAdONLY": actionReadonly, + "reAdONLy": actionReadonly, + "reAdONlY": actionReadonly, + "reAdONly": actionReadonly, + "reAdOnLY": actionReadonly, + "reAdOnLy": actionReadonly, + "reAdOnlY": actionReadonly, + "reAdOnly": actionReadonly, + "reAdoNLY": actionReadonly, + "reAdoNLy": actionReadonly, + "reAdoNlY": actionReadonly, + "reAdoNly": actionReadonly, + "reAdonLY": actionReadonly, + "reAdonLy": actionReadonly, + "reAdonlY": actionReadonly, + "reAdonly": actionReadonly, + "reaDONLY": actionReadonly, + "reaDONLy": actionReadonly, + "reaDONlY": actionReadonly, + "reaDONly": actionReadonly, + "reaDOnLY": actionReadonly, + "reaDOnLy": actionReadonly, + "reaDOnlY": actionReadonly, + "reaDOnly": actionReadonly, + "reaDoNLY": actionReadonly, + "reaDoNLy": actionReadonly, + "reaDoNlY": actionReadonly, + "reaDoNly": actionReadonly, + "reaDonLY": actionReadonly, + "reaDonLy": actionReadonly, + "reaDonlY": actionReadonly, + "reaDonly": actionReadonly, + "readONLY": actionReadonly, + "readONLy": actionReadonly, + "readONlY": actionReadonly, + "readONly": actionReadonly, + "readOnLY": actionReadonly, + "readOnLy": actionReadonly, + "readOnlY": actionReadonly, + "readOnly": actionReadonly, + "readoNLY": actionReadonly, + "readoNLy": actionReadonly, + "readoNlY": actionReadonly, + "readoNly": actionReadonly, + "readonLY": actionReadonly, + "readonLy": actionReadonly, + "readonlY": actionReadonly, + "readonly": actionReadonly, + "READWRITE": actionReadwrite, + "READWRITe": actionReadwrite, + "READWRItE": actionReadwrite, + "READWRIte": actionReadwrite, + "READWRiTE": actionReadwrite, + "READWRiTe": actionReadwrite, + "READWRitE": actionReadwrite, + "READWRite": actionReadwrite, + "READWrITE": actionReadwrite, + "READWrITe": actionReadwrite, + "READWrItE": actionReadwrite, + "READWrIte": actionReadwrite, + "READWriTE": actionReadwrite, + "READWriTe": actionReadwrite, + "READWritE": actionReadwrite, + "READWrite": actionReadwrite, + "READwRITE": actionReadwrite, + "READwRITe": actionReadwrite, + "READwRItE": actionReadwrite, + "READwRIte": actionReadwrite, + "READwRiTE": actionReadwrite, + "READwRiTe": actionReadwrite, + "READwRitE": actionReadwrite, + "READwRite": actionReadwrite, + "READwrITE": actionReadwrite, + "READwrITe": actionReadwrite, + "READwrItE": actionReadwrite, + "READwrIte": actionReadwrite, + "READwriTE": actionReadwrite, + "READwriTe": actionReadwrite, + "READwritE": actionReadwrite, + "READwrite": actionReadwrite, + "REAdWRITE": actionReadwrite, + "REAdWRITe": actionReadwrite, + "REAdWRItE": actionReadwrite, + "REAdWRIte": actionReadwrite, + "REAdWRiTE": actionReadwrite, + "REAdWRiTe": actionReadwrite, + "REAdWRitE": actionReadwrite, + "REAdWRite": actionReadwrite, + "REAdWrITE": actionReadwrite, + "REAdWrITe": actionReadwrite, + "REAdWrItE": actionReadwrite, + "REAdWrIte": actionReadwrite, + "REAdWriTE": actionReadwrite, + "REAdWriTe": actionReadwrite, + "REAdWritE": actionReadwrite, + "REAdWrite": actionReadwrite, + "REAdwRITE": actionReadwrite, + "REAdwRITe": actionReadwrite, + "REAdwRItE": actionReadwrite, + "REAdwRIte": actionReadwrite, + "REAdwRiTE": actionReadwrite, + "REAdwRiTe": actionReadwrite, + "REAdwRitE": actionReadwrite, + "REAdwRite": actionReadwrite, + "REAdwrITE": actionReadwrite, + "REAdwrITe": actionReadwrite, + "REAdwrItE": actionReadwrite, + "REAdwrIte": actionReadwrite, + "REAdwriTE": actionReadwrite, + "REAdwriTe": actionReadwrite, + "REAdwritE": actionReadwrite, + "REAdwrite": actionReadwrite, + "REaDWRITE": actionReadwrite, + "REaDWRITe": actionReadwrite, + "REaDWRItE": actionReadwrite, + "REaDWRIte": actionReadwrite, + "REaDWRiTE": actionReadwrite, + "REaDWRiTe": actionReadwrite, + "REaDWRitE": actionReadwrite, + "REaDWRite": actionReadwrite, + "REaDWrITE": actionReadwrite, + "REaDWrITe": actionReadwrite, + "REaDWrItE": actionReadwrite, + "REaDWrIte": actionReadwrite, + "REaDWriTE": actionReadwrite, + "REaDWriTe": actionReadwrite, + "REaDWritE": actionReadwrite, + "REaDWrite": actionReadwrite, + "REaDwRITE": actionReadwrite, + "REaDwRITe": actionReadwrite, + "REaDwRItE": actionReadwrite, + "REaDwRIte": actionReadwrite, + "REaDwRiTE": actionReadwrite, + "REaDwRiTe": actionReadwrite, + "REaDwRitE": actionReadwrite, + "REaDwRite": actionReadwrite, + "REaDwrITE": actionReadwrite, + "REaDwrITe": actionReadwrite, + "REaDwrItE": actionReadwrite, + "REaDwrIte": actionReadwrite, + "REaDwriTE": actionReadwrite, + "REaDwriTe": actionReadwrite, + "REaDwritE": actionReadwrite, + "REaDwrite": actionReadwrite, + "REadWRITE": actionReadwrite, + "REadWRITe": actionReadwrite, + "REadWRItE": actionReadwrite, + "REadWRIte": actionReadwrite, + "REadWRiTE": actionReadwrite, + "REadWRiTe": actionReadwrite, + "REadWRitE": actionReadwrite, + "REadWRite": actionReadwrite, + "REadWrITE": actionReadwrite, + "REadWrITe": actionReadwrite, + "REadWrItE": actionReadwrite, + "REadWrIte": actionReadwrite, + "REadWriTE": actionReadwrite, + "REadWriTe": actionReadwrite, + "REadWritE": actionReadwrite, + "REadWrite": actionReadwrite, + "REadwRITE": actionReadwrite, + "REadwRITe": actionReadwrite, + "REadwRItE": actionReadwrite, + "REadwRIte": actionReadwrite, + "REadwRiTE": actionReadwrite, + "REadwRiTe": actionReadwrite, + "REadwRitE": actionReadwrite, + "REadwRite": actionReadwrite, + "REadwrITE": actionReadwrite, + "REadwrITe": actionReadwrite, + "REadwrItE": actionReadwrite, + "REadwrIte": actionReadwrite, + "REadwriTE": actionReadwrite, + "REadwriTe": actionReadwrite, + "REadwritE": actionReadwrite, + "REadwrite": actionReadwrite, + "ReADWRITE": actionReadwrite, + "ReADWRITe": actionReadwrite, + "ReADWRItE": actionReadwrite, + "ReADWRIte": actionReadwrite, + "ReADWRiTE": actionReadwrite, + "ReADWRiTe": actionReadwrite, + "ReADWRitE": actionReadwrite, + "ReADWRite": actionReadwrite, + "ReADWrITE": actionReadwrite, + "ReADWrITe": actionReadwrite, + "ReADWrItE": actionReadwrite, + "ReADWrIte": actionReadwrite, + "ReADWriTE": actionReadwrite, + "ReADWriTe": actionReadwrite, + "ReADWritE": actionReadwrite, + "ReADWrite": actionReadwrite, + "ReADwRITE": actionReadwrite, + "ReADwRITe": actionReadwrite, + "ReADwRItE": actionReadwrite, + "ReADwRIte": actionReadwrite, + "ReADwRiTE": actionReadwrite, + "ReADwRiTe": actionReadwrite, + "ReADwRitE": actionReadwrite, + "ReADwRite": actionReadwrite, + "ReADwrITE": actionReadwrite, + "ReADwrITe": actionReadwrite, + "ReADwrItE": actionReadwrite, + "ReADwrIte": actionReadwrite, + "ReADwriTE": actionReadwrite, + "ReADwriTe": actionReadwrite, + "ReADwritE": actionReadwrite, + "ReADwrite": actionReadwrite, + "ReAdWRITE": actionReadwrite, + "ReAdWRITe": actionReadwrite, + "ReAdWRItE": actionReadwrite, + "ReAdWRIte": actionReadwrite, + "ReAdWRiTE": actionReadwrite, + "ReAdWRiTe": actionReadwrite, + "ReAdWRitE": actionReadwrite, + "ReAdWRite": actionReadwrite, + "ReAdWrITE": actionReadwrite, + "ReAdWrITe": actionReadwrite, + "ReAdWrItE": actionReadwrite, + "ReAdWrIte": actionReadwrite, + "ReAdWriTE": actionReadwrite, + "ReAdWriTe": actionReadwrite, + "ReAdWritE": actionReadwrite, + "ReAdWrite": actionReadwrite, + "ReAdwRITE": actionReadwrite, + "ReAdwRITe": actionReadwrite, + "ReAdwRItE": actionReadwrite, + "ReAdwRIte": actionReadwrite, + "ReAdwRiTE": actionReadwrite, + "ReAdwRiTe": actionReadwrite, + "ReAdwRitE": actionReadwrite, + "ReAdwRite": actionReadwrite, + "ReAdwrITE": actionReadwrite, + "ReAdwrITe": actionReadwrite, + "ReAdwrItE": actionReadwrite, + "ReAdwrIte": actionReadwrite, + "ReAdwriTE": actionReadwrite, + "ReAdwriTe": actionReadwrite, + "ReAdwritE": actionReadwrite, + "ReAdwrite": actionReadwrite, + "ReaDWRITE": actionReadwrite, + "ReaDWRITe": actionReadwrite, + "ReaDWRItE": actionReadwrite, + "ReaDWRIte": actionReadwrite, + "ReaDWRiTE": actionReadwrite, + "ReaDWRiTe": actionReadwrite, + "ReaDWRitE": actionReadwrite, + "ReaDWRite": actionReadwrite, + "ReaDWrITE": actionReadwrite, + "ReaDWrITe": actionReadwrite, + "ReaDWrItE": actionReadwrite, + "ReaDWrIte": actionReadwrite, + "ReaDWriTE": actionReadwrite, + "ReaDWriTe": actionReadwrite, + "ReaDWritE": actionReadwrite, + "ReaDWrite": actionReadwrite, + "ReaDwRITE": actionReadwrite, + "ReaDwRITe": actionReadwrite, + "ReaDwRItE": actionReadwrite, + "ReaDwRIte": actionReadwrite, + "ReaDwRiTE": actionReadwrite, + "ReaDwRiTe": actionReadwrite, + "ReaDwRitE": actionReadwrite, + "ReaDwRite": actionReadwrite, + "ReaDwrITE": actionReadwrite, + "ReaDwrITe": actionReadwrite, + "ReaDwrItE": actionReadwrite, + "ReaDwrIte": actionReadwrite, + "ReaDwriTE": actionReadwrite, + "ReaDwriTe": actionReadwrite, + "ReaDwritE": actionReadwrite, + "ReaDwrite": actionReadwrite, + "ReadWRITE": actionReadwrite, + "ReadWRITe": actionReadwrite, + "ReadWRItE": actionReadwrite, + "ReadWRIte": actionReadwrite, + "ReadWRiTE": actionReadwrite, + "ReadWRiTe": actionReadwrite, + "ReadWRitE": actionReadwrite, + "ReadWRite": actionReadwrite, + "ReadWrITE": actionReadwrite, + "ReadWrITe": actionReadwrite, + "ReadWrItE": actionReadwrite, + "ReadWrIte": actionReadwrite, + "ReadWriTE": actionReadwrite, + "ReadWriTe": actionReadwrite, + "ReadWritE": actionReadwrite, + "ReadWrite": actionReadwrite, + "ReadwRITE": actionReadwrite, + "ReadwRITe": actionReadwrite, + "ReadwRItE": actionReadwrite, + "ReadwRIte": actionReadwrite, + "ReadwRiTE": actionReadwrite, + "ReadwRiTe": actionReadwrite, + "ReadwRitE": actionReadwrite, + "ReadwRite": actionReadwrite, + "ReadwrITE": actionReadwrite, + "ReadwrITe": actionReadwrite, + "ReadwrItE": actionReadwrite, + "ReadwrIte": actionReadwrite, + "ReadwriTE": actionReadwrite, + "ReadwriTe": actionReadwrite, + "ReadwritE": actionReadwrite, + "Readwrite": actionReadwrite, + "rEADWRITE": actionReadwrite, + "rEADWRITe": actionReadwrite, + "rEADWRItE": actionReadwrite, + "rEADWRIte": actionReadwrite, + "rEADWRiTE": actionReadwrite, + "rEADWRiTe": actionReadwrite, + "rEADWRitE": actionReadwrite, + "rEADWRite": actionReadwrite, + "rEADWrITE": actionReadwrite, + "rEADWrITe": actionReadwrite, + "rEADWrItE": actionReadwrite, + "rEADWrIte": actionReadwrite, + "rEADWriTE": actionReadwrite, + "rEADWriTe": actionReadwrite, + "rEADWritE": actionReadwrite, + "rEADWrite": actionReadwrite, + "rEADwRITE": actionReadwrite, + "rEADwRITe": actionReadwrite, + "rEADwRItE": actionReadwrite, + "rEADwRIte": actionReadwrite, + "rEADwRiTE": actionReadwrite, + "rEADwRiTe": actionReadwrite, + "rEADwRitE": actionReadwrite, + "rEADwRite": actionReadwrite, + "rEADwrITE": actionReadwrite, + "rEADwrITe": actionReadwrite, + "rEADwrItE": actionReadwrite, + "rEADwrIte": actionReadwrite, + "rEADwriTE": actionReadwrite, + "rEADwriTe": actionReadwrite, + "rEADwritE": actionReadwrite, + "rEADwrite": actionReadwrite, + "rEAdWRITE": actionReadwrite, + "rEAdWRITe": actionReadwrite, + "rEAdWRItE": actionReadwrite, + "rEAdWRIte": actionReadwrite, + "rEAdWRiTE": actionReadwrite, + "rEAdWRiTe": actionReadwrite, + "rEAdWRitE": actionReadwrite, + "rEAdWRite": actionReadwrite, + "rEAdWrITE": actionReadwrite, + "rEAdWrITe": actionReadwrite, + "rEAdWrItE": actionReadwrite, + "rEAdWrIte": actionReadwrite, + "rEAdWriTE": actionReadwrite, + "rEAdWriTe": actionReadwrite, + "rEAdWritE": actionReadwrite, + "rEAdWrite": actionReadwrite, + "rEAdwRITE": actionReadwrite, + "rEAdwRITe": actionReadwrite, + "rEAdwRItE": actionReadwrite, + "rEAdwRIte": actionReadwrite, + "rEAdwRiTE": actionReadwrite, + "rEAdwRiTe": actionReadwrite, + "rEAdwRitE": actionReadwrite, + "rEAdwRite": actionReadwrite, + "rEAdwrITE": actionReadwrite, + "rEAdwrITe": actionReadwrite, + "rEAdwrItE": actionReadwrite, + "rEAdwrIte": actionReadwrite, + "rEAdwriTE": actionReadwrite, + "rEAdwriTe": actionReadwrite, + "rEAdwritE": actionReadwrite, + "rEAdwrite": actionReadwrite, + "rEaDWRITE": actionReadwrite, + "rEaDWRITe": actionReadwrite, + "rEaDWRItE": actionReadwrite, + "rEaDWRIte": actionReadwrite, + "rEaDWRiTE": actionReadwrite, + "rEaDWRiTe": actionReadwrite, + "rEaDWRitE": actionReadwrite, + "rEaDWRite": actionReadwrite, + "rEaDWrITE": actionReadwrite, + "rEaDWrITe": actionReadwrite, + "rEaDWrItE": actionReadwrite, + "rEaDWrIte": actionReadwrite, + "rEaDWriTE": actionReadwrite, + "rEaDWriTe": actionReadwrite, + "rEaDWritE": actionReadwrite, + "rEaDWrite": actionReadwrite, + "rEaDwRITE": actionReadwrite, + "rEaDwRITe": actionReadwrite, + "rEaDwRItE": actionReadwrite, + "rEaDwRIte": actionReadwrite, + "rEaDwRiTE": actionReadwrite, + "rEaDwRiTe": actionReadwrite, + "rEaDwRitE": actionReadwrite, + "rEaDwRite": actionReadwrite, + "rEaDwrITE": actionReadwrite, + "rEaDwrITe": actionReadwrite, + "rEaDwrItE": actionReadwrite, + "rEaDwrIte": actionReadwrite, + "rEaDwriTE": actionReadwrite, + "rEaDwriTe": actionReadwrite, + "rEaDwritE": actionReadwrite, + "rEaDwrite": actionReadwrite, + "rEadWRITE": actionReadwrite, + "rEadWRITe": actionReadwrite, + "rEadWRItE": actionReadwrite, + "rEadWRIte": actionReadwrite, + "rEadWRiTE": actionReadwrite, + "rEadWRiTe": actionReadwrite, + "rEadWRitE": actionReadwrite, + "rEadWRite": actionReadwrite, + "rEadWrITE": actionReadwrite, + "rEadWrITe": actionReadwrite, + "rEadWrItE": actionReadwrite, + "rEadWrIte": actionReadwrite, + "rEadWriTE": actionReadwrite, + "rEadWriTe": actionReadwrite, + "rEadWritE": actionReadwrite, + "rEadWrite": actionReadwrite, + "rEadwRITE": actionReadwrite, + "rEadwRITe": actionReadwrite, + "rEadwRItE": actionReadwrite, + "rEadwRIte": actionReadwrite, + "rEadwRiTE": actionReadwrite, + "rEadwRiTe": actionReadwrite, + "rEadwRitE": actionReadwrite, + "rEadwRite": actionReadwrite, + "rEadwrITE": actionReadwrite, + "rEadwrITe": actionReadwrite, + "rEadwrItE": actionReadwrite, + "rEadwrIte": actionReadwrite, + "rEadwriTE": actionReadwrite, + "rEadwriTe": actionReadwrite, + "rEadwritE": actionReadwrite, + "rEadwrite": actionReadwrite, + "reADWRITE": actionReadwrite, + "reADWRITe": actionReadwrite, + "reADWRItE": actionReadwrite, + "reADWRIte": actionReadwrite, + "reADWRiTE": actionReadwrite, + "reADWRiTe": actionReadwrite, + "reADWRitE": actionReadwrite, + "reADWRite": actionReadwrite, + "reADWrITE": actionReadwrite, + "reADWrITe": actionReadwrite, + "reADWrItE": actionReadwrite, + "reADWrIte": actionReadwrite, + "reADWriTE": actionReadwrite, + "reADWriTe": actionReadwrite, + "reADWritE": actionReadwrite, + "reADWrite": actionReadwrite, + "reADwRITE": actionReadwrite, + "reADwRITe": actionReadwrite, + "reADwRItE": actionReadwrite, + "reADwRIte": actionReadwrite, + "reADwRiTE": actionReadwrite, + "reADwRiTe": actionReadwrite, + "reADwRitE": actionReadwrite, + "reADwRite": actionReadwrite, + "reADwrITE": actionReadwrite, + "reADwrITe": actionReadwrite, + "reADwrItE": actionReadwrite, + "reADwrIte": actionReadwrite, + "reADwriTE": actionReadwrite, + "reADwriTe": actionReadwrite, + "reADwritE": actionReadwrite, + "reADwrite": actionReadwrite, + "reAdWRITE": actionReadwrite, + "reAdWRITe": actionReadwrite, + "reAdWRItE": actionReadwrite, + "reAdWRIte": actionReadwrite, + "reAdWRiTE": actionReadwrite, + "reAdWRiTe": actionReadwrite, + "reAdWRitE": actionReadwrite, + "reAdWRite": actionReadwrite, + "reAdWrITE": actionReadwrite, + "reAdWrITe": actionReadwrite, + "reAdWrItE": actionReadwrite, + "reAdWrIte": actionReadwrite, + "reAdWriTE": actionReadwrite, + "reAdWriTe": actionReadwrite, + "reAdWritE": actionReadwrite, + "reAdWrite": actionReadwrite, + "reAdwRITE": actionReadwrite, + "reAdwRITe": actionReadwrite, + "reAdwRItE": actionReadwrite, + "reAdwRIte": actionReadwrite, + "reAdwRiTE": actionReadwrite, + "reAdwRiTe": actionReadwrite, + "reAdwRitE": actionReadwrite, + "reAdwRite": actionReadwrite, + "reAdwrITE": actionReadwrite, + "reAdwrITe": actionReadwrite, + "reAdwrItE": actionReadwrite, + "reAdwrIte": actionReadwrite, + "reAdwriTE": actionReadwrite, + "reAdwriTe": actionReadwrite, + "reAdwritE": actionReadwrite, + "reAdwrite": actionReadwrite, + "reaDWRITE": actionReadwrite, + "reaDWRITe": actionReadwrite, + "reaDWRItE": actionReadwrite, + "reaDWRIte": actionReadwrite, + "reaDWRiTE": actionReadwrite, + "reaDWRiTe": actionReadwrite, + "reaDWRitE": actionReadwrite, + "reaDWRite": actionReadwrite, + "reaDWrITE": actionReadwrite, + "reaDWrITe": actionReadwrite, + "reaDWrItE": actionReadwrite, + "reaDWrIte": actionReadwrite, + "reaDWriTE": actionReadwrite, + "reaDWriTe": actionReadwrite, + "reaDWritE": actionReadwrite, + "reaDWrite": actionReadwrite, + "reaDwRITE": actionReadwrite, + "reaDwRITe": actionReadwrite, + "reaDwRItE": actionReadwrite, + "reaDwRIte": actionReadwrite, + "reaDwRiTE": actionReadwrite, + "reaDwRiTe": actionReadwrite, + "reaDwRitE": actionReadwrite, + "reaDwRite": actionReadwrite, + "reaDwrITE": actionReadwrite, + "reaDwrITe": actionReadwrite, + "reaDwrItE": actionReadwrite, + "reaDwrIte": actionReadwrite, + "reaDwriTE": actionReadwrite, + "reaDwriTe": actionReadwrite, + "reaDwritE": actionReadwrite, + "reaDwrite": actionReadwrite, + "readWRITE": actionReadwrite, + "readWRITe": actionReadwrite, + "readWRItE": actionReadwrite, + "readWRIte": actionReadwrite, + "readWRiTE": actionReadwrite, + "readWRiTe": actionReadwrite, + "readWRitE": actionReadwrite, + "readWRite": actionReadwrite, + "readWrITE": actionReadwrite, + "readWrITe": actionReadwrite, + "readWrItE": actionReadwrite, + "readWrIte": actionReadwrite, + "readWriTE": actionReadwrite, + "readWriTe": actionReadwrite, + "readWritE": actionReadwrite, + "readWrite": actionReadwrite, + "readwRITE": actionReadwrite, + "readwRITe": actionReadwrite, + "readwRItE": actionReadwrite, + "readwRIte": actionReadwrite, + "readwRiTE": actionReadwrite, + "readwRiTe": actionReadwrite, + "readwRitE": actionReadwrite, + "readwRite": actionReadwrite, + "readwrITE": actionReadwrite, + "readwrITe": actionReadwrite, + "readwrItE": actionReadwrite, + "readwrIte": actionReadwrite, + "readwriTE": actionReadwrite, + "readwriTe": actionReadwrite, + "readwritE": actionReadwrite, + "readwrite": actionReadwrite, + "RESET": actionReset, + "RESEt": actionReset, + "RESeT": actionReset, + "RESet": actionReset, + "REsET": actionReset, + "REsEt": actionReset, + "REseT": actionReset, + "REset": actionReset, + "ReSET": actionReset, + "ReSEt": actionReset, + "ReSeT": actionReset, + "ReSet": actionReset, + "ResET": actionReset, + "ResEt": actionReset, + "ReseT": actionReset, + "Reset": actionReset, + "rESET": actionReset, + "rESEt": actionReset, + "rESeT": actionReset, + "rESet": actionReset, + "rEsET": actionReset, + "rEsEt": actionReset, + "rEseT": actionReset, + "rEset": actionReset, + "reSET": actionReset, + "reSEt": actionReset, + "reSeT": actionReset, + "reSet": actionReset, + "resET": actionReset, + "resEt": actionReset, + "reseT": actionReset, + "reset": actionReset, + "WATCH": actionWatch, + "WATCh": actionWatch, + "WATcH": actionWatch, + "WATch": actionWatch, + "WAtCH": actionWatch, + "WAtCh": actionWatch, + "WAtcH": actionWatch, + "WAtch": actionWatch, + "WaTCH": actionWatch, + "WaTCh": actionWatch, + "WaTcH": actionWatch, + "WaTch": actionWatch, + "WatCH": actionWatch, + "WatCh": actionWatch, + "WatcH": actionWatch, + "Watch": actionWatch, + "wATCH": actionWatch, + "wATCh": actionWatch, + "wATcH": actionWatch, + "wATch": actionWatch, + "wAtCH": actionWatch, + "wAtCh": actionWatch, + "wAtcH": actionWatch, + "wAtch": actionWatch, + "waTCH": actionWatch, + "waTCh": actionWatch, + "waTcH": actionWatch, + "waTch": actionWatch, + "watCH": actionWatch, + "watCh": actionWatch, + "watcH": actionWatch, + "watch": actionWatch, } connActions = map[string]*commandAction{ "CLIENT": actionClient, diff --git a/redis/command_action_gen.go b/redis/command_action_gen.go index 71075080..e3fa4b93 100644 --- a/redis/command_action_gen.go +++ b/redis/command_action_gen.go @@ -36,29 +36,54 @@ func newCommandInfo(name, action string) *commandInfo { var activeConnCommands = &commandInfo{ Variable: "activeConnActions", Next: []*commandInfo{ - newCommandInfo("watch", "*state |= stateWatch"), - newCommandInfo("unwatch", "*state &^= stateWatch"), - newCommandInfo("multi", "*state |= stateMulti"), - newCommandInfo("exec", "*state &^= stateWatch|stateMulti"), - newCommandInfo("discard", "*state &^= stateWatch|stateMulti"), - newCommandInfo("psubscribe", "*state |= stateSubscribe"), - newCommandInfo("subscribe", "*state |= stateSubscribe"), - newCommandInfo("monitor", "*state |= stateMonitor"), { Name: "client", Next: []*commandInfo{ + { + Name: "no-evict", + Next: []*commandInfo{ + newCommandInfo("on", "*cs |= stateClientNoEvict"), + newCommandInfo("off", "*cs &^= stateClientNoEvict"), + }, + }, + { + Name: "no-touch", + Next: []*commandInfo{ + newCommandInfo("on", "*cs |= stateClientNoTouch"), + newCommandInfo("off", "*cs &^= stateClientNoTouch"), + }, + }, { Name: "reply", Next: []*commandInfo{ - newCommandInfo("off", "*state |= stateClientReplyOff"), - newCommandInfo("on", "*state &^= stateClientReplyOff|stateClientReplySkip"), - newCommandInfo("skip", `if *state&stateClientReplyOff == 0 { - *state |= stateClientReplySkipNext + newCommandInfo("off", "*cs |= stateClientReplyOff"), + newCommandInfo("on", "*cs &^= stateClientReplyOff|stateClientReplySkipNext|stateClientReplySkip"), + newCommandInfo("skip", `if *cs&stateClientReplyOff == 0 { + *cs |= stateClientReplySkipNext }`), }, }, + { + Name: "tracking", + Next: []*commandInfo{ + newCommandInfo("on", "*cs |= stateClientTracking"), + newCommandInfo("off", "*cs &^= stateClientTracking"), + }, + }, }, }, + newCommandInfo("discard", "*cs &^= stateWatch|stateMulti"), + newCommandInfo("exec", "*cs &^= stateWatch|stateMulti"), + newCommandInfo("monitor", "*cs |= stateMonitor"), + newCommandInfo("multi", "*cs |= stateMulti"), + newCommandInfo("psubscribe", "*cs |= statePsubscribe"), + newCommandInfo("ssubscribe", "*cs |= stateSsubscribe"), + newCommandInfo("subscribe", "*cs |= stateSubscribe"), + newCommandInfo("unwatch", "*cs &^= stateWatch"), + newCommandInfo("readonly", "*cs |= stateReadOnly"), + newCommandInfo("readwrite", "*cs &^= stateReadOnly"), + newCommandInfo("reset", "*cs = 0"), + newCommandInfo("watch", "*cs |= stateWatch"), }, } @@ -113,7 +138,7 @@ var ( {{- end -}} {{- if .Action}} {{.Variable}} = &commandAction{ - Action: func(state *connectionState) { + Action: func(cs *connectionState) { {{.Action}} }, } @@ -146,7 +171,7 @@ func processCommands(parent string, commands []*commandInfo) { for _, ci := range commands { prefix := parent if ci.Variable == "" { - ci.Variable = parent + strings.Title(ci.Name) + ci.Variable = parent + strings.ReplaceAll(strings.Title(ci.Name), "-", "") prefix = ci.Variable } if ci.Next != nil { diff --git a/redis/conn.go b/redis/conn.go index 57380b97..ab12211e 100644 --- a/redis/conn.go +++ b/redis/conn.go @@ -32,6 +32,7 @@ import ( var ( _ ConnWithTimeout = (*conn)(nil) + _ ConnWithContext = (*conn)(nil) ) // conn is the low-level implementation of Conn @@ -683,7 +684,7 @@ func (c *conn) readReply() (interface{}, error) { } func (c *conn) stateUpdate(cmd string, args ...interface{}) { - c.state.update(connActions, cmd, args...) + c.state.update(connActions, true, cmd, args...) } func (c *conn) Send(cmd string, args ...interface{}) error { diff --git a/redis/connection_state.go b/redis/connection_state.go index 35c45ccf..88004723 100644 --- a/redis/connection_state.go +++ b/redis/connection_state.go @@ -1,4 +1,4 @@ -// Copyright 2014 Gary Burd +// Copyright 2024 Steven Hartland // // Licensed under the Apache License, Version 2.0 (the "License"): you may // not use this file except in compliance with the License. You may obtain @@ -14,36 +14,51 @@ package redis -// connectionState represents a connection state. -type connectionState uint8 +// connectionState represents the state of a connection. +type connectionState uint16 +// Connection states flags. +// If you make a change to this you also need to update: +// * Command action generation in command_action_gen.go +// * TestPoolCloseCleanup +// * activeConn.reset() const ( - stateWatch connectionState = 1 << iota - stateMulti - stateSubscribe - stateMonitor - stateClientReplyOff - stateClientReplySkipNext - stateClientReplySkip + stateClientNoEvict connectionState = 1 << iota // Not evictable. + stateClientNoTouch // LRU/LFU stats touch disabled. + stateClientReplyOff // Connection replies aren't being sent. + stateClientReplySkip // Replies aren't expected for this cmd. + stateClientReplySkipNext // Set stateClientReplySkip for next cmd. + stateClientTracking // Key tracking is enabled. + stateMonitor // Monitoring server commands. + stateMulti // Processing a transaction. + statePsubscribe // Potentially subscribed to a pattern. + stateReadOnly // Read only mode. + stateSsubscribe // Potentially subscribed to a shard channel. + stateSubscribe // Potentially subscribed to a channel. + stateWatch // Watching one or more key. ) // commandAction represents an action to be taken when processing a command. type commandAction struct { - Action func(*connectionState) + // Action specifies the action to be taken. + Action func(cs *connectionState) // Next specifies sub actions for given arguments. Next map[string]*commandAction } // update updates the connection state based on the command and arguments if needed. -func (cs *connectionState) update(info map[string]*commandAction, first string, args ...interface{}) { - *cs &^= stateClientReplySkip - if *cs&stateClientReplySkipNext != 0 { - *cs |= stateClientReplySkip - *cs &^= stateClientReplySkipNext +func (cs *connectionState) update(info map[string]*commandAction, first bool, arg0 string, args ...interface{}) { + if first { + if *cs&stateClientReplySkipNext != 0 { + *cs &^= stateClientReplySkipNext + *cs |= stateClientReplySkip + } else { + *cs &^= stateClientReplySkip + } } - ci, ok := info[first] + ci, ok := info[arg0] if !ok { // No match. return @@ -60,12 +75,12 @@ func (cs *connectionState) update(info map[string]*commandAction, first string, return } - first, ok = args[0].(string) + arg0, ok = args[0].(string) if !ok { // No match due type miss-match. return } // Check the next argument. - cs.update(ci.Next, first, args[1:]...) + cs.update(ci.Next, false, arg0, args[1:]...) } diff --git a/redis/connection_state_test.go b/redis/connection_state_test.go index f3a60d01..84c6cdf2 100644 --- a/redis/connection_state_test.go +++ b/redis/connection_state_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" ) -type lookupTest struct { +type stateUpdateTest struct { state connectionState expected connectionState commandName string @@ -16,7 +16,7 @@ type lookupTest struct { info map[string]*commandAction } -func buildLookupTests(tests map[string]lookupTest, root, infos map[string]*commandAction, args ...string) { +func buildStateUpdateTests(tests map[string]stateUpdateTest, root, infos map[string]*commandAction, args ...string) { for cmd, ci := range infos { if cmd != strings.ToLower(cmd) { // Skip non lower case commands as we only need to test one case per action. @@ -25,11 +25,11 @@ func buildLookupTests(tests map[string]lookupTest, root, infos map[string]*comma cmdArgs := append(args, cmd) if ci.Next != nil { - buildLookupTests(tests, root, ci.Next, cmdArgs...) + buildStateUpdateTests(tests, root, ci.Next, cmdArgs...) continue } - t := lookupTest{ + t := stateUpdateTest{ commandName: cmdArgs[0], args: make([]interface{}, len(cmdArgs)-1), info: root, @@ -54,13 +54,13 @@ func buildLookupTests(tests map[string]lookupTest, root, infos map[string]*comma } func TestConnectionStateUpdate(t *testing.T) { - tests := make(map[string]lookupTest) - buildLookupTests(tests, activeConnActions, activeConnActions) - buildLookupTests(tests, connActions, connActions) + tests := make(map[string]stateUpdateTest) + buildStateUpdateTests(tests, activeConnActions, activeConnActions) + buildStateUpdateTests(tests, connActions, connActions) for name, tc := range tests { t.Run(name, func(t *testing.T) { - tc.state.update(tc.info, tc.commandName, tc.args...) + tc.state.update(tc.info, true, tc.commandName, tc.args...) require.Equal(t, tc.expected, tc.state) }) } @@ -70,7 +70,7 @@ func benchmarkStateUpdate(b *testing.B, names ...string) { var state connectionState for i := 0; i < b.N; i++ { for _, cmd := range names { - state.update(activeConnActions, cmd) + state.update(activeConnActions, true, cmd) } } } @@ -193,3 +193,176 @@ func TestClientReply(t *testing.T) { t.Run(name, tc) } } + +// setAllFlags sets all flags in the state. +func setAllFlags(state *connectionState, infos map[string]*commandAction) { + for _, ci := range infos { + if ci.Next != nil { + setAllFlags(state, ci.Next) + } + + if ci.Action != nil { + var check connectionState + ci.Action(&check) + if check != 0 { + *state |= check + } + } + } +} + +// isUnsupported returns true if err is an unknown or disabled command error, false otherwise. +func isUnsupported(err error) bool { + if err != nil { + errStr := strings.ToLower(err.Error()) + if strings.HasPrefix(errStr, "err unknown command") || + strings.HasPrefix(errStr, "err unknown subcommand") || + strings.HasPrefix(errStr, "err this instance has cluster support disabled") { + return true + } + } + + return false +} + +// checkSupported checks if a command is supported and if it is, it +// sends it on c otherwise it removes flags from the expected state. +func checkSupported(t *testing.T, p *Pool, c Conn, expected *connectionState, flags connectionState, cmd string, args ...interface{}) { + t.Helper() + + c2 := p.Get() + defer c2.Close() //nolint: errcheck + + _, err := c2.Do(cmd, args...) + if isUnsupported(err) { + *expected &^= flags + c2.(*activeConn).state &^= flags + return + } + + require.NoError(t, err) + require.NoError(t, c.Send(cmd, args...)) +} + +type closeTest struct { + expected connectionState + commandName string + args []interface{} +} + +// buildCloseTests builds a map of close tests for the given command infos. +func buildCloseTests(tests map[string]closeTest, root, infos map[string]*commandAction, args ...string) { + for cmd, ci := range infos { + if cmd != strings.ToLower(cmd) { + // Skip non lower case commands as we only need to test one case per action. + continue + } + + if cmd == "monitor" { + // MONITOR is tested separately. + continue + } + + cmdArgs := append(args, cmd) + if ci.Next != nil { + buildCloseTests(tests, root, ci.Next, cmdArgs...) + continue + } + + var state connectionState + ci.Action(&state) + if state == 0 { + // Action is a Clear so not needed. + continue + } + + // Action is a Set. + t := closeTest{ + commandName: cmdArgs[0], + args: make([]interface{}, len(cmdArgs)-1), + expected: state, + } + for i, arg := range cmdArgs[1:] { + t.args[i] = arg + } + switch t.commandName { + case "watch", "psubscribe", "subscribe", "ssubscribe": + t.args = append(t.args, "key") + } + + tests[strings.Join(cmdArgs, "-")] = t + } +} + +func TestPoolCloseCleanup(t *testing.T) { + p := &Pool{ + Dial: func() (Conn, error) { + return DialDefaultServer() + }, + } + defer p.Close() + + var expected connectionState + setAllFlags(&expected, activeConnActions) + for _, val := range []string{"off", "skip"} { + t.Run("all-client-reply-"+val, func(t *testing.T) { + c := p.Get() + // Apply all state changing commands. + checkSupported(t, p, c, &expected, stateClientNoEvict, "CLIENT", "NO-EVICT", "ON") + checkSupported(t, p, c, &expected, stateClientNoTouch, "CLIENT", "NO-TOUCH", "ON") + // CLIENT REPLY OFF and CLIENT REPLY SKIP / SKIP NEXT are mutually exclusive. + switch val { + case "off": + checkSupported(t, p, c, &expected, stateClientReplyOff, "CLIENT", "REPLY", "OFF") + checkSupported(t, p, c, &expected, 0, "CLIENT", "REPLY", "SKIP") // Should be ignored. + // CLIENT REPLY SKIP / SKIP NEXT was never set. + expected &^= stateClientReplySkip | stateClientReplySkipNext + case "skip": + checkSupported(t, p, c, &expected, stateClientReplySkip|stateClientReplySkipNext, "CLIENT", "REPLY", "SKIP") + // CLIENT REPLY SKIP / SKIP NEXT should be unset by the next command and CLIENT REPLY OFF was never set. + expected &^= stateClientReplyOff | stateClientReplySkip | stateClientReplySkipNext + } + checkSupported(t, p, c, &expected, stateClientTracking, "CLIENT", "TRACKING", "ON") + require.Zero(t, c.(*activeConn).state&(stateClientReplySkipNext)) // Skip next should have been cleared. + // MONITOR isn't tested as it can't be cleared during close without using RESET + // which isn't possible to use as we can't ensure that the dialled settings such + // as selected database and AUTH are restored. + expected &^= stateMonitor + checkSupported(t, p, c, &expected, stateWatch, "WATCH", "key") // Out of order as WATCH isn't allowed in side a subscriptions. + require.Zero(t, c.(*activeConn).state&(stateClientReplySkip)) // Skip should should have cleared. + checkSupported(t, p, c, &expected, stateMulti, "MULTI") // Out of order as MULTI isn't allowed in side a subscriptions. + checkSupported(t, p, c, &expected, statePsubscribe, "PSUBSCRIBE", "x") + checkSupported(t, p, c, &expected, stateReadOnly, "READONLY") + checkSupported(t, p, c, &expected, stateSsubscribe, "SSUBSCRIBE", "x") + checkSupported(t, p, c, &expected, stateSubscribe, "SUBSCRIBE", "x") + require.Equal(t, expected, c.(*activeConn).state) + require.NoError(t, c.Close()) + require.Zero(t, c.(*activeConn).state) + }) + } + + tests := make(map[string]closeTest) + buildCloseTests(tests, activeConnActions, activeConnActions) + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + c := p.Get() + _, err := c.Do(tc.commandName, tc.args...) + if isUnsupported(err) { + t.Skipf("Command %q not supported", tc.commandName) + } + require.NoError(t, err) + + require.Equal(t, tc.expected, c.(*activeConn).state) + require.NoError(t, c.Close()) + require.Zero(t, c.(*activeConn).state) + }) + } + + t.Run("monitor", func(t *testing.T) { + c := p.Get() + _, err := c.Do("MONITOR") + require.NoError(t, err) + require.ErrorIs(t, c.Close(), errMonitorEnabled) + }) +} diff --git a/redis/pool.go b/redis/pool.go index 113ce76e..07f6436d 100644 --- a/redis/pool.go +++ b/redis/pool.go @@ -20,6 +20,7 @@ import ( "crypto/rand" "crypto/sha1" "errors" + "fmt" "io" "strconv" "sync" @@ -29,6 +30,10 @@ import ( var ( _ ConnWithTimeout = (*activeConn)(nil) _ ConnWithTimeout = (*errorConn)(nil) + _ ConnWithContext = (*activeConn)(nil) + _ ConnWithContext = (*errorConn)(nil) + + errMonitorEnabled = errors.New("redigo: monitor enabled") ) var nowFunc = time.Now // for testing @@ -450,68 +455,141 @@ func initSentinel() { } func (ac *activeConn) stateUpdate(cmd string, args ...interface{}) { - ac.state.update(activeConnActions, cmd, args...) + ac.state.update(activeConnActions, true, cmd, args...) } -func (ac *activeConn) firstError(errs ...error) error { - for _, err := range errs[:len(errs)-1] { - if err != nil { - return err +func (ac *activeConn) Close() error { + pc := ac.pc + if pc == nil { + return nil // Already closed. + } + + defer func() { + ac.pc = nil + }() + + if ac.state != 0 { + // Reset the connection state. + if err := ac.reset(pc.c); err != nil { + // Force close the connection. + ac.p.put(pc, true) //nolint: errcheck + return fmt.Errorf("reset: %w", err) } } - return errs[len(errs)-1] + + // Return the connection to the pool. + return ac.p.put(pc, pc.c.Err() != nil) } -func (ac *activeConn) Close() (err error) { - pc := ac.pc - if pc == nil { - return nil +// reset resets the connection to a clean state. +func (ac *activeConn) reset(conn Conn) error { + if ac.state&stateMonitor != 0 { + // RESET is the only way to clear MONITOR and that resets + // all state including authentication and DB. + // Since we can't detect if AUTH or SELECT commands were + // issued during dial, we have to force close the connection. + return errMonitorEnabled + } + + // DISCARD first to ensure subsequent commands are processed. + if ac.state&stateMulti != 0 { + if err := conn.Send("DISCARD"); err != nil { + return fmt.Errorf("discard: %w", err) + } + + // DISCARD resets WATCH and MULTI. + ac.state &^= stateWatch | stateMulti } - ac.pc = nil - // Return the connection to a clean state if possible. - if ac.state&(stateClientReplyOff|stateClientReplySkip) != 0 { - err = pc.c.Send("CLIENT", "REPLY", "ON") + if ac.state&stateClientNoEvict != 0 { + if err := conn.Send("CLIENT", "NO-EVICT", "OFF"); err != nil { + return fmt.Errorf("client no-evict off: %w", err) + } + ac.state &^= stateClientNoEvict } - if ac.state&stateMulti != 0 { - err = ac.firstError(err, pc.c.Send("DISCARD")) - } else if ac.state&stateWatch != 0 { - err = ac.firstError(err, pc.c.Send("UNWATCH")) + if ac.state&stateClientNoTouch != 0 { + if err := conn.Send("CLIENT", "NO-TOUCH", "OFF"); err != nil { + return fmt.Errorf("client no-touch off: %w", err) + } + ac.state &^= stateClientNoTouch + } + + if ac.state&(stateClientReplyOff|stateClientReplySkipNext|stateClientReplySkip) != 0 { + if err := conn.Send("CLIENT", "REPLY", "ON"); err != nil { + return fmt.Errorf("client reply on: %w", err) + } + ac.state &^= stateClientReplyOff | stateClientReplySkipNext | stateClientReplySkip + } + + if ac.state&stateClientTracking != 0 { + if err := conn.Send("CLIENT", "TRACKING", "OFF"); err != nil { + return fmt.Errorf("client tracking off: %w", err) + } + ac.state &^= stateClientTracking + } + + if ac.state&statePsubscribe != 0 { + if err := conn.Send("PUNSUBSCRIBE"); err != nil { + return fmt.Errorf("punsubscribe: %w", err) + } + } + + if ac.state&stateReadOnly != 0 { + if err := conn.Send("READWRITE"); err != nil { + return fmt.Errorf("readwrite: %w", err) + } + ac.state &^= stateReadOnly + } + + if ac.state&stateSsubscribe != 0 { + if err := conn.Send("SUNSUBSCRIBE"); err != nil { + return fmt.Errorf("sunsubscribe: %w", err) + } } if ac.state&stateSubscribe != 0 { - err = ac.firstError(err, - pc.c.Send("UNSUBSCRIBE"), - pc.c.Send("PUNSUBSCRIBE"), - ) + if err := conn.Send("UNSUBSCRIBE"); err != nil { + return fmt.Errorf("unsubscribe: %w", err) + } + } + + if ac.state&stateWatch != 0 { + if err := conn.Send("UNWATCH"); err != nil { + return fmt.Errorf("unwatch: %w", err) + } + ac.state &^= stateWatch + } + + if ac.state&(stateSubscribe|statePsubscribe|stateSsubscribe) != 0 { + // Drain subscribed messages. // To detect the end of the message stream, ask the server to echo // a sentinel value and read until we see that value. sentinelOnce.Do(initSentinel) - err = ac.firstError(err, - pc.c.Send("ECHO", sentinel), - pc.c.Flush(), - ) + if err := conn.Send("ECHO", sentinel); err != nil { + return fmt.Errorf("echo sentinel: %w", err) + } + + if err := conn.Flush(); err != nil { + return fmt.Errorf("flush: %w", err) + } + for { - p, err2 := pc.c.Receive() - if err2 != nil { - err = ac.firstError(err, err2) - break + p, err := conn.Receive() + if err != nil { + return fmt.Errorf("receive: %w", err) } + if p, ok := p.([]byte); ok && bytes.Equal(p, sentinel) { - ac.state &^= stateSubscribe - break + ac.state &^= stateSubscribe | statePsubscribe | stateSsubscribe + return nil // End of message stream. } } } // Ensure any pending reads have completed. - _, err2 := pc.c.Do("") - return ac.firstError( - err, - err2, - ac.p.put(pc, ac.state != 0 || pc.c.Err() != nil), - ) + _, err := conn.Do("") + return err } func (ac *activeConn) Err() error { diff --git a/redis/pool_test.go b/redis/pool_test.go index b8572370..6fb1be18 100644 --- a/redis/pool_test.go +++ b/redis/pool_test.go @@ -484,7 +484,7 @@ func TestPoolPubSubCleanup(t *testing.T) { require.NoError(t, c.Send("SUBSCRIBE", "x")) c.Close() - want := []string{"SUBSCRIBE", "UNSUBSCRIBE", "PUNSUBSCRIBE", "ECHO"} + want := []string{"SUBSCRIBE", "UNSUBSCRIBE", "ECHO"} if !reflect.DeepEqual(d.commands, want) { t.Errorf("got commands %v, want %v", d.commands, want) } @@ -494,7 +494,7 @@ func TestPoolPubSubCleanup(t *testing.T) { require.NoError(t, c.Send("PSUBSCRIBE", "x*")) c.Close() - want = []string{"PSUBSCRIBE", "UNSUBSCRIBE", "PUNSUBSCRIBE", "ECHO"} + want = []string{"PSUBSCRIBE", "PUNSUBSCRIBE", "ECHO"} if !reflect.DeepEqual(d.commands, want) { t.Errorf("got commands %v, want %v", d.commands, want) }