{
  "_format": "hh-sol-artifact-1",
  "contractName": "ClusterRuleArea",
  "sourceName": "contracts/V3/ClusterRuleArea.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "regType",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "ruleSlotIndex1",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "ruleSlotIndex2",
          "type": "uint8"
        }
      ],
      "name": "EventClusterRule",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "newState",
          "type": "uint8"
        }
      ],
      "name": "SetRuleState",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "clusterArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "engine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClusterArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEngine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getGroupSlot",
      "outputs": [
        {
          "internalType": "bool",
          "name": "found",
          "type": "bool"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Token.TokenTemplate",
                  "name": "tokenTemplate",
                  "type": "tuple"
                },
                {
                  "internalType": "uint8",
                  "name": "rule",
                  "type": "uint8"
                },
                {
                  "internalType": "address[]",
                  "name": "ioAddressList",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "valueList",
                  "type": "uint256[]"
                }
              ],
              "internalType": "struct Rule.TokenSlot[]",
              "name": "tokenSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "poolToken",
              "type": "address"
            },
            {
              "internalType": "address[]",
              "name": "handlerList",
              "type": "address[]"
            },
            {
              "internalType": "bytes[]",
              "name": "argsList",
              "type": "bytes[]"
            }
          ],
          "internalType": "struct Rule.GroupSlot",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        }
      ],
      "name": "getGroupSlotBound",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getGroupSlotBoundList",
      "outputs": [
        {
          "internalType": "uint8[]",
          "name": "",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        }
      ],
      "name": "getGroupSlotBranchList",
      "outputs": [
        {
          "internalType": "uint8[]",
          "name": "",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "handler",
          "type": "address"
        }
      ],
      "name": "getGroupSlotHandlerArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        }
      ],
      "name": "getGroupSlotLength",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getRuleDelayBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getRuleDelayTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getRuleDurationType",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getRuleLeftCount",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getRuleSlotIndexList",
      "outputs": [
        {
          "internalType": "uint16[]",
          "name": "",
          "type": "uint16[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleIndex",
          "type": "uint16"
        }
      ],
      "name": "getRuleSlotIndexRule",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getRuleSlotLength",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getRuleState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getRuleTotalCount",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clusterArea_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "poolContract_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "poolFee_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "engine_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "registerRule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleDelayBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleDelayTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleDurationType",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlot",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "poolToken",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ruleGroupSlotBoundList",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ruleGroupSlotBranchList",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleLeftCount",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleRegBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleRegTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ruleSlotIndexList",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "ruleSlotLength",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleTotalCount",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleUpdateBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleUpdateTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clusterArea_",
          "type": "address"
        }
      ],
      "name": "setClusterArea",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine_",
          "type": "address"
        }
      ],
      "name": "setEngine",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolContract_",
          "type": "address"
        }
      ],
      "name": "setPoolContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolFee_",
          "type": "address"
        }
      ],
      "name": "setPoolFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        }
      ],
      "name": "setRuleState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "ruleSlotIndex",
              "type": "uint16"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "groupSlotOptList",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct Rule.RuleSlot[]",
          "name": "ruleSlotList",
          "type": "tuple[]"
        }
      ],
      "name": "updateGroupSlotList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "tokenSlotIndex",
          "type": "uint8"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "idIndex",
              "type": "uint256"
            }
          ],
          "internalType": "struct Token.TokenHandler",
          "name": "tokenHandler",
          "type": "tuple"
        }
      ],
      "name": "updateGroupSlotTokenHandler",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint32",
          "name": "decreaseCount",
          "type": "uint32"
        }
      ],
      "name": "updateRuleLeftCount",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "totalCount",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "durationType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "handlerCount",
              "type": "uint64"
            },
            {
              "internalType": "address[]",
              "name": "handlerList",
              "type": "address[]"
            },
            {
              "internalType": "bytes[]",
              "name": "handlerArgsList",
              "type": "bytes[]"
            },
            {
              "internalType": "address",
              "name": "snippet",
              "type": "address"
            }
          ],
          "internalType": "struct Rule.Rule[]",
          "name": "ruleList",
          "type": "tuple[]"
        }
      ],
      "name": "updateRuleList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50614ecb806100206000396000f3fe6080604052600436106102995760003560e01c8063676b0f291161015b578063be27d8ba116100c7578063be27d8ba14610939578063c9d4623f1461096a578063cab8fb801461098a578063cb963bba146109aa578063cd5fea6a146109ca578063ced97dd6146109f7578063d7460ff714610a2a578063e53d7f7d14610a4a578063edfc25ae14610a6a578063f180e7b114610a8a578063f2fde38b14610aaa578063f8c8765e14610aca578063fe02c91614610aea578063ff6445bd14610b0a57600080fd5b8063676b0f2914610765578063715018a6146107855780637339ad991461079a578063793b5757146107ca5780637ef78199146107e857806388d52ef7146108085780638da5cb5b146108285780638f4a264e146108465780638fae368514610876578063a2cd774414610896578063ace9e45c146108b6578063b8fe0644146108e6578063ba1687481461091957600080fd5b806333a216061161020557806333a21606146104c657806333c0a4441461052a57806334c76b25146105745780633774f34a146105ac5780633da17915146105df578063489142de1461061257806354fd4d5014610632578063571c6bf81461064e578063577ee7851461068157806357e258c8146106b457806357f5ff28146106d457806359c3f3e0146106f457806361a35241146107145780636741fad21461074757600080fd5b806305957706146102a557806305cce54f146102dc57806308536bfd14610309578063089fe6aa146103275780630c46f9c2146103475780630e830e4914610369578063188ad5dc146103895780631b606bcf146103be5780631d069157146103eb5780631f0b2c771461041d5780631f1d3981146104585780632c34025e146104785780632c5a6800146104a657600080fd5b366102a057005b600080fd5b3480156102b157600080fd5b506068546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e857600080fd5b506102fc6102f73660046135fe565b610b3d565b6040516102d39190613631565b34801561031557600080fd5b506065546001600160a01b03166102bf565b34801561033357600080fd5b506067546102bf906001600160a01b031681565b34801561035357600080fd5b50610367610362366004613f38565b610be8565b005b34801561037557600080fd5b506103676103843660046140fb565b61105a565b34801561039557600080fd5b506103a96103a4366004614116565b611084565b60405163ffffffff90911681526020016102d3565b3480156103ca57600080fd5b506103de6103d9366004614159565b6110d0565b6040516102d39190614205565b3480156103f757600080fd5b5061040b610406366004614218565b611164565b60405160ff90911681526020016102d3565b34801561042957600080fd5b5061043d6104383660046135fe565b6111a7565b6040805161ffff9384168152929091166020830152016102d3565b34801561046457600080fd5b5061040b610473366004614116565b61126f565b34801561048457600080fd5b5061049861049336600461423a565b6112b8565b6040516102d392919061433d565b3480156104b257600080fd5b5061040b6104c13660046135fe565b611646565b3480156104d257600080fd5b506105096104e136600461448e565b60696020526000908152604090206001015460ff81169061010090046001600160a01b031682565b6040805160ff90931683526001600160a01b039091166020830152016102d3565b34801561053657600080fd5b506105616105453660046144a7565b63ffffffff166000908152606c602052604090205461ffff1690565b60405161ffff90911681526020016102d3565b34801561058057600080fd5b5060408051808201909152600f81526e436c757374657252756c654172656160881b60208201526103de565b3480156105b857600080fd5b506103a96105c736600461448e565b606f6020526000908152604090205463ffffffff1681565b3480156105eb57600080fd5b506103a96105fa36600461448e565b60726020526000908152604090205463ffffffff1681565b34801561061e57600080fd5b5061036761062d3660046144c2565b6117c8565b34801561063e57600080fd5b50604051600181526020016102d3565b34801561065a57600080fd5b506103a961066936600461448e565b60746020526000908152604090205463ffffffff1681565b34801561068d57600080fd5b506103a961069c36600461448e565b60706020526000908152604090205463ffffffff1681565b3480156106c057600080fd5b506102fc6106cf3660046144a7565b611c8b565b3480156106e057600080fd5b506103676106ef3660046140fb565b611d12565b34801561070057600080fd5b5061036761070f3660046140fb565b611d3c565b34801561072057600080fd5b506103a961072f36600461448e565b60716020526000908152604090205463ffffffff1681565b34801561075357600080fd5b506067546001600160a01b03166102bf565b34801561077157600080fd5b506103a9610780366004614116565b611d66565b34801561079157600080fd5b50610367611db2565b3480156107a657600080fd5b506107ba6107b53660046145f1565b611dc6565b60405190151581526020016102d3565b3480156107d657600080fd5b506066546001600160a01b03166102bf565b3480156107f457600080fd5b506103a9610803366004614116565b611ec7565b34801561081457600080fd5b506066546102bf906001600160a01b031681565b34801561083457600080fd5b506033546001600160a01b03166102bf565b34801561085257600080fd5b5061040b61086136600461448e565b606e6020526000908152604090205460ff1681565b34801561088257600080fd5b506065546102bf906001600160a01b031681565b3480156108a257600080fd5b5061040b6108b13660046135fe565b611f13565b3480156108c257600080fd5b5061040b6108d136600461448e565b60776020526000908152604090205460ff1681565b3480156108f257600080fd5b506103a961090136600461448e565b60736020526000908152604090205463ffffffff1681565b34801561092557600080fd5b506103676109343660046146a2565b611f66565b34801561094557600080fd5b506105616109543660046144a7565b606c6020526000908152604090205461ffff1681565b34801561097657600080fd5b506068546102bf906001600160a01b031681565b34801561099657600080fd5b506103676109a53660046146ef565b61213f565b3480156109b657600080fd5b506107ba6109c5366004614738565b61244b565b3480156109d657600080fd5b506109ea6109e53660046144a7565b612566565b6040516102d39190614781565b348015610a0357600080fd5b506103a9610a1236600461448e565b60756020526000908152604090205463ffffffff1681565b348015610a3657600080fd5b5061040b610a453660046147bd565b6125f5565b348015610a5657600080fd5b5061040b610a65366004614116565b612611565b348015610a7657600080fd5b506103a9610a85366004614116565b61265a565b348015610a9657600080fd5b50610561610aa53660046147bd565b6126a6565b348015610ab657600080fd5b50610367610ac53660046140fb565b6126ed565b348015610ad657600080fd5b50610367610ae53660046147e7565b612766565b348015610af657600080fd5b50610367610b053660046140fb565b6128cc565b348015610b1657600080fd5b506103a9610b2536600461448e565b60766020526000908152604090205463ffffffff1681565b606060008383604051602001610b54929190614822565b60408051601f1981840301815282825280516020918201206000818152606a83528390208054808402860184019094528385529094509190830182828015610bd957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610baa5790505b50505050509150505b92915050565b6065546001600160a01b03163314610c525760405162461bcd60e51b815260206004820152602260248201527f63616c6c20726567697374657252756c65206d75737420636c75737465724172604482015261656160f01b60648201526084015b60405180910390fd5b63ffffffff82166000908152606b60205260408120905b8260200151518161ffff161015610ce6578183602001518261ffff1681518110610c9557610c9561483c565b6020908102919091018101518254600181018455600093845292829020918304909101805460ff928316601f9094166101000a9384029290930219909216179055610cdf81614868565b9050610c69565b5063ffffffff83166000908152606c6020908152604090912054908301515161ffff90911690156110445760008360200151600081518110610d2a57610d2a61483c565b602002602001015160ff1690506000808560200151600081518110610d5157610d5161483c565b602002602001015160ff16905060005b8660200151518161ffff161015610f6b576001876020015151610d84919061488a565b8161ffff161015610df95786602001518161ffff1681518110610da957610da961483c565b60200260200101518760200151826001610dc391906148a1565b61ffff1681518110610dd757610dd761483c565b6020026020010151610de991906148c7565b610df69060ff16856148a1565b93505b6000610e0586836148a1565b905060005b8860400151518160ff161015610e6c57610e2487846148a1565b61ffff1689604001518260ff1681518110610e4157610e4161483c565b60200260200101516020015161ffff161415610e5c57610e6c565b610e65816148ea565b9050610e0a565b60008960400151518260ff161015610e82575060015b855b8561ffff168161ffff161015610ed95760008b600001518261ffff1681518110610eb057610eb061483c565b60200260200101519050610ec88e8e878585886128f6565b50610ed281614868565b9050610e84565b5060208a015151610eeb8560016148a1565b61ffff161415610efd57505050610f6b565b89602001518461ffff1681518110610f1757610f1761483c565b602002602001015160ff1695508960200151846001610f3691906148a1565b61ffff1681518110610f4a57610f4a61483c565b602002602001015160ff16945050505080610f6490614868565b9050610d61565b5060208601518051610f7f9060019061488a565b81518110610f8f57610f8f61483c565b602002602001015160ff168361ffff16146110035760405162461bcd60e51b815260206004820152602e60248201527f63616c20746f74616c426f756e6420213d20636c75737465722e72756c65536c60448201526d0dee884deeadcc85cd8cadccee8d60931b6064820152608401610c49565b6020860151516110179061ffff861661490a565b63ffffffff88166000908152606c60205260409020805461ffff191661ffff929092169190911790555050505b61105385858560400151612ba8565b5050505050565b611062612e54565b606880546001600160a01b0319166001600160a01b0392909216919091179055565b60008084848460405160200161109c93929190614922565b60408051808303601f1901815291815281516020928301206000908152606f90925290205463ffffffff1695945050505050565b60606000826001600160a01b031663d0d35b558787876040518463ffffffff1660e01b815260040161110493929190614944565b60006040518083038186803b15801561111c57600080fd5b505afa158015611130573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111589190810190614969565b9150505b949350505050565b606a602052816000526040600020818154811061118057600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b63ffffffff82166000908152606d6020526040812081906111c98460026149df565b61ffff16815481106111dd576111dd61483c565b6000918252602080832060108304015463ffffffff88168452606d9091526040909220600f90911660029081026101000a90920461ffff16916112219086906149df565b61122c9060016148a1565b61ffff16815481106112405761124061483c565b90600052602060002090601091828204019190066002029054906101000a900461ffff16915091509250929050565b60008084848460405160200161128793929190614922565b60408051808303601f1901815291815281516020928301206000908152606e90925290205460ff1695945050505050565b60006112c26134e2565b60008585856040516020016112d993929190614944565b60408051601f198184030181528282528051602091820120600081815260698352838120805460c09481028701850190955260a0860185815292965090949390928492918491879085015b828210156114a05760008481526020908190206040805160e08101825260058602909201805460ff8116608085019081526101009091046001600160a01b031660a08501526001820180548451818802810188019095528085529495929486949293869360c0870193909290918301828280156113c057602002820191906000526020600020905b8154815260200190600101908083116113ac575b505050919092525050508152600282015460ff16602080830191909152600383018054604080518285028101850182528281529401939283018282801561143057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611412575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561148857602002820191906000526020600020905b815481526020019060010190808311611474575b50505050508152505081526020019060010190611324565b50505090825250600182015460ff81166020808401919091526101009091046001600160a01b0316604080840191909152600284018054825181850281018501909352808352606090940193919290919083018282801561152a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161150c575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561160457838290600052602060002001805461157790614a09565b80601f01602080910402602001604051908101604052809291908181526020018280546115a390614a09565b80156115f05780601f106115c5576101008083540402835291602001916115f0565b820191906000526020600020905b8154815290600101906020018083116115d357829003601f168201915b505050505081526020019060010190611558565b505050508152505090508460ff16816020015160ff16141561162d5760019350915061163e9050565b6116356134e2565b60009450925050505b935093915050565b63ffffffff82166000908152606b602052604081205461ffff8316106116c45760405162461bcd60e51b815260206004820152602d60248201527f72756c65536c6f74496e646578203c2072756c6547726f7570536c6f74426f7560448201526c0dcc898d2e6e85cd8cadccee8d609b1b6064820152608401610c49565b61ffff821661171a5763ffffffff83166000908152606b6020526040812080549091906116f3576116f361483c565b90600052602060002090602091828204019190069054906101000a900460ff169050610be2565b63ffffffff83166000908152606b6020526040902061173a600184614a44565b61ffff168154811061174e5761174e61483c565b60009182526020808320818304015463ffffffff87168452606b90915260409092208054601f9092166101000a90920460ff16919061ffff85169081106117975761179761483c565b90600052602060002090602091828204019190069054906101000a900460ff166117c191906148c7565b9050610be2565b60005a6065546040516378d0973360e11b81529192506001600160a01b03169063f1a12e66906118019086906002903390600401614a67565b60206040518083038186803b15801561181957600080fd5b505afa15801561182d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118519190614a91565b6118bc5760405162461bcd60e51b815260206004820152603660248201527f75706461746547726f7570536c6f744c697374205f6d736753656e64657228296044820152751036bab9ba1031b63ab9ba32b9103232b83637bcb2b960511b6064820152608401610c49565b815163ffffffff84166000908152606c60205260409020546118e2919061ffff1661490a565b63ffffffff84166000908152606c60209081526040808320805461ffff191661ffff9590951694909417909355606d81528282208054845181840281018401909552808552929392909183018282801561198357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161194a5790505b50505050509050600083516001600160401b038111156119a5576119a561368f565b6040519080825280602002602001820160405280156119ce578160200160208202803683370190505b50905060005b8251811015611b9d5760008382815181106119f1576119f161483c565b60200260200101519050600084836001611a0b919061490a565b81518110611a1b57611a1b61483c565b6020026020010151905060005b8751811015611b86576000888281518110611a4557611a4561483c565b602002602001015190506000816000015190508061ffff168561ffff161480611a7557508061ffff168461ffff16145b15611b3e5760008b8686604051602001611a9193929190614922565b60408051601f1981840301815291815281516020928301206000818152607790935291205490915060ff16600b811480611ace575060ff8116600a145b15611b3b5760405162461bcd60e51b815260206004820152603760248201527f6f6e65206f662072756c65536c6f74496e6465784c69737420697320656e61626044820152763632b21037b9103234b9b0b13632b2103337b932bb32b960491b6064820152608401610c49565b50505b8061ffff168461ffff161415611b73576001878481518110611b6257611b6261483c565b911515602092830291909101909101525b505080611b7f90614ab3565b9050611a28565b505050600281611b96919061490a565b90506119d4565b50611baa33868684612eae565b63ffffffff851660053360408051600080825260208201526001600160a01b0392909216917fdd740b9ffde613349a95afc283b77365c64f3f05583d46259e0c7a65e1acbfec910160405180910390a460005a611c07908561488a565b60675460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce46191611c53916001600160a01b03909116908590600590600401614ace565b60006040518083038186803b158015611c6b57600080fd5b505af4158015611c7f573d6000803e3d6000fd5b50505050505050505050565b63ffffffff81166000908152606b6020908152604091829020805483518184028101840190945280845260609392830182828015611d0657602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611cd75790505b50505050509050919050565b611d1a612e54565b606780546001600160a01b0319166001600160a01b0392909216919091179055565b611d44612e54565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080848484604051602001611d7e93929190614922565b60408051808303601f1901815291815281516020928301206000908152607690925290205463ffffffff1695945050505050565b611dba612e54565b611dc46000613369565b565b6065546000906001600160a01b03163314611e3d5760405162461bcd60e51b815260206004820152603160248201527f63616c6c2075706461746547726f7570536c6f74546f6b656e48616e646c6572604482015270206d75737420636c75737465724172656160781b6064820152608401610c49565b6000868686604051602001611e5493929190614944565b6040516020818303038152906040528051906020012090506000606960008381526020019081526020016000209050611eb98460400151826000018760ff1681548110611ea357611ea361483c565b60009182526020909120600590910201906133bb565b506001979650505050505050565b600080848484604051602001611edf93929190614922565b60408051808303601f1901815291815281516020928301206000908152607590925290205463ffffffff1695945050505050565b63ffffffff82166000908152606b60205260408120805461ffff8416908110611f3e57611f3e61483c565b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b60005a6065546040516378d0973360e11b81529192506001600160a01b03169063f1a12e6690611f9f9086906002903390600401614a67565b60206040518083038186803b158015611fb757600080fd5b505afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190614a91565b6120555760405162461bcd60e51b815260206004820152603160248201527f75706461746552756c654c697374205f6d736753656e6465722829206d7573746044820152701031b63ab9ba32b9103232b83637bcb2b960791b6064820152608401610c49565b612060338484612ba8565b63ffffffff831660063360408051600080825260208201526001600160a01b0392909216917fdd740b9ffde613349a95afc283b77365c64f3f05583d46259e0c7a65e1acbfec910160405180910390a460005a6120bd908361488a565b60675460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce46191612109916001600160a01b03909116908590600690600401614ace565b60006040518083038186803b15801561212157600080fd5b505af4158015612135573d6000803e3d6000fd5b5050505050505050565b6065546040516378d0973360e11b81526001600160a01b039091169063f1a12e66906121749087906001903390600401614a67565b60206040518083038186803b15801561218c57600080fd5b505afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190614a91565b61221b5760405162461bcd60e51b815260206004820152602260248201527f73657452756c6553746174653a206d73672e73656e646572206e6f742061646d60448201526134b760f11b6064820152608401610c49565b600084848460405160200161223293929190614922565b60408051601f1981840301815291815281516020928301206000818152607790935291205490915060ff16600b8114156122c85760ff8316600a146122c85760405162461bcd60e51b815260206004820152602660248201527f6d75737420656e61626c6520666f726576657220746f2064697361626c65206660448201526537b932bb32b960d11b6064820152608401610c49565b60ff8116600a14156123365760ff8316600b146123365760405162461bcd60e51b815260206004820152602660248201527f6d7573742064697361626c6520666f726576657220746f20656e61626c65206660448201526537b932bb32b960d11b6064820152608401610c49565b60ff83161580159061234c575060ff8316600114155b801561235c575060ff8316600214155b801561236c575060ff8316600a14155b801561237c575060ff8316600b14155b156123c75760405162461bcd60e51b815260206004820152601b60248201527a73657452756c6553746174652073746174652069732077726f6e6760281b6044820152606401610c49565b600082815260776020908152604091829020805460ff87811660ff199092168217909255835163ffffffff8b16815261ffff8a811694820194909452928816838501529084166060830152608082015290517fefc146116a41f70c102b9678f5140a2d09e5c929f23c7030fc34bafc8a477cc39181900360a00190a1505050505050565b6068546000906001600160a01b031633146124a85760405162461bcd60e51b815260206004820152601e60248201527f75706461746552756c654c656674436f756e74206e6f7420656e67696e6500006044820152606401610c49565b60008585856040516020016124bf93929190614922565b60408051601f198184030181529181528151602092830120600081815260768452828120546075909452919091205490925063ffffffff918216911661250a5760019250505061115c565b8363ffffffff168163ffffffff1610156125295760009250505061115c565b6125338482614af2565b600092835260766020526040909220805463ffffffff191663ffffffff9093169290921790915550600195945050505050565b63ffffffff81166000908152606d6020908152604091829020805483518184028101840190945280845260609392830182828015611d0657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125b2575094979650505050505050565b606b602052816000526040600020818154811061118057600080fd5b60008084848460405160200161262993929190614922565b60408051808303601f1901815291815281516020928301206000908152607790925290205460ff1695945050505050565b60008084848460405160200161267293929190614922565b60408051808303601f1901815291815281516020928301206000908152607090925290205463ffffffff1695945050505050565b606d60205281600052604060002081815481106126c257600080fd5b9060005260206000209060109182820401919006600202915091509054906101000a900461ffff1681565b6126f5612e54565b6001600160a01b03811661275a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c49565b61276381613369565b50565b600054610100900460ff16158080156127865750600054600160ff909116105b806127a05750303b1580156127a0575060005460ff166001145b6128035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c49565b6000805460ff191660011790558015612826576000805461ff0019166101001790555b61282e6133ff565b612836613426565b606580546001600160a01b038088166001600160a01b031992831617909255606680548784169083161790556067805486841690831617905560688054928516929091169190911790558015611053576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6128d4612e54565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000858560405160200161290b929190614822565b60408051601f1981840301815282825280516020918201206000818152606a83528381208054808502870185019095528486529195509392909183018282801561299257602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116129635790505b5050505050905060005b81518110156129e557846020015160ff168282815181106129bf576129bf61483c565b602002602001015160ff1614156129d5576129e5565b6129de81614ab3565b905061299c565b81518110612a36576000838152606a602090815260408220878201518154600181018355918452928290209181049091018054601f9092166101000a60ff8181021990931692909316929092021790555b600088888760200151604051602001612a5193929190614944565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020905073__$2fa1c7f7a7c65017e2e4b402c0b66f2d96$__635e2f190f606560009054906101000a90046001600160a01b03168c8e8c606660009054906101000a90046001600160a01b03168d8d6040518863ffffffff1660e01b8152600401612aed9796959493929190614c3c565b60006040518083038186803b158015612b0557600080fd5b505af4158015612b19573d6000803e3d6000fd5b5050606554604051632754079160e21b815273__$37d1e3923919c704bdb48c10208c7fa215$__9350639d501e449250612b6b916001600160a01b0316908e908e908e908e9089908f90600401614c9c565b60006040518083038186803b158015612b8357600080fd5b505af4158015612b97573d6000803e3d6000fd5b505050505050505050505050505050565b60005b8151811015612e4e576000828281518110612bc857612bc861483c565b60209081029190910181015163ffffffff86166000908152606d909252604080832090516330badedd60e21b8152919350919073__$37d1e3923919c704bdb48c10208c7fa215$__9063c2eb7b7490612c2990899087908790600401614cf9565b60206040518083038186803b158015612c4157600080fd5b505af4158015612c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c799190614a91565b9050801580612c8f5750604083015160ff166064145b15612e3a578251602080850151604051600093612cb0938b93919201614922565b60408051808303601f19018152918152815160209283012060808701516000828152606e8552838120805460ff191660ff9093169290921790915560a0880151606f8552838220805463ffffffff1990811663ffffffff9384161790915560c08a0151607087528584208054831691841691909117905560608a01805160758852868520805484169185169190911790555160769096529390912080549093169316929092179055905081612db3576000818152607160205260409020805463ffffffff19164263ffffffff16179055612d88613456565b6000828152607260205260409020805463ffffffff191663ffffffff92909216919091179055612e03565b6000818152607360205260409020805463ffffffff19164263ffffffff16179055612ddc613456565b6000828152607460205260409020805463ffffffff191663ffffffff929092169190911790555b604084015160ff16606414612e38576040848101516000838152607760205291909120805460ff191660ff9092169190911790555b505b50505080612e4790614ab3565b9050612bab565b50505050565b6033546001600160a01b03163314611dc45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c49565b60005b8251811015611053576000838281518110612ece57612ece61483c565b6020026020010151905080602001515181604001515114612f685760405162461bcd60e51b815260206004820152604860248201527f75706461746547726f7570536c6f744c697374206d7573742067726f7570536c60448201527f6f744f70744c6973742e6c656e677468203d3d2067726f7570536c6f744c69736064820152670e85cd8cadccee8d60c31b608482015260a401610c49565b805163ffffffff86166000908152606b602090815260408083209051909291612f95918a91869101614822565b60408051601f1981840301815291815281516020928301206000818152606a909352908220909250905b8560200151518161ffff16101561335257600086602001518261ffff1681518110612fec57612fec61483c565b602002602001015190506000805b845481101561315e57826020015160ff1685828154811061301d5761301d61483c565b60009182526020918290209181049091015460ff601f9092166101000a900416141561304857600191505b81801561307d5750600360ff1689604001518561ffff168151811061306f5761306f61483c565b602002602001015160ff1614155b156130875761315e565b8180156130bb5750600360ff1689604001518561ffff16815181106130ae576130ae61483c565b602002602001015160ff16145b1561314e5784546130ce9060019061488a565b81101561314e57846130e182600161490a565b815481106130f1576130f161483c565b90600052602060002090602091828204019190069054906101000a900460ff168582815481106131235761312361483c565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff1602179055505b61315781614ab3565b9050612ffa565b50806131a0576020808901515187546001810189556000898152839020928104909201805460ff928316601f9094166101000a93840292909302199092161790555b600260ff1688604001518461ffff16815181106131bf576131bf61483c565b602002602001015160ff1614156132265760008c8884602001516040516020016131eb93929190614944565b60408051601f198184030181529181528151602092830120600081815260699093529082209092509061321f90829061351d565b5050613318565b600360ff1688604001518461ffff16815181106132455761324561483c565b602002602001015160ff161415613318578015613311578380548061326c5761326c614e1b565b6000828152602090819020600019909201908104909101805460ff601f84166101000a0219169055905561ffff87165b865481101561330f5760018782815481106132b9576132b961483c565b90600052602060002090602091828204019190068282829054906101000a900460ff166132e691906148c7565b92506101000a81548160ff021916908360ff1602179055508061330890614ab3565b905061329c565b505b5050613342565b61333f8d8d8986868f8f815181106133325761333261483c565b60200260200101516128f6565b50505b61334b81614868565b9050612fbf565b5050505050508061336290614ab3565b9050612eb1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b815460ff16600214806133d25750815460ff166003145b156133fb5780826001016001815481106133ee576133ee61483c565b6000918252602090912001555b5050565b600054610100900460ff16611dc45760405162461bcd60e51b8152600401610c4990614e31565b600054610100900460ff1661344d5760405162461bcd60e51b8152600401610c4990614e31565b611dc433613369565b60004661a4b18114156134db5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561349d57600080fd5b505afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d59190614e7c565b91505090565b4391505090565b6040518060a0016040528060608152602001600060ff16815260200160006001600160a01b0316815260200160608152602001606081525090565b508054600082556005029060005260206000209081019061276391905b808211156135945780546001600160a81b0319168155600081816135616001830182613598565b505060028201805460ff1916905561357d600383016000613598565b61358b600483016000613598565b5060050161353a565b5090565b508054600082559060005260206000209081019061276391905b8082111561359457600081556001016135b2565b6001600160a01b03169052565b803563ffffffff811681146135e757600080fd5b919050565b803561ffff811681146135e757600080fd5b6000806040838503121561361157600080fd5b61361a836135d3565b9150613628602084016135ec565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561366c57835160ff168352928401929184019160010161364d565b50909695505050505050565b80356001600160a01b03811681146135e757600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156136c7576136c761368f565b60405290565b604051606081016001600160401b03811182821017156136c7576136c761368f565b60405160a081016001600160401b03811182821017156136c7576136c761368f565b60405161016081016001600160401b03811182821017156136c7576136c761368f565b604051601f8201601f191681016001600160401b038111828210171561375c5761375c61368f565b604052919050565b60006001600160401b0382111561377d5761377d61368f565b5060051b60200190565b803560ff811681146135e757600080fd5b600082601f8301126137a957600080fd5b813560206137be6137b983613764565b613734565b82815260059290921b840181019181810190868411156137dd57600080fd5b8286015b848110156137f857803583529183019183016137e1565b509695505050505050565b600082601f83011261381457600080fd5b813560206138246137b983613764565b82815260059290921b8401810191818101908684111561384357600080fd5b8286015b848110156137f85761385881613678565b8352918301918301613847565b600082601f83011261387657600080fd5b813560206138866137b983613764565b82815260059290921b840181019181810190868411156138a557600080fd5b8286015b848110156137f85780356001600160401b03808211156138c857600080fd5b90880190601f196080838c03820112156138e157600080fd5b6138e96136a5565b87840135838111156138fa57600080fd5b84016060818e038401121561390e57600080fd5b6139166136cd565b9250613923898201613787565b83526040613932818301613678565b8a85015260608201358581111561394857600080fd5b6139568f8c83860101613798565b8286015250838352613969818701613787565b8a840152606086013593508484111561398157600080fd5b61398f8e8b86890101613803565b908301525060808401359150828211156139a857600080fd5b6139b68c8984870101613798565b606082015286525050509183019183016138a9565b60006001600160401b038211156139e4576139e461368f565b50601f01601f191660200190565b6000613a006137b9846139cb565b9050828152838383011115613a1457600080fd5b828260208301376000602084830101529392505050565b600082601f830112613a3c57600080fd5b81356020613a4c6137b983613764565b82815260059290921b84018101918181019086841115613a6b57600080fd5b8286015b848110156137f85780356001600160401b03811115613a8e5760008081fd5b8701603f81018913613aa05760008081fd5b613ab18986830135604084016139f2565b845250918301918301613a6f565b600082601f830112613ad057600080fd5b81356020613ae06137b983613764565b82815260059290921b84018101918181019086841115613aff57600080fd5b8286015b848110156137f85780356001600160401b0380821115613b235760008081fd5b9088019060a0828b03601f1901811315613b3d5760008081fd5b613b456136ef565b8784013583811115613b575760008081fd5b613b658d8a83880101613865565b8252506040613b75818601613787565b898301526060613b86818701613678565b82840152608091508186013585811115613ba05760008081fd5b613bae8f8c838a0101613803565b82850152505082850135925083831115613bc85760008081fd5b613bd68d8a85880101613a2b565b908201528652505050918301918301613b03565b600082601f830112613bfb57600080fd5b81356020613c0b6137b983613764565b82815260059290921b84018101918181019086841115613c2a57600080fd5b8286015b848110156137f857613c3f81613787565b8352918301918301613c2e565b80356001600160401b03811681146135e757600080fd5b600082601f830112613c7457600080fd5b81356020613c846137b983613764565b82815260059290921b84018101918181019086841115613ca357600080fd5b8286015b848110156137f85780356001600160401b0380821115613cc75760008081fd5b90880190610160828b03601f1901811315613ce25760008081fd5b613cea613711565b613cf58885016135ec565b81526040613d048186016135ec565b898301526060613d15818701613787565b8284015260809150613d288287016135d3565b9083015260a0613d39868201613787565b8284015260c09150613d4c8287016135d3565b9083015260e0613d5d8682016135d3565b828401526101009150613d71828701613c4c565b908301526101208581013585811115613d8a5760008081fd5b613d988f8c838a0101613803565b838501525061014091508186013585811115613db45760008081fd5b613dc28f8c838a0101613a2b565b828501525050613dd3838601613678565b908201528652505050918301918301613ca7565b600082601f830112613df857600080fd5b613e07838335602085016139f2565b9392505050565b600082601f830112613e1f57600080fd5b81356020613e2f6137b983613764565b82815260059290921b84018101918181019086841115613e4e57600080fd5b8286015b848110156137f85780356001600160401b0380821115613e725760008081fd5b9088019060a0828b03601f1901811315613e8c5760008081fd5b613e946136ef565b613e9f8885016135d3565b815260408085013584811115613eb55760008081fd5b613ec38e8b83890101613de7565b8a8401525060608086013585811115613edc5760008081fd5b613eea8f8c838a0101613de7565b8385015250608091508186013585811115613f055760008081fd5b613f138f8c838a0101613de7565b828501525050613f24838601613787565b908201528652505050918301918301613e52565b600080600060608486031215613f4d57600080fd5b613f5684613678565b9250613f64602085016135d3565b915060408401356001600160401b0380821115613f8057600080fd5b908501906101608288031215613f9557600080fd5b613f9d613711565b823582811115613fac57600080fd5b613fb889828601613abf565b825250602083013582811115613fcd57600080fd5b613fd989828601613bea565b602083015250604083013582811115613ff157600080fd5b613ffd89828601613c63565b60408301525060608301358281111561401557600080fd5b61402189828601613e0e565b60608301525060808301358281111561403957600080fd5b61404589828601613bea565b60808301525060a08301358281111561405d57600080fd5b61406989828601613803565b60a08301525060c08301358281111561408157600080fd5b61408d89828601613803565b60c08301525061409f60e084016135d3565b60e08201526101006140b28185016135d3565b908201526101206140c4848201613787565b9082015261014083810135838111156140dc57600080fd5b6140e88a828701613de7565b8284015250508093505050509250925092565b60006020828403121561410d57600080fd5b613e0782613678565b60008060006060848603121561412b57600080fd5b614134846135d3565b9250614142602085016135ec565b9150614150604085016135ec565b90509250925092565b6000806000806080858703121561416f57600080fd5b614178856135d3565b9350614186602086016135ec565b925061419460408601613787565b91506141a260608601613678565b905092959194509250565b60005b838110156141c85781810151838201526020016141b0565b83811115612e4e5750506000910152565b600081518084526141f18160208601602086016141ad565b601f01601f19169290920160200192915050565b602081526000613e0760208301846141d9565b6000806040838503121561422b57600080fd5b50508035926020909101359150565b60008060006060848603121561424f57600080fd5b614258846135d3565b9250614266602085016135ec565b915061415060408501613787565b600081518084526020808501945080840160005b838110156142a457815187529582019590820190600101614288565b509495945050505050565b600081518084526020808501945080840160005b838110156142a45781516001600160a01b0316875295820195908201906001016142c3565b600081518084526020808501808196508360051b8101915082860160005b8581101561433057828403895261431e8483516141d9565b98850198935090840190600101614306565b5091979650505050505050565b6000604084151583526020818185015260e0808501865160a080868901528282518085526101009450848a019150848160051b8b01019450868401935060005b81811015614422578a860360ff19018352845180516080808952815160ff1690890152898101516001600160a01b0316868901528a0151606060c089018190526143c98a8a0183614274565b91508a8301516143dd8c8b018260ff169052565b508b8301518983038d8b01526143f383826142af565b925050808301519250888203818a01525061440e8183614274565b97505050938701939187019160010161437d565b5050509388015160ff8116606089015293948801519461444560808901876135c6565b60608901519550603f199450848884030181890152505061446681856142af565b935050506080850151818584030160c086015261448383826142e8565b979650505050505050565b6000602082840312156144a057600080fd5b5035919050565b6000602082840312156144b957600080fd5b613e07826135d3565b600080604083850312156144d557600080fd5b6144de836135d3565b91506020808401356001600160401b03808211156144fb57600080fd5b818601915086601f83011261450f57600080fd5b813561451d6137b982613764565b81815260059190911b8301840190848101908983111561453c57600080fd5b8585015b838110156145e0578035858111156145585760008081fd5b86016060818d03601f19018113156145705760008081fd5b6145786136cd565b6145838a84016135ec565b81526040830135888111156145985760008081fd5b6145a68f8c83870101613abf565b828c0152509082013590878211156145be5760008081fd5b6145cc8e8b84860101613bea565b604082015285525050918601918601614540565b508096505050505050509250929050565b600080600080600085870360e081121561460a57600080fd5b614613876135d3565b9550614621602088016135ec565b945061462f60408801613787565b935061463d60608801613787565b92506060607f198201121561465157600080fd5b50604051606081018181106001600160401b03821117156146745761467461368f565b80604052506080870135815260a0870135602082015260c08701356040820152809150509295509295909350565b600080604083850312156146b557600080fd5b6146be836135d3565b915060208301356001600160401b038111156146d957600080fd5b6146e585828601613c63565b9150509250929050565b6000806000806080858703121561470557600080fd5b61470e856135d3565b935061471c602086016135ec565b925061472a604086016135ec565b91506141a260608601613787565b6000806000806080858703121561474e57600080fd5b614757856135d3565b9350614765602086016135ec565b9250614773604086016135ec565b91506141a2606086016135d3565b6020808252825182820181905260009190848201906040850190845b8181101561366c57835161ffff168352928401929184019160010161479d565b600080604083850312156147d057600080fd5b6147d9836135d3565b946020939093013593505050565b600080600080608085870312156147fd57600080fd5b61480685613678565b935061481460208601613678565b925061419460408601613678565b63ffffffff92909216825261ffff16602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff8083168181141561488057614880614852565b6001019392505050565b60008282101561489c5761489c614852565b500390565b600061ffff8083168185168083038211156148be576148be614852565b01949350505050565b600060ff821660ff8416808210156148e1576148e1614852565b90039392505050565b600060ff821660ff81141561490157614901614852565b60010192915050565b6000821982111561491d5761491d614852565b500190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b63ffffffff93909316835261ffff91909116602083015260ff16604082015260600190565b60006020828403121561497b57600080fd5b81516001600160401b0381111561499157600080fd5b8201601f810184136149a257600080fd5b80516149b06137b9826139cb565b8181528560208385010111156149c557600080fd5b6149d68260208301602086016141ad565b95945050505050565b600061ffff80831681851681830481118215151615614a0057614a00614852565b02949350505050565b600181811c90821680614a1d57607f821691505b60208210811415614a3e57634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff83811690831681811015614a5f57614a5f614852565b039392505050565b63ffffffff93909316835260ff9190911660208301526001600160a01b0316604082015260600190565b600060208284031215614aa357600080fd5b81518015158114613e0757600080fd5b6000600019821415614ac757614ac7614852565b5060010190565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b600063ffffffff83811690831681811015614a5f57614a5f614852565b600060a0808401835182865281815180845260c093508388019150838160051b8901016020808501945060005b83811015614be5578a830360bf19018552855180516080808652815160ff1690860152838101516001600160a01b03168a86015260409081015160608a8701819052614b8b60e0880183614274565b915085840151614b9f8789018260ff169052565b508284015187830384890152614bb583826142af565b935050808401519350868303818801525050614bd18183614274565b978401979684019694505050600101614b3c565b508089015160ff16908a01526040808901519650614c05908a01876135c6565b6060880151955088810360608a0152614c1e81876142af565b95505050505050608083015184820360808601526149d682826142e8565b6001600160a01b03888116825263ffffffff88166020830152868116604083015261ffff861660608301528416608082015260e060a08201819052600090614c8690830185614b0f565b905082151560c083015298975050505050505050565b6001600160a01b038816815263ffffffff8716602082015261ffff86811660408301528516606082015260e060808201819052600090614cde90830186614b0f565b60a08301949094525090151560c09091015295945050505050565b63ffffffff8416815260606020820152614d1a60608201845161ffff169052565b60006020840151614d31608084018261ffff169052565b50604084015160ff811660a084015250606084015163ffffffff811660c084015250608084015160ff811660e08401525060a0840151610100614d7b8185018363ffffffff169052565b60c08601519150610120614d968186018463ffffffff169052565b60e08701519250610140614db4818701856001600160401b03169052565b82880151935061016092508283870152614dd26101c08701856142af565b9350818801519250605f1986850301610180870152614df184846142e8565b93508088015192505050614e096101a08501826135c6565b50604092909201929092529392505050565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215614e8e57600080fd5b505191905056fea264697066735822122086ac30ce4ec12ed519bf4abbdd2ade13db4d58e598a39877e47ebfdb6b2c100964736f6c63430008080033",
  "deployedBytecode": "0x6080604052600436106102995760003560e01c8063676b0f291161015b578063be27d8ba116100c7578063be27d8ba14610939578063c9d4623f1461096a578063cab8fb801461098a578063cb963bba146109aa578063cd5fea6a146109ca578063ced97dd6146109f7578063d7460ff714610a2a578063e53d7f7d14610a4a578063edfc25ae14610a6a578063f180e7b114610a8a578063f2fde38b14610aaa578063f8c8765e14610aca578063fe02c91614610aea578063ff6445bd14610b0a57600080fd5b8063676b0f2914610765578063715018a6146107855780637339ad991461079a578063793b5757146107ca5780637ef78199146107e857806388d52ef7146108085780638da5cb5b146108285780638f4a264e146108465780638fae368514610876578063a2cd774414610896578063ace9e45c146108b6578063b8fe0644146108e6578063ba1687481461091957600080fd5b806333a216061161020557806333a21606146104c657806333c0a4441461052a57806334c76b25146105745780633774f34a146105ac5780633da17915146105df578063489142de1461061257806354fd4d5014610632578063571c6bf81461064e578063577ee7851461068157806357e258c8146106b457806357f5ff28146106d457806359c3f3e0146106f457806361a35241146107145780636741fad21461074757600080fd5b806305957706146102a557806305cce54f146102dc57806308536bfd14610309578063089fe6aa146103275780630c46f9c2146103475780630e830e4914610369578063188ad5dc146103895780631b606bcf146103be5780631d069157146103eb5780631f0b2c771461041d5780631f1d3981146104585780632c34025e146104785780632c5a6800146104a657600080fd5b366102a057005b600080fd5b3480156102b157600080fd5b506068546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e857600080fd5b506102fc6102f73660046135fe565b610b3d565b6040516102d39190613631565b34801561031557600080fd5b506065546001600160a01b03166102bf565b34801561033357600080fd5b506067546102bf906001600160a01b031681565b34801561035357600080fd5b50610367610362366004613f38565b610be8565b005b34801561037557600080fd5b506103676103843660046140fb565b61105a565b34801561039557600080fd5b506103a96103a4366004614116565b611084565b60405163ffffffff90911681526020016102d3565b3480156103ca57600080fd5b506103de6103d9366004614159565b6110d0565b6040516102d39190614205565b3480156103f757600080fd5b5061040b610406366004614218565b611164565b60405160ff90911681526020016102d3565b34801561042957600080fd5b5061043d6104383660046135fe565b6111a7565b6040805161ffff9384168152929091166020830152016102d3565b34801561046457600080fd5b5061040b610473366004614116565b61126f565b34801561048457600080fd5b5061049861049336600461423a565b6112b8565b6040516102d392919061433d565b3480156104b257600080fd5b5061040b6104c13660046135fe565b611646565b3480156104d257600080fd5b506105096104e136600461448e565b60696020526000908152604090206001015460ff81169061010090046001600160a01b031682565b6040805160ff90931683526001600160a01b039091166020830152016102d3565b34801561053657600080fd5b506105616105453660046144a7565b63ffffffff166000908152606c602052604090205461ffff1690565b60405161ffff90911681526020016102d3565b34801561058057600080fd5b5060408051808201909152600f81526e436c757374657252756c654172656160881b60208201526103de565b3480156105b857600080fd5b506103a96105c736600461448e565b606f6020526000908152604090205463ffffffff1681565b3480156105eb57600080fd5b506103a96105fa36600461448e565b60726020526000908152604090205463ffffffff1681565b34801561061e57600080fd5b5061036761062d3660046144c2565b6117c8565b34801561063e57600080fd5b50604051600181526020016102d3565b34801561065a57600080fd5b506103a961066936600461448e565b60746020526000908152604090205463ffffffff1681565b34801561068d57600080fd5b506103a961069c36600461448e565b60706020526000908152604090205463ffffffff1681565b3480156106c057600080fd5b506102fc6106cf3660046144a7565b611c8b565b3480156106e057600080fd5b506103676106ef3660046140fb565b611d12565b34801561070057600080fd5b5061036761070f3660046140fb565b611d3c565b34801561072057600080fd5b506103a961072f36600461448e565b60716020526000908152604090205463ffffffff1681565b34801561075357600080fd5b506067546001600160a01b03166102bf565b34801561077157600080fd5b506103a9610780366004614116565b611d66565b34801561079157600080fd5b50610367611db2565b3480156107a657600080fd5b506107ba6107b53660046145f1565b611dc6565b60405190151581526020016102d3565b3480156107d657600080fd5b506066546001600160a01b03166102bf565b3480156107f457600080fd5b506103a9610803366004614116565b611ec7565b34801561081457600080fd5b506066546102bf906001600160a01b031681565b34801561083457600080fd5b506033546001600160a01b03166102bf565b34801561085257600080fd5b5061040b61086136600461448e565b606e6020526000908152604090205460ff1681565b34801561088257600080fd5b506065546102bf906001600160a01b031681565b3480156108a257600080fd5b5061040b6108b13660046135fe565b611f13565b3480156108c257600080fd5b5061040b6108d136600461448e565b60776020526000908152604090205460ff1681565b3480156108f257600080fd5b506103a961090136600461448e565b60736020526000908152604090205463ffffffff1681565b34801561092557600080fd5b506103676109343660046146a2565b611f66565b34801561094557600080fd5b506105616109543660046144a7565b606c6020526000908152604090205461ffff1681565b34801561097657600080fd5b506068546102bf906001600160a01b031681565b34801561099657600080fd5b506103676109a53660046146ef565b61213f565b3480156109b657600080fd5b506107ba6109c5366004614738565b61244b565b3480156109d657600080fd5b506109ea6109e53660046144a7565b612566565b6040516102d39190614781565b348015610a0357600080fd5b506103a9610a1236600461448e565b60756020526000908152604090205463ffffffff1681565b348015610a3657600080fd5b5061040b610a453660046147bd565b6125f5565b348015610a5657600080fd5b5061040b610a65366004614116565b612611565b348015610a7657600080fd5b506103a9610a85366004614116565b61265a565b348015610a9657600080fd5b50610561610aa53660046147bd565b6126a6565b348015610ab657600080fd5b50610367610ac53660046140fb565b6126ed565b348015610ad657600080fd5b50610367610ae53660046147e7565b612766565b348015610af657600080fd5b50610367610b053660046140fb565b6128cc565b348015610b1657600080fd5b506103a9610b2536600461448e565b60766020526000908152604090205463ffffffff1681565b606060008383604051602001610b54929190614822565b60408051601f1981840301815282825280516020918201206000818152606a83528390208054808402860184019094528385529094509190830182828015610bd957602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610baa5790505b50505050509150505b92915050565b6065546001600160a01b03163314610c525760405162461bcd60e51b815260206004820152602260248201527f63616c6c20726567697374657252756c65206d75737420636c75737465724172604482015261656160f01b60648201526084015b60405180910390fd5b63ffffffff82166000908152606b60205260408120905b8260200151518161ffff161015610ce6578183602001518261ffff1681518110610c9557610c9561483c565b6020908102919091018101518254600181018455600093845292829020918304909101805460ff928316601f9094166101000a9384029290930219909216179055610cdf81614868565b9050610c69565b5063ffffffff83166000908152606c6020908152604090912054908301515161ffff90911690156110445760008360200151600081518110610d2a57610d2a61483c565b602002602001015160ff1690506000808560200151600081518110610d5157610d5161483c565b602002602001015160ff16905060005b8660200151518161ffff161015610f6b576001876020015151610d84919061488a565b8161ffff161015610df95786602001518161ffff1681518110610da957610da961483c565b60200260200101518760200151826001610dc391906148a1565b61ffff1681518110610dd757610dd761483c565b6020026020010151610de991906148c7565b610df69060ff16856148a1565b93505b6000610e0586836148a1565b905060005b8860400151518160ff161015610e6c57610e2487846148a1565b61ffff1689604001518260ff1681518110610e4157610e4161483c565b60200260200101516020015161ffff161415610e5c57610e6c565b610e65816148ea565b9050610e0a565b60008960400151518260ff161015610e82575060015b855b8561ffff168161ffff161015610ed95760008b600001518261ffff1681518110610eb057610eb061483c565b60200260200101519050610ec88e8e878585886128f6565b50610ed281614868565b9050610e84565b5060208a015151610eeb8560016148a1565b61ffff161415610efd57505050610f6b565b89602001518461ffff1681518110610f1757610f1761483c565b602002602001015160ff1695508960200151846001610f3691906148a1565b61ffff1681518110610f4a57610f4a61483c565b602002602001015160ff16945050505080610f6490614868565b9050610d61565b5060208601518051610f7f9060019061488a565b81518110610f8f57610f8f61483c565b602002602001015160ff168361ffff16146110035760405162461bcd60e51b815260206004820152602e60248201527f63616c20746f74616c426f756e6420213d20636c75737465722e72756c65536c60448201526d0dee884deeadcc85cd8cadccee8d60931b6064820152608401610c49565b6020860151516110179061ffff861661490a565b63ffffffff88166000908152606c60205260409020805461ffff191661ffff929092169190911790555050505b61105385858560400151612ba8565b5050505050565b611062612e54565b606880546001600160a01b0319166001600160a01b0392909216919091179055565b60008084848460405160200161109c93929190614922565b60408051808303601f1901815291815281516020928301206000908152606f90925290205463ffffffff1695945050505050565b60606000826001600160a01b031663d0d35b558787876040518463ffffffff1660e01b815260040161110493929190614944565b60006040518083038186803b15801561111c57600080fd5b505afa158015611130573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111589190810190614969565b9150505b949350505050565b606a602052816000526040600020818154811061118057600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b63ffffffff82166000908152606d6020526040812081906111c98460026149df565b61ffff16815481106111dd576111dd61483c565b6000918252602080832060108304015463ffffffff88168452606d9091526040909220600f90911660029081026101000a90920461ffff16916112219086906149df565b61122c9060016148a1565b61ffff16815481106112405761124061483c565b90600052602060002090601091828204019190066002029054906101000a900461ffff16915091509250929050565b60008084848460405160200161128793929190614922565b60408051808303601f1901815291815281516020928301206000908152606e90925290205460ff1695945050505050565b60006112c26134e2565b60008585856040516020016112d993929190614944565b60408051601f198184030181528282528051602091820120600081815260698352838120805460c09481028701850190955260a0860185815292965090949390928492918491879085015b828210156114a05760008481526020908190206040805160e08101825260058602909201805460ff8116608085019081526101009091046001600160a01b031660a08501526001820180548451818802810188019095528085529495929486949293869360c0870193909290918301828280156113c057602002820191906000526020600020905b8154815260200190600101908083116113ac575b505050919092525050508152600282015460ff16602080830191909152600383018054604080518285028101850182528281529401939283018282801561143057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611412575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561148857602002820191906000526020600020905b815481526020019060010190808311611474575b50505050508152505081526020019060010190611324565b50505090825250600182015460ff81166020808401919091526101009091046001600160a01b0316604080840191909152600284018054825181850281018501909352808352606090940193919290919083018282801561152a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161150c575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561160457838290600052602060002001805461157790614a09565b80601f01602080910402602001604051908101604052809291908181526020018280546115a390614a09565b80156115f05780601f106115c5576101008083540402835291602001916115f0565b820191906000526020600020905b8154815290600101906020018083116115d357829003601f168201915b505050505081526020019060010190611558565b505050508152505090508460ff16816020015160ff16141561162d5760019350915061163e9050565b6116356134e2565b60009450925050505b935093915050565b63ffffffff82166000908152606b602052604081205461ffff8316106116c45760405162461bcd60e51b815260206004820152602d60248201527f72756c65536c6f74496e646578203c2072756c6547726f7570536c6f74426f7560448201526c0dcc898d2e6e85cd8cadccee8d609b1b6064820152608401610c49565b61ffff821661171a5763ffffffff83166000908152606b6020526040812080549091906116f3576116f361483c565b90600052602060002090602091828204019190069054906101000a900460ff169050610be2565b63ffffffff83166000908152606b6020526040902061173a600184614a44565b61ffff168154811061174e5761174e61483c565b60009182526020808320818304015463ffffffff87168452606b90915260409092208054601f9092166101000a90920460ff16919061ffff85169081106117975761179761483c565b90600052602060002090602091828204019190069054906101000a900460ff166117c191906148c7565b9050610be2565b60005a6065546040516378d0973360e11b81529192506001600160a01b03169063f1a12e66906118019086906002903390600401614a67565b60206040518083038186803b15801561181957600080fd5b505afa15801561182d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118519190614a91565b6118bc5760405162461bcd60e51b815260206004820152603660248201527f75706461746547726f7570536c6f744c697374205f6d736753656e64657228296044820152751036bab9ba1031b63ab9ba32b9103232b83637bcb2b960511b6064820152608401610c49565b815163ffffffff84166000908152606c60205260409020546118e2919061ffff1661490a565b63ffffffff84166000908152606c60209081526040808320805461ffff191661ffff9590951694909417909355606d81528282208054845181840281018401909552808552929392909183018282801561198357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161194a5790505b50505050509050600083516001600160401b038111156119a5576119a561368f565b6040519080825280602002602001820160405280156119ce578160200160208202803683370190505b50905060005b8251811015611b9d5760008382815181106119f1576119f161483c565b60200260200101519050600084836001611a0b919061490a565b81518110611a1b57611a1b61483c565b6020026020010151905060005b8751811015611b86576000888281518110611a4557611a4561483c565b602002602001015190506000816000015190508061ffff168561ffff161480611a7557508061ffff168461ffff16145b15611b3e5760008b8686604051602001611a9193929190614922565b60408051601f1981840301815291815281516020928301206000818152607790935291205490915060ff16600b811480611ace575060ff8116600a145b15611b3b5760405162461bcd60e51b815260206004820152603760248201527f6f6e65206f662072756c65536c6f74496e6465784c69737420697320656e61626044820152763632b21037b9103234b9b0b13632b2103337b932bb32b960491b6064820152608401610c49565b50505b8061ffff168461ffff161415611b73576001878481518110611b6257611b6261483c565b911515602092830291909101909101525b505080611b7f90614ab3565b9050611a28565b505050600281611b96919061490a565b90506119d4565b50611baa33868684612eae565b63ffffffff851660053360408051600080825260208201526001600160a01b0392909216917fdd740b9ffde613349a95afc283b77365c64f3f05583d46259e0c7a65e1acbfec910160405180910390a460005a611c07908561488a565b60675460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce46191611c53916001600160a01b03909116908590600590600401614ace565b60006040518083038186803b158015611c6b57600080fd5b505af4158015611c7f573d6000803e3d6000fd5b50505050505050505050565b63ffffffff81166000908152606b6020908152604091829020805483518184028101840190945280845260609392830182828015611d0657602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611cd75790505b50505050509050919050565b611d1a612e54565b606780546001600160a01b0319166001600160a01b0392909216919091179055565b611d44612e54565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080848484604051602001611d7e93929190614922565b60408051808303601f1901815291815281516020928301206000908152607690925290205463ffffffff1695945050505050565b611dba612e54565b611dc46000613369565b565b6065546000906001600160a01b03163314611e3d5760405162461bcd60e51b815260206004820152603160248201527f63616c6c2075706461746547726f7570536c6f74546f6b656e48616e646c6572604482015270206d75737420636c75737465724172656160781b6064820152608401610c49565b6000868686604051602001611e5493929190614944565b6040516020818303038152906040528051906020012090506000606960008381526020019081526020016000209050611eb98460400151826000018760ff1681548110611ea357611ea361483c565b60009182526020909120600590910201906133bb565b506001979650505050505050565b600080848484604051602001611edf93929190614922565b60408051808303601f1901815291815281516020928301206000908152607590925290205463ffffffff1695945050505050565b63ffffffff82166000908152606b60205260408120805461ffff8416908110611f3e57611f3e61483c565b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b60005a6065546040516378d0973360e11b81529192506001600160a01b03169063f1a12e6690611f9f9086906002903390600401614a67565b60206040518083038186803b158015611fb757600080fd5b505afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190614a91565b6120555760405162461bcd60e51b815260206004820152603160248201527f75706461746552756c654c697374205f6d736753656e6465722829206d7573746044820152701031b63ab9ba32b9103232b83637bcb2b960791b6064820152608401610c49565b612060338484612ba8565b63ffffffff831660063360408051600080825260208201526001600160a01b0392909216917fdd740b9ffde613349a95afc283b77365c64f3f05583d46259e0c7a65e1acbfec910160405180910390a460005a6120bd908361488a565b60675460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce46191612109916001600160a01b03909116908590600690600401614ace565b60006040518083038186803b15801561212157600080fd5b505af4158015612135573d6000803e3d6000fd5b5050505050505050565b6065546040516378d0973360e11b81526001600160a01b039091169063f1a12e66906121749087906001903390600401614a67565b60206040518083038186803b15801561218c57600080fd5b505afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190614a91565b61221b5760405162461bcd60e51b815260206004820152602260248201527f73657452756c6553746174653a206d73672e73656e646572206e6f742061646d60448201526134b760f11b6064820152608401610c49565b600084848460405160200161223293929190614922565b60408051601f1981840301815291815281516020928301206000818152607790935291205490915060ff16600b8114156122c85760ff8316600a146122c85760405162461bcd60e51b815260206004820152602660248201527f6d75737420656e61626c6520666f726576657220746f2064697361626c65206660448201526537b932bb32b960d11b6064820152608401610c49565b60ff8116600a14156123365760ff8316600b146123365760405162461bcd60e51b815260206004820152602660248201527f6d7573742064697361626c6520666f726576657220746f20656e61626c65206660448201526537b932bb32b960d11b6064820152608401610c49565b60ff83161580159061234c575060ff8316600114155b801561235c575060ff8316600214155b801561236c575060ff8316600a14155b801561237c575060ff8316600b14155b156123c75760405162461bcd60e51b815260206004820152601b60248201527a73657452756c6553746174652073746174652069732077726f6e6760281b6044820152606401610c49565b600082815260776020908152604091829020805460ff87811660ff199092168217909255835163ffffffff8b16815261ffff8a811694820194909452928816838501529084166060830152608082015290517fefc146116a41f70c102b9678f5140a2d09e5c929f23c7030fc34bafc8a477cc39181900360a00190a1505050505050565b6068546000906001600160a01b031633146124a85760405162461bcd60e51b815260206004820152601e60248201527f75706461746552756c654c656674436f756e74206e6f7420656e67696e6500006044820152606401610c49565b60008585856040516020016124bf93929190614922565b60408051601f198184030181529181528151602092830120600081815260768452828120546075909452919091205490925063ffffffff918216911661250a5760019250505061115c565b8363ffffffff168163ffffffff1610156125295760009250505061115c565b6125338482614af2565b600092835260766020526040909220805463ffffffff191663ffffffff9093169290921790915550600195945050505050565b63ffffffff81166000908152606d6020908152604091829020805483518184028101840190945280845260609392830182828015611d0657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125b2575094979650505050505050565b606b602052816000526040600020818154811061118057600080fd5b60008084848460405160200161262993929190614922565b60408051808303601f1901815291815281516020928301206000908152607790925290205460ff1695945050505050565b60008084848460405160200161267293929190614922565b60408051808303601f1901815291815281516020928301206000908152607090925290205463ffffffff1695945050505050565b606d60205281600052604060002081815481106126c257600080fd5b9060005260206000209060109182820401919006600202915091509054906101000a900461ffff1681565b6126f5612e54565b6001600160a01b03811661275a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c49565b61276381613369565b50565b600054610100900460ff16158080156127865750600054600160ff909116105b806127a05750303b1580156127a0575060005460ff166001145b6128035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c49565b6000805460ff191660011790558015612826576000805461ff0019166101001790555b61282e6133ff565b612836613426565b606580546001600160a01b038088166001600160a01b031992831617909255606680548784169083161790556067805486841690831617905560688054928516929091169190911790558015611053576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6128d4612e54565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000858560405160200161290b929190614822565b60408051601f1981840301815282825280516020918201206000818152606a83528381208054808502870185019095528486529195509392909183018282801561299257602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116129635790505b5050505050905060005b81518110156129e557846020015160ff168282815181106129bf576129bf61483c565b602002602001015160ff1614156129d5576129e5565b6129de81614ab3565b905061299c565b81518110612a36576000838152606a602090815260408220878201518154600181018355918452928290209181049091018054601f9092166101000a60ff8181021990931692909316929092021790555b600088888760200151604051602001612a5193929190614944565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020905073__$2fa1c7f7a7c65017e2e4b402c0b66f2d96$__635e2f190f606560009054906101000a90046001600160a01b03168c8e8c606660009054906101000a90046001600160a01b03168d8d6040518863ffffffff1660e01b8152600401612aed9796959493929190614c3c565b60006040518083038186803b158015612b0557600080fd5b505af4158015612b19573d6000803e3d6000fd5b5050606554604051632754079160e21b815273__$37d1e3923919c704bdb48c10208c7fa215$__9350639d501e449250612b6b916001600160a01b0316908e908e908e908e9089908f90600401614c9c565b60006040518083038186803b158015612b8357600080fd5b505af4158015612b97573d6000803e3d6000fd5b505050505050505050505050505050565b60005b8151811015612e4e576000828281518110612bc857612bc861483c565b60209081029190910181015163ffffffff86166000908152606d909252604080832090516330badedd60e21b8152919350919073__$37d1e3923919c704bdb48c10208c7fa215$__9063c2eb7b7490612c2990899087908790600401614cf9565b60206040518083038186803b158015612c4157600080fd5b505af4158015612c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c799190614a91565b9050801580612c8f5750604083015160ff166064145b15612e3a578251602080850151604051600093612cb0938b93919201614922565b60408051808303601f19018152918152815160209283012060808701516000828152606e8552838120805460ff191660ff9093169290921790915560a0880151606f8552838220805463ffffffff1990811663ffffffff9384161790915560c08a0151607087528584208054831691841691909117905560608a01805160758852868520805484169185169190911790555160769096529390912080549093169316929092179055905081612db3576000818152607160205260409020805463ffffffff19164263ffffffff16179055612d88613456565b6000828152607260205260409020805463ffffffff191663ffffffff92909216919091179055612e03565b6000818152607360205260409020805463ffffffff19164263ffffffff16179055612ddc613456565b6000828152607460205260409020805463ffffffff191663ffffffff929092169190911790555b604084015160ff16606414612e38576040848101516000838152607760205291909120805460ff191660ff9092169190911790555b505b50505080612e4790614ab3565b9050612bab565b50505050565b6033546001600160a01b03163314611dc45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c49565b60005b8251811015611053576000838281518110612ece57612ece61483c565b6020026020010151905080602001515181604001515114612f685760405162461bcd60e51b815260206004820152604860248201527f75706461746547726f7570536c6f744c697374206d7573742067726f7570536c60448201527f6f744f70744c6973742e6c656e677468203d3d2067726f7570536c6f744c69736064820152670e85cd8cadccee8d60c31b608482015260a401610c49565b805163ffffffff86166000908152606b602090815260408083209051909291612f95918a91869101614822565b60408051601f1981840301815291815281516020928301206000818152606a909352908220909250905b8560200151518161ffff16101561335257600086602001518261ffff1681518110612fec57612fec61483c565b602002602001015190506000805b845481101561315e57826020015160ff1685828154811061301d5761301d61483c565b60009182526020918290209181049091015460ff601f9092166101000a900416141561304857600191505b81801561307d5750600360ff1689604001518561ffff168151811061306f5761306f61483c565b602002602001015160ff1614155b156130875761315e565b8180156130bb5750600360ff1689604001518561ffff16815181106130ae576130ae61483c565b602002602001015160ff16145b1561314e5784546130ce9060019061488a565b81101561314e57846130e182600161490a565b815481106130f1576130f161483c565b90600052602060002090602091828204019190069054906101000a900460ff168582815481106131235761312361483c565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff1602179055505b61315781614ab3565b9050612ffa565b50806131a0576020808901515187546001810189556000898152839020928104909201805460ff928316601f9094166101000a93840292909302199092161790555b600260ff1688604001518461ffff16815181106131bf576131bf61483c565b602002602001015160ff1614156132265760008c8884602001516040516020016131eb93929190614944565b60408051601f198184030181529181528151602092830120600081815260699093529082209092509061321f90829061351d565b5050613318565b600360ff1688604001518461ffff16815181106132455761324561483c565b602002602001015160ff161415613318578015613311578380548061326c5761326c614e1b565b6000828152602090819020600019909201908104909101805460ff601f84166101000a0219169055905561ffff87165b865481101561330f5760018782815481106132b9576132b961483c565b90600052602060002090602091828204019190068282829054906101000a900460ff166132e691906148c7565b92506101000a81548160ff021916908360ff1602179055508061330890614ab3565b905061329c565b505b5050613342565b61333f8d8d8986868f8f815181106133325761333261483c565b60200260200101516128f6565b50505b61334b81614868565b9050612fbf565b5050505050508061336290614ab3565b9050612eb1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b815460ff16600214806133d25750815460ff166003145b156133fb5780826001016001815481106133ee576133ee61483c565b6000918252602090912001555b5050565b600054610100900460ff16611dc45760405162461bcd60e51b8152600401610c4990614e31565b600054610100900460ff1661344d5760405162461bcd60e51b8152600401610c4990614e31565b611dc433613369565b60004661a4b18114156134db5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561349d57600080fd5b505afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d59190614e7c565b91505090565b4391505090565b6040518060a0016040528060608152602001600060ff16815260200160006001600160a01b0316815260200160608152602001606081525090565b508054600082556005029060005260206000209081019061276391905b808211156135945780546001600160a81b0319168155600081816135616001830182613598565b505060028201805460ff1916905561357d600383016000613598565b61358b600483016000613598565b5060050161353a565b5090565b508054600082559060005260206000209081019061276391905b8082111561359457600081556001016135b2565b6001600160a01b03169052565b803563ffffffff811681146135e757600080fd5b919050565b803561ffff811681146135e757600080fd5b6000806040838503121561361157600080fd5b61361a836135d3565b9150613628602084016135ec565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561366c57835160ff168352928401929184019160010161364d565b50909695505050505050565b80356001600160a01b03811681146135e757600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156136c7576136c761368f565b60405290565b604051606081016001600160401b03811182821017156136c7576136c761368f565b60405160a081016001600160401b03811182821017156136c7576136c761368f565b60405161016081016001600160401b03811182821017156136c7576136c761368f565b604051601f8201601f191681016001600160401b038111828210171561375c5761375c61368f565b604052919050565b60006001600160401b0382111561377d5761377d61368f565b5060051b60200190565b803560ff811681146135e757600080fd5b600082601f8301126137a957600080fd5b813560206137be6137b983613764565b613734565b82815260059290921b840181019181810190868411156137dd57600080fd5b8286015b848110156137f857803583529183019183016137e1565b509695505050505050565b600082601f83011261381457600080fd5b813560206138246137b983613764565b82815260059290921b8401810191818101908684111561384357600080fd5b8286015b848110156137f85761385881613678565b8352918301918301613847565b600082601f83011261387657600080fd5b813560206138866137b983613764565b82815260059290921b840181019181810190868411156138a557600080fd5b8286015b848110156137f85780356001600160401b03808211156138c857600080fd5b90880190601f196080838c03820112156138e157600080fd5b6138e96136a5565b87840135838111156138fa57600080fd5b84016060818e038401121561390e57600080fd5b6139166136cd565b9250613923898201613787565b83526040613932818301613678565b8a85015260608201358581111561394857600080fd5b6139568f8c83860101613798565b8286015250838352613969818701613787565b8a840152606086013593508484111561398157600080fd5b61398f8e8b86890101613803565b908301525060808401359150828211156139a857600080fd5b6139b68c8984870101613798565b606082015286525050509183019183016138a9565b60006001600160401b038211156139e4576139e461368f565b50601f01601f191660200190565b6000613a006137b9846139cb565b9050828152838383011115613a1457600080fd5b828260208301376000602084830101529392505050565b600082601f830112613a3c57600080fd5b81356020613a4c6137b983613764565b82815260059290921b84018101918181019086841115613a6b57600080fd5b8286015b848110156137f85780356001600160401b03811115613a8e5760008081fd5b8701603f81018913613aa05760008081fd5b613ab18986830135604084016139f2565b845250918301918301613a6f565b600082601f830112613ad057600080fd5b81356020613ae06137b983613764565b82815260059290921b84018101918181019086841115613aff57600080fd5b8286015b848110156137f85780356001600160401b0380821115613b235760008081fd5b9088019060a0828b03601f1901811315613b3d5760008081fd5b613b456136ef565b8784013583811115613b575760008081fd5b613b658d8a83880101613865565b8252506040613b75818601613787565b898301526060613b86818701613678565b82840152608091508186013585811115613ba05760008081fd5b613bae8f8c838a0101613803565b82850152505082850135925083831115613bc85760008081fd5b613bd68d8a85880101613a2b565b908201528652505050918301918301613b03565b600082601f830112613bfb57600080fd5b81356020613c0b6137b983613764565b82815260059290921b84018101918181019086841115613c2a57600080fd5b8286015b848110156137f857613c3f81613787565b8352918301918301613c2e565b80356001600160401b03811681146135e757600080fd5b600082601f830112613c7457600080fd5b81356020613c846137b983613764565b82815260059290921b84018101918181019086841115613ca357600080fd5b8286015b848110156137f85780356001600160401b0380821115613cc75760008081fd5b90880190610160828b03601f1901811315613ce25760008081fd5b613cea613711565b613cf58885016135ec565b81526040613d048186016135ec565b898301526060613d15818701613787565b8284015260809150613d288287016135d3565b9083015260a0613d39868201613787565b8284015260c09150613d4c8287016135d3565b9083015260e0613d5d8682016135d3565b828401526101009150613d71828701613c4c565b908301526101208581013585811115613d8a5760008081fd5b613d988f8c838a0101613803565b838501525061014091508186013585811115613db45760008081fd5b613dc28f8c838a0101613a2b565b828501525050613dd3838601613678565b908201528652505050918301918301613ca7565b600082601f830112613df857600080fd5b613e07838335602085016139f2565b9392505050565b600082601f830112613e1f57600080fd5b81356020613e2f6137b983613764565b82815260059290921b84018101918181019086841115613e4e57600080fd5b8286015b848110156137f85780356001600160401b0380821115613e725760008081fd5b9088019060a0828b03601f1901811315613e8c5760008081fd5b613e946136ef565b613e9f8885016135d3565b815260408085013584811115613eb55760008081fd5b613ec38e8b83890101613de7565b8a8401525060608086013585811115613edc5760008081fd5b613eea8f8c838a0101613de7565b8385015250608091508186013585811115613f055760008081fd5b613f138f8c838a0101613de7565b828501525050613f24838601613787565b908201528652505050918301918301613e52565b600080600060608486031215613f4d57600080fd5b613f5684613678565b9250613f64602085016135d3565b915060408401356001600160401b0380821115613f8057600080fd5b908501906101608288031215613f9557600080fd5b613f9d613711565b823582811115613fac57600080fd5b613fb889828601613abf565b825250602083013582811115613fcd57600080fd5b613fd989828601613bea565b602083015250604083013582811115613ff157600080fd5b613ffd89828601613c63565b60408301525060608301358281111561401557600080fd5b61402189828601613e0e565b60608301525060808301358281111561403957600080fd5b61404589828601613bea565b60808301525060a08301358281111561405d57600080fd5b61406989828601613803565b60a08301525060c08301358281111561408157600080fd5b61408d89828601613803565b60c08301525061409f60e084016135d3565b60e08201526101006140b28185016135d3565b908201526101206140c4848201613787565b9082015261014083810135838111156140dc57600080fd5b6140e88a828701613de7565b8284015250508093505050509250925092565b60006020828403121561410d57600080fd5b613e0782613678565b60008060006060848603121561412b57600080fd5b614134846135d3565b9250614142602085016135ec565b9150614150604085016135ec565b90509250925092565b6000806000806080858703121561416f57600080fd5b614178856135d3565b9350614186602086016135ec565b925061419460408601613787565b91506141a260608601613678565b905092959194509250565b60005b838110156141c85781810151838201526020016141b0565b83811115612e4e5750506000910152565b600081518084526141f18160208601602086016141ad565b601f01601f19169290920160200192915050565b602081526000613e0760208301846141d9565b6000806040838503121561422b57600080fd5b50508035926020909101359150565b60008060006060848603121561424f57600080fd5b614258846135d3565b9250614266602085016135ec565b915061415060408501613787565b600081518084526020808501945080840160005b838110156142a457815187529582019590820190600101614288565b509495945050505050565b600081518084526020808501945080840160005b838110156142a45781516001600160a01b0316875295820195908201906001016142c3565b600081518084526020808501808196508360051b8101915082860160005b8581101561433057828403895261431e8483516141d9565b98850198935090840190600101614306565b5091979650505050505050565b6000604084151583526020818185015260e0808501865160a080868901528282518085526101009450848a019150848160051b8b01019450868401935060005b81811015614422578a860360ff19018352845180516080808952815160ff1690890152898101516001600160a01b0316868901528a0151606060c089018190526143c98a8a0183614274565b91508a8301516143dd8c8b018260ff169052565b508b8301518983038d8b01526143f383826142af565b925050808301519250888203818a01525061440e8183614274565b97505050938701939187019160010161437d565b5050509388015160ff8116606089015293948801519461444560808901876135c6565b60608901519550603f199450848884030181890152505061446681856142af565b935050506080850151818584030160c086015261448383826142e8565b979650505050505050565b6000602082840312156144a057600080fd5b5035919050565b6000602082840312156144b957600080fd5b613e07826135d3565b600080604083850312156144d557600080fd5b6144de836135d3565b91506020808401356001600160401b03808211156144fb57600080fd5b818601915086601f83011261450f57600080fd5b813561451d6137b982613764565b81815260059190911b8301840190848101908983111561453c57600080fd5b8585015b838110156145e0578035858111156145585760008081fd5b86016060818d03601f19018113156145705760008081fd5b6145786136cd565b6145838a84016135ec565b81526040830135888111156145985760008081fd5b6145a68f8c83870101613abf565b828c0152509082013590878211156145be5760008081fd5b6145cc8e8b84860101613bea565b604082015285525050918601918601614540565b508096505050505050509250929050565b600080600080600085870360e081121561460a57600080fd5b614613876135d3565b9550614621602088016135ec565b945061462f60408801613787565b935061463d60608801613787565b92506060607f198201121561465157600080fd5b50604051606081018181106001600160401b03821117156146745761467461368f565b80604052506080870135815260a0870135602082015260c08701356040820152809150509295509295909350565b600080604083850312156146b557600080fd5b6146be836135d3565b915060208301356001600160401b038111156146d957600080fd5b6146e585828601613c63565b9150509250929050565b6000806000806080858703121561470557600080fd5b61470e856135d3565b935061471c602086016135ec565b925061472a604086016135ec565b91506141a260608601613787565b6000806000806080858703121561474e57600080fd5b614757856135d3565b9350614765602086016135ec565b9250614773604086016135ec565b91506141a2606086016135d3565b6020808252825182820181905260009190848201906040850190845b8181101561366c57835161ffff168352928401929184019160010161479d565b600080604083850312156147d057600080fd5b6147d9836135d3565b946020939093013593505050565b600080600080608085870312156147fd57600080fd5b61480685613678565b935061481460208601613678565b925061419460408601613678565b63ffffffff92909216825261ffff16602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff8083168181141561488057614880614852565b6001019392505050565b60008282101561489c5761489c614852565b500390565b600061ffff8083168185168083038211156148be576148be614852565b01949350505050565b600060ff821660ff8416808210156148e1576148e1614852565b90039392505050565b600060ff821660ff81141561490157614901614852565b60010192915050565b6000821982111561491d5761491d614852565b500190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b63ffffffff93909316835261ffff91909116602083015260ff16604082015260600190565b60006020828403121561497b57600080fd5b81516001600160401b0381111561499157600080fd5b8201601f810184136149a257600080fd5b80516149b06137b9826139cb565b8181528560208385010111156149c557600080fd5b6149d68260208301602086016141ad565b95945050505050565b600061ffff80831681851681830481118215151615614a0057614a00614852565b02949350505050565b600181811c90821680614a1d57607f821691505b60208210811415614a3e57634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff83811690831681811015614a5f57614a5f614852565b039392505050565b63ffffffff93909316835260ff9190911660208301526001600160a01b0316604082015260600190565b600060208284031215614aa357600080fd5b81518015158114613e0757600080fd5b6000600019821415614ac757614ac7614852565b5060010190565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b600063ffffffff83811690831681811015614a5f57614a5f614852565b600060a0808401835182865281815180845260c093508388019150838160051b8901016020808501945060005b83811015614be5578a830360bf19018552855180516080808652815160ff1690860152838101516001600160a01b03168a86015260409081015160608a8701819052614b8b60e0880183614274565b915085840151614b9f8789018260ff169052565b508284015187830384890152614bb583826142af565b935050808401519350868303818801525050614bd18183614274565b978401979684019694505050600101614b3c565b508089015160ff16908a01526040808901519650614c05908a01876135c6565b6060880151955088810360608a0152614c1e81876142af565b95505050505050608083015184820360808601526149d682826142e8565b6001600160a01b03888116825263ffffffff88166020830152868116604083015261ffff861660608301528416608082015260e060a08201819052600090614c8690830185614b0f565b905082151560c083015298975050505050505050565b6001600160a01b038816815263ffffffff8716602082015261ffff86811660408301528516606082015260e060808201819052600090614cde90830186614b0f565b60a08301949094525090151560c09091015295945050505050565b63ffffffff8416815260606020820152614d1a60608201845161ffff169052565b60006020840151614d31608084018261ffff169052565b50604084015160ff811660a084015250606084015163ffffffff811660c084015250608084015160ff811660e08401525060a0840151610100614d7b8185018363ffffffff169052565b60c08601519150610120614d968186018463ffffffff169052565b60e08701519250610140614db4818701856001600160401b03169052565b82880151935061016092508283870152614dd26101c08701856142af565b9350818801519250605f1986850301610180870152614df184846142e8565b93508088015192505050614e096101a08501826135c6565b50604092909201929092529392505050565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215614e8e57600080fd5b505191905056fea264697066735822122086ac30ce4ec12ed519bf4abbdd2ade13db4d58e598a39877e47ebfdb6b2c100964736f6c63430008080033",
  "linkReferences": {
    "contracts/V3/ClusterRuleAreaProcess.sol": {
      "ClusterRuleAreaProcess": [
        {
          "length": 20,
          "start": 7228
        },
        {
          "length": 20,
          "start": 8434
        },
        {
          "length": 20,
          "start": 11085
        },
        {
          "length": 20,
          "start": 11293
        }
      ]
    },
    "contracts/V3/ClusterRuleAreaUtil.sol": {
      "ClusterRuleAreaUtil": [
        {
          "length": 20,
          "start": 10914
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/V3/ClusterRuleAreaProcess.sol": {
      "ClusterRuleAreaProcess": [
        {
          "length": 20,
          "start": 7196
        },
        {
          "length": 20,
          "start": 8402
        },
        {
          "length": 20,
          "start": 11053
        },
        {
          "length": 20,
          "start": 11261
        }
      ]
    },
    "contracts/V3/ClusterRuleAreaUtil.sol": {
      "ClusterRuleAreaUtil": [
        {
          "length": 20,
          "start": 10882
        }
      ]
    }
  }
}
